コード例 #1
0
    public void SelectCard(CardGameObject cardGO, PlayerCombatObject player, System.Action <CardInHand> SelectCardCallback, System.Action RecalculateCardsPositionCallback)
    {
        // Player has selected a card from the hand.

        // Ignore if it is not player's turn.
        if (turn != TurnSelection.Players)
        {
            infoText.text = "It's not players' turn.";
            return;
        }

        // From here on, it's player's turn.

        // Ignore if the player is dead.
        if (player.IsDead)
        {
            infoText.text = "Player is knocked out.";
            return;
        }

        // Ignore if the player is disabled.
        if (!player.IsAbleToAct())
        {
            infoText.text = "Player cannot act.";
            return;
        }

        // Ignore if the player is disarmed and the card is attack.
        if (cardGO.card.data.type == CardPlayerScriptableObject.Type.Attack && !player.IsAbleToAttack())
        {
            infoText.text = "Player is disarmed.";
            return;
        }

        // Ignore if the player is silenced and the card is spell.
        if (cardGO.card.data.type == CardPlayerScriptableObject.Type.Spell && !player.IsAbleToCast())
        {
            infoText.text = "Player is silenced.";
            return;
        }

        // Ignore if the player does not have enough mana to play the card.
        if (cardGO.card.manaCost > player.Mana)
        {
            infoText.text = "Not enough mana.";
            return;
        }

        infoText.text       = "";
        stayUp              = true;
        currentCardOwner    = player;
        currentSelectedCard = cardGO;

        foreach (var c in coroutines)
        {
            StopCoroutine(c);
        }

        coroutines.Add(StartCoroutine(SelectTargets(cardGO, SelectCardCallback, RecalculateCardsPositionCallback)));
    }
コード例 #2
0
    HealthEntityCombatObject SpawnEntity(HealthEntity entity, Transform entityHolder, PlayerHand hand = null, GameObject ui = null)
    {
        GameObject newHealthEntityGO = GameObject.Instantiate(entityPrefab, entityHolder);

        newHealthEntityGO.name = entity.Name;

        if (entity is Player)
        {
            PlayerCombatObject player = newHealthEntityGO.gameObject.AddComponent <PlayerCombatObject>();
            player.ui = GameObject.Instantiate(floatingPlayerUiPrefab, newHealthEntityGO.transform).GetComponent <PlayerUI>();
            player.ui.gameObject.name = "UI";
            player.ui.player          = player;
            player.Init((Player)entity, hand, ui, OnEntityDeath);

            return(player);
        }
        else if (entity is Enemy)
        {
            Enemy             enemyEntity = entity as Enemy;
            EnemyCombatObject enemy       = newHealthEntityGO.gameObject.AddComponent <EnemyCombatObject>();
            enemy.ui = GameObject.Instantiate(floatingEnemyUiPrefab, newHealthEntityGO.transform).GetComponent <EnemyUI>();
            enemy.ui.gameObject.name = "UI";
            enemy.ui.enemy           = enemy;
            enemy.Init(enemyEntity, 0, OnEntityDeath);

            return(enemy);
        }
        return(null);
    }
コード例 #3
0
ファイル: PlayerHand.cs プロジェクト: bogstar/project-amiga
 public void Init(List <Card> startCombatCards, PlayerCombatObject player, System.Action UIRefreshCallback)
 {
     drawPile     = new Pile(startCombatCards, true);
     discardPile  = new Pile();
     cardsInHand  = new List <CardInHand>();
     OnUIRefresh += UIRefreshCallback;
     this.player  = player;
     nativePowerSelector.Init(player);
 }
コード例 #4
0
    public void SelectNativePower(NativePowerScriptableObject nativePower, PlayerCombatObject player)
    {
        // Player has selected a native power.

        // Ignore if it is not player's turn.
        if (turn != TurnSelection.Players)
        {
            infoText.text = "It's not players' turn.";
            return;
        }

        // From here on, it's player's turn.

        // Ignore if the player is dead.
        if (player.IsDead)
        {
            infoText.text = "Player is knocked out.";
            return;
        }

        // Ignore if the player is disabled.
        if (!player.IsAbleToAct())
        {
            infoText.text = "Player cannot act.";
            return;
        }

        // Ignore if the player does not have enough mana to activate the power.
        if (nativePower.manaCost > player.Mana)
        {
            infoText.text = "Not enough mana.";
            return;
        }

        infoText.text    = "";
        currentCardOwner = player;
        currentPower     = nativePower;

        foreach (var c in coroutines)
        {
            StopCoroutine(c);
        }

        StartCoroutine(SelectTargets_Power(nativePower));
    }
コード例 #5
0
    public void StartCombat(EncounterScriptableObject encounterSO, List <Player> players, System.Action <bool> callback)
    {
        //List<EnemyScriptableObject> enemyList = new List<EnemyScriptableObject>();
        int i = 0;

        foreach (var enemy in encounterSO.enemies)
        {
            EnemyCombatObject newEnemy = SpawnEntity(enemy, enemyManager.enemyPanel) as EnemyCombatObject;
            newEnemy.enemyIndex = this.enemies.Count;
            newEnemy.transform.localPosition    = new Vector3(-encounterSO.enemies.Length / 2 + i, 0f, 0f);
            newEnemy.transform.localEulerAngles = new Vector3(0, 180f, 0);
            this.enemies.Add(newEnemy);
            i++;
        }
        enemyManager.SpawnEnemies(this.enemies, OnEnemyDeath);

        currentEncounter = encounterSO;

        combatOver = false;

        i = 0;
        foreach (var p in players)
        {
            if (p.Health < 1)
            {
                p.Health = 1;
            }

            PlayerCombatObject newPlayer = SpawnEntity(p, playersLocation.transform, hands[i], uis[i]) as PlayerCombatObject;
            newPlayer.transform.localPosition = new Vector3(-1 + i * 2, 0, 0);
            this.players.Add(newPlayer);
            i++;
        }

        foreach (var p in this.players)
        {
            p.RefreshUI();
        }

        OnCombatEnd += callback;

        turn = TurnSelection.Players;

        StartTurn();
    }
コード例 #6
0
ファイル: InputManager.cs プロジェクト: bogstar/project-amiga
    public void ButtonInput_SelectCard(CardGameObject cardGO, PlayerCombatObject player)
    {
        // Player has selected a card from the hand.

        // Let's first unselect all player's cards.
        foreach (var p in battleManager.players)
        {
            p.hand.UnselectCard();
            p.hand.RecalculateCardsPosition();
        }

        // Ignore if the player does not have control over the card.
        if (!playersToManage.Contains(player))
        {
            //return;
        }

        // Pass the info to Battle Manager.
        battleManager.SelectCard(cardGO, player, player.hand.SelectCard, player.hand.RecalculateCardsPosition);
    }
コード例 #7
0
    IEnumerator SelectTargets_Power(NativePowerScriptableObject nativePower)
    {
        PlayerCombatObject       playerOnTurn = currentCardOwner;
        HealthEntityCombatObject caster       = playerOnTurn;

        stepNumber = 0;

        targetsPerAbilityStep = new List <List <HealthEntityCombatObject> >();

        AbilityStepsWithTargetingData_Player[] abilities = nativePower.abilityStepsWithTargetingData;

        // Let's cycle through all ability steps in order to determine targets.
        foreach (var abilityStepWithTargetingData in abilities)
        {
            chosenTargets = new List <HealthEntityCombatObject>();
            targetFound   = false;

            TargetData targetData = GetValidTargets(caster, abilityStepWithTargetingData.targetingData);
            if (targetData.multipleSpecificMode)
            {
                multipleSpecificMode     = true;
                numberOfSpecificTargets  = targetData.multipleSpecificNumber;
                multipleSpecificModeList = new List <HealthEntityCombatObject>();
            }
            else
            {
                multipleSpecificMode = false;
            }

            if (targetData.previousStepTargets > -1)
            {
                targetFound = true;
                foreach (var entity in targetsPerAbilityStep[targetData.previousStepTargets])
                {
                    chosenTargets.Add(entity);
                }
            }
            else if (targetData.targetDecided)
            {
                targetFound = true;
                foreach (var e in targetData.entities)
                {
                    chosenTargets.Add(e);
                }
            }
            else
            {
                if (targetData.entities.Count == 1 && targetData.entities[0] is PlayerCombatObject)
                {
                    targetFound = true;
                    chosenTargets.Add(targetData.entities[0]);
                }
                else
                {
                    infoText.text = abilityStepWithTargetingData.targetingData.textForChoosing;
                    ShowTargetingButton(targetData.entities);
                }
            }

            while (targetFound == false)
            {
                yield return(null);
            }

            stepNumber++;
            targetsPerAbilityStep.Add(chosenTargets);
        }

        // We have all chosen targets.
        // We now have to check whether any of those are multiple hits.

        for (int i = 0; i < targetsPerAbilityStep.Count; i++)
        {
            TargetingData_Base targetingData = nativePower.abilityStepsWithTargetingData[i].targetingData;

            if (targetingData.targetAlignment == TargetingData_Base.TargetAlignment.Hostile)
            {
                if (targetingData.targets == TargetingData_Base.Target.Multiple)
                {
                    EnemyCombatObject        chosenTarget  = (EnemyCombatObject)targetsPerAbilityStep[i][0];
                    List <EnemyCombatObject> nearbyEnemies = GetNearbyEnemies(chosenTarget, targetingData.numberOfTargets);
                    foreach (var e in nearbyEnemies)
                    {
                        targetsPerAbilityStep[i].Add(e);
                    }
                }
            }
        }

        // Now we have full lists of all targets for each attribute.
        // Let's do the card trick.

        DoPowerTrick();

        yield return(null);
    }
コード例 #8
0
 public void Init(PlayerCombatObject player)
 {
     this.player = player;
 }
コード例 #9
0
 public void DisplayDrawPile(PlayerCombatObject player)
 {
     DisplayPile(player.hand.drawPile.Cards, player.Entity.Name + "'s Draw Pile (random order)");
 }
コード例 #10
0
 public void Input_DisplayDiscardPile(PlayerCombatObject p)
 {
     ShowPanel(cardViewerMenu);
     cardViewerMenu.DisplayDiscardPile(p);
 }