"splat-launch" move :3

This commit is contained in:
Haze Weathers 2025-03-06 17:36:37 -05:00
parent 20f35ab240
commit 7779e241f6
6 changed files with 97 additions and 11 deletions

View file

@ -11,6 +11,8 @@ extends CharacterBody2D
@export_group("Air Movement")
@export var gravity: float
@export var jump_power: float
@export var splat_launch_power: float
@export var splat_offset: float
@export_group("Internal References")
@export var state_chart: StateChart
@ -26,8 +28,12 @@ var input_dir: Vector2 = Vector2.ZERO:
input_dir = value.sign()
state_chart.set_expression_property(&"input_dir", input_dir)
var _last_velocity: Vector2 = Vector2.ZERO
var _splat_normal: Vector2 = Vector2.ZERO
func _physics_process(delta: float) -> void:
_last_velocity = velocity
move_and_slide()
state_chart.set_expression_property(&"velocity", velocity)
if velocity.x != 0.0:
@ -88,11 +94,35 @@ func _start_jump() -> void:
#region Missile
func _restore_graphics_rotation() -> void:
graphics.rotation = 0.0
func _face_towards_velocity(_delta: float) -> void:
graphics.rotation = Vector2(graphics.scale.x, 0.0).angle_to(velocity)
func _restore_graphics_rotation() -> void:
graphics.rotation = 0.0
func _check_for_splat(delta: float) -> void:
var col = move_and_collide(_last_velocity * delta, true)
if col:
velocity = Vector2.ZERO
global_position += col.get_travel()
_splat_normal = col.get_normal()
var angle = col.get_normal().angle()
if graphics.scale.x > 0.0:
angle += PI
graphics.set_deferred(&"rotation", angle)
state_chart.send_event(&"splatted")
#endregion
#region Splatting
func _do_splat_launch() -> void:
var dir = input_dir.project(_splat_normal.orthogonal()).normalized()
if dir == Vector2.ZERO:
dir = _splat_normal
dir = dir.rotated(dir.angle_to(_splat_normal) * 0.5)
launch(dir * splat_launch_power)
#endregion