Browse Source

:sparkles: during setup phase, the player can see, where enemies will spawn

Felix Bytow 10 months ago
parent
commit
cbc3ff5daf
4 changed files with 90 additions and 16 deletions
  1. 1 1
      assets/scenes/bot.gd
  2. 1 1
      assets/scenes/demon.gd
  3. 37 10
      screens/game.gd
  4. 51 4
      screens/game.tscn

+ 1 - 1
assets/scenes/bot.gd

@@ -28,8 +28,8 @@ func _physics_process(delta: float) -> void:
 
 func die():
 	var explosion = explosion_scene.instantiate()
-	explosion.global_position = global_position
 	add_sibling(explosion)
+	explosion.global_position = global_position
 	queue_free()
 
 func _on_area_entered(area: Area2D):

+ 1 - 1
assets/scenes/demon.gd

@@ -36,7 +36,7 @@ func _physics_process(_delta: float) -> void:
 		return
 	
 	var foe = vision.get_collider(0)
-	if foe == null || not (foe is Area2D):
+	if foe == null || not (foe is Area2D) || not foe.visible:
 		return
 	
 	var value = randf()

+ 37 - 10
screens/game.gd

@@ -18,10 +18,19 @@ class_name Game
 @onready var game_over_scene: PackedScene = load("res://assets/scenes/game_over.tscn")
 @onready var victory_scene: PackedScene = load("res://assets/scenes/victory.tscn")
 
+@onready var left_enemy_label: Label = $UI/Root/LeftEnemyLabel
+@onready var right_enemy_label: Label = $UI/Root/RightEnemyLabel
+@onready var top_enemy_label: Label = $UI/Root/TopEnemyLabel
+
 @onready var spawn_points: Array[Marker2D] = [
-	$EnemySpawns/EnemySpawn_1,
-	$EnemySpawns/EnemySpawn_2,
-	$EnemySpawns/EnemySpawn_3,
+	$EnemySpawns/EnemySpawn_Left,
+	$EnemySpawns/EnemySpawn_Right,
+	$EnemySpawns/EnemySpawn_Top,
+]
+@onready var enemy_labels: Array[Label] = [
+	$UI/Root/LeftEnemyLabel,
+	$UI/Root/RightEnemyLabel,
+	$UI/Root/TopEnemyLabel,
 ]
 
 enum Phase {
@@ -57,12 +66,23 @@ var waves_completed: int = 0:
 		waves_completed = new_value
 		wave_label.text = "WAVE: %d" % (new_value + 1)
 
+func update_enemy_labels() -> void:
+	for n in 3:
+		var enemies = spawn_points[n].get_child_count()
+		enemy_labels[n].text = str(enemies)
+
+func set_enemy_label_visible(value: bool) -> void:
+	for label in enemy_labels:
+		label.visible = value
+
 func _ready() -> void:
 	Game.reload_time = RELOAD_TIME # seconds
 	Game.max_ammo = 1 # shots
+	Game.base_accuracy = 0.33 # percent
 	waves_completed = 0
 	phase = Phase.PHASE_SETUP
 	overlay.visible = true
+	start_setup()
 	player_spawn.add_survivor()
 	transition.slide_out()
 	await transition.game_fully_visible
@@ -83,12 +103,13 @@ func go_to_main_menu() -> void:
 	tree.change_scene_to_packed(main_menu)
 	tree.paused = false
 
-func spawn_bot(spawn: Marker2D) -> void:
+func spawn_bot(spawn: Marker2D, index: int) -> void:
 	var bot: Bot = bot_scene.instantiate()
-	bot.global_position = spawn.global_position
+	bot.name = "Bot #%d" % (index + 1)
 	bot.speed += waves_completed
 	bot.visible = false
-	add_child(bot)
+	spawn.add_child(bot)
+	bot.position = Vector2.ZERO
 
 func get_foes() -> Array[Area2D]:
 	var foes: Array[Area2D] = []
@@ -145,11 +166,16 @@ func _on_base_area_entered(area: Area2D) -> void:
 	if area.is_in_group("foe") || area.is_in_group("foe_weapons"):
 		base_hit()
 
-func start_combat() -> void:
-	GlobalInput.dragging_disabled = true
+func start_setup() -> void:
 	for n in (waves_completed + 1):
 		var spawner = spawn_points.pick_random()
-		spawn_bot(spawner)
+		spawn_bot(spawner, n)
+	update_enemy_labels()
+	set_enemy_label_visible(true)
+
+func start_combat() -> void:
+	set_enemy_label_visible(false)
+	GlobalInput.dragging_disabled = true
 	spawn_timer.wait_time = lerpf(3.5, 0.5, minf(float(waves_completed)/20.0, 1.0))
 	spawn_timer.start()
 	combat_start_sound.play()
@@ -170,7 +196,7 @@ func end_combat() -> void:
 	ui_root.add_child(vs)
 	var loots: Array[String] = []
 	loots.assign(LOOTS)
-	if get_survivors().size() >= 9:
+	if get_survivors().size() >= 6: # this is, so the player has a reason to move survivors even later
 		loots.erase(LOOT_SURVIVOR)
 	loots.shuffle()
 	vs.set_loot_options(loots[0], loots[1], loots[2])
@@ -194,6 +220,7 @@ func end_combat() -> void:
 			LOOT_ACCURACY:
 				Game.base_accuracy += 0.1
 		self.reset_survivors()
+		self.start_setup()
 	)
 	GlobalInput.dragging_disabled = false
 

+ 51 - 4
screens/game.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=12 format=3 uid="uid://c483fkssc36s"]
+[gd_scene load_steps=13 format=3 uid="uid://c483fkssc36s"]
 
 [ext_resource type="Script" path="res://screens/game.gd" id="1_4dd0q"]
 [ext_resource type="Texture2D" uid="uid://ceelbowk0q0rl" path="res://assets/textures/room/Light_Overlay.png" id="2_px5xi"]
@@ -14,6 +14,11 @@
 blend_mode = 1
 light_mode = 1
 
+[sub_resource type="LabelSettings" id="LabelSettings_hn3kd"]
+font_size = 23
+outline_size = 3
+outline_color = Color(0, 0, 0, 1)
+
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_p2163"]
 size = Vector2(472, 288)
 
@@ -89,6 +94,48 @@ grow_vertical = 0
 theme_override_font_sizes/font_size = 34
 text = "NEXT PHASE"
 
+[node name="LeftEnemyLabel" type="Label" parent="UI/Root"]
+layout_mode = 1
+anchors_preset = 4
+anchor_top = 0.5
+anchor_bottom = 0.5
+offset_left = 24.0
+offset_top = 50.0
+offset_right = 70.0
+offset_bottom = 78.0
+grow_vertical = 2
+text = "9999"
+label_settings = SubResource("LabelSettings_hn3kd")
+horizontal_alignment = 1
+
+[node name="RightEnemyLabel" type="Label" parent="UI/Root"]
+layout_mode = 1
+anchors_preset = 4
+anchor_top = 0.5
+anchor_bottom = 0.5
+offset_left = 1206.0
+offset_top = 48.0
+offset_right = 1258.0
+offset_bottom = 80.0
+grow_vertical = 2
+text = "9999"
+label_settings = SubResource("LabelSettings_hn3kd")
+horizontal_alignment = 1
+
+[node name="TopEnemyLabel" type="Label" parent="UI/Root"]
+layout_mode = 1
+anchors_preset = 5
+anchor_left = 0.5
+anchor_right = 0.5
+offset_left = -26.0
+offset_top = 190.0
+offset_right = 26.0
+offset_bottom = 222.0
+grow_horizontal = 2
+text = "9999"
+label_settings = SubResource("LabelSettings_hn3kd")
+horizontal_alignment = 1
+
 [node name="Overlay" type="CanvasLayer" parent="."]
 layer = 10
 visible = false
@@ -107,13 +154,13 @@ position = Vector2(635, 572)
 
 [node name="EnemySpawns" type="Node2D" parent="."]
 
-[node name="EnemySpawn_1" type="Marker2D" parent="EnemySpawns" groups=["spawner"]]
+[node name="EnemySpawn_Left" type="Marker2D" parent="EnemySpawns" groups=["spawner"]]
 position = Vector2(48, 426)
 
-[node name="EnemySpawn_2" type="Marker2D" parent="EnemySpawns" groups=["spawner"]]
+[node name="EnemySpawn_Right" type="Marker2D" parent="EnemySpawns" groups=["spawner"]]
 position = Vector2(1234, 424)
 
-[node name="EnemySpawn_3" type="Marker2D" parent="EnemySpawns" groups=["spawner"]]
+[node name="EnemySpawn_Top" type="Marker2D" parent="EnemySpawns" groups=["spawner"]]
 position = Vector2(641, 207)
 
 [node name="SurvivorSpots" type="Node2D" parent="."]