|
@@ -0,0 +1,88 @@
|
|
|
|
+
|
|
|
|
+extends Area2D
|
|
|
|
+
|
|
|
|
+# member variables here, example:
|
|
|
|
+# var a=2
|
|
|
|
+# var b="textvar"
|
|
|
|
+
|
|
|
|
+const SPEED = 200
|
|
|
|
+
|
|
|
|
+var screen_size
|
|
|
|
+
|
|
|
|
+var prev_shooting=false
|
|
|
|
+
|
|
|
|
+func _process(delta):
|
|
|
|
+
|
|
|
|
+ var motion = Vector2()
|
|
|
|
+ if Input.is_action_pressed("move_up"):
|
|
|
|
+ motion+=Vector2(0,-1)
|
|
|
|
+ if Input.is_action_pressed("move_down"):
|
|
|
|
+ motion+=Vector2(0,1)
|
|
|
|
+ if Input.is_action_pressed("move_left"):
|
|
|
|
+ motion+=Vector2(-1,0)
|
|
|
|
+ if Input.is_action_pressed("move_right"):
|
|
|
|
+ motion+=Vector2(1,0)
|
|
|
|
+ var shooting = Input.is_action_pressed("shoot")
|
|
|
|
+
|
|
|
|
+ var pos = get_pos()
|
|
|
|
+
|
|
|
|
+ pos+=motion*delta*SPEED
|
|
|
|
+ if (pos.x<0):
|
|
|
|
+ pos.x=0
|
|
|
|
+ if (pos.x>screen_size.x):
|
|
|
|
+ pos.x=screen_size.x
|
|
|
|
+ if (pos.y<0):
|
|
|
|
+ pos.y=0
|
|
|
|
+ if (pos.y>screen_size.y):
|
|
|
|
+ pos.y=screen_size.y
|
|
|
|
+
|
|
|
|
+ set_pos(pos)
|
|
|
|
+
|
|
|
|
+ if (shooting and not prev_shooting):
|
|
|
|
+ # just pressed
|
|
|
|
+ var shot = preload("res://shot.scn").instance()
|
|
|
|
+ #use the position3d as reference
|
|
|
|
+ shot.set_pos( get_node("shootfrom").get_global_pos() )
|
|
|
|
+ #put it two parents above, so it is not moved by us
|
|
|
|
+ get_node("../..").add_child(shot)
|
|
|
|
+ #play sound
|
|
|
|
+ get_node("sfx").play("shoot")
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ prev_shooting = shooting
|
|
|
|
+
|
|
|
|
+ #update points counter
|
|
|
|
+ get_node("../hud/score_points").set_text( str(get_node("/root/game_state").points) )
|
|
|
|
+
|
|
|
|
+func _ready():
|
|
|
|
+ # Initialization here
|
|
|
|
+ screen_size = get_viewport().get_rect().size
|
|
|
|
+ set_process(true)
|
|
|
|
+ pass
|
|
|
|
+
|
|
|
|
+var killed=false
|
|
|
|
+
|
|
|
|
+func _hit_something():
|
|
|
|
+ if (killed):
|
|
|
|
+ return
|
|
|
|
+ killed=true
|
|
|
|
+ get_node("anim").play("explode")
|
|
|
|
+ get_node("sfx").play("sound_explode")
|
|
|
|
+ get_node("../hud/game_over").show()
|
|
|
|
+ get_node("/root/game_state").game_over()
|
|
|
|
+ get_parent().stop()
|
|
|
|
+ set_process(false)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func _on_ship_body_enter( body ):
|
|
|
|
+ _hit_something()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func _on_ship_area_enter( area ):
|
|
|
|
+ if (area.has_method("is_enemy") and area.is_enemy()):
|
|
|
|
+ _hit_something()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func _on_back_to_menu_pressed():
|
|
|
|
+ get_tree().change_scene("res://main_menu.scn")
|
|
|
|
+ pass # replace with function body
|