79 lines
2.0 KiB
GDScript3
79 lines
2.0 KiB
GDScript3
|
|
extends Area2D
|
||
|
|
class_name player
|
||
|
|
|
||
|
|
#setting up signals
|
||
|
|
signal spawn_laser(location)
|
||
|
|
signal spawn_missile(location)
|
||
|
|
|
||
|
|
#loading the muzzle position on load
|
||
|
|
@onready var muzzle = $muzzle
|
||
|
|
|
||
|
|
#speed, health and direction, direction is for future animations vector sets up an Axis.
|
||
|
|
var speed = 250
|
||
|
|
var health = 3
|
||
|
|
var direction = "none"
|
||
|
|
var input_vector = Vector2()
|
||
|
|
|
||
|
|
var missile_total = 3
|
||
|
|
var missile_current = 3
|
||
|
|
#mostly movement stuff below, + some firing commands, check happens between every frame
|
||
|
|
func _physics_process(delta):
|
||
|
|
input_vector.x = 0
|
||
|
|
if Input.is_action_pressed("move_right"):
|
||
|
|
input_vector.x += 1
|
||
|
|
direction = "right"
|
||
|
|
if Input.is_action_pressed("move_left"):
|
||
|
|
input_vector.x -= 1
|
||
|
|
direction = "left"
|
||
|
|
|
||
|
|
input_vector.y = 0
|
||
|
|
if Input.is_action_pressed("move_forward"):
|
||
|
|
#print("fwd")
|
||
|
|
input_vector.y -= 1
|
||
|
|
if Input.is_action_pressed("move_back"):
|
||
|
|
input_vector.y += 1
|
||
|
|
global_position += input_vector * speed * delta
|
||
|
|
|
||
|
|
if Input.is_action_just_pressed("shoot"):
|
||
|
|
$AnimatedSprite2D.play("shoot")
|
||
|
|
shoot_laser()
|
||
|
|
#$AnimatedSprite2D.play("default")
|
||
|
|
|
||
|
|
#Missile launching signal
|
||
|
|
if Input.is_action_just_pressed("fire_missile"):
|
||
|
|
if missile_current > 0:
|
||
|
|
$AnimatedSprite2D.play("shoot")
|
||
|
|
shoot_missile()
|
||
|
|
missile_current -= 1
|
||
|
|
print(str(missile_current))
|
||
|
|
else:
|
||
|
|
print("No Missiles")
|
||
|
|
|
||
|
|
#if entering an area with enemy, DO damage.
|
||
|
|
func take_damage(damage):
|
||
|
|
health -= damage
|
||
|
|
get_tree().current_scene.player_health(health)
|
||
|
|
if health <= 0:
|
||
|
|
get_tree().current_scene.player_health(health)
|
||
|
|
queue_free()
|
||
|
|
|
||
|
|
#if entering an area with enemy = collision, does 1 damage
|
||
|
|
func _on_area_entered(area):
|
||
|
|
if area.is_in_group("enemies"):
|
||
|
|
area.take_damage(1)
|
||
|
|
|
||
|
|
#sends laser shoot command to worl + muzzle position
|
||
|
|
func shoot_laser():
|
||
|
|
emit_signal("spawn_laser",muzzle.global_position)
|
||
|
|
|
||
|
|
#sends missile launch command to world + muzzle position
|
||
|
|
func shoot_missile():
|
||
|
|
emit_signal("spawn_missile",muzzle.global_position)
|
||
|
|
|
||
|
|
|
||
|
|
func refil_missiles():
|
||
|
|
if missile_current < missile_total:
|
||
|
|
missile_current = missile_total
|
||
|
|
else:
|
||
|
|
pass
|