tail wag works

This commit is contained in:
2026-05-25 18:37:42 +03:00
parent 22ed4f7722
commit 98d579f733
8 changed files with 208 additions and 55 deletions
+19 -17
View File
@@ -18,8 +18,8 @@ var _kick_timer: float = 0.0
var _was_on_floor: bool = false
var _pre_slide_vel_y: float = 0.0
enum _DustState { NONE, WALK, CHARGE }
var _dust_state: _DustState = _DustState.NONE
enum DustState { NONE, WALK, CHARGE }
var _dust_state: DustState = DustState.NONE
func _ready() -> void:
@@ -82,7 +82,7 @@ func _setup_hoof_dust() -> void:
_hoof_emitters.append(p)
func _set_dust_state(new_state: _DustState) -> void:
func _set_dust_state(new_state: DustState) -> void:
if new_state == _dust_state:
return
_dust_state = new_state
@@ -92,15 +92,15 @@ func _set_dust_state(new_state: _DustState) -> void:
p.spread = DP.f("dust_spread")
p.gravity = Vector3(0.0, DP.f("dust_gravity_y"), 0.0)
match new_state:
_DustState.NONE:
DustState.NONE:
p.emitting = false
_DustState.WALK:
DustState.WALK:
p.scale_amount_min = DP.f("walk_scale_min")
p.scale_amount_max = DP.f("walk_scale_max")
p.initial_velocity_min = DP.f("walk_vel_min")
p.initial_velocity_max = DP.f("walk_vel_max")
p.emitting = true
_DustState.CHARGE:
DustState.CHARGE:
p.scale_amount_min = DP.f("charge_scale_min")
p.scale_amount_max = DP.f("charge_scale_max")
p.initial_velocity_min = DP.f("charge_vel_min")
@@ -109,10 +109,10 @@ func _set_dust_state(new_state: _DustState) -> void:
func _on_dp_changed(_key: String, _val: Variant) -> void:
if _hoof_emitters.is_empty() or _dust_state == _DustState.NONE:
if _hoof_emitters.is_empty() or _dust_state == DustState.NONE:
return
var prev := _dust_state
_dust_state = _DustState.NONE
_dust_state = DustState.NONE
_set_dust_state(prev)
@@ -181,12 +181,14 @@ func _physics_process(delta: float) -> void:
# Left click → thrust NE (forward-right diagonal)
# Right click → thrust NW (forward-left diagonal)
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
if Input.is_action_just_pressed(&"thrust_left"):
var ne := (flat_forward + flat_right).normalized()
_apply_thrust(ne if ne.length() > 0.1 else flat_forward)
if Input.is_action_just_pressed(&"thrust_right"):
var nw := (flat_forward - flat_right).normalized()
_apply_thrust(nw if nw.length() > 0.1 else flat_forward)
if Input.is_action_just_pressed(&"thrust_left") or Input.is_action_just_pressed(&"thrust_right"):
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)
if Input.is_action_just_pressed(&"thrust_left"):
_apply_thrust((bull_fwd + bull_right).normalized())
else:
_apply_thrust((bull_fwd - bull_right).normalized())
# Reset kick timer on landing so the first kick after a bounce is immediate
if on_floor and not _was_on_floor and direction:
@@ -222,8 +224,8 @@ func _physics_process(delta: float) -> void:
# ── Dust ──────────────────────────────────────────────────────────────────
if flat_speed > DP.f("dust_charge_spd") and on_floor:
_set_dust_state(_DustState.CHARGE)
_set_dust_state(DustState.CHARGE)
elif flat_speed > DP.f("dust_walk_spd") and on_floor:
_set_dust_state(_DustState.WALK)
_set_dust_state(DustState.WALK)
else:
_set_dust_state(_DustState.NONE)
_set_dust_state(DustState.NONE)