/// <summary> /// Invokes all listeners of this event /// </summary> public override void Raise(GameNetworkObject Value0) { for (int i = listeners.Count - 1; i >= 0; i--) { listeners[i].OnEventRaised(Value0); } }
/// <summary> /// Invokes all listeners of this event /// </summary> public override void Raise(GameNetworkObject Value0) { if (Event != null) { Event.Invoke(Value0); } }
private void OnEnable() { if (!networkId) { networkId = GetComponent <GameNetworkObject>(); } randomSpawnTimer = Random.Range(0f, 5.0f); Life = Stats.MaxHealth; Destroy = false; Recycling = false; }
private void Start() { gnObject = GetComponent <GameNetworkObject>(); if (Client.IsHost) { networkState = HostState; } else { networkState = ClientState; } }
private void OnEnable() { if (!myTransform) { gnObject = GetComponent <GameNetworkObject>(); myTransform = transform; } if (Client.IsHost) { StartCoroutine(SendTransform()); } startPos = endPos = transform.position; startRot = endRot = transform.rotation; prediction = new Prediction(startPos, startRot); }
//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>()); }
public void PerformShoot() { UnityEngine.Random.InitState(Time.frameCount); for (int i = 0; i < rays.Count; i++) { float distance = rays[i].Speed * Time.deltaTime; distance = rays[i].Distance + distance > rays[i].MaxDistance ? rays[i].MaxDistance - rays[i].Distance : distance; rays[i].Distance += distance; //if (Application.isEditor) // Debug.DrawRay(rays[i].Ray.origin, rays[i].Ray.direction * distance, Color.red, 0.5f); if (Physics.Raycast(rays[i].Ray, out raycastHit, distance)) { //if (Application.isEditor) // Debug.Log(raycastHit.collider); if (rays[i].ActivateCallbacks) { GameNetworkObject obj = raycastHit.collider.gameObject.GetComponent <GameNetworkObject>(); if (obj != null) { SendHitToHost(obj.NetworkId); } } removeRays.Add(rays[i]); } if (rays[i].Distance >= rays[i].MaxDistance) { removeRays.Add(rays[i]); } rays[i].Ray.origin += rays[i].Ray.direction * distance; } for (int j = 0; j < removeRays.Count; j++) { rays.Remove(removeRays[j]); } removeRays.Clear(); }
//InstantiateEnemy will be called when command EnemySpawn is received from host private void InstantiateEnemy(byte[] data, uint length, CSteamID senderId) { int Id = data[0]; //Debug.Log("received: " + Id); float positionX = BitConverter.ToSingle(data, 1); float positionY = BitConverter.ToSingle(data, 5); float positionZ = BitConverter.ToSingle(data, 9); Vector3 position = new Vector3(positionX, positionY, positionZ); GameObject enemy = enemies.Get((cb) => { //function called on the instance of the object that will be returned with the pool.Get() method GameNetworkObject NObj = cb.GetComponent <GameNetworkObject>(); NObj.NetworkId = Id; //cb.transform.position = position; cb.GetComponent <NavMeshAgent>().Warp(position); cb.SetActive(true); cb.GetComponent <NavMeshAgent>().enabled = true; OnEnemyAddEvent.Invoke(NObj); }); //if (!activeEnemyList.Contains(enemy.GetComponent<Enemy>())) // enemiesToAdd.Add(enemy.GetComponent<Enemy>()); }
public void Shoot(bool activateCallbacks = false) { //rotate muzzle transform float r = gun.values.Range; muzzle.transform.localRotation = Quaternion.Euler(UnityEngine.Random.Range(-r, r), 0, UnityEngine.Random.Range(-r, r)); //instanziate ray Ray ray = new Ray(muzzle.transform.position, muzzle.transform.forward); //method for start shooting float distance = shootingType == ShootingType.Single ? gun.values.MaxDistance : gun.values.Speed * Time.deltaTime; //if (Application.isEditor) // Debug.DrawRay(ray.origin, ray.direction * distance, Color.red, 0.5f); //if it shot someone if (Physics.Raycast(ray, out raycastHit, distance)) { //this method went call when if (activateCallbacks) { GameNetworkObject obj = raycastHit.collider.gameObject.GetComponent <GameNetworkObject>(); if (obj != null) { SendHitToHost(obj.NetworkId); } } } else if (shootingType == ShootingType.Consecutive) // else add the ray in a list { ShootsMgr.AddRay(new RayPlus(ray.origin + ray.direction * distance, ray.direction, distance, gun.values.Damage, gun.values.Speed, gun.values.MaxDistance, activateCallbacks)); } //set rotation on identity muzzle.transform.localRotation = Quaternion.identity; gun.Shoot(); }
public void RemoveEnemyFromScene(GameNetworkObject toRemove) { IdEnemies.Remove(toRemove.NetworkId); }
public void AddEnemyInScene(GameNetworkObject toAdd) { //enemiesInScene.Add(toAdd); IdEnemies.Add(toAdd.NetworkId, toAdd); }
private void Start() { gnOnject = GetComponent <GameNetworkObject>(); }
/// <summary> /// Invokes all listeners of this event /// </summary> public abstract void Raise(GameNetworkObject Value0);
/// <summary> /// Invokes unity event /// </summary> internal void OnEventRaised(GameNetworkObject Value0) { Actions.Invoke(Value0); }