extends KinematicBody const SPEED_FORWARD = 20 const SPEED_MAX = 20 const SPEED_TURN = 120 const SPEED_AIM = PI / 2 var bullet_alterating = 0 var velocity = Vector3() var scene_bullet = preload("res://player/bullet.tscn") # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body. func get_player_input(delta): var vec_lateral = transform.basis.x var vec_vertical = transform.basis.y if Input.is_action_pressed("player_left"): velocity += SPEED_TURN * -vec_lateral * delta elif Input.is_action_pressed("player_right"): velocity += SPEED_TURN * vec_lateral * delta if Input.is_action_pressed("player_up"): velocity += SPEED_TURN * vec_vertical * delta elif Input.is_action_pressed("player_down"): velocity += SPEED_TURN * -vec_vertical * delta if Input.is_action_pressed("player_aim_up"): rotate_object_local(Vector3.RIGHT, SPEED_AIM * delta) elif Input.is_action_pressed("player_aim_down"): rotate_object_local(Vector3.RIGHT, -SPEED_AIM * delta) if Input.is_action_pressed("player_aim_left"): rotate(Vector3.UP, SPEED_AIM * delta) elif Input.is_action_pressed("player_aim_right"): rotate(Vector3.UP, -SPEED_AIM * delta) # offense if Input.is_action_pressed("player_fire"): if $bullet_timer.time_left == 0: fire_bullet() func fire_bullet(): var bullet = scene_bullet.instance() $"..".add_child(bullet) bullet_alterating = (bullet_alterating + 1) % 2 bullet.translation = translation - transform.basis.x * (4 * bullet_alterating - 2) bullet.rotation = rotation bullet.direction = -transform.basis.z $bullet_timer.start() func _process(delta): # get velocity changes player asks for get_player_input(delta) # move foward according to the camera's POV var vec_forward = transform.basis.z velocity += SPEED_FORWARD * -vec_forward * delta # air friction var friction = SPEED_MAX / velocity.length() velocity *= friction func _physics_process(_delta): velocity = move_and_slide(velocity, Vector3.UP)