Browse Source

Fix joining late!

master
Luna 7 years ago
parent
commit
345ca3d6fe
9 changed files with 38 additions and 19 deletions
  1. +1
    -1
      scenes/lobby.tscn
  2. +1
    -1
      scripts/heroes/3.gd
  3. +1
    -1
      scripts/heroes/4.gd
  4. +1
    -1
      scripts/heroes/5.gd
  5. +1
    -1
      scripts/heroes/5_portal.gd
  6. +13
    -3
      scripts/lobby.gd
  7. +13
    -9
      scripts/networking.gd
  8. +2
    -1
      scripts/player.gd
  9. +5
    -1
      scripts/util.gd

+ 1
- 1
scenes/lobby.tscn View File

@ -297,7 +297,7 @@ toggle_mode = false
enabled_focus_mode = 2
shortcut = null
group = null
text = "Ready!"
text = "Start!"
flat = false
align = 1


+ 1
- 1
scripts/heroes/3.gd View File

@ -90,7 +90,7 @@ func set_boosted(node, is_boosted):
sync func merge(node_name):
set_boosting(true)
var other = $"/root/Level/Players".get_node(node_name)
var other = util.get_player(node_name)
set_boosted(other, true)
merged = other


+ 1
- 1
scripts/heroes/4.gd View File

@ -60,7 +60,7 @@ func _process(delta):
sync func stun(net_id, position):
# Stun the thing!
var player = get_node("/root/Level/Players/%s" % net_id)
var player = util.get_player(net_id)
player.set_linear_velocity(Vector3())
# Show the beam!


+ 1
- 1
scripts/heroes/5.gd View File

@ -66,7 +66,7 @@ func flick_input():
build_charge(flick_charge)
sync func flick(player_id, towards):
var who = $"/root/Level/Players".get_node(player_id)
var who = util.get_player(player_id)
if who.is_network_master():
var direction = towards - who.translation
var impulse = direction.normalized() * flick_strength * who.get_mass()


+ 1
- 1
scripts/heroes/5_portal.gd View File

@ -25,7 +25,7 @@ func _exit_tree():
other.queue_free()
func init(maker):
index = maker.placement.placed.size()
# If index is odd, we're the second (1, 3...), if even, first (0, 4...)


+ 13
- 3
scripts/lobby.gd View File

@ -5,6 +5,7 @@ var port = null # Defined by command-line argument with default
onready var hero_select = get_node("HeroSelect/Hero")
onready var level_select = get_node("LevelSelect")
onready var start_game_button = get_node("StartGame")
onready var ready_button = get_node("Ready")
func _ready():
@ -13,12 +14,12 @@ func _ready():
var spectating = util.args.get_value("-silent")
get_node("Spectating").pressed = spectating
get_node("Spectating").connect("toggled", self, "_set_info_callback", ["spectating"])
get_node("Ready").connect("toggled", self, "_set_info_callback", ["ready"])
ready_button.connect("toggled", self, "_set_info_callback", ["ready"])
start_game_button.connect("pressed", networking, "start_game")
# Shown, maybe, in _check_begun
start_game_button.hide()
if get_tree().is_network_server():
start_game_button.show()
else:
start_game_button.hide()
if get_tree().is_network_server():
# We put level in our players dict because it's automatically broadcast to other players
@ -40,6 +41,7 @@ func _ready():
_connected()
func _connected():
_send_name()
if util.args.get_value("-hero") == "r":
hero_select.random_hero()
@ -66,7 +68,15 @@ func _send_name():
var name = get_node("Username").text
networking.set_info("username", name)
func _check_begun():
var game_started = networking.players[1].begun
if game_started:
start_game_button.show()
# The "Ready" toggle doesn't really make sense on a started game
ready_button.hide()
func render_player_list():
_check_begun()
var list = ""
var hero_names = hero_select.hero_names
for p in networking.players:


+ 13
- 9
scripts/networking.gd View File

@ -4,7 +4,6 @@ onready var matchmaking = preload("res://scripts/matchmaking.gd").new()
remote var players = {}
var players_done = []
var begun = false
var global_server_ip = "nv.cosinegaming.com"
var matchmaker_tcp
var right_team_next = false
@ -79,6 +78,7 @@ remote func register_player(new_peer):
info.is_right_team = right_team_next
info.ready = false
info.spectating = false
info.begun = false
right_team_next = not right_team_next
players[new_peer] = info
if get_tree().is_network_server():
@ -104,8 +104,9 @@ remote func register_player(new_peer):
sync func unregister_player(peer):
players.erase(peer)
if begun:
get_node("/root/Level/Players/%d" % peer).queue_free()
var p = util.get_player(peer)
if p:
p.queue_free()
emit_signal("info_updated")
sync func _set_info(key, value, peer=0):
@ -148,20 +149,23 @@ sync func _spawn_player(p):
get_node("/root/Level/Players").call_deferred("add_child", player)
sync func _pre_configure_game(level):
begun = true
var self_peer_id = get_tree().get_network_unique_id()
get_node("/root/Lobby").hide()
if not players[self_peer_id].begun:
get_node("/root/Lobby").hide()
var world = load("res://scenes/levels/%d.tscn" % level).instance()
get_node("/root").add_child(world)
var world = load("res://scenes/levels/%d.tscn" % level).instance()
get_node("/root").add_child(world)
# Load all players (including self)
for p in players:
if not players[p].spectating:
_spawn_player(p)
var existing_player = util.get_player(p)
if not players[self_peer_id].begun or not existing_player:
_spawn_player(p)
set_info("begun", true)
rpc_id(1, "_done_preconfiguring", self_peer_id)
sync func _done_preconfiguring(who):
@ -178,7 +182,7 @@ sync func _post_configure_game():
_begin_player_deferred(p)
func _begin_player(peer):
get_node("/root/Level/Players/%d" % peer).begin()
util.get_player(peer).begin()
remote func _begin_player_deferred(peer):
call_deferred("_begin_player", peer)


+ 2
- 1
scripts/player.gd View File

@ -56,7 +56,6 @@ func _ready():
get_node("TPCamera/Camera/Ray").add_exception(self)
get_node(tp_camera).set_enabled(true)
get_node(tp_camera).cam_view_sensitivity = 0.05
spawn()
if "is_ai" in player_info and player_info.is_ai and not ai_instanced:
add_child(preload("res://scenes/ai.tscn").instance())
ai_instanced = true
@ -193,6 +192,8 @@ func begin():
for mesh in colored_meshes:
get_node(mesh).set_surface_material(0, mat)
spawn()
func toggle_mouse_capture():
if (Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)


+ 5
- 1
scripts/util.gd View File

@ -10,7 +10,11 @@ func _ready():
args = _get_args()
func get_master_player():
var path = "/root/Level/Players/%d" % get_tree().get_network_unique_id()
return get_player(get_tree().get_network_unique_id())
func get_player(netid):
# We not %d? Because sometimes we need to do get_player(thing.get_name())
var path = "/root/Level/Players/%s" % str(netid)
if has_node(path):
return get_node(path)
else:


Loading…
Cancel
Save