38 lines
983 B
GDScript
38 lines
983 B
GDScript
extends KinematicBody2D
|
|
|
|
const WIND = 20
|
|
const SPEED = 400
|
|
const STEERING = deg2rad(5)
|
|
const WINDLIMIT = deg2rad(180-45)
|
|
const WINDDIR = Vector2(0,1)
|
|
const STEERPEN = 1
|
|
const ACCELERATION = 2
|
|
|
|
var velocity = Vector2(0,10)
|
|
|
|
func _calculate_velocity(_velocity, _acceleration, _rotation):
|
|
velocity = _velocity * _acceleration
|
|
velocity = velocity.clamped(_calculate_maxspeed())
|
|
return velocity.rotated(_rotation)
|
|
|
|
func _calculate_maxspeed():
|
|
var angle_to_wind = WINDDIR.angle_to(velocity)
|
|
if angle_to_wind > WINDLIMIT || angle_to_wind < -WINDLIMIT:
|
|
return 0.1
|
|
else:
|
|
return 75
|
|
|
|
func _physics_process(_delta):
|
|
if Input.is_action_pressed("right"):
|
|
velocity = _calculate_velocity(velocity, STEERPEN, STEERING)
|
|
rotate(STEERING)
|
|
elif Input.is_action_pressed("left"):
|
|
velocity = _calculate_velocity(velocity, STEERPEN, -STEERING)
|
|
rotate(-STEERING)
|
|
else:
|
|
velocity = _calculate_velocity(velocity, ACCELERATION, 0)
|
|
velocity = move_and_slide(velocity)
|
|
|
|
func _ready():
|
|
pass
|