From 0430badc0032a970e8bf1d38114be11dd37347b1 Mon Sep 17 00:00:00 2001 From: teascade Date: Mon, 10 Aug 2020 02:57:33 +0300 Subject: [PATCH] Add teams, make team spawns and do some reorganizing --- Assets/GameObjects/Scenes/TestScene.unity | 171 +++++++++++++++++- Assets/Scripts/Game.meta | 8 + Assets/Scripts/Game/GameMaster.cs | 67 +++++++ Assets/Scripts/Game/GameMaster.cs.meta | 11 ++ Assets/Scripts/Networking/GameProtocol.cs | 2 + Assets/Scripts/Networking/Instances/Client.cs | 34 ++-- Assets/Scripts/Networking/Instances/Server.cs | 56 ++++-- Assets/Scripts/Networking/NetPlayer.cs | 2 + Assets/Scripts/Networking/Packets/DeadPckt.cs | 25 +++ .../Networking/Packets/DeadPckt.cs.meta | 11 ++ .../Networking/Packets/IdentityPackets.cs | 10 + .../Packets/MultiplePlayerUpdatesPckt.cs | 35 ---- .../Networking/Packets/MultipleSyncsPckt.cs | 40 ++++ .../Packets/MultipleSyncsPckt.cs.meta | 11 ++ .../Networking/Packets/PlayerInitPckt.cs | 43 +++++ .../Networking/Packets/PlayerInitPckt.cs.meta | 11 ++ .../Networking/Packets/PlayerSyncPacket.cs | 34 ++++ .../Packets/PlayerSyncPacket.cs.meta | 11 ++ .../Networking/Packets/PlayerUpdatePckt.cs | 30 --- .../Scripts/Networking/Packets/SpawnPckt.cs | 22 --- ProjectSettings/TagManager.asset | 2 + 21 files changed, 511 insertions(+), 125 deletions(-) create mode 100644 Assets/Scripts/Game.meta create mode 100644 Assets/Scripts/Game/GameMaster.cs create mode 100644 Assets/Scripts/Game/GameMaster.cs.meta create mode 100644 Assets/Scripts/Networking/Packets/DeadPckt.cs create mode 100644 Assets/Scripts/Networking/Packets/DeadPckt.cs.meta create mode 100644 Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs create mode 100644 Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs.meta create mode 100644 Assets/Scripts/Networking/Packets/PlayerInitPckt.cs create mode 100644 Assets/Scripts/Networking/Packets/PlayerInitPckt.cs.meta create mode 100644 Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs create mode 100644 Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs.meta diff --git a/Assets/GameObjects/Scenes/TestScene.unity b/Assets/GameObjects/Scenes/TestScene.unity index c148763..783e046 100644 --- a/Assets/GameObjects/Scenes/TestScene.unity +++ b/Assets/GameObjects/Scenes/TestScene.unity @@ -154,7 +154,7 @@ Transform: - {fileID: 1901268757} - {fileID: 315509112} m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &130756071 GameObject: @@ -363,6 +363,36 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4b9b55215c46317428803b7adeda89c3, type: 3} m_PrefabInstance: {fileID: 315509111} m_PrefabAsset: {fileID: 0} +--- !u!1 &327191960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 327191961} + m_Layer: 0 + m_Name: SunSpawn1 + m_TagString: SunRespawn + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &327191961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327191960} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -31.92384, y: 1.3995848, z: 8.992973} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1280423821} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &332119780 GameObject: m_ObjectHideFlags: 0 @@ -782,6 +812,66 @@ Light: m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 +--- !u!1 &589581210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589581211} + m_Layer: 0 + m_Name: SunSpawn2 + m_TagString: SunRespawn + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &589581211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589581210} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -37.75384, y: 3.6095848, z: 16.12297} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1280423821} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &596859584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 596859585} + m_Layer: 0 + m_Name: MoonSpawn1 + m_TagString: MoonRespawn + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &596859585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596859584} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -31.92384, y: 1.3995848, z: -8.992973} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1280423821} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &629769912 GameObject: m_ObjectHideFlags: 0 @@ -1225,6 +1315,36 @@ Light: m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 +--- !u!1 &738586440 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738586441} + m_Layer: 0 + m_Name: MoonSpawn2 + m_TagString: MoonRespawn + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &738586441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738586440} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -37.75384, y: 3.6095848, z: -16.122972} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1280423821} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &816236545 PrefabInstance: m_ObjectHideFlags: 0 @@ -1946,8 +2066,8 @@ GameObject: m_Component: - component: {fileID: 1280423821} m_Layer: 0 - m_Name: SpawnPoint - m_TagString: Respawn + m_Name: SpawnPoints + m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -1959,12 +2079,17 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1280423820} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.02, z: 0} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 596859585} + - {fileID: 738586441} + - {fileID: 327191961} + - {fileID: 589581211} + - {fileID: 1645654011} m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1326636135 GameObject: @@ -2182,6 +2307,36 @@ Light: m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 +--- !u!1 &1645654010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1645654011} + m_Layer: 0 + m_Name: FFASpawn + m_TagString: Respawn + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1645654011 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1645654010} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.38, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1280423821} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1734890295 GameObject: m_ObjectHideFlags: 0 @@ -3165,7 +3320,7 @@ Transform: - {fileID: 2012327805} - {fileID: 665920420} m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2084062065 GameObject: diff --git a/Assets/Scripts/Game.meta b/Assets/Scripts/Game.meta new file mode 100644 index 0000000..0e0da4a --- /dev/null +++ b/Assets/Scripts/Game.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf03d5097c37ef34a97b36e834e39cde +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Game/GameMaster.cs b/Assets/Scripts/Game/GameMaster.cs new file mode 100644 index 0000000..cc8fe3d --- /dev/null +++ b/Assets/Scripts/Game/GameMaster.cs @@ -0,0 +1,67 @@ + +using UnityEngine; +using System.Collections.Generic; +using NeonTea.Quakeball.Networking.Instances; +using NeonTea.Quakeball.Networking; +using NeonTea.Quakeball.TeaNet.Packets; + +namespace NeonTea.Quakeball.Game { + + public class GameMaster { + private NetInstance Instance; + + public GameMode GameMode; + public Dictionary> Players = new Dictionary>(); + + public GameMaster() { + Instance = Net.Singleton.Instance; + + GameMode = GameMode.TeamPlay; + Players[Team.FreeForAll] = new List(); + Players[Team.Sun] = new List(); + Players[Team.Moon] = new List(); + } + + public void PlayerJoined(NetPlayer player) { + Team team = Team.FreeForAll; + if (GameMode == GameMode.TeamPlay) { + if (Players[Team.Sun].Count > Players[Team.Moon].Count) { + team = Team.Sun; + } else { + team = Team.Moon; + } + } + Players[Team.Sun].Add(player.Id); + player.Team = team; + } + + public void PlayerLeft(NetPlayer player) { + Players[player.Team].Remove(player.Id); + } + + public Vector3 GetSpawn(NetPlayer player) { + string Tag = "Respawn"; + switch (player.Team) { + case Team.Sun: + Tag = "SunRespawn"; + break; + case Team.Moon: + Tag = "MoonRespawn"; + break; + } + GameObject[] spawnPoints = GameObject.FindGameObjectsWithTag(Tag); + return spawnPoints[Random.Range(0, spawnPoints.Length)].transform.position; + } + } + + public enum GameMode { + TeamPlay = 0, + FreeForAll = 1, + } + + public enum Team { + FreeForAll = 0, + Sun = 1, + Moon = 2, + } +} diff --git a/Assets/Scripts/Game/GameMaster.cs.meta b/Assets/Scripts/Game/GameMaster.cs.meta new file mode 100644 index 0000000..d596598 --- /dev/null +++ b/Assets/Scripts/Game/GameMaster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef14f81104861ca4c896fa03a5932554 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Networking/GameProtocol.cs b/Assets/Scripts/Networking/GameProtocol.cs index 8347d50..034d6cf 100644 --- a/Assets/Scripts/Networking/GameProtocol.cs +++ b/Assets/Scripts/Networking/GameProtocol.cs @@ -20,6 +20,8 @@ namespace NeonTea.Quakeball.Networking { RegisterPacket(typeof(HelloPckt)); RegisterPacket(typeof(PingPckt)); RegisterPacket(typeof(PingListPckt)); + RegisterPacket(typeof(ReadyPckt)); + RegisterPacket(typeof(PlayerInitPckt)); RegisterPacket(typeof(SpawnPckt)); RegisterPacket(typeof(SelfIdentPckt)); RegisterPacket(typeof(NicknamePckt)); diff --git a/Assets/Scripts/Networking/Instances/Client.cs b/Assets/Scripts/Networking/Instances/Client.cs index 2002f73..4e5b564 100644 --- a/Assets/Scripts/Networking/Instances/Client.cs +++ b/Assets/Scripts/Networking/Instances/Client.cs @@ -83,37 +83,47 @@ namespace NeonTea.Quakeball.Networking.Instances { if (packet is SelfIdentPckt) { SelfIdentPckt ident = (SelfIdentPckt)packet; LocalPlayer.Id = ident.PlayerId; + LocalPlayer.Team = ident.Team; LocalPlayer.Controlled.NetId = LocalPlayer.Id; AddPlayer(LocalPlayer); SelfIdentified = true; NicknamePckt nickpckt = new NicknamePckt(LocalPlayer.Nick); - Peer.SendReliable(Server.uid, nickpckt); + Peer.SendReliableLater(Server.uid, nickpckt); - SpawnPckt spawn = new SpawnPckt(LocalPlayer.Controlled.transform.position); - Peer.SendReliableLater(Server.uid, spawn); + ReadyPckt ready = new ReadyPckt(); + Peer.SendReliable(Server.uid, ready); } else if (packet is NicknamePckt) { NicknamePckt nick = (NicknamePckt)packet; if (nick.PlayerId != LocalPlayer.Id) { - if (!Players.ContainsKey(nick.PlayerId)) { - NetPlayer player = new NetPlayer(nick.PlayerId); - AddPlayer(player); - } Players[nick.PlayerId].Nick = nick.Nick; } } else if (packet is SpawnPckt) { SpawnPckt spawn = (SpawnPckt)packet; - if (spawn.PlayerId == LocalPlayer.Id && spawn.IsInitial) { - return; // Ignore, it's their own. - } if (spawn.IsInitial) { - Player obj = Net.SpawnPlayer(spawn.Location).GetComponent(); - Players[spawn.PlayerId].Controlled = obj; + Debug.Log("Got spawn!"); + if (spawn.PlayerId == LocalPlayer.Id) { + HandlePlayerRespawn(spawn.PlayerId, spawn.Location); + } else { + Player obj = Net.SpawnPlayer(spawn.Location).GetComponent(); + Players[spawn.PlayerId].Controlled = obj; + } } else if (Players[spawn.PlayerId].Controlled.IsDead) { if (Players.ContainsKey(spawn.PlayerId)) { HandlePlayerRespawn(spawn.PlayerId, spawn.Location); } } + } else if (packet is PlayerInitPckt) { + PlayerInitPckt init = (PlayerInitPckt)packet; + if (Players.ContainsKey(conn.uid)) { + return; // Got the same init twice + } + NetPlayer player = new NetPlayer(init.PlayerId); + player.Nick = init.NicknamePckt.Nick; + player.Team = init.Team; + Player obj = Net.SpawnPlayer(init.SpawnPckt.Location).GetComponent(); + player.Controlled = obj; + AddPlayer(player); } else if (packet is DeadPckt) { DeadPckt dead = (DeadPckt)packet; if (Players.ContainsKey(dead.DeadPlayerId)) { diff --git a/Assets/Scripts/Networking/Instances/Server.cs b/Assets/Scripts/Networking/Instances/Server.cs index de28fad..83508c0 100644 --- a/Assets/Scripts/Networking/Instances/Server.cs +++ b/Assets/Scripts/Networking/Instances/Server.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using UnityEngine; using NeonTea.Quakeball.Networking.Packets; using NeonTea.Quakeball.Players; +using NeonTea.Quakeball.Game; using NeonTea.Quakeball.Interface; using NeonTea.Quakeball.TeaNet.Peers; using NeonTea.Quakeball.TeaNet.Packets; @@ -18,6 +19,8 @@ namespace NeonTea.Quakeball.Networking.Instances { private float LastSentPing; public static float PingInterval = 1; + public GameMaster GameMaster; + public Server() { LocalPlayer = new NetPlayer(ulong.MaxValue); } @@ -35,10 +38,14 @@ namespace NeonTea.Quakeball.Networking.Instances { Net = GameObject.FindGameObjectWithTag("Net").GetComponent(); + GameMaster = new GameMaster(); + Player obj = GameObject.FindGameObjectWithTag("Player").GetComponent(); LocalPlayer.Controlled = obj; LocalPlayer.Nick = nick; AddPlayer(LocalPlayer); + + PlayerJoined(LocalPlayer); } public override void OnStop() { @@ -59,42 +66,55 @@ namespace NeonTea.Quakeball.Networking.Instances { if (p.Controlled == null) { // Not yet initialized, sending later. continue; } - NicknamePckt nick = new NicknamePckt(p.Nick, p.Id); - Peer.SendReliableLater(conn.uid, nick); + NicknamePckt nick = new NicknamePckt(p.Nick, p.Id); SpawnPckt spawn = new SpawnPckt(p.Controlled.transform.position, p.Id); - Peer.SendReliableLater(conn.uid, spawn); + PlayerInitPckt init = new PlayerInitPckt(p.Id, p.Team, nick, spawn); + Peer.SendReliableLater(conn.uid, init); } NetPlayer RemotePlayer = new NetPlayer(PlayerIdCounter++); + GameMaster.PlayerJoined(RemotePlayer); AddPlayer(RemotePlayer); - SelfIdentPckt ident = new SelfIdentPckt(); - ident.PlayerId = RemotePlayer.Id; + + SelfIdentPckt ident = new SelfIdentPckt(RemotePlayer.Id, RemotePlayer.Team); Peer.SendReliable(conn.uid, ident); } public override void Disconnected(Connection conn) { Terminal.Singleton.Println($"{conn.uid} Disconnected: {conn.ClosingReason}"); if (Players.ContainsKey(conn.uid)) { - GameObject.Destroy(Players[conn.uid].Controlled.gameObject); - RemovePlayer(Players[conn.uid]); + NetPlayer player = Players[conn.uid]; + GameMaster.PlayerLeft(player); + GameObject.Destroy(player.Controlled.gameObject); + RemovePlayer(player); } } + public void PlayerJoined(NetPlayer player) { + NicknamePckt nick = new NicknamePckt(player.Nick, player.Id); + SpawnPckt spawn = new SpawnPckt(player.Controlled.transform.position, player.Id); + PlayerInitPckt init = new PlayerInitPckt(player.Id, player.Team, nick, spawn); + SendReliableToAll(init, except: spawn.PlayerId); + } + public override void Handle(Connection conn, Packet packet) { - if (packet is NicknamePckt) { + if (packet is ReadyPckt) { + Debug.Log("Got ready!"); + if (Players[conn.uid].Controlled == null) { + NetPlayer player = Players[conn.uid]; + Player obj = Net.SpawnPlayer(GameMaster.GetSpawn(player)).GetComponent(); + player.Controlled = obj; + + SpawnPckt spawn = new SpawnPckt(obj.transform.position, player.Id); + Peer.SendReliable(conn.uid, spawn); + + PlayerJoined(player); + } + } else if (packet is NicknamePckt) { NicknamePckt nick = (NicknamePckt)packet; Players[conn.uid].Nick = nick.Nick; nick.PlayerId = conn.uid; SendReliableToAll(nick); - } else if (packet is SpawnPckt) { - SpawnPckt spawn = (SpawnPckt)packet; - if (Players[conn.uid].Controlled == null && spawn.IsInitial) { - Player obj = Net.SpawnPlayer(spawn.Location).GetComponent(); - Players[conn.uid].Controlled = obj; - - spawn = new SpawnPckt(obj.transform.position, conn.uid); - SendReliableToAll(spawn, except: spawn.PlayerId); - } } else if (packet is PlayerUpdatePckt) { PlayerUpdatePckt updatePckt = (PlayerUpdatePckt)packet; HandleUpdatePckt(conn.uid, updatePckt); @@ -219,7 +239,7 @@ namespace NeonTea.Quakeball.Networking.Instances { } public void HandlePlayerRespawn(ulong uid) { - Vector3 point = GameObject.FindGameObjectWithTag("Respawn").transform.position; + Vector3 point = GameMaster.GetSpawn(Players[uid]); Players[uid].Controlled.Respawn(point); SpawnPckt spawn = new SpawnPckt(point, uid, false); SendReliableToAll(spawn); diff --git a/Assets/Scripts/Networking/NetPlayer.cs b/Assets/Scripts/Networking/NetPlayer.cs index 2cacd27..5eb12cf 100644 --- a/Assets/Scripts/Networking/NetPlayer.cs +++ b/Assets/Scripts/Networking/NetPlayer.cs @@ -1,4 +1,5 @@ using UnityEngine; +using NeonTea.Quakeball.Game; using NeonTea.Quakeball.Players; namespace NeonTea.Quakeball.Networking { @@ -25,6 +26,7 @@ namespace NeonTea.Quakeball.Networking { } } public string Nick; + public Team Team = Team.FreeForAll; public bool Unsynced = false; public float Ping = 0; diff --git a/Assets/Scripts/Networking/Packets/DeadPckt.cs b/Assets/Scripts/Networking/Packets/DeadPckt.cs new file mode 100644 index 0000000..fa616af --- /dev/null +++ b/Assets/Scripts/Networking/Packets/DeadPckt.cs @@ -0,0 +1,25 @@ +using NeonTea.Quakeball.TeaNet.Packets; + +namespace NeonTea.Quakeball.Networking.Packets { + public class DeadPckt : Packet { + + public ulong DeadPlayerId; + public ulong KillerPlayerId; + + public DeadPckt() { } + public DeadPckt(ulong deadid, ulong killerid) { + DeadPlayerId = deadid; + KillerPlayerId = killerid; + } + + public override void Read(ByteBuffer buffer) { + DeadPlayerId = buffer.ReadULong(); + KillerPlayerId = buffer.ReadULong(); + } + + public override void Write(ByteBuffer buffer) { + buffer.Write(DeadPlayerId); + buffer.Write(KillerPlayerId); + } + } +} diff --git a/Assets/Scripts/Networking/Packets/DeadPckt.cs.meta b/Assets/Scripts/Networking/Packets/DeadPckt.cs.meta new file mode 100644 index 0000000..5da45bc --- /dev/null +++ b/Assets/Scripts/Networking/Packets/DeadPckt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5d18c60df716294fb89cdd1548901a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Networking/Packets/IdentityPackets.cs b/Assets/Scripts/Networking/Packets/IdentityPackets.cs index 2cee4dd..f2dd8d9 100644 --- a/Assets/Scripts/Networking/Packets/IdentityPackets.cs +++ b/Assets/Scripts/Networking/Packets/IdentityPackets.cs @@ -1,17 +1,27 @@ using UnityEngine; +using NeonTea.Quakeball.Game; using NeonTea.Quakeball.TeaNet.Packets; namespace NeonTea.Quakeball.Networking.Packets { public class SelfIdentPckt : Packet { public ulong PlayerId; + public Team Team; + + public SelfIdentPckt() { } + public SelfIdentPckt(ulong id, Team team) { + PlayerId = id; + Team = team; + } public override void Read(ByteBuffer buffer) { PlayerId = buffer.ReadULong(); + Team = (Team)buffer.Read(); } public override void Write(ByteBuffer buffer) { buffer.Write(PlayerId); + buffer.Write((byte)Team); } } diff --git a/Assets/Scripts/Networking/Packets/MultiplePlayerUpdatesPckt.cs b/Assets/Scripts/Networking/Packets/MultiplePlayerUpdatesPckt.cs index b6d5db9..eff2518 100644 --- a/Assets/Scripts/Networking/Packets/MultiplePlayerUpdatesPckt.cs +++ b/Assets/Scripts/Networking/Packets/MultiplePlayerUpdatesPckt.cs @@ -36,39 +36,4 @@ namespace NeonTea.Quakeball.Networking.Packets { } } } - - public class MultipleSyncsPckt : Packet { - - public List Syncs = new List(); - - public MultipleSyncsPckt() { } - - public MultipleSyncsPckt(List players) { - foreach (NetPlayer p in players) { - if (p.Controlled == null) { - continue; - } - PlayerSyncPacket pckt = p.Controlled.CreateSyncPacket(p.Id, p.Unsynced); - p.Unsynced = false; - Syncs.Add(pckt); - } - } - - public override void Read(ByteBuffer buffer) { - Syncs.Clear(); - int count = buffer.ReadInt(); - for (int i = 0; i < count; i++) { - PlayerSyncPacket pckt = new PlayerSyncPacket(); - pckt.Read(buffer); - Syncs.Add(pckt); - } - } - - public override void Write(ByteBuffer buffer) { - buffer.Write(Syncs.Count); - foreach (PlayerSyncPacket p in Syncs) { - p.Write(buffer); - } - } - } } diff --git a/Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs b/Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs new file mode 100644 index 0000000..25d529b --- /dev/null +++ b/Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs @@ -0,0 +1,40 @@ +using NeonTea.Quakeball.TeaNet.Packets; + +using System.Collections.Generic; + +namespace NeonTea.Quakeball.Networking.Packets { + public class MultipleSyncsPckt : Packet { + + public List Syncs = new List(); + + public MultipleSyncsPckt() { } + + public MultipleSyncsPckt(List players) { + foreach (NetPlayer p in players) { + if (p.Controlled == null) { + continue; + } + PlayerSyncPacket pckt = p.Controlled.CreateSyncPacket(p.Id, p.Unsynced); + p.Unsynced = false; + Syncs.Add(pckt); + } + } + + public override void Read(ByteBuffer buffer) { + Syncs.Clear(); + int count = buffer.ReadInt(); + for (int i = 0; i < count; i++) { + PlayerSyncPacket pckt = new PlayerSyncPacket(); + pckt.Read(buffer); + Syncs.Add(pckt); + } + } + + public override void Write(ByteBuffer buffer) { + buffer.Write(Syncs.Count); + foreach (PlayerSyncPacket p in Syncs) { + p.Write(buffer); + } + } + } +} diff --git a/Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs.meta b/Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs.meta new file mode 100644 index 0000000..c93e631 --- /dev/null +++ b/Assets/Scripts/Networking/Packets/MultipleSyncsPckt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3814a13ee189018459b9f5d591715dc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Networking/Packets/PlayerInitPckt.cs b/Assets/Scripts/Networking/Packets/PlayerInitPckt.cs new file mode 100644 index 0000000..7dcf2c4 --- /dev/null +++ b/Assets/Scripts/Networking/Packets/PlayerInitPckt.cs @@ -0,0 +1,43 @@ + +using NeonTea.Quakeball.Game; +using NeonTea.Quakeball.TeaNet.Packets; + +namespace NeonTea.Quakeball.Networking.Packets { + public class PlayerInitPckt : Packet { + + public ulong PlayerId; + public Team Team; + public SpawnPckt SpawnPckt; + public NicknamePckt NicknamePckt; + + public PlayerInitPckt() { } + public PlayerInitPckt(ulong id, Team team, NicknamePckt nickname, SpawnPckt spawn) { + PlayerId = id; + Team = team; + NicknamePckt = nickname; + SpawnPckt = spawn; + } + + + public override void Read(ByteBuffer buffer) { + PlayerId = buffer.ReadULong(); + Team = (Team)buffer.Read(); + SpawnPckt = new SpawnPckt(); + SpawnPckt.Read(buffer); + NicknamePckt = new NicknamePckt(); + NicknamePckt.Read(buffer); + } + + public override void Write(ByteBuffer buffer) { + buffer.Write(PlayerId); + buffer.Write((byte)Team); + SpawnPckt.Write(buffer); + NicknamePckt.Write(buffer); + } + } + + public class ReadyPckt : Packet { + public override void Read(ByteBuffer buffer) { } + public override void Write(ByteBuffer buffer) { } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Networking/Packets/PlayerInitPckt.cs.meta b/Assets/Scripts/Networking/Packets/PlayerInitPckt.cs.meta new file mode 100644 index 0000000..6ec9a3e --- /dev/null +++ b/Assets/Scripts/Networking/Packets/PlayerInitPckt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad1f5a63b881dc84b8fb98abbbd26073 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs b/Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs new file mode 100644 index 0000000..66615f9 --- /dev/null +++ b/Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using NeonTea.Quakeball.TeaNet.Packets; + +namespace NeonTea.Quakeball.Networking.Packets { + public class PlayerSyncPacket : Packet { + public ulong PlayerId; + public bool Unsynced; + + public Vector3 Location; + public Vector3 GroundVelocity; + + public PlayerSyncPacket() { } + public PlayerSyncPacket(ulong id, bool unsynced, Vector3 location, Vector3 groundVelocity) { + PlayerId = id; + Unsynced = unsynced; + Location = location; + GroundVelocity = groundVelocity; + } + + public override void Read(ByteBuffer buffer) { + PlayerId = buffer.ReadULong(); + Unsynced = buffer.ReadBool(); + Location = buffer.ReadVector3(); + GroundVelocity = buffer.ReadVector3(); + } + + public override void Write(ByteBuffer buffer) { + buffer.Write(PlayerId); + buffer.Write(Unsynced); + buffer.Write(Location); + buffer.Write(GroundVelocity); + } + } +} diff --git a/Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs.meta b/Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs.meta new file mode 100644 index 0000000..0c4dc95 --- /dev/null +++ b/Assets/Scripts/Networking/Packets/PlayerSyncPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9142bdd9611dcb44ad5fedeccf38892 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Networking/Packets/PlayerUpdatePckt.cs b/Assets/Scripts/Networking/Packets/PlayerUpdatePckt.cs index 8a65c8e..a2c4fcf 100644 --- a/Assets/Scripts/Networking/Packets/PlayerUpdatePckt.cs +++ b/Assets/Scripts/Networking/Packets/PlayerUpdatePckt.cs @@ -37,34 +37,4 @@ namespace NeonTea.Quakeball.Networking.Packets { buffer.Write(Yaw); } } - - public class PlayerSyncPacket : Packet { - public ulong PlayerId; - public bool Unsynced; - - public Vector3 Location; - public Vector3 GroundVelocity; - - public PlayerSyncPacket() { } - public PlayerSyncPacket(ulong id, bool unsynced, Vector3 location, Vector3 groundVelocity) { - PlayerId = id; - Unsynced = unsynced; - Location = location; - GroundVelocity = groundVelocity; - } - - public override void Read(ByteBuffer buffer) { - PlayerId = buffer.ReadULong(); - Unsynced = buffer.ReadBool(); - Location = buffer.ReadVector3(); - GroundVelocity = buffer.ReadVector3(); - } - - public override void Write(ByteBuffer buffer) { - buffer.Write(PlayerId); - buffer.Write(Unsynced); - buffer.Write(Location); - buffer.Write(GroundVelocity); - } - } } diff --git a/Assets/Scripts/Networking/Packets/SpawnPckt.cs b/Assets/Scripts/Networking/Packets/SpawnPckt.cs index dc5e350..2099fb8 100644 --- a/Assets/Scripts/Networking/Packets/SpawnPckt.cs +++ b/Assets/Scripts/Networking/Packets/SpawnPckt.cs @@ -28,26 +28,4 @@ namespace NeonTea.Quakeball.Networking.Packets { buffer.Write(IsInitial); } } - - public class DeadPckt : Packet { - - public ulong DeadPlayerId; - public ulong KillerPlayerId; - - public DeadPckt() { } - public DeadPckt(ulong deadid, ulong killerid) { - DeadPlayerId = deadid; - KillerPlayerId = killerid; - } - - public override void Read(ByteBuffer buffer) { - DeadPlayerId = buffer.ReadULong(); - KillerPlayerId = buffer.ReadULong(); - } - - public override void Write(ByteBuffer buffer) { - buffer.Write(DeadPlayerId); - buffer.Write(KillerPlayerId); - } - } } \ No newline at end of file diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 9c0210c..64b9774 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -8,6 +8,8 @@ TagManager: - RemotePlayer - Net - DeadScreen + - MoonRespawn + - SunRespawn layers: - Default - TransparentFX