some juice work on the first person weapon
This commit is contained in:
13
assets/swords/resources/first_person_material.tres
Normal file
13
assets/swords/resources/first_person_material.tres
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://buevqo8w8fq75"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://qtu5ue4ixkwm" path="res://assets/swords/fbx/Texture_MAp_sword.png" id="1_ke6g8"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
resource_name = "Sword_mat_map"
|
||||||
|
vertex_color_use_as_albedo = true
|
||||||
|
albedo_texture = ExtResource("1_ke6g8")
|
||||||
|
emission_enabled = true
|
||||||
|
use_z_clip_scale = true
|
||||||
|
z_clip_scale = 0.5
|
||||||
|
use_fov_override = true
|
||||||
|
fov_override = 30.0
|
||||||
45
assets/swords/resources/fp_sword23.tres
Normal file
45
assets/swords/resources/fp_sword23.tres
Normal file
File diff suppressed because one or more lines are too long
43
assets/swords/resources/sword23.tres
Normal file
43
assets/swords/resources/sword23.tres
Normal file
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=54 format=3 uid="uid://bei4nhkf8lwdo"]
|
[gd_scene load_steps=52 format=3 uid="uid://bei4nhkf8lwdo"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
|
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
||||||
@@ -17,11 +17,9 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://systems/mantle/mantle_system.tscn" id="8_qu4wy"]
|
[ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://systems/mantle/mantle_system.tscn" id="8_qu4wy"]
|
||||||
[ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://systems/inputs/base_mode/aim_pressed.tres" id="9_nob5r"]
|
[ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://systems/inputs/base_mode/aim_pressed.tres" id="9_nob5r"]
|
||||||
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="10_4u7i3"]
|
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="10_4u7i3"]
|
||||||
[ext_resource type="Script" uid="uid://g8idirw62qe0" path="res://player_controller/Scripts/Bobbing.cs" id="10_7wk1w"]
|
|
||||||
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="11_cresl"]
|
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="11_cresl"]
|
||||||
[ext_resource type="PackedScene" uid="uid://0ysqmqphq6mq" path="res://systems/head/head_system.tscn" id="11_rxwoh"]
|
[ext_resource type="PackedScene" uid="uid://0ysqmqphq6mq" path="res://systems/head/head_system.tscn" id="11_rxwoh"]
|
||||||
[ext_resource type="Resource" uid="uid://d2r0ur8k3cuu3" path="res://systems/inputs/base_mode/dash.tres" id="12_34snm"]
|
[ext_resource type="Resource" uid="uid://d2r0ur8k3cuu3" path="res://systems/inputs/base_mode/dash.tres" id="12_34snm"]
|
||||||
[ext_resource type="Script" uid="uid://b6k73aj5povgv" path="res://player_controller/Scripts/FieldOfView.cs" id="12_m2mxi"]
|
|
||||||
[ext_resource type="Resource" uid="uid://55b0dsvioj08" path="res://systems/inputs/base_mode/jump_pressed.tres" id="13_nob5r"]
|
[ext_resource type="Resource" uid="uid://55b0dsvioj08" path="res://systems/inputs/base_mode/jump_pressed.tres" id="13_nob5r"]
|
||||||
[ext_resource type="Shape3D" uid="uid://keseacdcooot" path="res://player_controller/resources/PlayerShape.tres" id="13_r7i3q"]
|
[ext_resource type="Shape3D" uid="uid://keseacdcooot" path="res://player_controller/resources/PlayerShape.tres" id="13_r7i3q"]
|
||||||
[ext_resource type="Script" uid="uid://b5nk6ntlps3x0" path="res://systems/inputs/input_system.gd" id="16_v31n3"]
|
[ext_resource type="Script" uid="uid://b5nk6ntlps3x0" path="res://systems/inputs/input_system.gd" id="16_v31n3"]
|
||||||
@@ -174,6 +172,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
|
|||||||
CameraInclineAcceleration = 20.0
|
CameraInclineAcceleration = 20.0
|
||||||
GroundedCameraIncline = 3.0
|
GroundedCameraIncline = 3.0
|
||||||
SlidingJitterAmplitude = 0.2
|
SlidingJitterAmplitude = 0.2
|
||||||
|
WeaponSway = 8.0
|
||||||
|
WeaponLookRotation = 10.0
|
||||||
|
WeaponAdjustmentSpeed = 1.0
|
||||||
|
|
||||||
[node name="MantleSystem" parent="HeadSystem" instance=ExtResource("8_qu4wy")]
|
[node name="MantleSystem" parent="HeadSystem" instance=ExtResource("8_qu4wy")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.6, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.6, 0)
|
||||||
@@ -203,12 +204,6 @@ collision_mask = 256
|
|||||||
target_position = Vector3(0, -0.75, 0)
|
target_position = Vector3(0, -0.75, 0)
|
||||||
collision_mask = 256
|
collision_mask = 256
|
||||||
|
|
||||||
[node name="Bobbing" type="Node3D" parent="."]
|
|
||||||
script = ExtResource("10_7wk1w")
|
|
||||||
|
|
||||||
[node name="FieldOfView" type="Node3D" parent="."]
|
|
||||||
script = ExtResource("12_m2mxi")
|
|
||||||
|
|
||||||
[node name="HeadCollisionDetectors" type="Node3D" parent="."]
|
[node name="HeadCollisionDetectors" type="Node3D" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
|||||||
@@ -41,8 +41,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
// Public stuff //
|
// Public stuff //
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
public HeadSystem HeadSystem;
|
public HeadSystem HeadSystem;
|
||||||
public Bobbing Bobbing;
|
|
||||||
public FieldOfView FieldOfView;
|
|
||||||
public StairsSystem StairsSystem;
|
public StairsSystem StairsSystem;
|
||||||
public MantleSystem MantleSystem;
|
public MantleSystem MantleSystem;
|
||||||
public DashSystem DashSystem;
|
public DashSystem DashSystem;
|
||||||
@@ -340,8 +338,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
|
|
||||||
// Camera stuff
|
// Camera stuff
|
||||||
HeadSystem = GetNode<HeadSystem>("HeadSystem");
|
HeadSystem = GetNode<HeadSystem>("HeadSystem");
|
||||||
Bobbing = GetNode<Bobbing>("Bobbing");
|
|
||||||
FieldOfView = GetNode<FieldOfView>("FieldOfView");
|
|
||||||
Camera3D camera = GetNode<Camera3D>("HeadSystem/CameraSmooth/Camera3D");
|
Camera3D camera = GetNode<Camera3D>("HeadSystem/CameraSmooth/Camera3D");
|
||||||
Node3D cameraSmooth = GetNode<Node3D>("HeadSystem/CameraSmooth");
|
Node3D cameraSmooth = GetNode<Node3D>("HeadSystem/CameraSmooth");
|
||||||
|
|
||||||
@@ -422,8 +418,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
|
|
||||||
// Camera stuff
|
// Camera stuff
|
||||||
HeadSystem.Init();
|
HeadSystem.Init();
|
||||||
Bobbing.Init(camera);
|
|
||||||
FieldOfView.Init(camera);
|
|
||||||
|
|
||||||
// Movement stuff
|
// Movement stuff
|
||||||
// Getting universal setting from GODOT editor to be in sync
|
// Getting universal setting from GODOT editor to be in sync
|
||||||
@@ -811,8 +805,20 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
var lookSensitivity = _isUsingGamepad ? _lookSensitivityMultiplier : _mouseSensitivityMultiplier;
|
var lookSensitivity = _isUsingGamepad ? _lookSensitivityMultiplier : _mouseSensitivityMultiplier;
|
||||||
|
|
||||||
var wallHugContactPoint = _onWallRunning.Active ? _currentWallContactPoint : Vector3.Zero;
|
var wallHugContactPoint = _onWallRunning.Active ? _currentWallContactPoint : Vector3.Zero;
|
||||||
var playerVelocity = GetGlobalMoveInput();
|
var moveInput = GetGlobalMoveInput();
|
||||||
HeadSystem.LookAround(delta, inputLookDir, playerVelocity, Velocity, wallHugContactPoint, lookSensitivity, isSliding: _groundSliding.Active);
|
|
||||||
|
var lookAroundInputs = new HeadSystem.CameraParameters(
|
||||||
|
Delta: delta,
|
||||||
|
LookDir: inputLookDir,
|
||||||
|
PlayerInput: moveInput,
|
||||||
|
PlayerVelocity:Velocity,
|
||||||
|
WallContactPoint: wallHugContactPoint,
|
||||||
|
SensitivitMultiplier: lookSensitivity,
|
||||||
|
WithCameraJitter: _groundSliding.Active,
|
||||||
|
WithCameraBobbing: _grounded.Active || _onWallRunning.Active,
|
||||||
|
BobbingMultiplier: _headBobbingMultiplier,
|
||||||
|
FovMultiplier: _fovChangeMultiplier);
|
||||||
|
HeadSystem.LookAround(lookAroundInputs);
|
||||||
}
|
}
|
||||||
public void RotateWeaponWithPlayer()
|
public void RotateWeaponWithPlayer()
|
||||||
{
|
{
|
||||||
@@ -822,28 +828,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
{
|
{
|
||||||
return Transform.Basis * HeadSystem.Transform.Basis * Vector3.Forward;
|
return Transform.Basis * HeadSystem.Transform.Basis * Vector3.Forward;
|
||||||
}
|
}
|
||||||
private void CameraModifications(float delta)
|
|
||||||
{
|
|
||||||
Bobbing.CameraBobbingParams cameraBobbingParams = new Bobbing.CameraBobbingParams
|
|
||||||
{
|
|
||||||
Delta = delta,
|
|
||||||
IsOnFloorCustom = _grounded.Active || _onWallRunning.Active,
|
|
||||||
Velocity = Velocity,
|
|
||||||
SettingsMultiplier = _headBobbingMultiplier
|
|
||||||
};
|
|
||||||
Bobbing.PerformCameraBobbing(cameraBobbingParams);
|
|
||||||
|
|
||||||
FieldOfView.FovParameters fovParams = new FieldOfView.FovParameters
|
|
||||||
{
|
|
||||||
IsCrouchingHeight = false,
|
|
||||||
Delta = delta,
|
|
||||||
SprintSpeed = WalkSpeed,
|
|
||||||
Velocity = Velocity,
|
|
||||||
FOVMultiplier = _fovChangeMultiplier
|
|
||||||
};
|
|
||||||
FieldOfView.PerformFovAdjustment(fovParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Horizontal velocity computing
|
// Horizontal velocity computing
|
||||||
public Vector3 ComputeHVelocity(float delta, float accelerationFactor, float decelerationFactor, Vector3? direction = null)
|
public Vector3 ComputeHVelocity(float delta, float accelerationFactor, float decelerationFactor, Vector3? direction = null)
|
||||||
{
|
{
|
||||||
@@ -1718,7 +1702,6 @@ public partial class PlayerController : CharacterBody3D,
|
|||||||
if (_currentInputBufferFrames > 0) _currentInputBufferFrames -= 1;
|
if (_currentInputBufferFrames > 0) _currentInputBufferFrames -= 1;
|
||||||
|
|
||||||
LookAround(delta);
|
LookAround(delta);
|
||||||
CameraModifications((float) delta);
|
|
||||||
MoveSlideAndHandleStairs((float) delta);
|
MoveSlideAndHandleStairs((float) delta);
|
||||||
MantleSystem.ProcessMantle(_grounded.Active);
|
MantleSystem.ProcessMantle(_grounded.Active);
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,18 @@ namespace Movementtests.systems;
|
|||||||
|
|
||||||
public partial class HeadSystem : Node3D
|
public partial class HeadSystem : Node3D
|
||||||
{
|
{
|
||||||
|
public record CameraParameters(
|
||||||
|
double Delta,
|
||||||
|
Vector2 LookDir,
|
||||||
|
Vector3 PlayerInput,
|
||||||
|
Vector3 PlayerVelocity,
|
||||||
|
Vector3 WallContactPoint,
|
||||||
|
float SensitivitMultiplier,
|
||||||
|
bool WithCameraJitter,
|
||||||
|
bool WithCameraBobbing,
|
||||||
|
float BobbingMultiplier,
|
||||||
|
float FovMultiplier);
|
||||||
|
|
||||||
private Camera3D _camera;
|
private Camera3D _camera;
|
||||||
private Marker3D _cameraAnchor;
|
private Marker3D _cameraAnchor;
|
||||||
private AnimationPlayer _animationPlayer;
|
private AnimationPlayer _animationPlayer;
|
||||||
@@ -13,25 +25,53 @@ public partial class HeadSystem : Node3D
|
|||||||
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||||
public float LookSensitivity { get; set; } = 1f;
|
public float LookSensitivity { get; set; } = 1f;
|
||||||
|
|
||||||
|
[ExportGroup("Camera incline")]
|
||||||
[Export(PropertyHint.Range, "0.1,50,0.1,or_greater")]
|
[Export(PropertyHint.Range, "0.1,50,0.1,or_greater")]
|
||||||
public double CameraInclineAcceleration { get; set; } = 10f;
|
public double CameraInclineAcceleration { get; set; } = 10f;
|
||||||
|
|
||||||
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||||
public float WallRunCameraIncline { get; set; } = 5f;
|
public float WallRunCameraIncline { get; set; } = 5f;
|
||||||
|
|
||||||
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||||
public float GroundedCameraIncline { get; set; } = 5f;
|
public float GroundedCameraIncline { get; set; } = 5f;
|
||||||
|
|
||||||
|
[ExportGroup("Sliding")]
|
||||||
[Export(PropertyHint.Range, "0,2,0.1,or_greater")]
|
[Export(PropertyHint.Range, "0,2,0.1,or_greater")]
|
||||||
public float SlidingCameraHeightOffset { get; set; } = 1.0f;
|
public float SlidingCameraHeightOffset { get; set; } = 1.0f;
|
||||||
|
|
||||||
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
||||||
public float SlidingJitterFrequency { get; set; } = 0.01f;
|
public float SlidingJitterFrequency { get; set; } = 0.01f;
|
||||||
|
|
||||||
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
||||||
public float SlidingJitterAmplitude { get; set; } = 0.1f;
|
public float SlidingJitterAmplitude { get; set; } = 0.1f;
|
||||||
|
|
||||||
private FastNoiseLite _slidingNoise = new FastNoiseLite();
|
private FastNoiseLite _slidingNoise = new FastNoiseLite();
|
||||||
|
|
||||||
|
[ExportGroup("Bobbing")]
|
||||||
|
|
||||||
|
private float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis
|
||||||
|
[Export(PropertyHint.Range, "0,10,0.01,or_greater")]
|
||||||
|
public float BobbingFrequency { set; get; } = 2.4f;
|
||||||
|
[Export(PropertyHint.Range, "0,0.4,0.01,or_greater")]
|
||||||
|
public float BobbingAmplitude { set; get; } = 0.08f;
|
||||||
|
|
||||||
|
[ExportGroup("FOV")]
|
||||||
|
[Export(PropertyHint.Range, "0,180,0.1,degrees")]
|
||||||
|
public float BaseFov { get; set; } = 75.0f;
|
||||||
|
[Export(PropertyHint.Range, "0,10,0.01,or_greater")]
|
||||||
|
public float FovChangeFactor { get; set; } = 1.2f;
|
||||||
|
[Export(PropertyHint.Range, "0,10,0.01,or_greater")]
|
||||||
|
public float FovChangeSpeed { get; set; } = 6.25f;
|
||||||
|
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
||||||
|
public float FovMaxedOutSpeed { get; set; } = 20f;
|
||||||
|
|
||||||
|
[ExportGroup("First Person rig")]
|
||||||
|
private Node3D _fpRig;
|
||||||
|
private Vector3 _fpRigInitialPosition;
|
||||||
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||||
|
public float WeaponSway { get; set; } = 5f;
|
||||||
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
||||||
|
public float WeaponLookRotation { get; set; } = 1f;
|
||||||
|
[Export(PropertyHint.Range, "0,200,1,or_greater")]
|
||||||
|
public float WeaponMoveRotation { get; set; } = 80f;
|
||||||
|
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
|
||||||
|
public float WeaponAdjustmentSpeed { get; set; } = 10f;
|
||||||
|
|
||||||
public void Init()
|
public void Init()
|
||||||
{
|
{
|
||||||
@@ -39,7 +79,10 @@ public partial class HeadSystem : Node3D
|
|||||||
_camera = GetNode<Camera3D>("CameraSmooth/Camera3D");
|
_camera = GetNode<Camera3D>("CameraSmooth/Camera3D");
|
||||||
_cameraAnchor = GetNode<Marker3D>("CameraAnchor");
|
_cameraAnchor = GetNode<Marker3D>("CameraAnchor");
|
||||||
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
|
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
|
||||||
|
|
||||||
|
_fpRig = GetNode<Node3D>("FPRig");
|
||||||
|
_fpRigInitialPosition = _fpRig.GlobalPosition;
|
||||||
|
|
||||||
_slidingNoise.NoiseType = FastNoiseLite.NoiseTypeEnum.Perlin;
|
_slidingNoise.NoiseType = FastNoiseLite.NoiseTypeEnum.Perlin;
|
||||||
_slidingNoise.SetFrequency(SlidingJitterFrequency);
|
_slidingNoise.SetFrequency(SlidingJitterFrequency);
|
||||||
}
|
}
|
||||||
@@ -49,8 +92,19 @@ public partial class HeadSystem : Node3D
|
|||||||
_animationPlayer.Play("mantle");
|
_animationPlayer.Play("mantle");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LookAround(double delta, Vector2 lookDir, Vector3 playerInput, Vector3 playerVelocity, Vector3? wallContactPoint = null, float sensitivitMultiplier = 1f, bool isSliding = false)
|
public void LookAround(CameraParameters inputs)
|
||||||
{
|
{
|
||||||
|
var (delta,
|
||||||
|
lookDir,
|
||||||
|
playerInput,
|
||||||
|
playerVelocity,
|
||||||
|
wallContactPoint,
|
||||||
|
sensitivitMultiplier,
|
||||||
|
withCameraJitter,
|
||||||
|
withCameraBobbing,
|
||||||
|
bobbingMultiplier,
|
||||||
|
fovMultiplier) = inputs;
|
||||||
|
|
||||||
// Horizontal movement of head
|
// Horizontal movement of head
|
||||||
float angleForHorizontalRotation = lookDir.X * LookSensitivity * sensitivitMultiplier;
|
float angleForHorizontalRotation = lookDir.X * LookSensitivity * sensitivitMultiplier;
|
||||||
RotateY(angleForHorizontalRotation);
|
RotateY(angleForHorizontalRotation);
|
||||||
@@ -61,11 +115,11 @@ public partial class HeadSystem : Node3D
|
|||||||
currentCameraRotation.X = Mathf.Clamp(currentCameraRotation.X, Mathf.DegToRad(-90f), Mathf.DegToRad(90f));
|
currentCameraRotation.X = Mathf.Clamp(currentCameraRotation.X, Mathf.DegToRad(-90f), Mathf.DegToRad(90f));
|
||||||
|
|
||||||
// Camera incline on Wall and more
|
// Camera incline on Wall and more
|
||||||
var isWallRunning = wallContactPoint.HasValue && wallContactPoint.Value.Length() > Mathf.Epsilon;
|
var isWallRunning = wallContactPoint.Length() > Mathf.Epsilon;
|
||||||
float cameraIncline;
|
float cameraIncline;
|
||||||
if (isWallRunning)
|
if (isWallRunning)
|
||||||
{
|
{
|
||||||
var directionToWall = (wallContactPoint.Value - GlobalPosition).Normalized();
|
var directionToWall = (wallContactPoint - GlobalPosition).Normalized();
|
||||||
var cameraInclineFactor = ComputeCameraInclineFactor(directionToWall);
|
var cameraInclineFactor = ComputeCameraInclineFactor(directionToWall);
|
||||||
cameraIncline = Mathf.DegToRad(WallRunCameraIncline * cameraInclineFactor);
|
cameraIncline = Mathf.DegToRad(WallRunCameraIncline * cameraInclineFactor);
|
||||||
}
|
}
|
||||||
@@ -77,7 +131,7 @@ public partial class HeadSystem : Node3D
|
|||||||
currentCameraRotation.Z = (float) Mathf.Lerp(currentCameraRotation.Z, cameraIncline, delta * CameraInclineAcceleration);
|
currentCameraRotation.Z = (float) Mathf.Lerp(currentCameraRotation.Z, cameraIncline, delta * CameraInclineAcceleration);
|
||||||
_cameraAnchor.Rotation = currentCameraRotation;
|
_cameraAnchor.Rotation = currentCameraRotation;
|
||||||
|
|
||||||
if (isSliding)
|
if (withCameraJitter)
|
||||||
{
|
{
|
||||||
_cameraAnchor.Position = Vector3.Down*SlidingCameraHeightOffset;
|
_cameraAnchor.Position = Vector3.Down*SlidingCameraHeightOffset;
|
||||||
float noise1D = _slidingNoise.GetNoise1D(Time.GetTicksMsec());
|
float noise1D = _slidingNoise.GetNoise1D(Time.GetTicksMsec());
|
||||||
@@ -89,7 +143,45 @@ public partial class HeadSystem : Node3D
|
|||||||
_cameraAnchor.Position = Vector3.Zero;
|
_cameraAnchor.Position = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector3 newPositionForCamera = Vector3.Zero;
|
||||||
|
Vector3 newPositionForRig = Vector3.Zero;
|
||||||
|
if (withCameraBobbing)
|
||||||
|
{
|
||||||
|
_bobbingAccumulator += (float) delta * playerVelocity.Length();
|
||||||
|
|
||||||
|
// As the _bobbingAccumulator increases we're changing values for sin and cos functions.
|
||||||
|
// Because both of them are just waves, we will be slide up with y and then slide down with y
|
||||||
|
// creating bobbing effect. The same works for cos. As the _bobbingAccumulator increases the cos decreases and then increases
|
||||||
|
newPositionForCamera.Y = Mathf.Sin(_bobbingAccumulator * BobbingFrequency) * BobbingAmplitude * bobbingMultiplier;
|
||||||
|
newPositionForCamera.X = Mathf.Cos(_bobbingAccumulator * BobbingFrequency / 2.0f) * BobbingAmplitude * bobbingMultiplier;
|
||||||
|
|
||||||
|
// Offset bobbing for weapon rig
|
||||||
|
newPositionForRig.Y = Mathf.Cos(_bobbingAccumulator * BobbingFrequency) * BobbingAmplitude * bobbingMultiplier * 0.2f;
|
||||||
|
newPositionForRig.X = Mathf.Sin(_bobbingAccumulator * BobbingFrequency / 2.0f) * BobbingAmplitude * bobbingMultiplier * 0.2f;
|
||||||
|
}
|
||||||
|
_cameraAnchor.Position += newPositionForCamera;
|
||||||
|
|
||||||
_camera.GlobalTransform = _cameraAnchor.GetGlobalTransformInterpolated();
|
_camera.GlobalTransform = _cameraAnchor.GetGlobalTransformInterpolated();
|
||||||
|
|
||||||
|
// First person rig adjustments
|
||||||
|
_fpRig.GlobalTransform = _cameraAnchor.GetGlobalTransformInterpolated();
|
||||||
|
// Apply bobbing
|
||||||
|
_fpRig.Position += newPositionForRig;
|
||||||
|
|
||||||
|
var newRigRotation = _fpRig.Rotation;
|
||||||
|
var camTilt = Mathf.Lerp(_fpRig.Rotation.Z, cameraIncline*WeaponMoveRotation, delta*WeaponAdjustmentSpeed);
|
||||||
|
newRigRotation.Z = (float) camTilt;
|
||||||
|
|
||||||
|
// var lookInputLerped = lookDir.Lerp(Vector2.Zero, (float) delta * WeaponAdjustmentSpeed);
|
||||||
|
newRigRotation.X = Mathf.Lerp(newRigRotation.X, -lookDir.Y*WeaponSway, (float) delta*WeaponAdjustmentSpeed);
|
||||||
|
newRigRotation.Y = Mathf.Lerp(newRigRotation.Y, -lookDir.X*WeaponSway, (float) delta*WeaponAdjustmentSpeed);
|
||||||
|
|
||||||
|
_fpRig.Rotation = newRigRotation;
|
||||||
|
|
||||||
|
// Camera adjustments
|
||||||
|
float velocityClamped = Mathf.Clamp(playerVelocity.Length(), 0.5f, FovMaxedOutSpeed);
|
||||||
|
float targetFov = BaseFov + FovChangeFactor * velocityClamped * fovMultiplier;
|
||||||
|
_camera.Fov = Mathf.Lerp(_camera.Fov, targetFov, (float) delta * FovChangeSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public float ComputeCameraInclineFactor(Vector3 direction)
|
public float ComputeCameraInclineFactor(Vector3 direction)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=5 format=3 uid="uid://0ysqmqphq6mq"]
|
[gd_scene load_steps=6 format=3 uid="uid://0ysqmqphq6mq"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dtkdrnsmlwm67" path="res://systems/head/HeadSystem.cs" id="1_8abgy"]
|
[ext_resource type="Script" uid="uid://dtkdrnsmlwm67" path="res://systems/head/HeadSystem.cs" id="1_8abgy"]
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://ckr26s4e3fj1m" path="res://assets/swords/resources/fp_sword23.tres" id="2_c5qep"]
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_urko7"]
|
[sub_resource type="Animation" id="Animation_urko7"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
@@ -62,6 +63,15 @@ _data = {
|
|||||||
[node name="HeadSystem" type="Node3D"]
|
[node name="HeadSystem" type="Node3D"]
|
||||||
script = ExtResource("1_8abgy")
|
script = ExtResource("1_8abgy")
|
||||||
|
|
||||||
|
[node name="FPRig" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="Sword" type="Node3D" parent="FPRig"]
|
||||||
|
|
||||||
|
[node name="SwordMesh" type="MeshInstance3D" parent="FPRig/Sword"]
|
||||||
|
transform = Transform3D(0.43494374, 0.027831191, -0.9000275, 0.1806065, 0.9765146, 0.117475554, 0.8821594, -0.2136461, 0.41970232, 0.53640664, -0.82246387, -1.9288678)
|
||||||
|
cast_shadow = 0
|
||||||
|
mesh = ExtResource("2_c5qep")
|
||||||
|
|
||||||
[node name="CameraSmooth" type="Node3D" parent="."]
|
[node name="CameraSmooth" type="Node3D" parent="."]
|
||||||
|
|
||||||
[node name="Camera3D" type="Camera3D" parent="CameraSmooth"]
|
[node name="Camera3D" type="Camera3D" parent="CameraSmooth"]
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public partial class WeaponSystem : RigidBody3D
|
|||||||
|
|
||||||
_startTransform = Transform;
|
_startTransform = Transform;
|
||||||
Freeze = true;
|
Freeze = true;
|
||||||
|
Visible = false;
|
||||||
|
|
||||||
BodyEntered += OnThrownWeaponReachesGround;
|
BodyEntered += OnThrownWeaponReachesGround;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://systems/weapon/WeaponSystem.cs" id="1_csqwk"]
|
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://systems/weapon/WeaponSystem.cs" id="1_csqwk"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="2_x1nha"]
|
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="2_x1nha"]
|
||||||
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="3_5owyf"]
|
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="3_5owyf"]
|
||||||
[ext_resource type="CylinderMesh" uid="uid://b7vt0nk2htpo4" path="res://systems/weapon/weapon.tres" id="3_svc06"]
|
[ext_resource type="ArrayMesh" uid="uid://cho5fixitrbds" path="res://assets/swords/resources/sword23.tres" id="3_svc06"]
|
||||||
[ext_resource type="Script" uid="uid://jk2jm1g6q853" path="res://addons/godot_state_charts/compound_state.gd" id="4_svc06"]
|
[ext_resource type="Script" uid="uid://jk2jm1g6q853" path="res://addons/godot_state_charts/compound_state.gd" id="4_svc06"]
|
||||||
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="5_m0v1h"]
|
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="5_m0v1h"]
|
||||||
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="6_jpdh0"]
|
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="6_jpdh0"]
|
||||||
@@ -51,7 +51,7 @@ transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0,
|
|||||||
shape = SubResource("CylinderShape3D_avini")
|
shape = SubResource("CylinderShape3D_avini")
|
||||||
|
|
||||||
[node name="Weapon" type="MeshInstance3D" parent="."]
|
[node name="Weapon" type="MeshInstance3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0)
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0.8673003)
|
||||||
mesh = ExtResource("3_svc06")
|
mesh = ExtResource("3_svc06")
|
||||||
|
|
||||||
[node name="StateChart" type="Node" parent="."]
|
[node name="StateChart" type="Node" parent="."]
|
||||||
|
|||||||
Reference in New Issue
Block a user