Exemple #1
0
    void Update()
    {
        if (GameManager.inst.state != GameManager.GameState.InGame)
        {
            return;
        }

        GameManager.GameplayParams par = GameManager.inst.currentParams;

        float dt = Time.deltaTime;

        delay    += dt * normalizedSpeed * par.delayPerUnitOfDistance;
        distance += dt * speed;
        duration += dt;

        const float SPEED_SMOOTH_TIME = 1;

        _speed = Mathf.SmoothDamp(_speed, _targetSpeed, ref _speedVelocity, SPEED_SMOOTH_TIME);

        if (InputManager.inst.left)
        {
            AudioManager.inst.playSound("Click");
            IssueLeftCommand();
        }
        else if (InputManager.inst.right)
        {
            AudioManager.inst.playSound("Click");
            IssueRightCommand();
        }

        gameObject.transform.position = Vector3.SmoothDamp(gameObject.transform.position, targetPosition, ref velocity, laneChangeTime);
        gameObject.transform.rotation = Quaternion.AngleAxis(Mathf.Clamp(-velocity.x * laneChangeYawIntensity, -laneChangeMaxYaw, laneChangeMaxYaw), Vector3.forward);

        _glowTarget = canTakeDamage ? 0 : 1;
        _glow       = Mathf.SmoothDamp(_glow, _glowTarget, ref _glowVelocity, 0.2f);
        _shipMaterial.SetFloat(_GlowID, _glow);
    }
Exemple #2
0
    void spawnNext()
    {
        _lastSpawnTime2 = _lastSpawnTime;
        _lastSpawnTime  = Time.time;
        Hitable prefab = astroidPrefab;

        GameManager.GameplayParams par = GameManager.inst.currentParams;

        float timeSinceLastPU = Time.time - _timeAtLastPU;

        if (timeSinceLastPU >= par.spawnPUEvry)
        {
            /*
             * const float RANDOM_CHANCE = 0.2f;	// random chance of getting a powerup for no reason
             * const float MIN_DELAY = 0.25f;		// minimum delay before we can get Amplify
             * const float MIN_JUMP_GAP = 15;      // minimum time sice last Jump before we can get it again
             *
             * _availablePUs.Clear();
             * if (Player.instance.currentHealth < Player.instance.maxHealth || Random.value < RANDOM_CHANCE)
             *      _availablePUs.Add(repairPrefab);
             * if (Player.instance.delay > MIN_DELAY || Random.value < RANDOM_CHANCE)
             *      _availablePUs.Add(amplifyPrefab);
             * if (Time.time - _timeAtLastJump > MIN_JUMP_GAP || Random.value < RANDOM_CHANCE)
             *      _availablePUs.Add(jumpPrefab);
             *
             * int numPowerups = _availablePUs.Count;
             * if (numPowerups > 0) {
             *      _numAstroidsSinceLastPU = 0;
             *      int index = (int)(Random.value * numPowerups);
             *      prefab = _availablePUs[index];
             *      if (prefab.type == Hitable.HitableType.Jump)
             *              _timeAtLastJump = Time.time;
             * }
             */

            switch (_powerupIndex)
            {
            case 0: prefab = repairPrefab; break;

            case 1:
                prefab = amplifyPrefab;
                var baseAmplifyAmount = Player.instance.delay - _delayWhenLastAmplifySpawned;
                var bonus             = baseAmplifyAmount * par.amplifyBonusPercent;
                Player.instance.amplifyAmount = baseAmplifyAmount + bonus;
                break;

            case 2: prefab = jumpPrefab; break;
            }
            _powerupIndex = (_powerupIndex + 1) % 3;
            _timeAtLastPU = Time.time;
        }

        int lane = _lastLane;

        while (lane == _lastLane)
        {
            lane = Random.Range(-1, 2);
        }
        _lastLane = lane;

        Hitable hitable = Instantiate(prefab);

        hitable.transform.SetParent(transform);
        hitable.transform.localPosition = new Vector3(lane * laneWidth, 0.5f, _laneLength / 2f);
        _hitables.Add(hitable);
    }
Exemple #3
0
    void updateEnemies()
    {
        if (GameManager.inst.state == GameManager.GameState.InGame)
        {
            GameManager.GameplayParams par = GameManager.inst.currentParams;

            float timeSinceLastSpawn = Time.time - _lastSpawnTime;
            float timeSincePrevSpawn = Time.time - _lastSpawnTime2;

            bool needToSpawn = timeSinceLastSpawn >= _timeToNextSpawn;
            if (needToSpawn)
            {
                needToSpawn = timeSincePrevSpawn >= par.spawnSecondaryGap;
            }

            /*
             * // make sure we don't spawn too much
             * bool needToSpawn = timeSinceLastSpawn >= par.spawnMinGap && timeSincePrevSpawn >= par.spawnSecondaryGap;
             * if (needToSpawn) {
             *      // make sure we spawn too sparsly
             *      needToSpawn = timeSinceLastSpawn >= par.spawnMaxGap;
             *      // randomize spawning
             *      if (needToSpawn == false) {
             *              needToSpawn = Random.value < par.spawnChance * Time.deltaTime;
             *      }
             * }
             */

            if (needToSpawn)
            {
                spawnNext();
                _timeToNextSpawn = Mathf.Lerp(par.spawnMinGap, par.spawnMaxGap, Random.value);
            }
        }

        Vector3 playerPos = Player.instance.transform.localPosition;
        Vector3 offset    = new Vector3(0, 0, _traveledDistanceDelta);

        for (int i = _hitables.Count - 1; i >= 0; i--)
        {
            Hitable hitable = _hitables[i];
            hitable.transform.localPosition -= offset;
            Vector3 hitablePos = hitable.transform.localPosition;

            if (hitable.destroyed == false && (hitable.canDamage == false || Player.instance.canTakeDamage))
            {
                float distX = Mathf.Abs(hitablePos.x - playerPos.x);
                float distZ = Mathf.Abs(hitablePos.z - playerPos.z);

                const float THRESH_X = 0.5f;
                const float THRESH_Z = 0.5f;
                if (distX < THRESH_X && distZ < THRESH_Z)
                {
                    hitable.destroy();
                }
                if (distZ < THRESH_Z && hitable.type == Hitable.HitableType.Amplify)
                {
                    _delayWhenLastAmplifySpawned = Player.instance.delay;
                }
            }

            if (hitablePos.z < -_laneLength / 2f)
            {
                _hitables.RemoveAt(i);
                Destroy(hitable.transform.gameObject);
            }
        }
    }