Beispiel #1
0
        private void PacketSwitch(byte[] packet)
        {
            if (packet == null)
            {
                //Debug.Log("ERROR: client recieved NULL packet!!");
                return;
            }
            if (packet.Length == 0)
            {
                Debug.LogWarning("ERROR: client recieved EMPTY packet!!");
                return;
            }

            // Get type to switch on
            NewPackets.PacketType type;
            packet = NewPackets.PopTypeHeader(packet, out type);

            //print($"Client recieved packet of type {type}");

            if (_packetCallbacks.ContainsKey(type))
            {
                _packetCallbacks[type](packet);
            }
            else
            {
                Debug.LogWarning("Net Client: ERROR! Packet callback not added for that type!");
            }
        }
Beispiel #2
0
        public void AddMyFaction(byte[] packet)
        {
            byte factionIndex = 255; // invoke runtime error?

            NewPackets.PopByteHeader(packet, out factionIndex);

            // This is my faction!
            myFactionID = factionIndex;

            print("ADDING MY FACTION " + myFactionID);

            if (FactionEntities[factionIndex, 0] != null)
            {
                Debug.Log("SETTING CAM POSITION");
                Camera.main.transform.position = FactionEntities[factionIndex, 0].transform.position - new Vector3(0, 0, -10);
            }
        }
Beispiel #3
0
        public void RecieveFactionUpdate(byte[] packet)
        {
            byte factionIndex = 255; // invoke runtime error?

            packet = NewPackets.PopByteHeader(packet, out factionIndex);

            if (factionIndex == myFactionID)
            {
                NewPackets.FactionUpdate fUp = new NewPackets.FactionUpdate(packet);

                if (1 < fUp.credits - Credits)
                {
                    GameObject.FindObjectOfType <AudioManager>().PlaySell();
                }
                if (Credits > fUp.credits)
                {
                    GameObject.FindObjectOfType <AudioManager>().PlayBuy();
                }

                Credits.Value      = fUp.credits;
                CreditCounter.text = "" + Credits;
            }
        }
Beispiel #4
0
 public void Send(byte[] packet, NewPackets.PacketType type, byte from)
 {
     packet = NewPackets.AppendByteHeader(from, packet);
     packet = NewPackets.AppendTypeHeader(type, packet);
     Client.Send(packet);
 }
Beispiel #5
0
        public void RecieveEntityUpdate(byte[] packet)
        {
            // Get the faction index from the header
            byte factionIndex = 0;

            packet = NewPackets.PopByteHeader(packet, out factionIndex);

            // Deserialize
            NewPackets.EntityUpdate entityUpdate = new NewPackets.EntityUpdate(packet);

            if (FactionEntities[factionIndex, entityUpdate.unitIndex] == null)
            {
                // Implicitly populate faction entities
                switch (entityUpdate.unitType)
                {
                // Units
                case Constants.Entities.
                    Miner.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] =
                        GameObject.Instantiate(factionIndex == 1 ? Faction1Miner : Faction2Miner).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    Digger.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] =
                        GameObject.Instantiate(factionIndex == 1 ? Faction1Digger : Faction2Digger).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    Soldier.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] =
                        GameObject.Instantiate(factionIndex == 1 ? Faction1Soldier : Faction2Soldier).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    Hauler.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] =
                        GameObject.Instantiate(factionIndex == 1 ? Faction1Hauler : Faction2Hauler).GetComponent <Entity>();
                    break;

                //...
                // Deployables
                case Constants.Entities.
                    QuickSand.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(CementBombEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    TimeBomb.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(TimeBombEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    ProximityMine.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(MineEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    GasBomb.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(GasBombEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    HealStation.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(HealStationEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    SonicBomb.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(SonicBombEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    AntimatterBomb.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(AntimatterBombEntityPrefab).GetComponent <Entity>();
                    break;

                case Constants.Entities.
                    SandBags.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(SandBagsEntityPrefab).GetComponent <Entity>();
                    break;

                // Hub
                case Constants.Entities.Hub.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] =
                        GameObject.Instantiate(factionIndex == 1 ? Faction1Hub : Faction2Hub).GetComponent <Entity>();
                    break;

                // Ore
                case Constants.Entities.Ore.ID:
                    FactionEntities[factionIndex, entityUpdate.unitIndex] = GameObject.Instantiate(OreEntityPrefab).GetComponent <Entity>();
                    break;

                default:
                    Debug.Log("PLAYER ERROR: NO CASE FOR THAT ENTITY!");
                    break;
                }

                // Manually set indices for requests
                FactionEntities[factionIndex, entityUpdate.unitIndex].factionID = factionIndex;
                FactionEntities[factionIndex, entityUpdate.unitIndex].entityID  = entityUpdate.unitIndex;
            }

            // Route new state to correct unit int correct faction
            FactionEntities[factionIndex, entityUpdate.unitIndex].UpdateState(entityUpdate);

            //print("GOT ENTITY UPDATE");
        }