// 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(); }
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); } } } }
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); } }