hi this is my code:
Player.gd:
extends AnimatedSprite
export (int) var speed = 150
var velocity = Vector2()
var timer = Timer.new()
var player_alive = true
var can_shoot = true
var fire_rate = 0.25
var health = 4
const screen_width = 320
const screen_height = 180
var laser = preload("res://Scenes/VFX/Laser.tscn")
var explosion = preload("res://Scenes/VFX/Explosion.tscn")
signal create_laser(laser,location)
signal instance_node(node, location)
func _ready():
add_to_group("Player")
self.play()
Global.player = self
timer.set_one_shot(true)
timer.set_wait_time(fire_rate)
timer.connect("timeout",self,"on_shoot_timeout")
add_child(timer)
func _exit_tree():
Global.player = null
func _process(delta):
#screen restrain
position.x = clamp(position.x,8,screen_width-8)
position.y = clamp(position.y,8,screen_height-8)
# shoot
if Input.is_action_pressed("Shoot") and can_shoot:
Global.play_sound("Shoot")
emit_signal("create_laser",laser,global_position)
can_shoot = false
timer.start()
#movement
velocity = Vector2()
if Input.is_action_pressed("ui_right"):
velocity.x +=1
if Input.is_action_pressed("ui_left"):
velocity.x -=1
if Input.is_action_pressed("ui_down"):
velocity.y +=1
if Input.is_action_pressed("ui_up"):
velocity.y -=1
position += velocity.normalized() * speed * delta
#check if player he still has health
if health <= 0:
Global.play_sound("Explosion")
emit_signal("instance_node",explosion,global_position)
queue_free()
Global.reset = false
#emit explosion signal and queue free the player
func _on_Hit_box_area_entered(area):
if area.is_in_group("Enemy"):
health -= area.get_parent().damage
Global.play_sound("Hit")
emit_signal("instance_node",explosion,area.global_position)
area.get_parent().queue_free()
func on_shoot_timeout():
can_shoot = true
Asteroid.gd:
extends AnimatedSprite
export var speed = 75
export var health = 1
export var points = 5
var check_laser = 0
var explosion = preload("res://Scenes/VFX/Explosion.tscn")
signal instance_node(node,location)
func _ready():
$Hit_box.add_to_group("Enemy")
play()
if Global.world != null:
connect("instance_node",Global.world,"instance_node")
func _process(delta):
global_position.x -= speed * delta
if global_position.x < -10:
queue_free()
func _on_Hit_box_area_entered(area):
if area.is_in_group("Laser"):
check_laser +=1
health -= area.get_parent().damage
if check_laser == 1:
if health <= 0:
Global.play_sound("Explosion")
Global.score += points
emit_signal("instance_node",explosion,global_position)
area.get_parent().queue_free()
queue_free()
Enemy_generator.gd:
extends Position2D
var asteroid = preload("res://Scenes/Enemies/Asteroid.tscn")
signal instance_node(node,location)
func _on_Timer_timeout():
randomize()
emit_signal("instance_node",asteroid,Vector2(328,rand_range(0,180)))