added some sound triggers and holes in the map
This commit is contained in:
@ -125,7 +125,8 @@ func disable_all_tower_frames():
|
||||
|
||||
func enable_non_path_tower_frames():
|
||||
for frame in tower_frames:
|
||||
frame.set_visible(true)
|
||||
if !astar.is_point_disabled(tower_frames.find(frame)):
|
||||
frame.set_visible(true)
|
||||
disable_path_tower_frames()
|
||||
|
||||
|
||||
|
@ -3,10 +3,14 @@ class_name ExplosiveProjectile
|
||||
|
||||
@export var explosion_range := 3.0
|
||||
|
||||
var exploded := false
|
||||
var sound_done := false
|
||||
var particles_done := false
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
super._process(delta)
|
||||
if time_alive >= lifetime:
|
||||
if !exploded and time_alive >= lifetime:
|
||||
explode()
|
||||
|
||||
|
||||
@ -15,13 +19,18 @@ func _on_body_entered(_body: Node) -> void:
|
||||
|
||||
|
||||
func explode():
|
||||
if is_multiplayer_authority():
|
||||
if is_multiplayer_authority() and !exploded:
|
||||
freeze = true
|
||||
exploded = true
|
||||
$CollisionShape3D.call_deferred("set_disabled", true)
|
||||
for enemy in get_tree().get_nodes_in_group("Enemies"):
|
||||
if global_position.distance_to(enemy.global_position) <= explosion_range:
|
||||
hit(enemy)
|
||||
networked_hit.rpc(get_tree().root.get_path_to(enemy))
|
||||
networked_kill.rpc()
|
||||
queue_free()
|
||||
$Sprite3D.set_visible(false)
|
||||
$GPUParticles3D.emitting = true
|
||||
$AudioStreamPlayer.play()
|
||||
|
||||
|
||||
func hit(target):
|
||||
@ -41,3 +50,22 @@ func hit(target):
|
||||
func networked_hit(target_node_path):
|
||||
var target = get_tree().root.get_node(target_node_path)
|
||||
hit(target)
|
||||
|
||||
|
||||
@rpc("reliable")
|
||||
func networked_kill():
|
||||
$Sprite3D.set_visible(false)
|
||||
$GPUParticles3D.emitting = true
|
||||
$AudioStreamPlayer.play()
|
||||
|
||||
|
||||
func _on_audio_stream_player_finished() -> void:
|
||||
sound_done = true
|
||||
if sound_done and particles_done:
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_gpu_particles_3d_finished() -> void:
|
||||
particles_done = true
|
||||
if sound_done and particles_done:
|
||||
queue_free()
|
||||
|
23
Scripts/Resources/player_audio_settings.gd
Normal file
23
Scripts/Resources/player_audio_settings.gd
Normal file
@ -0,0 +1,23 @@
|
||||
extends Resource
|
||||
class_name PlayerAudioSettings
|
||||
|
||||
const SAVE_PATH := "user://audio_settings.tres"
|
||||
|
||||
@export var master := 100.0
|
||||
@export var music := 100.0
|
||||
@export var sfx := 100.0
|
||||
|
||||
|
||||
func apply_audio_settings():
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear_to_db(master / 100.0))
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Music"), linear_to_db(music / 100.0))
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"), linear_to_db(sfx / 100.0))
|
||||
|
||||
|
||||
func save_profile_to_disk():
|
||||
ResourceSaver.save(self, SAVE_PATH)
|
||||
static func load_profile_from_disk() -> PlayerAudioSettings:
|
||||
if ResourceLoader.exists(SAVE_PATH):
|
||||
return ResourceLoader.load(SAVE_PATH)
|
||||
return PlayerAudioSettings.new()
|
||||
|
26
Scripts/Resources/save_stats.gd
Normal file
26
Scripts/Resources/save_stats.gd
Normal file
@ -0,0 +1,26 @@
|
||||
extends Resource
|
||||
class_name SaveStats
|
||||
|
||||
const SAVE_PATH := "user://save_stats.tres"
|
||||
|
||||
@export var wins: int
|
||||
@export var losses: int
|
||||
@export var twenty_game_history: Array[bool]
|
||||
|
||||
|
||||
func add_game_outcome(outcome: bool) -> void:
|
||||
if outcome:
|
||||
wins += 1
|
||||
else:
|
||||
losses += 1
|
||||
twenty_game_history.push_back(outcome)
|
||||
if twenty_game_history.size() > 20:
|
||||
twenty_game_history.pop_front()
|
||||
|
||||
|
||||
func save_profile_to_disk():
|
||||
ResourceSaver.save(self, SAVE_PATH)
|
||||
static func load_profile_from_disk() -> SaveStats:
|
||||
if ResourceLoader.exists(SAVE_PATH):
|
||||
return ResourceLoader.load(SAVE_PATH)
|
||||
return SaveStats.new()
|
@ -61,8 +61,9 @@ func hold_trigger():
|
||||
|
||||
|
||||
func release_trigger():
|
||||
if trigger_held:
|
||||
recharge_timer.start()
|
||||
trigger_held = false
|
||||
recharge_timer.start()
|
||||
|
||||
|
||||
func hold_second_trigger():
|
||||
|
@ -11,3 +11,7 @@ func set_popup(prompt_text, dismiss_text):
|
||||
func _on_button_pressed() -> void:
|
||||
completed.emit()
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
53
Scripts/audio_options.gd
Normal file
53
Scripts/audio_options.gd
Normal file
@ -0,0 +1,53 @@
|
||||
extends VBoxContainer
|
||||
|
||||
@export var master_input: SpinBox
|
||||
@export var master_slider: HSlider
|
||||
@export var music_input: SpinBox
|
||||
@export var music_slider: HSlider
|
||||
@export var sfx_input: SpinBox
|
||||
@export var sfx_slider: HSlider
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
master_input.value = Data.audio.master
|
||||
master_slider.value = Data.audio.master
|
||||
music_input.value = Data.audio.music
|
||||
music_slider.value = Data.audio.music
|
||||
sfx_input.value = Data.audio.sfx
|
||||
sfx_slider.value = Data.audio.sfx
|
||||
|
||||
|
||||
func _on_master_spin_box_value_changed(value: float) -> void:
|
||||
master_slider.value = value
|
||||
Data.audio.master = value
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear_to_db(value / 100.0))
|
||||
|
||||
|
||||
func _on_master_h_slider_value_changed(value: float) -> void:
|
||||
master_input.value = value
|
||||
Data.audio.master = value
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear_to_db(value / 100.0))
|
||||
|
||||
|
||||
func _on_music_spin_box_value_changed(value: float) -> void:
|
||||
music_slider.value = value
|
||||
Data.audio.music = value
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Music"), linear_to_db(value / 100.0))
|
||||
|
||||
|
||||
func _on_music_h_slider_value_changed(value: float) -> void:
|
||||
music_input.value = value
|
||||
Data.audio.music = value
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Music"), linear_to_db(value / 100.0))
|
||||
|
||||
|
||||
func _on_sfx_spin_box_value_changed(value: float) -> void:
|
||||
sfx_slider.value = value
|
||||
Data.audio.sfx = value
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"), linear_to_db(value / 100.0))
|
||||
|
||||
|
||||
func _on_sfx_h_slider_value_changed(value: float) -> void:
|
||||
sfx_input.value = value
|
||||
Data.audio.sfx = value
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"), linear_to_db(value / 100.0))
|
@ -7,6 +7,7 @@ var stats : Card
|
||||
@export var description : RichTextLabel
|
||||
@export var target_label : Label
|
||||
|
||||
|
||||
func set_card(value):
|
||||
stats = value
|
||||
title_text.text = stats.display_name
|
||||
|
@ -53,9 +53,11 @@ func retrieve_card(i):
|
||||
add_child(item)
|
||||
button_collider.disabled = false
|
||||
button_box.position = Vector3(0,0,0)
|
||||
$AudioStreamPlayer3D.play()
|
||||
|
||||
|
||||
func _on_static_body_3d_button_interacted(_value) -> void:
|
||||
button_collider.disabled = true
|
||||
button_box.position = Vector3(0,0,-0.2)
|
||||
$AudioStreamPlayer3D.play()
|
||||
randomize_cards()
|
||||
|
@ -5,8 +5,8 @@ signal completed(outcome)
|
||||
|
||||
func set_popup(prompt_text, confirm_text, cancel_text):
|
||||
$VBoxContainer/Label.text = prompt_text
|
||||
$VBoxContainer/HBoxContainer/MarginContainer/Confirm.text = confirm_text
|
||||
$VBoxContainer/HBoxContainer/MarginContainer2/Cancel.text = cancel_text
|
||||
$VBoxContainer/HBoxContainer/Confirm.text = confirm_text
|
||||
$VBoxContainer/HBoxContainer/Cancel.text = cancel_text
|
||||
|
||||
|
||||
func _on_confirm_pressed() -> void:
|
||||
@ -17,3 +17,7 @@ func _on_confirm_pressed() -> void:
|
||||
func _on_cancel_pressed() -> void:
|
||||
completed.emit(false)
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -1,13 +1,15 @@
|
||||
extends Node
|
||||
|
||||
var characters : Array[HeroClass]
|
||||
var cards : Array[Card]
|
||||
var enemies : Array[Enemy]
|
||||
var keymaps : Array[PlayerKeymap]
|
||||
var graphics : PlayerGraphicsSettings
|
||||
var preferences : PlayerPreferences
|
||||
var player_profile : PlayerProfile
|
||||
var player_keymap : PlayerKeymap
|
||||
var characters: Array[HeroClass]
|
||||
var cards: Array[Card]
|
||||
var enemies: Array[Enemy]
|
||||
var keymaps: Array[PlayerKeymap]
|
||||
var graphics: PlayerGraphicsSettings
|
||||
var audio: PlayerAudioSettings
|
||||
var preferences: PlayerPreferences
|
||||
var player_profile: PlayerProfile
|
||||
var player_keymap: PlayerKeymap
|
||||
var save_stats: SaveStats
|
||||
|
||||
var wall_cost := 1
|
||||
var printer_cost := 15
|
||||
@ -25,10 +27,13 @@ var rarity_weights = {
|
||||
func _ready() -> void:
|
||||
graphics = PlayerGraphicsSettings.load_profile_from_disk()
|
||||
graphics.apply_graphical_settings(get_viewport())
|
||||
audio = PlayerAudioSettings.load_profile_from_disk()
|
||||
audio.apply_audio_settings()
|
||||
player_profile = PlayerProfile.load_profile_from_disk()
|
||||
preferences = PlayerPreferences.load_profile_from_disk()
|
||||
player_keymap = PlayerKeymap.load_profile_from_disk()
|
||||
player_keymap.apply()
|
||||
save_stats = SaveStats.load_profile_from_disk()
|
||||
|
||||
characters.append(preload("res://PCs/Red/red.tres"))
|
||||
#characters.append(preload("res://PCs/Green/green.tres"))
|
||||
|
@ -127,7 +127,7 @@ func _process(delta: float) -> void:
|
||||
func spawn_tower_preview():
|
||||
delete_tower_preview()
|
||||
last_tower_base = ray_collider
|
||||
var card = inventory.selected_item
|
||||
var card = inventory.contents.keys()[hero.inventory_selected_index]
|
||||
last_card = card
|
||||
tower_preview = card.turret_scene.instantiate() as Tower
|
||||
tower_preview.stats = card.tower_stats
|
||||
@ -168,7 +168,10 @@ func put_card_in_tower_base(tower_base: TowerBase):
|
||||
if tower_base.has_card:
|
||||
tower_base.remove_card()
|
||||
else:
|
||||
tower_base.add_card(inventory.remove(), multiplayer.get_unique_id())
|
||||
var card = inventory.remove_at(hero.inventory_selected_index)
|
||||
if !inventory.contents.has(card):
|
||||
hero.decrement_selected()
|
||||
tower_base.add_card(card, multiplayer.get_unique_id())
|
||||
|
||||
|
||||
func set_progress_percent(value: float):
|
||||
|
@ -42,7 +42,7 @@ func parse_command(text : String, peer_id : int):
|
||||
var gift_name = text.substr(6) as String
|
||||
var gift = Data.cards[0]
|
||||
for x in Data.cards:
|
||||
if x.title == gift_name:
|
||||
if x.display_name == gift_name:
|
||||
gift = x
|
||||
connected_players_nodes[peer_id].inventory.add(gift)
|
||||
elif text.substr(1, 2) == "tr":
|
||||
@ -232,6 +232,9 @@ func start_game():
|
||||
objective_health = 120
|
||||
wave = 0
|
||||
level.a_star_graph_3d.make_grid()
|
||||
level.generate_obstacles()
|
||||
level.a_star_graph_3d.disable_all_tower_frames()
|
||||
level.a_star_graph_3d.enable_non_path_tower_frames()
|
||||
level.a_star_graph_3d.find_path()
|
||||
set_upcoming_wave()
|
||||
for peer_id in connected_players_nodes:
|
||||
@ -257,6 +260,8 @@ func lose_game():
|
||||
if game_active == false:
|
||||
return
|
||||
game_active = false
|
||||
Data.save_stats.add_game_outcome(false)
|
||||
Data.save_stats.save_profile_to_disk()
|
||||
var menu = lose_game_scene.instantiate()
|
||||
UILayer.add_child(menu)
|
||||
lost_game.emit()
|
||||
@ -269,6 +274,8 @@ func win_game():
|
||||
if game_active == false:
|
||||
return
|
||||
game_active = false
|
||||
Data.save_stats.add_game_outcome(true)
|
||||
Data.save_stats.save_profile_to_disk()
|
||||
var menu = won_game_scene.instantiate()
|
||||
UILayer.add_child(menu)
|
||||
won_game.emit()
|
||||
|
@ -5,18 +5,23 @@ signal item_added(item)
|
||||
signal item_removed(item)
|
||||
|
||||
@export var max_size := 0
|
||||
@export var contents : Array[Item] = []
|
||||
var selected_index := 0
|
||||
var selected_item : Item :
|
||||
var contents = {}
|
||||
var size : int :
|
||||
get:
|
||||
return contents[selected_index] if contents.size() > 0 else null
|
||||
var x = 0
|
||||
for key in contents:
|
||||
x += contents[key]
|
||||
return x
|
||||
set(_value):
|
||||
return
|
||||
|
||||
|
||||
func add(item : Item) -> bool:
|
||||
if item != null and contents.size() < max_size or max_size == 0:
|
||||
contents.append(item)
|
||||
if item != null and max_size == 0 or size < max_size:
|
||||
if contents.has(item):
|
||||
contents[item] += 1
|
||||
else:
|
||||
contents[item] = 1
|
||||
item_added.emit(item)
|
||||
networked_add.rpc(Data.cards.find(item))
|
||||
return true
|
||||
@ -24,50 +29,29 @@ func add(item : Item) -> bool:
|
||||
|
||||
|
||||
func remove_at(index : int) -> Item:
|
||||
if contents.size() <= 0:
|
||||
return null
|
||||
var item = contents[index]
|
||||
contents.remove_at(index)
|
||||
if selected_index >= contents.size() and selected_index > 0:
|
||||
selected_index -= 1
|
||||
var item = contents.keys()[index]
|
||||
contents[item] -= 1
|
||||
if contents[item] == 0:
|
||||
contents.erase(item)
|
||||
item_removed.emit(item)
|
||||
networked_remove_at.rpc(index)
|
||||
return item
|
||||
|
||||
|
||||
func remove() -> Item:
|
||||
return remove_at(selected_index)
|
||||
|
||||
|
||||
func increment_selected():
|
||||
if contents.size() > 0:
|
||||
selected_index += 1
|
||||
if selected_index >= contents.size():
|
||||
selected_index = 0
|
||||
networked_set_selected.rpc(selected_index)
|
||||
|
||||
|
||||
func decrement_selected():
|
||||
if contents.size() > 0:
|
||||
selected_index -= 1
|
||||
if selected_index < 0:
|
||||
selected_index = contents.size() - 1
|
||||
networked_set_selected.rpc(selected_index)
|
||||
|
||||
|
||||
@rpc("reliable", "any_peer")
|
||||
func networked_add(value):
|
||||
contents.append(Data.cards[value])
|
||||
item_added.emit(Data.cards[value])
|
||||
var item = Data.cards[value]
|
||||
if contents.has(item):
|
||||
contents[item] += 1
|
||||
else:
|
||||
contents[item] = 0
|
||||
item_added.emit(item)
|
||||
|
||||
|
||||
@rpc("reliable", "any_peer")
|
||||
func networked_remove_at(value):
|
||||
var item = contents[value]
|
||||
contents.remove_at(value)
|
||||
var item = contents.keys[value]
|
||||
contents[item] -= 1
|
||||
if contents[item] == 0:
|
||||
contents.erase(item)
|
||||
item_removed.emit(item)
|
||||
|
||||
|
||||
@rpc("reliable", "any_peer")
|
||||
func networked_set_selected(value):
|
||||
selected_index = value
|
||||
|
@ -1,14 +1,23 @@
|
||||
extends StaticBody3D
|
||||
class_name ItemCard
|
||||
|
||||
@export var card : Card
|
||||
@export var card: Card
|
||||
|
||||
|
||||
func pick_up() -> Card:
|
||||
queue_free()
|
||||
$CollisionShape3D.call_deferred("set_disabled", true)
|
||||
$model/CSGSphere3D.set_visible(false)
|
||||
$AudioStreamPlayer3D.play()
|
||||
networked_pick_up.rpc()
|
||||
return card
|
||||
|
||||
|
||||
@rpc func networked_pick_up():
|
||||
@rpc
|
||||
func networked_pick_up():
|
||||
$CollisionShape3D.call_deferred("set_disabled", true)
|
||||
$model/CSGSphere3D.set_visible(false)
|
||||
$AudioStreamPlayer3D.play()
|
||||
|
||||
|
||||
func _on_audio_stream_player_3d_finished() -> void:
|
||||
queue_free()
|
||||
|
8
Scripts/killbox.gd
Normal file
8
Scripts/killbox.gd
Normal file
@ -0,0 +1,8 @@
|
||||
extends Area3D
|
||||
class_name KillBox
|
||||
|
||||
@export var level: Level
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
body.position = level.player_spawns[0].global_position
|
@ -1,12 +1,39 @@
|
||||
extends GridMap
|
||||
class_name Level
|
||||
|
||||
@export var enemy_pool : Array[Enemy]
|
||||
@export var player_spawns : Array[Node3D] = []
|
||||
@export var enemy_spawns : Array[Node3D] = []
|
||||
@export var enemy_goals : Array[Node3D] = []
|
||||
@export var enemy_pool: Array[Enemy]
|
||||
@export var player_spawns: Array[Node3D]
|
||||
@export var enemy_spawns: Array[Node3D]
|
||||
@export var enemy_goals: Array[Node3D]
|
||||
@export var corpses: Node3D
|
||||
@export var a_star_graph_3d : AStarGraph3D
|
||||
@export var cinematic_cam : CinematicCamManager
|
||||
@export var printer : CardPrinter
|
||||
@export var shop : ShopStand
|
||||
@export var a_star_graph_3d: AStarGraph3D
|
||||
@export var cinematic_cam: CinematicCamManager
|
||||
@export var printer: CardPrinter
|
||||
@export var shop: ShopStand
|
||||
@export var obstacle_scenes: Array[PackedScene]
|
||||
|
||||
|
||||
func generate_obstacles():
|
||||
var obstacle_count = randi_range(0, 5)
|
||||
for index in obstacle_count:
|
||||
var x = randi_range(0, a_star_graph_3d.grid_size.x - 1)
|
||||
var y = randi_range(0, a_star_graph_3d.grid_size.y - 1)
|
||||
var point_id = int(x * a_star_graph_3d.grid_size.y + y)
|
||||
var chosen_obstacle = randi_range(0, obstacle_scenes.size() - 1)
|
||||
var obstacle = obstacle_scenes[chosen_obstacle].instantiate() as GridMap
|
||||
var orientations = [0, 90, 180, 270]
|
||||
var chosen_orientation = orientations.pick_random()
|
||||
obstacle.position = a_star_graph_3d.astar.get_point_position(point_id)
|
||||
obstacle.set_rotation_degrees(Vector3(0, chosen_orientation, 0))
|
||||
add_child(obstacle)
|
||||
for cell in obstacle.get_used_cells():
|
||||
var cell_pos = obstacle.to_global(obstacle.map_to_local(cell))
|
||||
var map_coord = Vector3i(round(cell_pos.x), 0, round(cell_pos.z))
|
||||
#print("cell_pos: " + str(cell_pos) + "cell.z" + str(cell_pos.z) + ", map_coord: " + str(map_coord))
|
||||
var closest_point = a_star_graph_3d.astar.get_closest_point(cell_pos, true)
|
||||
var closest_point_pos = a_star_graph_3d.astar.get_point_position(closest_point)
|
||||
if closest_point_pos.distance_to(Vector3(cell_pos.x, closest_point_pos.y, cell_pos.z)) <= 0.5:
|
||||
a_star_graph_3d.astar.set_point_disabled(closest_point)
|
||||
if get_cell_item(map_coord) == 1:
|
||||
set_cell_item(map_coord, INVALID_CELL_ITEM)
|
||||
obstacle.queue_free()
|
||||
|
@ -1,6 +1,16 @@
|
||||
extends Control
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var wins = float(Data.save_stats.twenty_game_history.count(true))
|
||||
var games = float(Data.save_stats.twenty_game_history.size())
|
||||
var winrate = int((wins / games) * 100.0)
|
||||
$Label2.text = "Your 20-game winrate is now: " + str(winrate) + "%!"
|
||||
$Label3.text = "Total games: " + str(Data.save_stats.wins + Data.save_stats.losses)
|
||||
$Label4.text = "Total wins: " + str(Data.save_stats.wins)
|
||||
$Label5.text = "Total losses: " + str(Data.save_stats.losses)
|
||||
|
||||
|
||||
func _on_quit_button_pressed() -> void:
|
||||
Game.scene_switch_main_menu()
|
||||
queue_free()
|
||||
@ -9,3 +19,7 @@ func _on_quit_button_pressed() -> void:
|
||||
func _on_restart_button_pressed() -> void:
|
||||
Game.restart_game()
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -22,9 +22,10 @@ func _ready() -> void:
|
||||
spawn.signal_for_when_enemy_spawns.connect(increase_enemy_count)
|
||||
spawn.spawn_wave(new_wave)
|
||||
|
||||
#these exist purely to make the enemies that spawn on the main menu happy
|
||||
func enemy_died(_some_arg):
|
||||
pass
|
||||
func damage_goal():
|
||||
func damage_goal(_some_arg1, _some_arg2):
|
||||
pass
|
||||
func increase_enemy_count():
|
||||
pass
|
||||
@ -65,3 +66,7 @@ func _on_options_button_pressed() -> void:
|
||||
|
||||
func _on_multiplayer_button_pressed() -> void:
|
||||
Game.scene_switch_to_multiplayer_lobby()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -125,3 +125,7 @@ func add_player(new_player_profile_dict):
|
||||
@rpc("any_peer", "reliable", "call_local")
|
||||
func networked_ready_player(peer_id):
|
||||
scoreboard.set_player_ready_state(peer_id, true)
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -15,6 +15,8 @@ func _on_confirm_pressed() -> void:
|
||||
graphics.save()
|
||||
Data.graphics.apply_graphical_settings(get_viewport())
|
||||
Data.graphics.save_profile_to_disk()
|
||||
Data.audio.apply_audio_settings()
|
||||
Data.audio.save_profile_to_disk()
|
||||
Data.preferences.save_profile_to_disk()
|
||||
Data.player_keymap.save_profile_to_disk()
|
||||
queue_free()
|
||||
|
@ -44,3 +44,7 @@ func _on_quit_to_desktop_pressed() -> void:
|
||||
func quit_game(confirmation):
|
||||
if confirmation:
|
||||
Game.quit_to_desktop()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -16,3 +16,11 @@ func get_server_ip() -> String:
|
||||
return $VBoxContainer/HBoxContainer/ServerIP.text
|
||||
func get_server_port() -> String:
|
||||
return $VBoxContainer/HBoxContainer2/ServerPort.text
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
||||
|
||||
func _on_button_pressed() -> void:
|
||||
Game.scene_switch_main_menu()
|
||||
|
@ -44,3 +44,7 @@ func setup_the_ui():
|
||||
loadout_editor.set_visible(true)
|
||||
$ReadyButton.set_visible(true)
|
||||
chatbox.set_visible(true)
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -12,3 +12,7 @@ func set_popup(prompt_text, placeholder_text, confirm_text):
|
||||
func _on_button_pressed() -> void:
|
||||
completed.emit($VBoxContainer/LineEdit.text)
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
@ -25,7 +25,7 @@ var has_card : bool :
|
||||
set(_value):
|
||||
return
|
||||
get:
|
||||
return inventory.contents.size() != 0
|
||||
return inventory.size != 0
|
||||
|
||||
|
||||
func set_color(color: Color):
|
||||
@ -44,7 +44,7 @@ func add_card(card: Card, caller_id: int) -> bool:
|
||||
|
||||
|
||||
func remove_card():
|
||||
Game.connected_players_nodes[tower.owner_id].add_card(inventory.remove())
|
||||
Game.connected_players_nodes[tower.owner_id].add_card(inventory.remove_at(0))
|
||||
networked_remove_tower.rpc()
|
||||
|
||||
|
||||
@ -74,8 +74,8 @@ func set_west_wall(value : bool):
|
||||
|
||||
@rpc("reliable", "call_local", "any_peer")
|
||||
func networked_spawn_tower(caller_id : int):
|
||||
tower = inventory.selected_item.turret_scene.instantiate() as Tower
|
||||
tower.stats = inventory.selected_item.tower_stats
|
||||
tower = inventory.contents.keys()[0].turret_scene.instantiate() as Tower
|
||||
tower.stats = inventory.contents.keys()[0].tower_stats
|
||||
tower.name = "tower"
|
||||
tower.base_name = name
|
||||
tower.owner_id = caller_id
|
||||
|
@ -1,6 +1,16 @@
|
||||
extends Control
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var wins = float(Data.save_stats.twenty_game_history.count(true))
|
||||
var games = float(Data.save_stats.twenty_game_history.size())
|
||||
var winrate = int((wins / games) * 100.0)
|
||||
$Label2.text = "Your 20-game winrate is now: " + str(winrate) + "%!"
|
||||
$Label3.text = "Total games: " + str(Data.save_stats.wins + Data.save_stats.losses)
|
||||
$Label4.text = "Total wins: " + str(Data.save_stats.wins)
|
||||
$Label5.text = "Total losses: " + str(Data.save_stats.losses)
|
||||
|
||||
|
||||
func _on_quit_button_pressed() -> void:
|
||||
Game.scene_switch_main_menu()
|
||||
queue_free()
|
||||
@ -9,3 +19,7 @@ func _on_quit_button_pressed() -> void:
|
||||
func _on_play_button_pressed() -> void:
|
||||
Game.restart_game()
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
|
Reference in New Issue
Block a user