godot-tank-test/tank-base.gd

62 lines
1.4 KiB
GDScript

extends VehicleBody
# Member variables
const STEER_SPEED = .25
const STEER_LIMIT = .3
var steer_angle = 0
var steer_target = 0
var view_sensitivity = 0.3;
export var engine_force = 20
func _fixed_process(delta):
if (Input.is_action_pressed("ui_left")):
steer_target = -STEER_LIMIT
elif (Input.is_action_pressed("ui_right")):
steer_target = STEER_LIMIT
else:
steer_target = 0
if (Input.is_action_pressed("ui_up")):
set_engine_force(engine_force)
else:
set_engine_force(0)
if (Input.is_action_pressed("ui_down")):
#set_brake(1)
set_engine_force(-engine_force)
if (Input.is_action_pressed("driver_break")):
set_brake(1.0)
else:
set_brake(0.0)
if (steer_target < steer_angle):
steer_angle -= STEER_SPEED*delta
if (steer_target > steer_angle):
steer_angle = steer_target
elif (steer_target > steer_angle):
steer_angle += STEER_SPEED*delta
if (steer_target < steer_angle):
steer_angle = steer_target
set_steering(steer_angle)
func _ready():
set_fixed_process(true)
func _input(ie):
if ie.type == InputEvent.MOUSE_MOTION:
var yaw = rad2deg(get_node(".").get_rotation().y);
var pitch = rad2deg(get_node("Camera").get_rotation().x);
yaw = fmod(yaw - ie.relative_x * view_sensitivity, 360);
pitch = max(min(pitch - ie.relative_y * view_sensitivity, 90), -90);
get_node(".").set_rotation(Vector3(0, deg2rad(yaw), 0));
get_node("Camera").set_rotation(Vector3(deg2rad(pitch), 0, 0));