Переглянути джерело

Mark life level on bricks

DricomDragon 3 роки тому
батько
коміт
cd9dc318e0
3 змінених файлів з 52 додано та 7 видалено
  1. 5 1
      godot/scenes/main.tscn
  2. 6 6
      godot/scripts/Grid.gd
  3. 41 0
      godot/scripts/LifeContainer.gd

+ 5 - 1
godot/scenes/main.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=16 format=2]
+[gd_scene load_steps=17 format=2]
 
 [ext_resource path="res://image/launcher.png" type="Texture" id=1]
 [ext_resource path="res://image/brik.png" type="Texture" id=2]
@@ -9,6 +9,7 @@
 [ext_resource path="res://scripts/UI.gd" type="Script" id=7]
 [ext_resource path="res://scripts/BallCounterLabel.gd" type="Script" id=8]
 [ext_resource path="res://scripts/ScoreCounterLabel.gd" type="Script" id=9]
+[ext_resource path="res://scripts/LifeContainer.gd" type="Script" id=10]
 
 [sub_resource type="PhysicsMaterial" id=1]
 friction = 0.0
@@ -93,6 +94,9 @@ collision_mask = 9
 format = 1
 script = ExtResource( 6 )
 
+[node name="LifeContainer" type="Node2D" parent="Launcher/Grid"]
+script = ExtResource( 10 )
+
 [node name="Target" type="Sprite" parent="Launcher"]
 position = Vector2( 200, 400 )
 texture = ExtResource( 5 )

+ 6 - 6
godot/scripts/Grid.gd

@@ -13,12 +13,14 @@ enum State {
 	MOVING,
 }
 
+
+onready var life_container = $LifeContainer
+
+
 var current_state = State.DONE
 
 var current_row = 1
 
-var living_cells = {}
-
 
 func generate_and_move():
 	generate_row()
@@ -39,20 +41,18 @@ func generate_cell(x, y):
 
 func build_brick(x, y):
 	set_cell(x, y, Tile.BRICK)
-	living_cells[Vector2(x, y)] = current_row * current_row
+	life_container.spawn_brick(x, y, current_row * current_row)
 
 
 func damage_cell(tile_pos : Vector2):
 	var cell_id = get_cellv(tile_pos)
 	if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK:
-		living_cells[tile_pos] -= 1
 		emit_signal("kace_damaged")
-		if living_cells[tile_pos] <= 0:
+		if life_container.may_die_by_taking_this(tile_pos, 1):
 			break_cell(tile_pos)
 
 
 func break_cell(tile_pos):
-	living_cells.erase(tile_pos)
 	set_cellv(tile_pos, -1)
 	emit_signal("kace_broken")
 

+ 41 - 0
godot/scripts/LifeContainer.gd

@@ -0,0 +1,41 @@
+extends Node2D
+
+
+var living_cells = {}
+var default_font
+
+
+const print_offset = Vector2(1.0, 15.0)
+
+
+func spawn_brick(x, y, maximum_life):
+	living_cells[Vector2(x, y)] = maximum_life
+	update()
+
+
+func may_die_by_taking_this(pos, damage):
+	var has_died = false
+
+	if damage > 0 and living_cells.has(pos):
+		living_cells[pos] -= damage
+		update()
+		has_died = living_cells[pos] <= 0
+
+		if has_died:
+			living_cells.erase(pos)
+
+	return has_died
+
+
+func create_font():
+	var label = Label.new()
+	default_font = label.get_font("font")
+
+
+func _ready():
+	create_font()
+
+
+func _draw():
+	for p in living_cells:
+		draw_string(default_font, p * Vector2(40, 20) + print_offset, str(living_cells[p]), Color.red)