added wave viewer which required adding determinism to wave generation

This commit is contained in:
2025-11-06 22:16:59 +11:00
parent 19b5589b27
commit 3cb37faf4b
38 changed files with 438 additions and 312 deletions

View File

@@ -18,7 +18,6 @@ spawn_power = 6
health = 120
penalty = 7
movement_speed = 1.0
spawn_cooldown = 1.0
common_group = 5
common_cost = 2
uncommon_group = 10

View File

@@ -3,6 +3,7 @@ extends CharacterBody3D
signal ready_state_changed(state: bool)
@export var wave_preview_scene: PackedScene
@export var hero_class: HeroClass
@export var camera: Camera3D
@export var gun_camera: Camera3D
@@ -184,6 +185,7 @@ func increment_selected() -> void:
if hand_selected_index >= hand.size:
hand_selected_index = 0
hud.hot_wheel.update_cassettes(get_wheel_cards())
hud.show_features(selected_card)
func decrement_selected() -> void:
@@ -194,6 +196,7 @@ func decrement_selected() -> void:
if hand_selected_index < 0:
hand_selected_index = hand.size - 1
hud.hot_wheel.update_cassettes(get_wheel_cards())
hud.show_features(selected_card)
func get_wheel_cards() -> Array[Card]:
@@ -243,6 +246,12 @@ func _unhandled_input(event: InputEvent) -> void:
menu.quit_to_main_menu_pressed.connect(game_manager.scene_switch_main_menu)
menu.closed.connect(unpause)
hud.add_child(menu)
if event.is_action_pressed("Show Wave Preview"):
var wave_preview: WaveViewer = wave_preview_scene.instantiate() as WaveViewer
pause()
hud.add_child(wave_preview)
wave_preview.set_waves(game_manager.pre_generate_waves(), game_manager.wave)
wave_preview.closed.connect(unpause)
func ready_self() -> void:

View File

@@ -1,8 +1,9 @@
[gd_scene load_steps=67 format=3 uid="uid://dxgxbtf68lcv5"]
[gd_scene load_steps=68 format=3 uid="uid://dxgxbtf68lcv5"]
[ext_resource type="Script" uid="uid://1fqpoegbdm6n" path="res://PCs/hero.gd" id="1_pihpe"]
[ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="2_dbyo0"]
[ext_resource type="PackedScene" uid="uid://ri8r03wqy80t" path="res://Scenes/8_direction_sprite.tscn" id="2_ib0t5"]
[ext_resource type="PackedScene" uid="uid://ct6gic4shy5qw" path="res://wave_viewer.tscn" id="2_o55s8"]
[ext_resource type="PackedScene" uid="uid://buvgdem68wtev" path="res://UI/Menus/PauseMenu/pause_menu.tscn" id="3_avnsx"]
[ext_resource type="PackedScene" uid="uid://n8ab1cy7ordc" path="res://card_model/3d_card.tscn" id="4_2mqvj"]
[ext_resource type="Script" uid="uid://cij76at0nbs1v" path="res://PCs/view_movement.gd" id="4_mhexa"]
@@ -118,6 +119,7 @@ stream_0/stream = ExtResource("37_kv1mg")
collision_layer = 2
collision_mask = 37
script = ExtResource("1_pihpe")
wave_preview_scene = ExtResource("2_o55s8")
hero_class = ExtResource("2_dbyo0")
camera = NodePath("ViewMovement/Head")
gun_camera = NodePath("FirstPersonViewport/Head2")

View File

@@ -126,7 +126,6 @@ func _process(_delta: float) -> void:
func show_features(cassette: Card) -> void:
print("shown features")
for child: Node in feature_preview.get_children():
child.queue_free()
var cols: int = max(cassette.tower_stats.features.size(), cassette.weapon_stats.features.size())

View File

@@ -10,7 +10,7 @@ random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("6_6nu57")
[node name="singleplayer_lobby" type="Control" node_paths=PackedStringArray("chatbox", "audio_player")]
[node name="singleplayer_lobby" type="Control" node_paths=PackedStringArray("audio_player")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -20,18 +20,8 @@ grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_nd17k")
character_select_screen = ExtResource("6_ltm04")
chatbox = NodePath("Chatbox")
audio_player = NodePath("AudioStreamPlayer")
[node name="Chatbox" parent="." instance=ExtResource("3_l8xy3")]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.02
anchor_top = 0.65
anchor_right = 0.4
anchor_bottom = 0.98
grow_horizontal = 1
grow_vertical = 1
chatbox_scene = ExtResource("3_l8xy3")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = SubResource("AudioStreamRandomizer_g5har")

View File

@@ -29,7 +29,7 @@ func _on_static_body_3d_button_interacted(_value: int, callback: Hero) -> void:
func output(cards_to_remove: Array[Card], cards_to_add: Array[Card], amount_spent: int) -> void:
for card: Card in cards_to_remove:
reply_player.hand.contents.erase(card)
reply_player.check_removal()
reply_player.hud.hot_wheel.update_cassettes(reply_player.get_wheel_cards())
for card: Card in cards_to_add:
reply_player.add_card(card)
reply_player.currency -= amount_spent

View File

@@ -16,7 +16,7 @@ signal switch_to_main_menu
var root_scene: Node
var level_scene: PackedScene = load("res://Worlds/GreenPlanet/Levels/Bridge/bridge.tscn")
var player_scene: PackedScene = load("res://PCs/hero.tscn")
var game_end_scene: PackedScene = load("res://Scenes/Menus/GameEndScreen/game_end_screen.tscn")
var game_end_scene: PackedScene = load("res://UI/Menus/GameEndScreen/game_end_screen.tscn")
var connected_players_nodes: Dictionary = {}
var game_active: bool = false
var gamemode: GameMode = null
@@ -157,11 +157,37 @@ func spawn_enemy_wave() -> void:
wave_started.emit()
func pre_generate_waves() -> Array[Wave]:
var wave_list: Array[Wave] = []
for i: int in range(wave, wave_limit + 1):
var spawn_power: int = WaveManager.calculate_spawn_power(i, connected_players_nodes.size())
var generated_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool)
wave_list.append(generated_wave)
return wave_list
func set_wave_to_spawners(wave_thing: Wave, wave_number: int) -> void:
var spawners: Array[EnemySpawner] = level.enemy_spawns
var ground_spawners: Array[EnemySpawner] = []
var air_spawners: Array[EnemySpawner] = []
for spawner: EnemySpawner in spawners:
if spawner.type == Data.EnemyType.LAND:
ground_spawners.append(spawner)
else:
air_spawners.append(spawner)
for card: EnemyCard in wave_thing.enemy_groups:
if card.enemy.target_type == Data.EnemyType.LAND:
ground_spawners[NoiseRandom.randi_in_range(wave_number, 0, ground_spawners.size() - 1)].add_card(card)
else:
air_spawners[NoiseRandom.randi_in_range(wave_number, 0, air_spawners.size() - 1)].add_card(card)
func set_upcoming_wave() -> void:
if is_multiplayer_authority():
var spawn_power: int = WaveManager.calculate_spawn_power(wave, connected_players_nodes.size())
#var new_wave: Dictionary = WaveManager.generate_wave(spawn_power, level.enemy_pool)
var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns)
var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool)
set_wave_to_spawners(new_wave, wave)
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
#networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 70.0))

View File

@@ -2,10 +2,9 @@ class_name Lobby
extends Control
@export var character_select_screen: PackedScene
#@export var scoreboard: Scoreboard
@export var chatbox: Chatbox
#@export var ready_button: Button
@export var audio_player: AudioStreamPlayer
@export var chatbox_scene: PackedScene
var game_manager: GameManager
var gamemode: GameMode = null
@@ -14,19 +13,19 @@ var connected_players_profiles: Dictionary = {}
var enet_peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
func setup_the_ui() -> void:
#scoreboard.unready_all_players()
#scoreboard.set_visible(true)
loadout_editor.set_visible(true)
chatbox = chatbox_scene.instantiate()
game_manager.UILayer.add_child(chatbox)
chatbox.set_visible(true)
chatbox.game_manager = game_manager
#ready_button.set_visible(true)
chatbox.anchor_bottom = 0.98
chatbox.anchor_left = 0.02
chatbox.anchor_top = 0.7
chatbox.anchor_right = 0.4
func start_game() -> void:
game_manager.setup()
#scoreboard.set_visible(false)
loadout_editor.queue_free()
#ready_button.set_visible(false)
game_manager.connected_player_profiles = connected_players_profiles
game_manager.start()

View File

@@ -12,7 +12,7 @@ static func set_seed(value: int) -> void:
noise.fractal_gain = 0.1
noise.seed = value
## output_end is inclusive
static func randi_in_range(sample: float, output_start: int, output_end: int) -> int:
return floori(remap(noise.get_noise_1d(sample), -1.0, 1.0, float(output_start), float(output_end + 1)))

View File

@@ -17,4 +17,3 @@ func setup_game() -> void:
Data.player_profile.display_name_changed.connect(chatbox.change_username)
loadout_editor.hero_selected.connect(Data.player_profile.set_preferred_class)
connected_players_profiles[1] = Data.player_profile
setup_the_ui()

View File

@@ -25,17 +25,16 @@ static func calculate_pot(wave_number: int, number_of_players: int) -> int:
## Uses a spawn power budget to "buy" cards of enemies at random selection from
## the given spawn pool, returns the resulting wave but also assigns the cards
## among the given set of enemy spawners
static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: Array[EnemySpawner]) -> Wave:
static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave:
var wave: Wave = Wave.new()
var points: int = int(spawn_power / 10.0)
#print("Generating wave with " + str(points) + " points to spend")
while points > 0:
var new_card: EnemyCard = EnemyCard.new()
#First, choose an enemy at random
#TODO: Use seeded random
new_card.enemy = spawn_pool.pick_random()
new_card.enemy = spawn_pool[NoiseRandom.randi_in_range(spawn_power, 0, spawn_pool.size() - 1)]
#Next, we have to figure out if we can actually buy that enemy
#and, if not, then we have to pick a different enemy, repeat until
@@ -71,7 +70,7 @@ static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners:
#Now that we know which rarities we could afford, lets just choose a
#random one
var chosen_rarity: int = randi_range(0, highest_rarity)
var chosen_rarity: int = NoiseRandom.randi_in_range(spawn_power, 0, highest_rarity)
new_card.rarity = chosen_rarity as Data.Rarity
#Add that new enemy to the wave and spend the points!
@@ -86,18 +85,4 @@ static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners:
points -= new_card.enemy.epic_cost
elif chosen_rarity == Data.Rarity.LEGENDARY:
points -= new_card.enemy.legendary_cost
var ground_spawners: Array[EnemySpawner] = []
var air_spawners: Array[EnemySpawner] = []
for spawner: EnemySpawner in spawners:
if spawner.type == Data.EnemyType.LAND:
ground_spawners.append(spawner)
else:
air_spawners.append(spawner)
for card: EnemyCard in wave.enemy_groups:
if card.enemy.target_type == Data.EnemyType.LAND:
#TODO: make this use determinisic noise rng
ground_spawners.pick_random().add_card(card)
else:
air_spawners.pick_random().add_card(card)
return wave

View File

@@ -1,20 +1,27 @@
class_name EnemyBox
extends HBoxContainer
class_name EnemyRow
extends VBoxContainer
@export var wave_label: Label
@export var enemy_hbox: HBoxContainer
func set_wave(wave: int) -> void:
$WaveLabel.text = tr("LABEL_WAVE").format({Wave_Number = str(wave)})
wave_label.text = tr("LABEL_WAVE").format({Wave_Number = str(wave)})
func add_enemy_tag(enemy: Enemy, num: int) -> void:
for x: int in num:
var enemy_tex: TextureRect = TextureRect.new()
enemy_tex.texture = enemy.sprite
enemy_tex.custom_minimum_size = Vector2(80, 80)
add_child(enemy_tex)
#var name_label: Label = Label.new()
#name_label.text = enemy.title
#var num_label: Label = Label.new()
#num_label.text = str(num)
#add_child(name_label)
#add_child(num_label)
var container: MarginContainer = MarginContainer.new()
enemy_hbox.add_child(container)
var enemy_tex: TextureRect = TextureRect.new()
enemy_tex.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
enemy_tex.texture = enemy.icon
enemy_tex.custom_minimum_size = Vector2(32, 32)
enemy_tex.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
container.add_child(enemy_tex)
var amount_label: Label = Label.new()
amount_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
amount_label.size_flags_vertical = Control.SIZE_EXPAND_FILL
amount_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT
amount_label.vertical_alignment = VERTICAL_ALIGNMENT_BOTTOM
amount_label.text = str(num)
container.add_child(amount_label)

View File

@@ -2,9 +2,19 @@
[ext_resource type="Script" uid="uid://b0h5oewxd48lv" path="res://UI/Menus/GameEndScreen/enemy_row.gd" id="1_th4b3"]
[node name="EnemyRow" type="HBoxContainer"]
[node name="EnemyRow" type="VBoxContainer" node_paths=PackedStringArray("wave_label", "enemy_hbox")]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_th4b3")
wave_label = NodePath("WaveLabel")
enemy_hbox = NodePath("Enemies")
[node name="WaveLabel" type="Label" parent="."]
layout_mode = 2
text = "LABEL_WAVE"
[node name="Enemies" type="HBoxContainer" parent="."]
layout_mode = 2

View File

@@ -23,7 +23,7 @@ func _ready() -> void:
func set_wave() -> void:
for wave_key: int in game_manager.stats.enemies_undefeated:
var spawned_box: EnemyBox = box.instantiate() as EnemyBox
var spawned_box: EnemyRow = box.instantiate() as EnemyRow
undefeated_enemies.add_child(spawned_box)
spawned_box.set_wave(wave_key)
for enemy_key: Enemy in game_manager.stats.enemies_undefeated[wave_key]:

View File

@@ -10,13 +10,11 @@ streams_count = 1
stream_0/stream = ExtResource("3_ro1yg")
[node name="GameEndScreen" type="PanelContainer" node_paths=PackedStringArray("outcome_label", "winrate_label", "total_games_label", "total_wins_label", "total_losses_label", "undefeated_enemies")]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 150.0
offset_top = 100.0
offset_right = -150.0
offset_bottom = -100.0
anchors_preset = -1
anchor_left = 0.05
anchor_top = 0.05
anchor_right = 0.95
anchor_bottom = 0.95
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_oa7nq")
@@ -26,14 +24,13 @@ winrate_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer/WinRa
total_games_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer2/WinRateLabel3")
total_wins_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer3/WinRateLabel4")
total_losses_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer4/WinRateLabel5")
undefeated_enemies = NodePath("VBoxContainer/UndefeatedEnemies")
undefeated_enemies = NodePath("VBoxContainer/ScrollContainer/UndefeatedEnemies")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2
[node name="Labels" type="VBoxContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
alignment = 1
[node name="OutcomeLabel" type="Label" parent="VBoxContainer/Labels"]
@@ -114,7 +111,11 @@ text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="UndefeatedEnemies" type="VBoxContainer" parent="VBoxContainer"]
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="UndefeatedEnemies" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"]
layout_mode = 2
size_flags_vertical = 3

View File

@@ -7,9 +7,17 @@ extends Control
const CELL_HEALTH: int = 9
var fading_enabled: bool = true
var health: int = 144
var current_cell_health: int = CELL_HEALTH
var fade_tween: Tween
var cell_tweens: Array[Tween] = []
func _ready() -> void:
for x: int in cells.size():
cell_tweens.append(null)
fade_timer.start()
func take_damage(damage: int) -> void:
@@ -24,6 +32,8 @@ func take_damage(damage: int) -> void:
current_cell_health -= damage_to_deal_with
var cell_level: int = health % 9
if remaining_damage > 0: ## This cell should be empty because the damage overran the cell
if cell_tweens[current_cell - 1]:
cell_tweens[current_cell - 1].kill()
cell_level = 3
current_cell_health = CELL_HEALTH
change_cell_color(current_cell - 1, cell_level)
@@ -39,24 +49,29 @@ func take_damage(damage: int) -> void:
else: ## This cell should be full health
cell_level = 0
hit_glow.texture.region.position.x = 66.0 * (16 - current_cell)
var tween: Tween = create_tween()
tween.tween_callback(func() -> void: hit_glow.visible = true)
tween.tween_interval(0.07)
tween.tween_callback(func() -> void: hit_glow.visible = false)
tween.tween_interval(0.07)
tween.tween_callback(func() -> void: hit_glow.visible = true)
tween.tween_callback(change_cell_color.bind(current_cell - 1, cell_level))
tween.tween_interval(0.07)
tween.tween_callback(func() -> void: hit_glow.visible = false)
if cell_tweens[current_cell - 1]:
cell_tweens[current_cell - 1].kill()
cell_tweens[current_cell - 1] = create_tween()
cell_tweens[current_cell - 1].tween_callback(func() -> void: hit_glow.visible = true)
cell_tweens[current_cell - 1].tween_interval(0.07)
cell_tweens[current_cell - 1].tween_callback(func() -> void: hit_glow.visible = false)
cell_tweens[current_cell - 1].tween_interval(0.07)
cell_tweens[current_cell - 1].tween_callback(func() -> void: hit_glow.visible = true)
cell_tweens[current_cell - 1].tween_callback(change_cell_color.bind(current_cell - 1, cell_level))
cell_tweens[current_cell - 1].tween_interval(0.07)
cell_tweens[current_cell - 1].tween_callback(func() -> void: hit_glow.visible = false)
fade_timer.start()
func change_cell_color(cell: int, color: int) -> void:
cells[15 - cell].texture.region.position.x = 66.0 * color
var cell_to_change: int = 15 - cell
if cell_to_change >= 0 and cell_to_change < cells.size():
cells[15 - cell].texture.region.position.x = 66.0 * color
func fade_out() -> void:
if fade_tween:
fade_tween.kill()
fade_tween = create_tween()
fade_tween.tween_property(self, "modulate", Color8(255, 255, 255, 0), 1.0)
if fading_enabled:
fade_tween = create_tween()
fade_tween.tween_property(self, "modulate", Color8(255, 255, 255, 0), 1.0)

View File

@@ -74,7 +74,6 @@ atlas = ExtResource("4_yanml")
region = Rect2(0, 0, 66, 66)
[node name="ShieldUI" type="Control" node_paths=PackedStringArray("cells", "hit_glow", "fade_timer")]
modulate = Color(1, 1, 1, 0)
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_aa64g")

View File

@@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://c1xm8bkvho3vl"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_466t2"]
[resource]
atlas = ExtResource("1_466t2")
region = Rect2(79, 1, 8, 8)

View File

@@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cuwhoitu6ybba"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_74qo4"]
[resource]
atlas = ExtResource("1_74qo4")
region = Rect2(62, 1, 8, 8)

View File

@@ -0,0 +1,15 @@
[gd_resource type="StyleBoxTexture" load_steps=3 format=3 uid="uid://duopp63rij323"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_73g4w"]
[sub_resource type="AtlasTexture" id="AtlasTexture_okcqu"]
atlas = ExtResource("1_73g4w")
region = Rect2(62, 10, 8, 8)
[resource]
texture = SubResource("AtlasTexture_okcqu")
texture_margin_left = 2.0
texture_margin_top = 4.0
texture_margin_right = 2.0
texture_margin_bottom = 4.0
region_rect = Rect2(0, 0, 8, 8)

View File

@@ -0,0 +1,15 @@
[gd_resource type="StyleBoxTexture" load_steps=3 format=3 uid="uid://dlnw55uearhrg"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_xum1s"]
[sub_resource type="AtlasTexture" id="AtlasTexture_noue1"]
atlas = ExtResource("1_xum1s")
region = Rect2(62, 1, 8, 8)
[resource]
texture = SubResource("AtlasTexture_noue1")
texture_margin_left = 2.0
texture_margin_right = 2.0
expand_margin_left = 2.0
expand_margin_right = 2.0
region_rect = Rect2(0, 0, 8, 8)

View File

@@ -0,0 +1,14 @@
[gd_resource type="StyleBoxTexture" load_steps=3 format=3 uid="uid://co6ouoi7ieawj"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_slo62"]
[sub_resource type="AtlasTexture" id="AtlasTexture_xobyj"]
atlas = ExtResource("1_slo62")
region = Rect2(10, 10, 9, 9)
[resource]
texture = SubResource("AtlasTexture_xobyj")
texture_margin_left = 3.0
texture_margin_top = 3.0
texture_margin_right = 3.0
texture_margin_bottom = 3.0

View File

@@ -1,4 +1,4 @@
[gd_resource type="Theme" load_steps=36 format=3 uid="uid://jn4qqx5hxc5i"]
[gd_resource type="Theme" load_steps=42 format=3 uid="uid://jn4qqx5hxc5i"]
[ext_resource type="StyleBox" uid="uid://doxcjij1w2ot7" path="res://UI/Themes/Scale1/button_disabled.tres" id="1_ts3pc"]
[ext_resource type="StyleBox" uid="uid://buu2yn08s4wc7" path="res://UI/Themes/Scale1/button_focus.tres" id="1_vnhdr"]
@@ -10,9 +10,16 @@
[ext_resource type="StyleBox" uid="uid://bfuea1sjymo8g" path="res://UI/Themes/Scale1/pane_style_box.tres" id="6_w151p"]
[ext_resource type="StyleBox" uid="uid://jnnnhb3i2265" path="res://UI/Themes/Scale1/switch_side_b_style_box.tres" id="7_w8nmj"]
[ext_resource type="StyleBox" uid="uid://cm3wsvk3woory" path="res://UI/Themes/Scale1/switch_side_a_style_box.tres" id="8_8j1wx"]
[ext_resource type="StyleBox" uid="uid://dlnw55uearhrg" path="res://UI/Themes/Scale1/h_scroll_grabber.tres" id="8_b5n6m"]
[ext_resource type="StyleBox" uid="uid://bss3dp7k18rx0" path="res://UI/Themes/Scale1/grabber_area.tres" id="8_o6p3e"]
[ext_resource type="Texture2D" uid="uid://cuwhoitu6ybba" path="res://UI/Themes/Scale1/grabber_tex.tres" id="8_t2hcr"]
[ext_resource type="Texture2D" uid="uid://c1xm8bkvho3vl" path="res://UI/Themes/Scale1/grabber_disabled_tex.tres" id="9_n5i54"]
[ext_resource type="StyleBox" uid="uid://bpowvv8e13flg" path="res://UI/Themes/Scale1/slider.tres" id="9_w151p"]
[ext_resource type="StyleBox" uid="uid://8s0fgx46n145" path="res://UI/Themes/Scale1/scroll_grabber.tres" id="13_w151p"]
[ext_resource type="StyleBox" uid="uid://duopp63rij323" path="res://UI/Themes/Scale1/h_scroll_bar.tres" id="9_xqncf"]
[ext_resource type="Texture2D" uid="uid://d3bbst30pgfgy" path="res://UI/Themes/Scale1/slider_tick_tex.tres" id="10_08ul3"]
[ext_resource type="StyleBox" uid="uid://co6ouoi7ieawj" path="res://UI/Themes/Scale1/popup_item_hover.tres" id="16_xqncf"]
[ext_resource type="StyleBox" uid="uid://8s0fgx46n145" path="res://UI/Themes/Scale1/v_scroll_grabber.tres" id="18_nis8m"]
[ext_resource type="StyleBox" uid="uid://c4cljq7yl78eg" path="res://UI/Themes/Scale1/v_scroll_bar.tres" id="19_aggbr"]
[sub_resource type="AtlasTexture" id="AtlasTexture_845oj"]
atlas = ExtResource("6_43i8g")
@@ -26,27 +33,35 @@ region = Rect2(46, 1, 15, 8)
base_font = ExtResource("5_o6p3e")
baseline_offset = 0.15
[sub_resource type="AtlasTexture" id="AtlasTexture_w8nmj"]
atlas = ExtResource("6_43i8g")
region = Rect2(62, 1, 8, 8)
[sub_resource type="AtlasTexture" id="AtlasTexture_t2hcr"]
atlas = ExtResource("6_43i8g")
region = Rect2(79, 1, 8, 8)
[sub_resource type="AtlasTexture" id="AtlasTexture_8j1wx"]
atlas = ExtResource("6_43i8g")
region = Rect2(62, 1, 8, 8)
[sub_resource type="AtlasTexture" id="AtlasTexture_w151p"]
atlas = ExtResource("6_43i8g")
region = Rect2(75, 4, 2, 2)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_t2hcr"]
[sub_resource type="AtlasTexture" id="AtlasTexture_noue1"]
atlas = ExtResource("6_43i8g")
region = Rect2(98, 4, 8, 5)
[sub_resource type="FontVariation" id="FontVariation_inyly"]
base_font = ExtResource("5_o6p3e")
[sub_resource type="AtlasTexture" id="AtlasTexture_k1p2l"]
atlas = ExtResource("6_43i8g")
region = Rect2(62, 1, 8, 8)
[sub_resource type="AtlasTexture" id="AtlasTexture_qa24s"]
atlas = ExtResource("6_43i8g")
region = Rect2(62, 10, 8, 8)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xqncf"]
content_margin_left = 2.0
content_margin_top = 2.0
content_margin_right = 2.0
content_margin_bottom = 2.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_nis8m"]
content_margin_left = 2.0
content_margin_top = 2.0
content_margin_right = 2.0
content_margin_bottom = 2.0
[sub_resource type="AtlasTexture" id="AtlasTexture_n5i54"]
atlas = ExtResource("6_43i8g")
region = Rect2(98, 4, 8, 5)
@@ -82,18 +97,6 @@ region = Rect2(89, 7, 8, 5)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ts3pc"]
content_margin_top = 2.0
[sub_resource type="AtlasTexture" id="AtlasTexture_okcqu"]
atlas = ExtResource("6_43i8g")
region = Rect2(62, 10, 8, 8)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_qa24s"]
texture = SubResource("AtlasTexture_okcqu")
texture_margin_left = 4.0
texture_margin_top = 2.0
texture_margin_right = 4.0
texture_margin_bottom = 2.0
region_rect = Rect2(0, 0, 8, 8)
[resource]
Button/colors/font_color = Color(0.85490197, 0.8784314, 0.91764706, 1)
Button/colors/font_disabled_color = Color(0.85882354, 0.6431373, 0.3882353, 1)
@@ -109,10 +112,14 @@ CheckButton/icons/unchecked = SubResource("AtlasTexture_o6p3e")
Control/constants/outline_size = 4
Control/font_sizes/font_size = 8
Control/fonts/font = SubResource("FontVariation_b02pe")
HSlider/icons/grabber = SubResource("AtlasTexture_w8nmj")
HSlider/icons/grabber_disabled = SubResource("AtlasTexture_t2hcr")
HSlider/icons/grabber_highlight = SubResource("AtlasTexture_8j1wx")
HSlider/icons/tick = SubResource("AtlasTexture_w151p")
HScrollBar/styles/grabber = ExtResource("8_b5n6m")
HScrollBar/styles/grabber_highlight = ExtResource("8_b5n6m")
HScrollBar/styles/grabber_pressed = ExtResource("8_b5n6m")
HScrollBar/styles/scroll = ExtResource("9_xqncf")
HSlider/icons/grabber = ExtResource("8_t2hcr")
HSlider/icons/grabber_disabled = ExtResource("9_n5i54")
HSlider/icons/grabber_highlight = ExtResource("8_t2hcr")
HSlider/icons/tick = ExtResource("10_08ul3")
HSlider/styles/grabber_area = ExtResource("8_o6p3e")
HSlider/styles/grabber_area_highlight = ExtResource("8_o6p3e")
HSlider/styles/slider = ExtResource("9_w151p")
@@ -121,13 +128,19 @@ Label/font_sizes/font_size = 8
Label/fonts/font = ExtResource("5_o6p3e")
LineEdit/styles/focus = ExtResource("1_vnhdr")
LineEdit/styles/normal = SubResource("StyleBoxEmpty_t2hcr")
OptionButton/icons/arrow = SubResource("AtlasTexture_noue1")
PanelContainer/styles/panel = ExtResource("6_w151p")
PopupMenu/constants/outline_size = 4
PopupMenu/font_sizes/font_size = 8
PopupMenu/fonts/font = SubResource("FontVariation_inyly")
PopupMenu/icons/radio_checked = SubResource("AtlasTexture_k1p2l")
PopupMenu/icons/radio_unchecked = SubResource("AtlasTexture_qa24s")
PopupMenu/styles/hover = ExtResource("16_xqncf")
PopupMenu/styles/panel = ExtResource("6_w151p")
RichTextLabel/font_sizes/normal_font_size = 8
RichTextLabel/fonts/normal_font = ExtResource("5_o6p3e")
RichTextLabel/styles/normal = SubResource("StyleBoxEmpty_xqncf")
ScrollContainer/styles/panel = SubResource("StyleBoxEmpty_nis8m")
SideCheckButton/base_type = &"Button"
SideCheckButton/colors/font_color = Color(0.8392157, 0.8392157, 0.8392157, 1)
SideCheckButton/colors/font_hover_color = Color(1, 1, 1, 1)
@@ -155,10 +168,17 @@ TabContainer/styles/tab_focus = ExtResource("1_vnhdr")
TabContainer/styles/tab_hovered = ExtResource("2_ts3pc")
TabContainer/styles/tab_selected = ExtResource("4_845oj")
TabContainer/styles/tab_unselected = ExtResource("3_43i8g")
VScrollBar/styles/grabber = ExtResource("13_w151p")
VScrollBar/styles/grabber_highlight = ExtResource("13_w151p")
VScrollBar/styles/grabber_pressed = ExtResource("13_w151p")
VScrollBar/styles/scroll = SubResource("StyleBoxTexture_qa24s")
VScrollBar/styles/grabber = ExtResource("18_nis8m")
VScrollBar/styles/grabber_highlight = ExtResource("18_nis8m")
VScrollBar/styles/grabber_pressed = ExtResource("18_nis8m")
VScrollBar/styles/scroll = ExtResource("19_aggbr")
VSlider/icons/grabber = ExtResource("8_t2hcr")
VSlider/icons/grabber_disabled = ExtResource("9_n5i54")
VSlider/icons/grabber_highlight = ExtResource("8_t2hcr")
VSlider/icons/tick = ExtResource("10_08ul3")
VSlider/styles/grabber_area = ExtResource("8_o6p3e")
VSlider/styles/grabber_area_highlight = ExtResource("8_o6p3e")
VSlider/styles/slider = ExtResource("9_w151p")
VersionLabel/base_type = &"Label"
VersionLabel/colors/font_color = Color(0.85, 0.85, 0.85, 0.7)
VersionLabel/font_sizes/font_size = 8

View File

@@ -8,6 +8,7 @@ region = Rect2(75, 4, 2, 2)
[resource]
content_margin_top = 2.0
content_margin_right = 2.0
texture = SubResource("AtlasTexture_uj2su")
axis_stretch_horizontal = 1
axis_stretch_vertical = 1

View File

@@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://d3bbst30pgfgy"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_gfpkm"]
[resource]
atlas = ExtResource("1_gfpkm")
region = Rect2(75, 4, 2, 2)

View File

@@ -0,0 +1,15 @@
[gd_resource type="StyleBoxTexture" load_steps=3 format=3 uid="uid://c4cljq7yl78eg"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_qpij5"]
[sub_resource type="AtlasTexture" id="AtlasTexture_okcqu"]
atlas = ExtResource("1_qpij5")
region = Rect2(62, 10, 8, 8)
[resource]
texture = SubResource("AtlasTexture_okcqu")
texture_margin_left = 4.0
texture_margin_top = 2.0
texture_margin_right = 4.0
texture_margin_bottom = 2.0
region_rect = Rect2(0, 0, 8, 8)

View File

@@ -1,9 +1,9 @@
[gd_resource type="StyleBoxTexture" load_steps=3 format=3 uid="uid://8s0fgx46n145"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_pfcbc"]
[ext_resource type="Texture2D" uid="uid://b5h32okh8yu6f" path="res://ui_atlas.png" id="1_6syfe"]
[sub_resource type="AtlasTexture" id="AtlasTexture_noue1"]
atlas = ExtResource("1_pfcbc")
atlas = ExtResource("1_6syfe")
region = Rect2(62, 1, 8, 8)
[resource]

View File

@@ -24,7 +24,6 @@ text = "LABEL_CARD_DESCRIPTION"
[node name="DescriptionText" type="RichTextLabel" parent="."]
auto_translate_mode = 2
clip_contents = false
layout_mode = 2
size_flags_vertical = 3
bbcode_enabled = true

View File

@@ -187,9 +187,9 @@ domain_warp_enabled = true
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_r4es0"]
width = 1024
height = 1024
seamless = true
color_ramp = SubResource("Gradient_dj4cy")
noise = SubResource("FastNoiseLite_ttr7n")
color_ramp = SubResource("Gradient_dj4cy")
seamless = true
[sub_resource type="ShaderMaterial" id="ShaderMaterial_4gdda"]
shader = SubResource("Shader_6od8s")
@@ -230,6 +230,7 @@ fog_density = 0.0416
adjustment_contrast = 2.18
[sub_resource type="BoxShape3D" id="BoxShape3D_awjk1"]
size = Vector3(1, 1, 3)
[sub_resource type="BoxShape3D" id="BoxShape3D_134um"]
size = Vector3(70.0478, 1, 73.4615)
@@ -261,7 +262,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.63136, 4.35346, 7.28324)
curve = SubResource("Curve3D_3rdl2")
[node name="PathFollow3D" type="PathFollow3D" parent="CinemaCam/Path3D"]
transform = Transform3D(0.05423, 0.161068, 0.98545, -7.45055e-09, 0.986902, -0.161305, -0.998524, 0.00874761, 0.05352, 12.3765, 1.00006, -13.0874)
transform = Transform3D(0.054230012, 0.1610678, 0.98545, -7.4505473e-09, 0.98690206, -0.16130519, -0.998524, 0.008747612, 0.05351996, 12.3765, 1.00006, -13.0874)
loop = false
[node name="Camera3D" type="Camera3D" parent="CinemaCam/Path3D/PathFollow3D"]
@@ -274,7 +275,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.63136, 4.35346, 7.28324)
curve = SubResource("Curve3D_2yu5t")
[node name="PathFollow3D2" type="PathFollow3D" parent="CinemaCam/Path3D2"]
transform = Transform3D(-0.607018, -0.0329605, 0.793996, 0, 0.999137, 0.0414758, -0.794684, 0.0251768, -0.606492, 7.20375, 0.376301, -5.50257)
transform = Transform3D(-0.60701805, -0.03296049, 0.7939957, 0, 0.999137, 0.041475825, -0.79468393, 0.025176814, -0.6064923, 7.20375, 0.376301, -5.50257)
loop = false
[node name="Camera3D2" type="Camera3D" parent="CinemaCam/Path3D2/PathFollow3D2"]
@@ -286,7 +287,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.63136, 4.35346, 7.28324)
curve = SubResource("Curve3D_tuqlc")
[node name="PathFollow3D2" type="PathFollow3D" parent="CinemaCam/Path3D3"]
transform = Transform3D(-4.37112e-08, -0.0254899, -0.99965, 0, 0.999656, -0.0254898, 0.999996, -1.1142e-09, -4.36961e-08, 8.763, 5.707, -7.5)
transform = Transform3D(-4.3711214e-08, -0.02548992, -0.99965, 0, 0.999656, -0.025489768, 0.999996, -1.1141998e-09, -4.3696087e-08, 8.762999, 5.707, -7.5)
progress = 27.9321
loop = false
@@ -310,7 +311,7 @@ size = Vector3(1, 4, 3)
collision_mask = 4
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyGoal/Area3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.010131836)
shape = SubResource("BoxShape3D_awjk1")
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="EnemyGoal"]

View File

@@ -4,7 +4,6 @@ extends Node
signal loaded_scene
@export var scene: Node
@export var ui_viewport: SubViewport
@export var movies: Node
var game_manager: GameManager
@@ -18,8 +17,9 @@ var singleplayer_lobby_scene_path: String = "res://Scenes/Menus/singleplayer_lob
func _ready() -> void:
Engine.max_fps = 60
UILayer = CanvasLayer.new()
UILayer.name = "UILayer"
UILayer.layer = 2
ui_viewport.add_child.call_deferred(UILayer)
add_child.call_deferred(UILayer)
var version_label: Label = Label.new()
var version: String = ProjectSettings.get_setting("application/config/version")
version_label.text = "WORK IN PROGRESS | ALPHA - VERSION " + version + " | PLAYTEST"
@@ -58,6 +58,7 @@ func load_singleplayer() -> void:
await loaded_scene
var single_player_lobby: SinglePlayerLobby = scene.get_child(0) as SinglePlayerLobby
single_player_lobby.game_manager = game_manager
single_player_lobby.setup_the_ui()
single_player_lobby.setup_game()
@@ -81,6 +82,6 @@ func load_scene(scene_path: String) -> void:
if movies:
movies.queue_free()
movies = null
$CanvasLayer.visible = true
UILayer.visible = true
scene.add_child(new_scene.instantiate())
loaded_scene.emit()

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=3 uid="uid://d2k8y13qfvch0"]
[gd_scene load_steps=7 format=3 uid="uid://d2k8y13qfvch0"]
[ext_resource type="Script" uid="uid://cx1xj7esl03ui" path="res://main.gd" id="2_h2yge"]
[ext_resource type="Texture2D" uid="uid://6frn8lcwwehv" path="res://Assets/TextureAtlases/puppyfruit.png" id="2_lquwl"]
@@ -9,19 +9,15 @@
atlas = ExtResource("2_lquwl")
region = Rect2(0, 0, 256, 256)
[sub_resource type="ViewportTexture" id="ViewportTexture_1bvp3"]
viewport_path = NodePath("UI")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_272bh"]
shader = ExtResource("6_7mycd")
shader_parameter/color_depth = 5
shader_parameter/dithering = true
shader_parameter/resolution_scale = 1
[node name="Main" type="Node" node_paths=PackedStringArray("scene", "ui_viewport", "movies")]
[node name="Main" type="Node" node_paths=PackedStringArray("scene", "movies")]
script = ExtResource("2_h2yge")
scene = NodePath("Scene")
ui_viewport = NodePath("UI")
movies = NodePath("Movies")
metadata/_custom_type_script = "uid://cx1xj7esl03ui"
@@ -80,25 +76,10 @@ color = Color(0.192157, 0.415686, 0.223529, 1)
[node name="Scene" type="Node" parent="."]
[node name="UI" type="SubViewport" parent="."]
transparent_bg = true
size = Vector2i(320, 240)
[node name="CanvasLayer" type="CanvasLayer" parent="."]
[node name="PostProcessingLayer" type="CanvasLayer" parent="."]
layer = 3
[node name="TextureRect" type="TextureRect" parent="CanvasLayer"]
texture_filter = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = SubResource("ViewportTexture_1bvp3")
expand_mode = 1
[node name="ColorRect2" type="ColorRect" parent="CanvasLayer"]
[node name="ColorRect2" type="ColorRect" parent="PostProcessingLayer"]
material = SubResource("ShaderMaterial_272bh")
anchors_preset = 15
anchor_right = 1.0

View File

@@ -208,6 +208,11 @@ Pause={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":48,"key_label":0,"unicode":48,"location":0,"echo":false,"script":null)
]
}
"Show Wave Preview"={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
]
}
[internationalization]

29
shield_ui_test.gd Normal file
View File

@@ -0,0 +1,29 @@
extends Control
@export var shield: ShieldUI
@export var lives_bar: LivesBar
@export var damage_label: Label
var damage: int = 1
func _ready() -> void:
shield.fading_enabled = false
func increase_damage() -> void:
damage += 1
damage_label.text = str(damage)
func decrease_damage() -> void:
damage -= 1
if damage < 1:
damage = 1
damage_label.text = str(damage)
func hit() -> void:
shield.take_damage(damage)
for x: int in damage:
lives_bar.take_life()

1
shield_ui_test.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dhj7ck7ug6uoj

61
shield_ui_test.tscn Normal file
View File

@@ -0,0 +1,61 @@
[gd_scene load_steps=4 format=3 uid="uid://5kypijhwjhok"]
[ext_resource type="Script" uid="uid://dhj7ck7ug6uoj" path="res://shield_ui_test.gd" id="1_uywwg"]
[ext_resource type="PackedScene" uid="uid://cqslp83lf0ku0" path="res://UI/ShieldUI/shield_ui.tscn" id="2_iketu"]
[ext_resource type="PackedScene" uid="uid://24x18qxqhy0i" path="res://UI/lives_bar.tscn" id="3_eamca"]
[node name="Control" type="Control" node_paths=PackedStringArray("shield", "lives_bar", "damage_label")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_uywwg")
shield = NodePath("ShieldUI")
lives_bar = NodePath("LivesBar")
damage_label = NodePath("Controls/Label")
[node name="Controls" type="HBoxContainer" parent="."]
layout_mode = 0
offset_left = 251.0
offset_top = 13.0
offset_right = 311.00003
offset_bottom = 29.0
[node name="Label" type="Label" parent="Controls"]
layout_mode = 2
text = "1"
[node name="VBoxContainer" type="HBoxContainer" parent="Controls"]
layout_mode = 2
[node name="Button" type="Button" parent="Controls/VBoxContainer"]
layout_mode = 2
text = "<"
[node name="Button2" type="Button" parent="Controls/VBoxContainer"]
layout_mode = 2
text = ">"
[node name="Button" type="Button" parent="Controls"]
layout_mode = 2
text = "hit"
[node name="ShieldUI" parent="." instance=ExtResource("2_iketu")]
layout_mode = 0
offset_left = 130.0
offset_top = 31.0
offset_right = 130.0
offset_bottom = 31.0
[node name="LivesBar" parent="." instance=ExtResource("3_eamca")]
layout_mode = 1
offset_left = 69.0
offset_top = 115.0
offset_right = 69.0
offset_bottom = 115.0
[connection signal="pressed" from="Controls/VBoxContainer/Button" to="." method="decrease_damage"]
[connection signal="pressed" from="Controls/VBoxContainer/Button2" to="." method="increase_damage"]
[connection signal="pressed" from="Controls/Button" to="." method="hit"]

47
wave_viewer.gd Normal file
View File

@@ -0,0 +1,47 @@
class_name WaveViewer
extends Control
signal closed()
@export var wave_vbox: VBoxContainer
@export var enemy_row_scene: PackedScene
func set_waves(waves: Array[Wave], starting_wave_number: int) -> void:
var i: int = starting_wave_number
for wave: Wave in waves:
var enemy_row: EnemyRow = enemy_row_scene.instantiate() as EnemyRow
wave_vbox.add_child(enemy_row)
enemy_row.set_wave(i)
i += 1
var enemy_dict: Dictionary[Enemy, int] = {}
for group: EnemyCard in wave.enemy_groups:
if enemy_dict.has(group.enemy):
enemy_dict[group.enemy] += group_to_count(group)
else:
enemy_dict[group.enemy] = group_to_count(group)
for enemy: Enemy in enemy_dict.keys():
enemy_row.add_enemy_tag(enemy, enemy_dict[enemy])
func group_to_count(group: EnemyCard) -> int:
var count: int = 0
if group.rarity == Data.Rarity.COMMON:
count += group.enemy.common_group
elif group.rarity == Data.Rarity.UNCOMMON:
count += group.enemy.uncommon_group
elif group.rarity == Data.Rarity.RARE:
count += group.enemy.rare_group
elif group.rarity == Data.Rarity.EPIC:
count += group.enemy.epic_group
elif group.rarity == Data.Rarity.LEGENDARY:
count += group.enemy.legendary_group
return count
func _on_button_2_pressed() -> void:
closed.emit()
queue_free()

1
wave_viewer.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://ps6sgjd0b5qr

View File

@@ -1,6 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://ct6gic4shy5qw"]
[gd_scene load_steps=5 format=3 uid="uid://ct6gic4shy5qw"]
[ext_resource type="Texture2D" uid="uid://g00wwrlxxdc5" path="res://Assets/Textures/icon_eye_dog.png" id="1_0v4fq"]
[ext_resource type="Script" uid="uid://ps6sgjd0b5qr" path="res://wave_viewer.gd" id="1_0v4fq"]
[ext_resource type="PackedScene" uid="uid://b5hp43bm07b8a" path="res://UI/Menus/GameEndScreen/enemy_row.tscn" id="2_lbx3o"]
[ext_resource type="Texture2D" uid="uid://3ywtwfpuuknr" path="res://Assets/Textures/leapfrog.png" id="2_tptaq"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0v4fq"]
@@ -9,13 +10,16 @@ content_margin_top = 2.0
content_margin_right = 2.0
content_margin_bottom = 2.0
[node name="WaveViewer" type="Control"]
[node name="WaveViewer" type="Control" node_paths=PackedStringArray("wave_vbox")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_0v4fq")
wave_vbox = NodePath("PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/Waves")
enemy_row_scene = ExtResource("2_lbx3o")
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 1
@@ -32,7 +36,7 @@ layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
text = "Upcoming waves"
text = "TITLE_WAVE_VIEWER"
horizontal_alignment = 1
vertical_alignment = 1
@@ -45,154 +49,11 @@ layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer"]
layout_mode = 2
theme_override_constants/margin_left = 4
theme_override_constants/margin_top = 4
theme_override_constants/margin_right = 4
theme_override_constants/margin_bottom = 4
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer"]
[node name="Waves" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer"]
layout_mode = 2
text = "Wave 1"
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect2" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect3" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect4" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect5" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect6" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="VBoxContainer2" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2"]
layout_mode = 2
text = "Wave 2"
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect2" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect3" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect4" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect5" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect6" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer2/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="VBoxContainer3" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3"]
layout_mode = 2
text = "Wave 3"
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect2" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect3" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect4" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect5" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect6" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer3/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="VBoxContainer4" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4"]
layout_mode = 2
text = "Wave 1"
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect2" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect3" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect4" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect5" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="TextureRect6" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer4/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_0v4fq")
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
@@ -218,10 +79,8 @@ text = "this dawg is so big itll make your big meaty nuts fall off from how fuck
layout_mode = 2
alignment = 2
[node name="Button" type="Button" parent="PanelContainer/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "BUTTON_CANCEL"
[node name="Button2" type="Button" parent="PanelContainer/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "BUTTON_CONFIRM"
text = "BUTTON_CLOSE"
[connection signal="pressed" from="PanelContainer/VBoxContainer/HBoxContainer2/Button2" to="." method="_on_button_2_pressed"]