Extensive work on animations and partially functional level keys, new UI gears but needs rounding error correction. Particle preloader added.

This commit is contained in:
2026-04-07 06:43:12 -04:00
parent 86f655ff07
commit 39401ff04f
128 changed files with 42916 additions and 120860 deletions

View File

@@ -12,6 +12,7 @@ const map_marker_templates : Dictionary[String, PackedScene] = {
const pawn_controller = preload("res://templates/pawn_controller.tscn")
const hack_template = preload("res://templates/hack.tscn")
const camera_template = preload("res://templates/pawn_camera.tscn")
const particle_preloader_template = preload("res://templates/particle_preloader.tscn")
const camera_offset = Vector3(0, 10, 5.25)
@@ -27,15 +28,25 @@ const camera_offset = Vector3(0, 10, 5.25)
@onready var multiplayer_level_setup : MultiplayerLevelSetup = %MultiplayerLevelSetup
@export var difficulty : int = 1
var keys : Array[int] = []
@export var max_keys = 7
var hacks : Dictionary[Vector3i, Hack] = {}
var pawns : Dictionary[int, PawnController] = {}
var cameras : Dictionary[int, PawnCamera] = {}
var map_markers : Dictionary[Object, MapMarker] = {}
signal level_started()
signal keys_changed()
func _ready() -> void:
var preloader = particle_preloader_template.instantiate()
add_child(preloader)
process_mode=Node.PROCESS_MODE_DISABLED
Game.level = self
if max_keys > 0 and Game.hud:
keys_changed.connect(Game.hud._on_keys_changed)
keys_changed.emit()
if Game.mode == Game.Modes.STORY:
setup()
#add_level_hack.call_deferred(Hack.Type.PURGE, Vector3.ZERO, Vector3i(-2,2,0))
@@ -66,7 +77,7 @@ func spawn_players_singleplayer() -> void:
pc.setup(1, Game.pawns_selected[1])
add_pawn_camera(pc)
cameras[1].register_pawn(1)
process_mode=Node.PROCESS_MODE_INHERIT
start_level()
func spawn_players_multiplayer() -> void:
var count = 0
@@ -107,7 +118,10 @@ func spawn_players_multiplayer() -> void:
@rpc("authority", "call_local")
func start_level() -> void:
await get_tree().create_timer(3.0).timeout
Game.hud.visible = true
process_mode=Node.PROCESS_MODE_INHERIT
level_started.emit()
func is_square_detected(crd) -> bool:
@@ -222,3 +236,62 @@ func add_level_hack(type : Hack.Type, facing : Vector3, crd : Vector3i) -> void:
var hack = hack_template.instantiate()
hack.setup(type, facing, -1)
add_hack(hack, crd)
func show_win_screen() -> void:
#TODO: INITIATE WIN SCREEN
pass
func show_lose_screen() -> void:
#TODO: INITIATE LOSE SCREEN
pass
@rpc("authority", "call_local")
func end_level(winner_id : int) -> void:
if Multiplayer.id == winner_id:
show_win_screen()
else:
show_lose_screen()
var win_tween := create_tween()
win_tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
win_tween.tween_property(get_tree(), "paused", true, 0)
win_tween.tween_interval(5)
win_tween.tween_property(get_tree(), "paused", false, 0)
#TODO: MOVE TO THE REMATCH SCREEN
func check_survival_win() -> void:
var dead = 0
var last_living = -1
for pc : PawnController in pawns.values():
if pc.is_dead():
dead += 1
else:
last_living = pc.id
if dead == len(pawns) - 1:
end_level.rpc(last_living)
func check_data_win() -> void:
var pcounts : Dictionary = {}
for id in pawns.keys():
pcounts[id] = 0
var highest = 0
var high_id = -1
for key in keys:
pcounts[key] += 1
if pcounts[key] > highest:
highest = pcounts[key]
high_id = key
if highest >= ceil(max_keys / 2.0):
end_level.rpc(high_id)
@rpc("any_peer", "call_local")
func award_data_key(player_id : int) -> void:
if len(keys) >= max_keys:
return
keys.append(player_id)
keys_changed.emit()
if Multiplayer.is_host():
check_data_win()