//public GameObject EnemyCreation(GameObject obj, GameObject parent) //TODO: is this needed ? no one calls it //{ // GameObject o = Instantiate(obj, parent.transform); // //if (OnEnemyAddEvent != null) // // OnEnemyAddEvent.Invoke(o.GetComponent<GameNetworkObject>()); // return o; //} //InstantiateEnemy will be called when command EnemySpawn is received from host private void InstantiateEnemy(byte[] data, uint length, CSteamID senderId) { if (!poolRoot && PoolRoot) { poolRoot = GameObject.Instantiate(PoolRoot).transform; poolRoot.name = "Enemies Root"; } int Id = ByteManipulator.ReadInt32(data, 0); //Debug.Log("received: " + Id); float positionX = ByteManipulator.ReadSingle(data, 4); float positionY = ByteManipulator.ReadSingle(data, 8); float positionZ = ByteManipulator.ReadSingle(data, 12); Vector3 position = new Vector3(positionX, positionY, positionZ); SOPool pool = EnemyPools[UnityEngine.Random.Range(0, EnemyPools.Length)]; bool parented; int nullObjsRemovedFromPool; GameObject enemy = pool.DirectGet(poolRoot, out nullObjsRemovedFromPool, out parented); enemy.GetComponent <Enemy>().Pool = pool; GameNetworkObject NObj = enemy.GetComponent <GameNetworkObject>(); NObj.SetNetworkId(Id); //cb.transform.position = position; NavMeshHit hit; if (NavMesh.SamplePosition(position, out hit, 1f, Mask)) { enemy.GetComponent <NavMeshAgent>().Warp(hit.position); } else { Debug.LogWarning("NavMesh point for enemy spawn not found , souce pos = " + position); } enemy.SetActive(true); OnEnemyAddEvent.Raise(NObj); //if (!activeEnemyList.Contains(enemy.GetComponent<Enemy>())) // enemiesToAdd.Add(enemy.GetComponent<Enemy>()); }