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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user