Files
net-gunner/scripts/autos/game.gd

152 lines
4.5 KiB
GDScript

extends Node
enum Modes{
STORY,
VS_COM,
VS_MAN
}
var pawns : Dictionary = {
"A" : load("res://data/pawns/a.tres"),
"B" : load("res://data/pawns/b.tres"),
"C" : load("res://data/pawns/c.tres"),
"D" : load("res://data/pawns/d.tres"),
"E" : load("res://data/pawns/e.tres"),
"F" : load("res://data/pawns/f.tres")
}
const blinder_template = preload("res://templates/blinder.tscn")
const one_shot_template = preload("res://templates/one_shot.tscn")
const story_level = preload("res://scenes/manufactory.tscn")
const vs_com_level = preload("res://scenes/test_level.tscn")
const vs_man_level = preload("res://scenes/manufactory.tscn")
const pawn_select_scene = preload("res://scenes/character_select.tscn")
var cmd_args : Dictionary = {}
var player : PawnController
var hud : HUD
var level : Level
var mode : Modes = Modes.STORY
var multiplayer_game : bool = false
var num_players : int = 1
var pawns_selected : Dictionary[int, StringName] = {}
var level_synced : Dictionary[int, bool] = {}
var net_test : bool #TODO: Remove later
func _ready() -> void:
var args : Dictionary = {}
for arg in OS.get_cmdline_args():
if arg.begins_with("--"):
var flag = arg.lstrip("--")
if flag.contains("="):
var key_val = flag.split("=")
args[key_val[0]]=key_val[1]
args[flag]=true
if args.has("net_test"):
net_test = true
if args.has("instance_id"):
get_tree().root.title = "Net Gunner (Instance: %s)" % args.instance_id
cmd_args = args
func setup_player(pc : PawnController) -> void:
var is_local = false
if pc.id == Multiplayer.id:
is_local = true
level.pawns[pc.id] = pc
if is_local:
player = pc
if hud:
hud.register_pawn(pc,is_local)
func is_multiplayer() -> bool:
return multiplayer_game
func start_level(pawn_dict : Dictionary[int, StringName]) -> void:
pawns_selected = pawn_dict
if !Multiplayer.is_host():
return
for i in Multiplayer.players.values():
level_synced[i] = false
level_synced[1] = true
match(mode):
Modes.STORY:
switch_scene(story_level, false)
Modes.VS_COM:
switch_scene(vs_com_level, false)
Modes.VS_MAN:
switch_scene(vs_man_level)
func switch_scene(packed_scene : PackedScene, spawn : bool = true) -> void:
var blinder = blinder_template.instantiate() as TextureRect
var tween = create_tween()
blinder.self_modulate.a = 0
add_child(blinder)
tween.tween_property(blinder, "self_modulate:a", 1, .15)
if spawn:
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
tween.tween_callback(spawner.add_child.bind(packed_scene.instantiate(), true))
var current_scene = get_tree().get_first_node_in_group("scenes")
if current_scene:
tween.tween_callback(current_scene.queue_free)
current_scene.process_mode=Node.PROCESS_MODE_DISABLED
else:
tween.tween_callback(get_tree().change_scene_to_packed.bind(packed_scene))
tween.tween_property(blinder, "self_modulate:a", 0, .15)
tween.tween_callback(blinder.queue_free)
@rpc("call_local", "any_peer", "reliable")
func start_pawn_select(mplayer : bool) -> void:
var setup = get_tree().get_first_node_in_group("scenes")
multiplayer_game = mplayer
setup.queue_free()
num_players = Multiplayer.players.size()
var blinder = blinder_template.instantiate() as TextureRect
var tween = create_tween()
blinder.self_modulate.a = 0
add_child(blinder)
tween.tween_property(blinder, "self_modulate:a", 1, .15)
if Multiplayer.is_server():
var pawn_select = pawn_select_scene.instantiate()
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
tween.tween_callback(spawner.add_child.bind(pawn_select))
tween.tween_property(blinder, "self_modulate:a", 0, .15)
tween.tween_callback(blinder.queue_free)
@rpc("call_local", "any_peer", "reliable")
func start_vs_man() -> void:
var setup = get_tree().get_first_node_in_group("scenes")
setup.queue_free()
if Multiplayer.is_server():
var level_scene = vs_man_level.instantiate()
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
spawner.add_child(level_scene)
@rpc("call_remote", "any_peer", "reliable")
func level_spawned(peer_id : int) -> void:
if !Multiplayer.is_host():
return
level_synced[peer_id] = true
check_level_ready()
func check_level_ready() -> void:
var level_ready : bool = true
for id in level_synced:
if level_synced[id] == false:
level_ready = false
if level_ready:
level.setup()
func oneshot(stream : AudioStream) -> void:
var shot = one_shot_template.instantiate()
shot.stream = stream
if level:
level.add_child(shot)
else:
add_child(shot)