Renamed a bunch of player stuff to pawn stuff and implemented extensive work on getting single-address 'netplay' code working. Not sure if I've created issues with single player but in theory it should all transfer across as if the player is simply always the host.
This commit is contained in:
@@ -4,16 +4,50 @@ extends Node
|
||||
const blinder_template = preload("res://templates/blinder.tscn")
|
||||
const one_shot_template = preload("res://templates/one_shot.tscn")
|
||||
|
||||
const vs_man_level = preload("res://scenes/multiplayer_test.tscn")
|
||||
const vs_man_level = preload("res://scenes/test_level.tscn")
|
||||
const pawn_select_scene = preload("res://scenes/character_select.tscn")
|
||||
|
||||
var player : Player
|
||||
var player : PawnController
|
||||
var hud : HUD
|
||||
var level : Level
|
||||
var multiplayer_game : bool = false
|
||||
var num_players : int = 1
|
||||
var pawns_selected : Dictionary[int, PawnBaseData] = {}
|
||||
var level_synced : Dictionary[int, bool] = {}
|
||||
var net_test : bool #TODO: Remove later
|
||||
|
||||
func setup_player(player : Player) -> void:
|
||||
self.player = player
|
||||
func _ready() -> void:
|
||||
var args : Dictionary = {}
|
||||
for arg in OS.get_cmdline_args():
|
||||
if arg.begins_with("--"):
|
||||
var flag = arg.lstrip("--")
|
||||
args[flag]=true
|
||||
if args.has("net_test"):
|
||||
net_test = true
|
||||
|
||||
|
||||
func setup_player(pc : PawnController) -> void:
|
||||
var is_local = false
|
||||
Game.level.pawns[pc.id] = pc
|
||||
if pc.id == Multiplayer.id:
|
||||
is_local = true
|
||||
if is_local:
|
||||
player = pc
|
||||
if hud:
|
||||
hud.register_player(player)
|
||||
hud.register_pawn(pc,is_local)
|
||||
|
||||
func is_multiplayer() -> bool:
|
||||
return multiplayer_game
|
||||
|
||||
|
||||
func start_level(pawns : Dictionary[int, PawnBaseData]) -> void:
|
||||
if !Multiplayer.is_host():
|
||||
return
|
||||
pawns_selected = pawns
|
||||
for i in Multiplayer.players.values():
|
||||
level_synced[i] = false
|
||||
level_synced[1] = true
|
||||
switch_scene(vs_man_level)
|
||||
|
||||
func switch_scene(packed_scene : PackedScene) -> void:
|
||||
var blinder = blinder_template.instantiate() as TextureRect
|
||||
@@ -21,21 +55,55 @@ func switch_scene(packed_scene : PackedScene) -> void:
|
||||
blinder.self_modulate.a = 0
|
||||
add_child(blinder)
|
||||
tween.tween_property(blinder, "self_modulate:a", 1, .15)
|
||||
tween.tween_callback(Callable(get_tree().change_scene_to_packed).bind(packed_scene))
|
||||
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
|
||||
tween.tween_callback(spawner.add_child.bind(packed_scene.instantiate(),true))
|
||||
tween.tween_property(blinder, "self_modulate:a", 0, .15)
|
||||
tween.tween_callback(blinder.queue_free)
|
||||
pass
|
||||
|
||||
@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 = vs_man_level.instantiate()
|
||||
var level_scene = vs_man_level.instantiate()
|
||||
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
|
||||
spawner.add_child(level)
|
||||
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 ready : bool = true
|
||||
for id in level_synced:
|
||||
if level_synced[id] == false:
|
||||
ready = false
|
||||
if ready:
|
||||
level.setup()
|
||||
|
||||
func oneshot(stream : AudioStream) -> void:
|
||||
var shot = one_shot_template.instantiate()
|
||||
shot.stream = stream
|
||||
|
||||
Reference in New Issue
Block a user