//Network Events
        public GameObject SendCreep(string poolName) //sent from local client to network
        {
            var objToSpawn = PoolManager.Instance.SpawnFromPool(poolName, CreepSpawnPoint.position, CreepSpawnPoint.rotation);

            if (!PlayerMatchData.CanAfford(objToSpawn.GetComponent <Creep>().CreepCost))
            {
                if (PlayerMatchData.DebugLogNetworkEvents)
                {
                    Debug.Log(NetworkOwner.PlayerName + " does not have enough gold!");
                }

                PoolManager.Instance.ReturnToPool(objToSpawn);
                return(null);
            }

            SetCreepInfo(objToSpawn, NetworkOwner.photonView.ViewID, NetworkOwner);
            InterfaceInfo(objToSpawn);

            PlayerMatchData.IncreasePlayerIncome_Event(objToSpawn.GetComponent <Creep>().Income);
            PlayerMatchData.DeductPlayerGold_Event(objToSpawn.GetComponent <Creep>().CreepCost);

            object[] sendCreepData = new object[] { NetworkOwner.photonView.ViewID, poolName, CreepSpawnPoint.position, CreepSpawnPoint.rotation };

            RaiseEventOptions options = new RaiseEventOptions()
            {
                CachingOption = EventCaching.DoNotCache,
                Receivers     = ReceiverGroup.Others
            };

            PhotonNetwork.RaiseEvent((byte)EventIdHandler.EVENT_IDs.SEND_CREEP_EVENT, sendCreepData, options, SendOptions.SendUnreliable);

            return(objToSpawn);
        }
Beispiel #2
0
        //Network Events
        public GameObject PlaceTower(string tag, Vector3 pos, Quaternion rot)//sent from local client to network
        {
            var node = SelectionManager.Instance.CurrentlySelectedObject.GetComponent <Node>();

            if (tag == null)
            {
                Debug.LogWarning(tag + " is not found!");
            }

            if (node.IsOccupied)
            {
                Debug.Log(node + " is occupied.");
                return(null);
            }

            var objToSpawn = PoolManager.Instance.SpawnFromPool(tag, pos, rot);
            var turret     = objToSpawn.GetComponent <Turret>();

            turret.NetworkOwner    = NetworkOwner;
            turret.PlayerMatchData = PlayerMatchData;

            if (!PlayerMatchData.CanAfford(objToSpawn.GetComponent <Turret>().TowerCost))
            {
                if (PlayerMatchData.DebugLogNetworkEvents)
                {
                    Debug.Log(NetworkOwner.PlayerName + " does not have enough gold!");
                }

                PoolManager.Instance.ReturnToPool(objToSpawn);
                return(null);
            }

            PlayerMatchData.DeductPlayerGold_Event(turret.TowerCost);
            node.IsOccupied = true;

            object[] towerPlaceData = new object[] { NetworkOwner.photonView.ViewID, tag, pos, rot };

            RaiseEventOptions options = new RaiseEventOptions()
            {
                CachingOption = EventCaching.DoNotCache,
                Receivers     = ReceiverGroup.Others
            };

            PhotonNetwork.RaiseEvent((byte)EventIdHandler.EVENT_IDs.PLACE_TOWER_EVENT, towerPlaceData, options, SendOptions.SendReliable);

            return(objToSpawn);
        }