33 lines
1.1 KiB
GDScript
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)
|