浏览代码

Add variable landed to know if a liner is on arena

A liner is on arena if a level is loaded, and is not moving in a level
transition nor is in the hub.
DricomDragon 5 年之前
父节点
当前提交
e625d40e85
共有 2 个文件被更改,包括 17 次插入7 次删除
  1. 5 2
      Game.gd
  2. 12 5
      Player.gd

+ 5 - 2
Game.gd

@@ -4,6 +4,7 @@ onready var cam = $MainCamera
 onready var start_timer = $StartTimer
 
 signal round_won
+signal arena_removed
 
 # Used to test a level in creation
 export (String) var levelToLoop
@@ -29,7 +30,7 @@ func _ready():
 
 	# Create players
 	var player
-	for k in 2:
+	for k in 3:
 		player = playerScene.instance()
 		player.grid = levelCurrentNode
 		player.turn_left_action = playerActionsLeft[k]
@@ -40,6 +41,7 @@ func _ready():
 		start_timer.connect("timeout", player, "_on_round_start")
 		player.connect("crash", self, "_on_player_crash")
 		self.connect("round_won", player, "_on_round_won")
+		self.connect("arena_removed", player, "_on_arena_removed")
 
 func load_level(name):
 	var fullName = "res://Levels/" + name + ".tscn"
@@ -58,6 +60,7 @@ func create_game():
 	if levelCurrentNode:
 		remove_child(levelCurrentNode)
 		levelCurrentNode.queue_free()
+		emit_signal("arena_removed")
 
 	# Create level node
 	if levelToLoop:
@@ -90,5 +93,5 @@ func create_game():
 	start_timer.start()
 
 func _on_player_crash():
-	if get_tree().get_nodes_in_group("living").size() <= 1:
+	if get_tree().get_nodes_in_group("running").size() <= 1:
 		emit_signal("round_won")

+ 12 - 5
Player.gd

@@ -10,7 +10,10 @@ signal crash
 # Misc
 const cell_size = 64
 const cell_half_size = 32
+
+# State
 var running = false
+var landed = false
 
 # Enum
 enum Direction {
@@ -75,18 +78,21 @@ func spawn(newGrid, newPosition, newOrientation):
 
 func _on_round_start():
 	assert(grid)
-	spring()
+	run()
 
 func _on_round_won():
-	if running:
-		stop()
+	stop()
+
+func _on_arena_removed():
+	grid = null
+	landed = false
 
 func _on_tween_completed(_o, key):
 	if (key == ":position"):
 		move()
 
 func _on_crash(body):
-	if running:
+	if landed:
 		stop()
 		# TODO : use enum for blocks
 		grid.set_cell(posix, posiy, 2)
@@ -172,7 +178,8 @@ func stop():
 		generate_wall()
 	running = false
 
-func spring():
+func run():
+	landed = true # TODO : land at game signal `land`
 	running = true
 	add_to_group("running")
 	move()