void Start() { InvokeRepeating("RespawnFromPool", 0f, TIME_BETWEEN_ASTEROID); _pool = new GameObject[OBJECT_POOL_SIZE]; for (int i = 0; i < OBJECT_POOL_SIZE; ++i) { _pool[i] = (GameObject)Instantiate(_asteroidPrefab, UtilBehaviour.GetRandomAsteroidPosition(), Random.rotation); _pool[i].name = "AsteroidPoolObject" + i; //Set delegate to call fragments when it is destoyed _pool[i].GetComponent <AsteroidBehaviour>()._delegate += new SpawnFragmentDelegate(SpawnFragment); //Random Vector3 velocity _pool[i].GetComponent <Rigidbody> ().velocity = new Vector3( Random.Range(-ASTEROID_VELOCITY, ASTEROID_VELOCITY) * 0.5f, 0f, Random.Range(-ASTEROID_VELOCITY, ASTEROID_VELOCITY) * 0.5f); _pool[i].SetActive(true); _pool[i].transform.parent = this.gameObject.transform; NetworkServer.Spawn(_pool[i]); } }
void FixedUpdate() { if (!isLocalPlayer || _isDead) { return; } if (BoostButtonBehaviour.instance.pressed) { if (!_boosted) { _boost.Play(); _boosted = true; _rb.AddForce(transform.forward * _BOOST_SPEED, ForceMode.Acceleration); } else { _rb.AddForce(transform.forward * _SPEED, ForceMode.Acceleration); } } else { _boosted = false; } if (UtilBehaviour.IsOutOfWorld(_rb.position)) { _outOfCombatAreaObserver.OnNotify(true); } else { _outOfCombatAreaObserver.OnNotify(false); } }
void Update() { if (!isServer) { return; } if (UtilBehaviour.IsOutOfWorld(gameObject.transform.position) && !_destoyed) { _destoyed = true; CmdDestroy(true); } /// From initial asteroid position to game position if (_startAnimation && Mathf.Abs(transform.position.y) < UtilBehaviour.Y_GAME - IGNORE_LERP) { transform.position = Vector3.Lerp(transform.position, new Vector3(transform.position.x, UtilBehaviour.Y_GAME, transform.position.z), Time.deltaTime * START_ANIMATION_DURATION); } else { _startAnimation = false; transform.position = new Vector3(gameObject.transform.position.x, UtilBehaviour.Y_GAME, gameObject.transform.position.z); } }
void RpcRespawn() { _score = _INITIAL_SCORE; _mesh.SetActive(true); _rb.angularVelocity = Vector3.zero; _rb.velocity = Vector3.zero; _rb.AddForce(Vector3.zero); _rocket.Play(); gameObject.transform.position = UtilBehaviour.GetRandomPosition(); gameObject.transform.rotation = Quaternion.identity; _isDead = false; }
/// <summary> /// This method spawn each client joined on server. /// </summary> /// <param name="conn">Client connection</param> /// <param name="playerControllerId">Player controller identifier.</param> public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) { foreach (GameObject prefab in spawnPrefabs) { //TODO: if (PlayerBehaviour.instance.GetShip () == prefab.transform.name) { GameObject playerShip = (GameObject)GameObject.Instantiate(prefab, UtilBehaviour.GetRandomPosition(), Quaternion.identity); //GameObject playerShip = (GameObject)GameObject.Instantiate (prefab, new Vector3(0,6,0), Quaternion.identity); NetworkServer.AddPlayerForConnection(conn, playerShip, playerControllerId); break; //} } }
void Update() { if (!isServer) { return; } if ((UtilBehaviour.IsOutOfWorld(gameObject.transform.position) || UtilBehaviour.IsOutOfY(gameObject.transform.position.y)) && !_destoyed) { _destoyed = true; CmdDestroy(true); } }
/// <summary> /// Method to respawn asteroid from pool. /// </summary> void RespawnFromPool() { foreach (GameObject obj in _pool) { if (!obj.activeInHierarchy) { obj.transform.position = UtilBehaviour.GetRandomAsteroidPosition(); obj.transform.rotation = Random.rotation; obj.transform.localScale = Vector3.one; obj.SetActive(true); NetworkServer.Spawn(obj); break; } } }