Exemplo n.º 1
0
    public void OnTicUpdate(float ticNumber)
    {
        if (m_canSpawnNextHazard)
        {
            Hazard prefabToSpawn = null;
            m_hazardsToSpawn.Shuffle();
            foreach (Hazard hazardToSpawn in m_hazardsToSpawn)
            {
                if (ticNumber % hazardToSpawn.UpdateEveryTicTime == 0)
                {
                    prefabToSpawn = hazardToSpawn;
                    break;
                }
            }
            if (prefabToSpawn == null)
            {
                return;
            }
            m_hazardsToSpawn.Remove(prefabToSpawn);
            bool hasEntityOnCell = true;
            GameMaster.EDirection chooseDirection = default(GameMaster.EDirection);
            Vector3 spawnPoint = Vector3.zero;
            int     tryLimit   = 0;
            while (hasEntityOnCell)
            {
                chooseDirection = prefabToSpawn.AllowedDirections[UnityEngine.Random.Range(0, prefabToSpawn.AllowedDirections.Count)];
                spawnPoint      = GameMaster.Instance.GetSpawnPosition(chooseDirection);
                hasEntityOnCell = GameMaster.Instance.Grid.GetCell(spawnPoint).Entities.Count > 0;
                if (tryLimit > 1000)
                {
                    tryLimit = 0;
                    return;                    //Spawn on next frame
                }
                else
                {
                    tryLimit++;
                }
            }
            Hazard hazard = ResourceManager.Instance.AcquireInstance(prefabToSpawn, null);
            hazard.transform.position = spawnPoint;
            switch (chooseDirection)
            {
            case GameMaster.EDirection.UP:
                hazard.transform.right = Vector2.down;
                break;

            case GameMaster.EDirection.DOWN:
                hazard.transform.right = Vector2.up;
                break;

            case GameMaster.EDirection.RIGHT:
                hazard.transform.right = Vector2.left;
                break;

            case GameMaster.EDirection.LEFT:
                hazard.transform.right = Vector2.right;
                break;
            }
            hazard.Init(chooseDirection);
            m_canSpawnNextHazard = false;
        }
    }