mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-10 21:40:19 +00:00
broadcast message when player leaves
This commit is contained in:
parent
9840e0698f
commit
9e0567358d
@ -3,26 +3,22 @@ using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class DeathMessage : QSBMessage
|
||||
public class DeathMessage : NameMessage
|
||||
{
|
||||
public override MessageType MessageType => MessageType.Death;
|
||||
|
||||
public string PlayerName { get; set; }
|
||||
public uint SenderId { get; set; }
|
||||
public short DeathId { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
PlayerName = reader.ReadString();
|
||||
base.Deserialize(reader);
|
||||
DeathId = reader.ReadInt16();
|
||||
SenderId = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
writer.Write(PlayerName);
|
||||
base.Serialize(writer);
|
||||
writer.Write(DeathId);
|
||||
writer.Write(SenderId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,25 +1,9 @@
|
||||
using QSB.Messaging;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class JoinMessage : QSBMessage
|
||||
public class JoinMessage : NameMessage
|
||||
{
|
||||
public override MessageType MessageType => MessageType.Join;
|
||||
|
||||
public uint SenderId { get; set; }
|
||||
public string PlayerName { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
PlayerName = reader.ReadString();
|
||||
SenderId = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
writer.Write(PlayerName);
|
||||
writer.Write(SenderId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
9
QSB/Events/LeaveMessage.cs
Normal file
9
QSB/Events/LeaveMessage.cs
Normal file
@ -0,0 +1,9 @@
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class LeaveMessage : NameMessage
|
||||
{
|
||||
public override MessageType MessageType => MessageType.Leave;
|
||||
}
|
||||
}
|
23
QSB/Events/NameMessage.cs
Normal file
23
QSB/Events/NameMessage.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using QSB.Messaging;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public abstract class NameMessage : QSBMessage
|
||||
{
|
||||
public uint SenderId { get; set; }
|
||||
public string PlayerName { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
PlayerName = reader.ReadString();
|
||||
SenderId = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
writer.Write(PlayerName);
|
||||
writer.Write(SenderId);
|
||||
}
|
||||
}
|
||||
}
|
@ -12,12 +12,17 @@ namespace QSB.Events
|
||||
public static string MyName { get; private set; }
|
||||
|
||||
private MessageHandler<JoinMessage> _joinHandler;
|
||||
private MessageHandler<LeaveMessage> _leaveHandler;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_joinHandler = new MessageHandler<JoinMessage>();
|
||||
_joinHandler.OnClientReceiveMessage += OnClientReceiveMessage;
|
||||
_joinHandler.OnServerReceiveMessage += OnServerReceiveMessage;
|
||||
|
||||
_leaveHandler = new MessageHandler<LeaveMessage>();
|
||||
_leaveHandler.OnClientReceiveMessage += OnClientReceiveMessage;
|
||||
_leaveHandler.OnServerReceiveMessage += OnServerReceiveMessage;
|
||||
}
|
||||
|
||||
public void Join(string playerName)
|
||||
@ -34,14 +39,17 @@ namespace QSB.Events
|
||||
PlayerName = playerName,
|
||||
SenderId = NetPlayer.LocalInstance.netId.Value
|
||||
};
|
||||
if (isServer)
|
||||
_joinHandler.SendToServer(message);
|
||||
}
|
||||
|
||||
public void Leave(uint playerId) // called by server
|
||||
{
|
||||
var message = new LeaveMessage
|
||||
{
|
||||
_joinHandler.SendToAll(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
_joinHandler.SendToServer(message);
|
||||
}
|
||||
PlayerName = PlayerNames[playerId],
|
||||
SenderId = playerId
|
||||
};
|
||||
_leaveHandler.SendToAll(message);
|
||||
}
|
||||
|
||||
private void OnServerReceiveMessage(JoinMessage message)
|
||||
@ -55,5 +63,19 @@ namespace QSB.Events
|
||||
DebugLog.All(message.PlayerName, "joined!");
|
||||
}
|
||||
|
||||
private void OnServerReceiveMessage(LeaveMessage message)
|
||||
{
|
||||
_leaveHandler.SendToAll(message);
|
||||
}
|
||||
|
||||
private void OnClientReceiveMessage(LeaveMessage message)
|
||||
{
|
||||
if (PlayerNames.ContainsKey(message.SenderId))
|
||||
{
|
||||
PlayerNames.Remove(message.SenderId);
|
||||
}
|
||||
DebugLog.All(message.PlayerName, "left");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,8 @@ namespace QSB.Messaging
|
||||
WakeUp = MsgType.Highest + 2,
|
||||
AnimTrigger = MsgType.Highest + 3,
|
||||
Join = MsgType.Highest + 4,
|
||||
Death = MsgType.Highest + 5
|
||||
Death = MsgType.Highest + 5,
|
||||
Leave = MsgType.Highest + 6
|
||||
// Add other message types here, incrementing the value.
|
||||
}
|
||||
}
|
||||
|
@ -106,11 +106,13 @@
|
||||
<Compile Include="Animation\AnimFloatParam.cs" />
|
||||
<Compile Include="Animation\AnimTriggerMessage.cs" />
|
||||
<Compile Include="Animation\AnimTrigger.cs" />
|
||||
<Compile Include="Events\JoinMessage.cs" />
|
||||
<Compile Include="Events\LeaveMessage.cs" />
|
||||
<Compile Include="NetPlayer.cs" />
|
||||
<Compile Include="DebugLog.cs" />
|
||||
<Compile Include="Events\DeathMessage.cs" />
|
||||
<Compile Include="Events\PlayerJoin.cs" />
|
||||
<Compile Include="Events\JoinMessage.cs" />
|
||||
<Compile Include="Events\NameMessage.cs" />
|
||||
<Compile Include="Messaging\MessageHandler.cs" />
|
||||
<Compile Include="Messaging\MessageType.cs" />
|
||||
<Compile Include="Messaging\QSBMessage.cs" />
|
||||
|
@ -112,6 +112,16 @@ namespace QSB
|
||||
_canEditName = true;
|
||||
}
|
||||
|
||||
public override void OnServerDisconnect(NetworkConnection conn)
|
||||
{
|
||||
DebugLog.Screen("OnServerDisconnect");
|
||||
|
||||
var playerId = conn.playerControllers[0].gameObject.GetComponent<NetPlayer>().netId.Value;
|
||||
GetComponent<PlayerJoin>().Leave(playerId);
|
||||
|
||||
base.OnServerDisconnect(conn);
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
GUI.Label(new Rect(10, 10, 200f, 20f), "Name:");
|
||||
|
Loading…
x
Reference in New Issue
Block a user