spacegame/player/player.gd
2025-05-03 14:12:25 +02:00

33 lines
1.1 KiB
GDScript

extends RigidBody2D
class_name Player
@export var thruster_strength := 40.0
@export var rotation_strength := 10.0
@export var drift_curve : Curve
var angular_velocity_target := 0.0
@export var radar: Radar
@export var reactor: Reactor
var delay := false
func _physics_process(delta: float) -> void:
var input := Vector2(Input.get_action_strength("right") - Input.get_action_strength("left"), Input.get_action_strength("boost"))
var angle = abs(linear_velocity.angle_to(Vector2.UP.rotated(rotation)))
# var drift_factor = clamp(5-abs(linear_velocity.dot(Vector2.UP.rotated(rotation))), 1, 5)
var drift_factor = 2.0 * drift_curve.sample_baked(angle / PI) + 1.0
apply_central_impulse(Vector2.UP.rotated(rotation) * thruster_strength * delta * input.y * drift_factor)
angular_velocity_target = input.x * rotation_strength
if input.y > 0:
%thruster.active = true
else:
%thruster.active = false
if Input.is_action_just_pressed("shoot"):
%canon.shoot()
func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
state.angular_velocity = lerp(state.angular_velocity, angular_velocity_target, 0.1)