コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }
コード例 #3
0
    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();
        }
    }
コード例 #4
0
    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);
        }
    }