Refactor brick throwing mechanics; integrate new input handling and projectile initialization components

This commit is contained in:
2025-05-13 00:44:44 +02:00
parent 3d65daf0c5
commit c291f42531
25 changed files with 276 additions and 72 deletions

View File

@@ -0,0 +1,56 @@
class_name ChargeThrowInputResource
extends ThrowInputResource
@export var min_power := 0.5
@export var max_power := 2.0
@export var max_charge_time := 1.5
@export var min_charge_duration := 0.1
var is_charging := false
var charge_start_time := 0.0
signal charge_started
signal charge_updated(charge_ratio: float)
signal charge_stopped
func process_input(event: InputEvent) -> void:
if event.is_action_pressed("attack"):
is_charging = true
charge_start_time = Time.get_ticks_msec() / 1000.0
emit_signal("charge_started")
if event.is_action_released("attack") and is_charging:
var power := _calculate_power()
is_charging = false
emit_signal("throw_requested", power)
emit_signal("charge_stopped")
func _calculate_power() -> float:
var now := Time.get_ticks_msec() / 1000.0
var held_time := now - charge_start_time
if held_time < min_charge_duration:
return min_power
var t = clamp(held_time / max_charge_time, 0.0, 1.0)
return lerp(min_power, max_power, t)
func get_charge_ratio() -> float:
if not is_charging:
return min_power
var now := Time.get_ticks_msec() / 1000.0
var held := now - charge_start_time
var t = clamp(held / max_charge_time, 0.0, 1.0)
return lerp(min_power, max_power, t)
func update(_delta: float) -> void:
if not is_charging:
return
var t = clamp(get_charge_ratio(), min_power, max_power)
emit_signal("charge_updated", t)
func supports_charging() -> bool:
return true

View File

@@ -0,0 +1 @@
uid://dl1kpll33o6mv

View File

@@ -0,0 +1,6 @@
class_name TapThrowInputResource
extends ThrowInputResource
func process_input(event: InputEvent) -> void:
if event.is_action_pressed("attack"):
throw_requested.emit(1.0)

View File

@@ -0,0 +1 @@
uid://blvdnsyi287rf

View File

@@ -0,0 +1,16 @@
class_name ThrowInputResource
extends Resource
signal throw_requested(power_multiplier: float)
func process_input(event: InputEvent) -> void:
pass
func update(delta: float) -> void:
pass
func supports_charging() -> bool:
return false

View File

@@ -0,0 +1 @@
uid://cry02xehijy2v