예제 #1
0
    void Update()
    {
        switch (gameState)
        {
        case GameState.Initialized:
        {
            moveTimer += Time.deltaTime;
            player.MoveTo(Vector3.Lerp(_PlayerData._SpawnPoint.pSpawnPoint, _PlayerData._StartPoint.pSpawnPoint, moveTimer * 1.0f));
            if (moveTimer >= 1.0f)
            {
                moveTimer = 0.0f;
                SetState(GameState.InGame);
            }
        } break;

        case GameState.InGame:
        {
            gameSpeed += Time.deltaTime * gameData._DifficultyFactor;
            SetSpeed(gameSpeed);
            player.Update();

            for (int i = 0; i < _ObstaclePool.pActiveList.Count; i++)
            {
                ObstaclePool.ObstacleCache obstacle = _ObstaclePool.pActiveList[i];
                if (player.IsTouching(obstacle.mCollider))
                {
                    GameOver();
                    return;
                }

                float angle = Vector3.Dot(Vector3.right, (player.pTransform.position - obstacle.mTransform.position).normalized);
                //if (angle > 0.5f && angle < 0.8f)
                //{
                //	Debug.Log("Angle : " + angle);
                //	Debug.Break();
                //}

                if (obstacle.mCollider.isTrigger == false &&
                    angle > 0.8f)
                {
                    objectDodged++;
                    obstacle.mCollider.isTrigger = true;
                    UpdateCounter();
                }
            }

            spawnTimer += Time.deltaTime;
            if (spawnTimer >= nextObstacleSpawnTimer)
            {
                spawnTimer             = 0.0f;
                nextObstacleSpawnTimer = 2.0f + UnityEngine.Random.Range(0, 2.0f);
                _ObstaclePool.Spawn(_ObstacleSpawnPoint);
            }
        } break;
        }
    }