Adding repo style character, and fixing some movement bugs
This commit is contained in:
+50
-9
@@ -17,6 +17,14 @@ var rotation_x := 0.0
|
||||
var rotation_y := 0.0
|
||||
var cameraMoveMode := false
|
||||
var current_number_of_jumps := 0
|
||||
var _pending_mouse_delta := Vector2.ZERO
|
||||
var _last_move_forward := Vector3(0, 0, 1)
|
||||
var _last_move_right := Vector3(1, 0, 0)
|
||||
var _camera_offset_local := Vector3.ZERO
|
||||
var _camera_yaw := 0.0
|
||||
var _camera_pitch := 0.0
|
||||
|
||||
@export var camera_follow_speed := 10.0
|
||||
|
||||
var jump_sound = preload("res://assets/audio/jump.ogg")
|
||||
var audio_player = AudioStreamPlayer.new()
|
||||
@@ -33,8 +41,32 @@ func _ready() -> void:
|
||||
add_child(audio_player)
|
||||
audio_player.stream = jump_sound
|
||||
audio_player.volume_db = -20
|
||||
if cam:
|
||||
_camera_offset_local = cam.transform.origin
|
||||
_camera_pitch = cam.rotation.x
|
||||
_camera_yaw = global_transform.basis.get_euler().y
|
||||
cam.set_as_top_level(true)
|
||||
cam.global_position = global_position + (Basis(Vector3.UP, _camera_yaw) * _camera_offset_local)
|
||||
cam.global_rotation = Vector3(_camera_pitch, _camera_yaw, 0.0)
|
||||
var move_basis := cam.global_transform.basis if cam else global_transform.basis
|
||||
var forward := move_basis.z
|
||||
var right := move_basis.x
|
||||
forward.y = 0.0
|
||||
right.y = 0.0
|
||||
if forward.length() > 0.0001:
|
||||
_last_move_forward = forward.normalized()
|
||||
if right.length() > 0.0001:
|
||||
_last_move_right = right.normalized()
|
||||
|
||||
func _integrate_forces(state):
|
||||
if cameraMoveMode and _pending_mouse_delta != Vector2.ZERO:
|
||||
rotation_x -= _pending_mouse_delta.y * mouse_sensitivity
|
||||
rotation_y -= _pending_mouse_delta.x * mouse_sensitivity
|
||||
rotation_x = clamp(rotation_x, deg_to_rad(-90), deg_to_rad(90)) # Prevent flipping
|
||||
_camera_pitch = rotation_x
|
||||
rotation.y = rotation_y
|
||||
_pending_mouse_delta = Vector2.ZERO
|
||||
|
||||
# Input as 2D vector
|
||||
var input2v := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
||||
|
||||
@@ -44,13 +76,19 @@ func _integrate_forces(state):
|
||||
if cam:
|
||||
forward = cam.global_transform.basis.z
|
||||
right = cam.global_transform.basis.x
|
||||
# project onto ground plane so looking up/down doesn't tilt movement
|
||||
# Project onto ground plane so looking up/down doesn't kill movement.
|
||||
forward.y = 0.0
|
||||
right.y = 0.0
|
||||
if forward.length() > 0.0001:
|
||||
if forward.length() > 0.0001:
|
||||
forward = forward.normalized()
|
||||
if right.length() > 0.0001:
|
||||
_last_move_forward = forward
|
||||
else:
|
||||
forward = _last_move_forward
|
||||
if right.length() > 0.0001:
|
||||
right = right.normalized()
|
||||
_last_move_right = right
|
||||
else:
|
||||
right = _last_move_right
|
||||
|
||||
var dir := (right * input2v.x + forward * input2v.y).normalized()
|
||||
var target_v := dir * MOVE_SPEED
|
||||
@@ -72,6 +110,14 @@ func _integrate_forces(state):
|
||||
linear_velocity.y = JUMP_SPEED
|
||||
audio_player.play()
|
||||
|
||||
if cam:
|
||||
var target_yaw := global_transform.basis.get_euler().y
|
||||
_camera_yaw = lerp_angle(_camera_yaw, target_yaw, camera_follow_speed * state.step)
|
||||
var target_basis := Basis(Vector3.UP, _camera_yaw)
|
||||
var target_pos := global_position + (target_basis * _camera_offset_local)
|
||||
cam.global_position = cam.global_position.lerp(target_pos, camera_follow_speed * state.step)
|
||||
cam.global_rotation = Vector3(_camera_pitch, _camera_yaw, 0.0)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_MIDDLE:
|
||||
@@ -83,12 +129,7 @@ func _input(event):
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
|
||||
if event is InputEventMouseMotion and cameraMoveMode:
|
||||
rotation_x -= event.relative.y * mouse_sensitivity
|
||||
rotation_y -= event.relative.x * mouse_sensitivity
|
||||
rotation_x = clamp(rotation_x, deg_to_rad(-90), deg_to_rad(90)) # Prevent flipping
|
||||
|
||||
$Camera3D.rotation.x = rotation_x
|
||||
rotation.y = rotation_y
|
||||
_pending_mouse_delta += event.relative
|
||||
|
||||
if event is InputEventMouseButton and event.pressed:
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||
|
||||
Reference in New Issue
Block a user