Late connection
This commit is contained in:
parent
59bf07b076
commit
63209ccc1e
9 changed files with 73 additions and 23 deletions
|
|
@ -19,7 +19,10 @@ enum ROUND_STATES {
|
|||
const ATTACK_LAYER: int = 0b10000
|
||||
const DEFENCE_LAYER: int = 0b100000
|
||||
|
||||
signal session_started
|
||||
signal session_ended
|
||||
signal round_started
|
||||
signal late_player_connected(id: int)
|
||||
signal round_state_changed(state: int)
|
||||
signal player_stopped_interacting(id: int)
|
||||
|
||||
|
|
@ -41,7 +44,7 @@ var round_timer: Timer
|
|||
var buy_timer: Timer
|
||||
|
||||
var round_state: ROUND_STATES
|
||||
var session_started: bool = false
|
||||
var session_started_flag: bool = false
|
||||
|
||||
var reference_round_time: float
|
||||
|
||||
|
|
@ -67,6 +70,38 @@ func _ready() -> void:
|
|||
add_child(bomb_timer)
|
||||
add_child(round_timer)
|
||||
add_child(buy_timer)
|
||||
|
||||
multiplayer.peer_connected.connect(sync_session_server)
|
||||
|
||||
func sync_session_server(id: int):
|
||||
if multiplayer.is_server() == false or session_started_flag == false:
|
||||
return
|
||||
|
||||
var data: PackedByteArray
|
||||
data.resize(6)
|
||||
data.encode_u8(0,current_round)
|
||||
data.encode_u8(1,attacker_score)
|
||||
data.encode_u8(2,defender_score)
|
||||
data.encode_u8(3,attackers_alive)
|
||||
data.encode_u8(4,defenders_alive)
|
||||
data.encode_u8(5,round_state)
|
||||
|
||||
sync_session_client.rpc_id(id,data)
|
||||
late_player_connected.emit(id)
|
||||
|
||||
@rpc("authority","call_remote","reliable")
|
||||
func sync_session_client(data: PackedByteArray):
|
||||
if not is_server_request():
|
||||
return
|
||||
|
||||
current_round = data.decode_u8(0)
|
||||
attacker_score = data.decode_u8(1)
|
||||
defender_score = data.decode_u8(2)
|
||||
attackers_alive = data.decode_u8(3)
|
||||
defenders_alive = data.decode_u8(4)
|
||||
round_state = data.decode_u8(5) as ROUND_STATES
|
||||
session_started.emit()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if multiplayer.is_server() == false or not session_started:
|
||||
|
|
@ -96,7 +131,8 @@ func start_session() -> void:
|
|||
current_round = 0
|
||||
attacker_score = 0
|
||||
defender_score = 0
|
||||
session_started = true
|
||||
session_started_flag = true
|
||||
session_started.emit()
|
||||
|
||||
start_round()
|
||||
|
||||
|
|
@ -111,8 +147,9 @@ func end_session() -> void:
|
|||
round_timer.stop()
|
||||
buy_timer.stop()
|
||||
object_containers.clear()
|
||||
session_ended.emit()
|
||||
|
||||
session_started = false
|
||||
session_started_flag = false
|
||||
|
||||
@rpc("authority","call_remote","reliable")
|
||||
func start_round() -> void:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue