// Start is called before the first frame update
    void Start()
    {
        mainCamera = Camera.main;

        OnEnemyExited += (whoExited) => playerHealth.AdjustHealth();
        PlayerHealth.OnHealthChanged += (newHealth) =>
        {
            if (newHealth <= 0)
            {
                SceneManager.LoadScene(gameOverSceneName);
            }
        };

        OnMoneyChanged += (oldMoney, newMoney) => playerMoneyTextElement.text = ((Int32)newMoney).ToString("C");
        Money           = Money;

        towerGrid = new TowerGrid(gridWidth, gridHeight, gridScale, gridOrigin.transform.position, gridDisabledPositions);

        mouseObserver = GetComponent <MouseObserverBevahior>();

        mouseObserver.OnMouseDrag  += MouseDrag;
        mouseObserver.OnMousePress += MousePress;
        mouseObserver.OnMouseClick += MouseClick;

        SetupWaves();
        StartCoroutine("SpawnWaves");

        CreateTowerPlacementLineRenderers();
        CreateEnemyPathLineRenderer();
    }
Ejemplo n.º 2
0
 void OnDestroy()
 {
     if (player != null)
     {
         player.GetComponent <PlayerController>().AddBlock();
     }
     if (mode == BlockMode.Placed)
     {
         GameObject pb = GameObject.Find("placementBlock");
         if (pb != null)
         {
             TowerGrid t = pb.GetComponent <TowerGrid>();
             if (blockType == 0)
             {
                 t.ClearSquare(z - 1, y);
                 t.ClearSquare(z, y);
                 t.ClearSquare(z + 1, y);
             }
             else if (blockType == 1)
             {
                 t.ClearSquare(z, y - 1);
                 t.ClearSquare(z, y);
                 t.ClearSquare(z, y + 1);
             }
             else if (blockType == 2)
             {
                 t.ClearSquare(z - 1, y);
                 t.ClearSquare(z + 1, y);
                 t.ClearSquare(z, y - 1);
                 t.ClearSquare(z, y);
                 t.ClearSquare(z, y + 1);
             }
             else if (blockType == 3)
             {
                 t.ClearSquare(z - 1, y - 1);
                 t.ClearSquare(z + 1, y - 1);
                 t.ClearSquare(z - 1, y);
                 t.ClearSquare(z, y);
                 t.ClearSquare(z + 1, y);
             }
         }
     }
 }
Ejemplo n.º 3
0
    void BlockPlacement()
    {
        GameObject pointedObj = player.GetComponent <PlayerController>().pointedObj;
        Vector3    pos        = transform.position;

        z = (int)pos.z + 12;
        y = (int)(pos.y - 0.5f);
        if (blockType == 3)
        {
            y += 1;
        }
        TowerGrid t = null;

        if (pointedObj != null)
        {
            if (pointedObj.name == "placementBlock")
            {
                t = pointedObj.GetComponent <TowerGrid>();
                if (blockType == 0)
                {
                    if (pos.y >= 2.0f)
                    {
                        bool errorFound = false;
                        for (int i = z - 1; i <= z + 1; i++)
                        {
                            try
                            {
                                if (t.IsOccupied(i, y))
                                {
                                    errorFound = true;
                                    break;
                                }
                            }
                            catch (System.Exception)
                            {
                                errorFound = true;
                                break;
                            }
                        }
                        if (!errorFound)
                        {
                            validPlacement = true;
                        }
                    }
                }
                else if (blockType == 1)
                {
                    if (pos.y >= 1.0f)
                    {
                        bool errorFound = false;
                        for (int i = y - 1; i <= y + 1; i++)
                        {
                            try
                            {
                                if (t.IsOccupied(z, i))
                                {
                                    errorFound = true;
                                    break;
                                }
                            }
                            catch (System.Exception)
                            {
                                errorFound = true;
                                break;
                            }
                        }
                        if (!errorFound)
                        {
                            validPlacement = true;
                        }
                    }
                }
                else if (blockType == 2)
                {
                    if (pos.y > 1.0f)
                    {
                        bool errorFound = false;
                        for (int i = y - 1; i <= y + 1; i++)
                        {
                            try
                            {
                                if (t.IsOccupied(z, i))
                                {
                                    errorFound = true;
                                    break;
                                }
                            }
                            catch (System.Exception)
                            {
                                errorFound = true;
                                break;
                            }
                        }
                        for (int i = z - 1; i <= z + 1; i++)
                        {
                            try
                            {
                                if (t.IsOccupied(i, y))
                                {
                                    errorFound = true;
                                    break;
                                }
                            }
                            catch (System.Exception)
                            {
                                errorFound = true;
                                break;
                            }
                        }
                        if (!errorFound)
                        {
                            validPlacement = true;
                        }
                    }
                }
                else if (blockType == 3)
                {
                    if (pos.y > 0.5f)
                    {
                        bool errorFound = false;
                        for (int i = z - 1; i <= z + 1; i++)
                        {
                            try
                            {
                                if (t.IsOccupied(i, y))
                                {
                                    errorFound = true;
                                    break;
                                }
                            }
                            catch (System.Exception)
                            {
                                errorFound = true;
                                break;
                            }
                        }
                        try
                        {
                            if (t.IsOccupied(z - 1, y - 1))
                            {
                                errorFound = true;
                            }
                            if (t.IsOccupied(z + 1, y - 1))
                            {
                                errorFound = true;
                            }
                        }
                        catch (System.Exception)
                        {
                            errorFound = true;
                        }
                        if (!errorFound)
                        {
                            validPlacement = true;
                        }
                    }
                }
            }
        }
        if (validPlacement)
        {
            GameObject uS = GameObject.Find("UndoSign");
            uS.GetComponent <Undo>().Push(this.gameObject);
            CreateColliders();
            mode = BlockMode.Placed;
            if (t != null)
            {
                if (blockType == 0)
                {
                    t.OccupySquare(z - 1, y);
                    t.OccupySquare(z, y);
                    t.OccupySquare(z + 1, y);
                }
                else if (blockType == 1)
                {
                    t.OccupySquare(z, y - 1);
                    t.OccupySquare(z, y);
                    t.OccupySquare(z, y + 1);
                }
                else if (blockType == 2)
                {
                    t.OccupySquare(z - 1, y);
                    t.OccupySquare(z + 1, y);
                    t.OccupySquare(z, y - 1);
                    t.OccupySquare(z, y);
                    t.OccupySquare(z, y + 1);
                }
                else if (blockType == 3)
                {
                    t.OccupySquare(z - 1, y - 1);
                    t.OccupySquare(z + 1, y - 1);
                    t.OccupySquare(z - 1, y);
                    t.OccupySquare(z, y);
                    t.OccupySquare(z + 1, y);
                }
            }
        }
        else if (!validPlacement)
        {
            Destroy(gameObject);
        }
    }