private void PlayerReturnedToStart(Snake playerSnake) { this.playerSnake.Visible = false; // Add one again to player snakes. This allows new player snakes to increase the total. When the initial player is spawned that subtracts one. Managers.GameState.ExtraSnakes += 1; // Remove any frog now RemoveFrog(); // Does a player egg exist? If so, make it hatch Egg egg = GetEgg(Side.Player); if (egg != null) { this.eggManager.EggHatched(egg); // is this necessary? egg.Die(); return; } // Time to go to the next level. Managers.GameState.Level += 1; //Managers.SceneManager.LoadScene(SerpentConsts.SceneNames.Game); GameSceneController gsc = Managers.SceneManager.CurrentController as GameSceneController; if (gsc == null) { // should never happen return; } gsc.TransitionToLevel(Managers.GameState.Level); }
private TurnError ActAttack(Ant ant, HexDirection direction) { if (direction == HexDirection.CENTER) { return(TurnError.ILLEGAL); } Vector2Int target = CoordConverter.MoveHex(ant.gameCoordinates, direction); TurnError tileError = CheckAttackability(target, ant); if (tileError != TurnError.NONE) { if (tileError == TurnError.NOT_ENEMY) { terrain[target.x][target.y].ant.eventInputs.Add(new EventInputBump(CoordConverter.InvertDirection(direction))); } return(tileError); } if (ant.CheckEnergy(Const.ATTACK_COST)) { ant.UpdateEnergy(-Const.ATTACK_COST); } else { return(TurnError.NO_ENERGY); } if (terrain[target.x][target.y].ant != null) { Ant victim = terrain[target.x][target.y].ant; if (ant.Type == AntType.QUEEN) { victim.Hurt(Const.QUEEN_ATTACK_DMG); } else { victim.Hurt(Const.WORKER_ATTACK_DMG); } victim.eventInputs.Add(new EventInputAttack(CoordConverter.InvertDirection(direction))); } else if (terrain[target.x][target.y].egg != null) { Egg victim = terrain[target.x][target.y].egg; victim.Die(); } isPermanentModif = true; return(TurnError.NONE); }
public void HandleEggsAfterPlayerDeath() { for (int side = 0; side <= (int)Side.Enemy; ++side) { Egg e = this.eggs[side]; if (e == null) { continue; } if (side == (int)Side.Enemy) { EggHatched(e); } e.Die(); } }
private void Act() { // Get the new turn order randomOrderAntList = nextRandomOrderAntList; nextRandomOrderAntList = new List <Ant>(); // Makes the queen and all the workers resolve their actions foreach (Ant ant in randomOrderAntList) { ResolveDecision(ant); } // Manages the eggs of all the teams foreach (Team team in teams) { // Makes all the eggs get older, and make the ready ones open List <int> emptyIndexes = new List <int>(); for (int i = 0; i < team.eggs.Count; i++) { Egg egg = team.eggs[i]; egg.roundsBeforeCracking--; if (egg.roundsBeforeCracking <= 0) { Vector3 newAntWorldPosition = CoordConverter.PlanToWorld(CoordConverter.HexToPos(egg.gameCoordinates), workerPrefab.transform.position.y); Worker newWorker = Instantiate(workerPrefab, newAntWorldPosition, workerPrefab.transform.rotation); terrain[egg.gameCoordinates.x][egg.gameCoordinates.y].ant = newWorker; newWorker.Init(egg.team, egg.gameCoordinates, egg.team.color); team.workers.Add(newWorker); egg.Die(); team.eggs[i] = null; emptyIndexes.Add(i); } } for (int i = emptyIndexes.Count - 1; i >= 0; i--) { if (team.eggs[i] != null) { Debug.Log("Wait. That's illegal."); } team.eggs.RemoveAt(i); } } // Check which teams have ended List <Team> finishedTeams = new List <Team>(); foreach (Team team in teams) { // Makes all the ands that shoudl die die if (team.queen.shouldDie) { finishedTeams.Add(team); } List <Worker> toDie = new List <Worker>(); foreach (Worker worker in team.workers) { if (worker.shouldDie) { toDie.Add(worker); } } foreach (Worker worker in toDie) { team.workers.Remove(worker); Destroy(worker.gameObject); } } foreach (Team team in finishedTeams) { team.Die(); teams.Remove(team); } }