コード例 #1
0
        private void OnTriggerEnter(Collider otherObject)
        {
            // We're only concerned with triggers.
            if (!otherObject.isTrigger)
            {
                return;
            }

            if (otherObject.tag == "Combatant")
            {
                if (this.combatant is PlayerCombatant)
                {
                    EnemyCombatant enemy = otherObject.GetComponent <EnemyCombatant>();

                    if (enemy != null)
                    {
                        this.combatantInRange = enemy;
                        trigger.Invoke();
                    }
                }
                else if (this.combatant is EnemyCombatant)
                {
                    PlayerCombatant player = otherObject.GetComponent <PlayerCombatant>();

                    if (player != null)
                    {
                        this.combatantInRange = player;
                        trigger.Invoke();
                    }
                }
            }
        }
コード例 #2
0
        private void Start()
        {
            // Get the player party from the data repository.
            Party playerParty = DataRepository.Instance().Parties.GetByName("main");

            List <GameObject> players = new List <GameObject>();
            List <GameObject> enemies = new List <GameObject>();

            foreach (string partyMember in playerParty.Members)
            {
                // We want to spawn a combatant for each player in the party.
                GameObject      playerCombatant = Instantiate((GameObject)Resources.Load(string.Format("Prefabs/Battle/Characters/{0}", partyMember)), this.transform.parent);
                PlayerCombatant player          = playerCombatant.GetComponent <PlayerCombatant>();
                player.Character = DataRepository.Instance().Characters.GetByName(partyMember);
                players.Add(playerCombatant);
            }

            // Get the enemy party
            Party enemyParty = BattleTransitionContainer.EnemyParty;

            // If the enemy party is null, grab the test party.
            if (enemyParty == null)
            {
                enemyParty = (Party)DataRepository.Instance().Parties.GetByName("test1");
            }

            foreach (string partyMember in enemyParty.Members)
            {
                // We want to spawn a combatant for each player in the party.
                GameObject     enemyCombatant = Instantiate((GameObject)Resources.Load(string.Format("Prefabs/Battle/Characters/{0}", "Enemy")), this.transform.parent);
                EnemyCombatant enemy          = enemyCombatant.GetComponent <EnemyCombatant>();
                enemy.Enemy = (Enemy)DataRepository.Instance().Enemies.GetByName(partyMember).Clone();
                enemies.Add(enemyCombatant);
            }

            UnitPlacement unitPlacement = this.GetComponentInChildren <UnitPlacement>();

            unitPlacement.PlacePlayers(players);
            unitPlacement.PlaceEnemies(enemies);

            GameObject.Find("BattleManager").GetComponent <BattleManager>().StoreCombatants(players, enemies);

            BattleEventManager.Instance().BattleStart();
        }
コード例 #3
0
    public override void OnGUI()
    {
        base.OnGUI();

        // if the battle has started...
        if (battleEnabled)
        {
            // enforce 16:9 aspect ratio
            GUILayout.BeginArea(AspectUtility.screenRect);

            // draw the player combatants' data
            drawPlayerInfo();

            if (isPlayerTurn())
            {
                PlayerCombatant currentPlayer = (PlayerCombatant)PlayerCombatants[currentTurn];

                switch (turnState)
                {
                case BattleTurnState.Attacking:
                    selectedAttack = getSelectedAttack();

                    if (selectedAttack != null)
                    {
                        currentButtonSelection = 0;
                        turnState = BattleTurnState.Targeting;
                    }

                    checkKeyControlFocus();

                    break;

                case BattleTurnState.Targeting:
                    selectedTarget = getSelectedTarget(selectedAttack);

                    if (selectedTarget != null)
                    {
                        currentButtonSelection = 0;
                        currentPlayer.Attack(selectedAttack, selectedTarget);
                        currentPlayer.IncrementTurnCounter();

                        turnState = BattleTurnState.WaitingForAnimation;
                    }

                    checkKeyControlFocus();

                    break;

                case BattleTurnState.WaitingForAnimation:

                    // has the player's animation finished?
                    if (!PlayerCombatants[currentTurn].AnimationInProgress)
                    {
                        turnState = BattleTurnState.TurnComplete;
                    }

                    break;
                }
            }
            else                 // otherwise it is an enemy's turn
            {
                EnemyCombatant currentEnemy =
                    (EnemyCombatant)EnemyCombatants[currentTurn - PlayerCombatants.Count];

                switch (turnState)
                {
                case BattleTurnState.Attacking:
                    if (!currentEnemy.isSleeping)
                    {
                        currentEnemy.AutoAttack(PlayerCombatants);
                    }

                    currentEnemy.IncrementTurnCounter();
                    turnState = BattleTurnState.WaitingForAnimation;

                    break;

                case BattleTurnState.WaitingForAnimation:
                    // if the enemy attack has finished...
                    if (Event.current.type == EventType.Repaint && !currentEnemy.AnimationInProgress)
                    {
                        turnState = BattleTurnState.TurnComplete;
                    }

                    break;
                }
            }

            if (turnState == BattleTurnState.TurnComplete)
            {
                // if the turn has completed, check if anyone won
                checkForVictory();

                // reset turn state
                turnState = BattleTurnState.Attacking;

                //...and then increment the turn.
                incrementTurn();

                // notify registered listeners of the turn change
                // note: this is not inside incrementTurn due to recursion
                if (OnBattleEvent != null)
                {
                    OnBattleEvent(BattleEvent.TurnChange);
                }
            }

            GUILayout.EndArea();
        }
    }