Extensive work on virtually all of the visuals and the net code
This commit is contained in:
114
scripts/level.gd
114
scripts/level.gd
@@ -3,14 +3,14 @@ class_name Level extends Node3D
|
||||
|
||||
const map_marker_templates : Dictionary[String, PackedScene] = {
|
||||
"pawn" : preload("res://templates/markers/pawn_marker.tscn"),
|
||||
"friendly_trap":preload("res://templates/markers/friendly_trap_marker.tscn"),
|
||||
"enemy_trap": preload("res://templates/markers/enemy_trap_marker.tscn"),
|
||||
"friendly_hack":preload("res://templates/markers/friendly_hack_marker.tscn"),
|
||||
"enemy_hack": preload("res://templates/markers/enemy_hack_marker.tscn"),
|
||||
"item": preload("res://templates/markers/item_marker.tscn")
|
||||
}
|
||||
|
||||
|
||||
const pawn_controller = preload("res://templates/pawn_controller.tscn")
|
||||
const trap_template = preload("res://templates/trap.tscn")
|
||||
const hack_template = preload("res://templates/hack.tscn")
|
||||
const camera_template = preload("res://templates/pawn_camera.tscn")
|
||||
|
||||
const camera_offset = Vector3(0, 10, 5.25)
|
||||
@@ -20,12 +20,15 @@ const camera_offset = Vector3(0, 10, 5.25)
|
||||
@onready var ramp_layer : GridMap = %Ramps
|
||||
@onready var marker_layer : GridMap = %Markers
|
||||
@onready var pawns_node : Node3D = %Pawns
|
||||
@onready var traps_node : Node3D = %Traps
|
||||
@onready var hacks_node : Node3D = %Hacks
|
||||
@onready var cameras_node : Node3D = %Cameras
|
||||
@onready var map_markers_node : Node3D = %MapMarkers
|
||||
@onready var spawn_points : Array[Node] = $PawnSpawner.get_children()
|
||||
|
||||
@export var difficulty : int = 1
|
||||
|
||||
var traps : Dictionary[Vector3i, Trap] = {}
|
||||
|
||||
var hacks : Dictionary[Vector3i, Hack] = {}
|
||||
var pawns : Dictionary[int, PawnController] = {}
|
||||
var cameras : Dictionary[int, PawnCamera] = {}
|
||||
var map_markers : Dictionary[Object, MapMarker] = {}
|
||||
@@ -34,33 +37,38 @@ func _ready() -> void:
|
||||
Game.level = self
|
||||
if Game.mode == Game.Modes.STORY:
|
||||
setup()
|
||||
add_level_trap.call_deferred(Trap.Type.MINE, Vector3.ZERO, Vector3i(5,0,3))
|
||||
add_level_hack.call_deferred(Hack.Type.MINE, Vector3.ZERO, Vector3i(-2,2,0))
|
||||
|
||||
func setup() -> void:
|
||||
if Multiplayer.is_host():
|
||||
spawn_players()
|
||||
|
||||
func spawn_players() -> void:
|
||||
var count = 0
|
||||
for key in Game.pawns_selected:
|
||||
var pc : PawnController = pawn_controller.instantiate()
|
||||
var pd = Game.pawns_selected[key]
|
||||
pawns_node.add_child(pc,true)
|
||||
var traps : Array = []
|
||||
for trap : TrapSet in pd.starting_traps:
|
||||
var hacks : Array = []
|
||||
for hack : HackSet in pd.starting_hacks:
|
||||
var dict = {
|
||||
"type":trap.type,
|
||||
"qty":trap.qty
|
||||
"type":hack.type,
|
||||
"qty":hack.qty
|
||||
}
|
||||
traps.append(dict)
|
||||
hacks.append(dict)
|
||||
|
||||
var position : Vector3
|
||||
if key == Multiplayer.id:
|
||||
position = Vector3(0,0,0)
|
||||
if(spawn_points == null
|
||||
or len(spawn_points) <= count):
|
||||
if key == Multiplayer.id:
|
||||
position = Vector3(0,0,0)
|
||||
else:
|
||||
position = Vector3(3,0,0)
|
||||
else:
|
||||
position = Vector3(3,0,0)
|
||||
|
||||
pc.setup.rpc(key,traps,position)
|
||||
position = spawn_points[count].global_position
|
||||
pc.setup.rpc(key,hacks,position)
|
||||
add_pawn_camera(pc)
|
||||
count += 1
|
||||
|
||||
|
||||
func is_square_detected(crd) -> bool:
|
||||
@@ -73,11 +81,11 @@ func detect_square(crd : Vector3i, mark : bool) -> bool:
|
||||
|
||||
marker_layer.set_cell_item(crd, 0 if mark else GridMap.INVALID_CELL_ITEM)
|
||||
if mark:
|
||||
var trap_crd = crd + Vector3i(0,1,0)
|
||||
if traps.has(trap_crd):
|
||||
var trap : Trap = traps[trap_crd]
|
||||
if trap.trap_owner != Multiplayer.id:
|
||||
trap.reveal()
|
||||
var hack_crd = crd + Vector3i(0,1,0)
|
||||
if hacks.has(hack_crd):
|
||||
var hack : Hack = hacks[hack_crd]
|
||||
if hack.hack_owner != Multiplayer.id:
|
||||
hack.reveal()
|
||||
return true
|
||||
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
@@ -90,30 +98,30 @@ func add_pawn_camera(pawn : PawnController) -> void:
|
||||
|
||||
|
||||
|
||||
func add_trap(trap : Trap, crd : Vector3i) -> void:
|
||||
trap.square = crd
|
||||
traps[crd] = trap
|
||||
trap.position = Vector3(crd) + Vector3(.5, 0, .5)
|
||||
add_child(trap, true)
|
||||
func add_hack(hack : Hack, crd : Vector3i) -> void:
|
||||
hack.square = crd
|
||||
hacks[crd] = hack
|
||||
hack.position = Vector3(crd) + Vector3(.5, 0, .5)
|
||||
add_child(hack, true)
|
||||
|
||||
func add_projectile(shot : Projectile) -> void:
|
||||
add_child(shot, true)
|
||||
|
||||
func remove_trap_square(crd : Vector3i) -> void:
|
||||
traps.erase(crd)
|
||||
func uninstall_hack_square(crd : Vector3i) -> void:
|
||||
hacks.erase(crd)
|
||||
|
||||
func get_square_trap(crd : Vector3i) -> Trap:
|
||||
if traps.has(crd):
|
||||
return traps[crd]
|
||||
func get_square_hack(crd : Vector3i) -> Hack:
|
||||
if hacks.has(crd):
|
||||
return hacks[crd]
|
||||
else:
|
||||
return null
|
||||
|
||||
|
||||
|
||||
func is_valid_trap_square(crd : Vector3i) -> bool:
|
||||
func is_valid_hack_square(crd : Vector3i) -> bool:
|
||||
if floor_layer.get_cell_item(crd + Vector3i(0,-1,0)) == GridMap.INVALID_CELL_ITEM:
|
||||
return false
|
||||
if traps.has(crd):
|
||||
if hacks.has(crd):
|
||||
return false
|
||||
return true
|
||||
|
||||
@@ -121,20 +129,20 @@ func add_vfx(vfx, crd : Vector3i) -> void:
|
||||
vfx.position = Vector3(crd) #+ Vector3(0.5, 0, 0.5)
|
||||
add_child(vfx, true)
|
||||
|
||||
func activate_trap(crd : Vector3i) -> void:
|
||||
if traps.has(crd):
|
||||
traps[crd].activate()
|
||||
func activate_hack(crd : Vector3i) -> void:
|
||||
if hacks.has(crd):
|
||||
hacks[crd].activate()
|
||||
|
||||
|
||||
func generate_trap(type : Trap.Type, dir : Vector3, square : Vector3i):
|
||||
var trap = trap_template.instantiate()
|
||||
trap.setup(type, dir, -1)
|
||||
add_trap(trap, square)
|
||||
func generate_hack(type : Hack.Type, dir : Vector3, square : Vector3i):
|
||||
var hack = hack_template.instantiate()
|
||||
hack.setup(type, dir, -1)
|
||||
add_hack(hack, square)
|
||||
|
||||
func disarm_trap(crd : Vector3i) -> void:
|
||||
var trap = traps[crd]
|
||||
trap.disarm()
|
||||
traps.erase(crd)
|
||||
func decompile_hack(crd : Vector3i) -> void:
|
||||
var hack = hacks[crd]
|
||||
hack.decompile()
|
||||
hacks.erase(crd)
|
||||
|
||||
func remove_map_marker(target) -> void:
|
||||
if !map_markers.has(target):
|
||||
@@ -149,13 +157,13 @@ func add_map_marker(target) -> void:
|
||||
if target is PawnController:
|
||||
marker = map_marker_templates.pawn.instantiate()
|
||||
height += 40
|
||||
elif target is Trap:
|
||||
if target.trap_owner == Multiplayer.id:
|
||||
marker = map_marker_templates.friendly_trap.instantiate()
|
||||
elif target is Hack:
|
||||
if target.hack_owner == Multiplayer.id:
|
||||
marker = map_marker_templates.friendly_hack.instantiate()
|
||||
else:
|
||||
marker = map_marker_templates.enemy_trap.instantiate()
|
||||
marker = map_marker_templates.enemy_hack.instantiate()
|
||||
marker.visible = false
|
||||
target.revealed.connect(marker._on_trap_revealed)
|
||||
target.revealed.connect(marker._on_hack_revealed)
|
||||
height += 30
|
||||
elif target is Item:
|
||||
marker = map_marker_templates.item.instantiate()
|
||||
@@ -165,7 +173,7 @@ func add_map_marker(target) -> void:
|
||||
map_markers_node.add_child(marker)
|
||||
marker.position += Vector3(0, height,0)
|
||||
|
||||
func add_level_trap(type : Trap.Type, facing : Vector3, crd : Vector3i) -> void:
|
||||
var trap = trap_template.instantiate()
|
||||
trap.setup(type, facing, -1)
|
||||
add_trap(trap, crd)
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user