tests & can charge up thrust

This commit is contained in:
2026-05-25 20:51:48 +03:00
parent bfb026c7ae
commit 6abf5355c2
10 changed files with 1022 additions and 15 deletions
+27 -15
View File
@@ -14,11 +14,13 @@ const HOOF_OFFSETS: Array = [
var _hoof_emitters: Array[CPUParticles3D] = []
var _legs: Node
var _kick_timer: float = 0.0
var _was_on_floor: bool = false
var _pre_slide_vel_y: float = 0.0
var _charge_dir: Vector3 = Vector3.ZERO
var _both_held: bool = false
var _kick_timer: float = 0.0
var _was_on_floor: bool = false
var _pre_slide_vel_y: float = 0.0
var _charge_dir: Vector3 = Vector3.ZERO
var _both_held: bool = false
var _thrust_left_charge: float = 0.0
var _thrust_right_charge: float = 0.0
enum DustState { NONE, WALK, CHARGE }
var _dust_state: DustState = DustState.NONE
@@ -192,6 +194,8 @@ func _physics_process(delta: float) -> void:
_charge_dir = Vector3(raw.x, 0.0, raw.z).normalized()
if both_held:
_thrust_left_charge = 0.0
_thrust_right_charge = 0.0
velocity.x += _charge_dir.x * DP.f("bull_charge_accel") * delta
velocity.z += _charge_dir.z * DP.f("bull_charge_accel") * delta
var flat_c := Vector2(velocity.x, velocity.z)
@@ -202,16 +206,24 @@ func _physics_process(delta: float) -> void:
_legs.set(&"charge_pitch_target", DP.f("charge_head_pitch"))
else:
_legs.set(&"charge_pitch_target", 0.0)
if Input.is_action_just_pressed(&"thrust_left") and not right_held:
var raw := cube_guy.global_transform.basis.z
var bull_fwd := Vector3(raw.x, 0.0, raw.z).normalized()
var bull_right := bull_fwd.cross(Vector3.UP)
_apply_thrust((bull_fwd + bull_right).normalized())
elif Input.is_action_just_pressed(&"thrust_right") and not left_held:
var raw := cube_guy.global_transform.basis.z
var bull_fwd := Vector3(raw.x, 0.0, raw.z).normalized()
var bull_right := bull_fwd.cross(Vector3.UP)
_apply_thrust((bull_fwd - bull_right).normalized())
if left_held and not right_held:
_thrust_left_charge = minf(_thrust_left_charge + delta, DP.f("thrust_charge_time"))
elif Input.is_action_just_released(&"thrust_left") and _thrust_left_charge > 0.0:
var t := _thrust_left_charge / DP.f("thrust_charge_time")
var angle := lerpf(deg_to_rad(DP.f("thrust_min_angle")), deg_to_rad(DP.f("thrust_max_angle")), t)
var raw := cube_guy.global_transform.basis.z
_apply_thrust(Vector3(raw.x, 0.0, raw.z).normalized().rotated(Vector3.UP, -angle))
_thrust_left_charge = 0.0
if right_held and not left_held:
_thrust_right_charge = minf(_thrust_right_charge + delta, DP.f("thrust_charge_time"))
elif Input.is_action_just_released(&"thrust_right") and _thrust_right_charge > 0.0:
var t := _thrust_right_charge / DP.f("thrust_charge_time")
var angle := lerpf(deg_to_rad(DP.f("thrust_min_angle")), deg_to_rad(DP.f("thrust_max_angle")), t)
var raw := cube_guy.global_transform.basis.z
_apply_thrust(Vector3(raw.x, 0.0, raw.z).normalized().rotated(Vector3.UP, angle))
_thrust_right_charge = 0.0
_both_held = both_held