예제 #1
0
    private IEnumerator OnTurnBegin(APFCharacterController turnBeginChar)
    {
        if (turnBeginChar != null)
        {
            if (turnBeginChar.IsEnemy(TurnCharacter))
            {
                PFTable.CharacterType charType = PFCharacterTable.GetCharacterType(turnBeginChar.CharacterTableId);
                if (charType == PFTable.CharacterType.Player)
                {
                    TurnInfoUI_Player.SetActive(true);
                    yield return(new WaitForSeconds(PFConst.TurnInfoNotiTime));

                    TurnInfoUI_Player.SetActive(false);
                }
                else if (charType == PFTable.CharacterType.Monster)
                {
                    TurnInfoUI_Monster.SetActive(true);
                    yield return(new WaitForSeconds(PFConst.TurnInfoNotiTime));

                    TurnInfoUI_Monster.SetActive(false);
                }
            }

            TurnCharacter = turnBeginChar;

            TurnCharacter.OnTurnBegin();
        }
    }
예제 #2
0
    public static void DoDamage(APFCharacterController attacker, int damage_EffectId, APFCharacterController target_clickedChar)
    //public static IEnumerator DoDamage(APFCharacterController attacker, int damage_EffectId, APFCharacterController target_clickedChar)
    {
        PFTable.Damage addHP_Effect = PFTable.GetEffect_Damage(damage_EffectId);

        APFGameMode pfGameMode = APFGameMode.GetInstance();

        if (attacker == null || addHP_Effect == null || pfGameMode == null)
        {
            //yield return null;
        }

        int attackerDamage = attacker.GetDamage(addHP_Effect.Amount);

        List <APFCharacterController> targetList = pfGameMode.GetTargetList(attacker, addHP_Effect.TargetType, target_clickedChar);

        for (int times = 0; times < addHP_Effect.Times; ++times)
        {
            for (int i = 0; i < targetList.Count; ++i)
            {
                targetList[i].OnBeAttacked(attackerDamage);

                if (targetList[i].GetHP() <= PFConst.HP_Min)
                {
                    pfGameMode.OnCharacterDead(targetList[i]);
                }
            }

            if (addHP_Effect.Times >= 2)
            {
                //yield return new WaitForSeconds(Damage_Times_Interval);
            }
        }
    }
    public void OnUseCard_AfterApplyDmg(PFTable.Card useCard, APFCharacterController targetCtrl)
    {
        if (useCard != null)
        {
            if (useCard.statusKeepTurnCount > 0)
            {
                if (useCard.atkRate != 0)
                {
                    CardEffect.PowerRate attackRate = Create_CardEffect_PowerRate(useCard.atkRate, useCard.statusKeepTurnCount);
                    CardEffectList_AttackRate.Add(attackRate);
                }

                if (useCard.atkRateTarget != 0)
                {
                    CardEffect.PowerRate attackRate = Create_CardEffect_PowerRate(useCard.atkRateTarget, useCard.statusKeepTurnCount);
                    targetCtrl.CardEffectList_AttackRate.Add(attackRate);
                }

                if (useCard.defRate != 0)
                {
                    CardEffect.PowerRate defenceRate = Create_CardEffect_PowerRate(useCard.defRate, useCard.statusKeepTurnCount);
                    CardEffectList_DefenceRate.Add(defenceRate);
                }

                if (useCard.defRateTarget != 0)
                {
                    CardEffect.PowerRate defenceRate = Create_CardEffect_PowerRate(useCard.defRateTarget, useCard.statusKeepTurnCount);
                    targetCtrl.CardEffectList_DefenceRate.Add(defenceRate);
                }
            }
        }
    }
    public bool IsEnemy(APFCharacterController target)
    {
        if (target != null)
        {
            bool bResult = GetCharacter().IsEnemy(target.GetCharacter());
            return(bResult);
        }

        return(false);
    }
예제 #5
0
    private void TurnEnd(APFCharacterController turnEndChar)
    {
        if (turnEndChar != null)
        {
            turnEndChar.OnTurnEnd();

            APFCharacterController nextTurnChar = PFGameModeStuff.GetNextTurnCharacter(AliveCharCtrlList, TurnCharacter);

            TurnBegin(nextTurnChar);
        }
    }
예제 #6
0
    public virtual void Init(APFCharacterController controller)
    {
        SetController(controller);

        MaxHP = PFCharacterStuff.CalcMaxHP(CharacterTableId);

        int maxpHp = GetMaxHP();

        SetHP(maxpHp);

        SetShieldValue(0);
    }
예제 #7
0
    List <APFCharacterController> GetTargetList(APFCharacterController srcChar, PFTable.ETargetCharacter targetType, APFCharacterController target_clickedChar)
    {
        List <APFCharacterController> resultList = new List <APFCharacterController>();

        switch (targetType)
        {
        case PFTable.ETargetCharacter.Self:
        {
            if (srcChar != null)
            {
                resultList.Add(srcChar);
            }
        }
        break;

        case PFTable.ETargetCharacter.EnemySingle:
        {
            if (target_clickedChar != null)
            {
                resultList.Add(target_clickedChar);
            }
        }
        break;

        case PFTable.ETargetCharacter.EnemyAll:
        {
            List <APFCharacter> aliveMonsterList = APFGameMode.GetInstance().GetAliveCharList(PFTable.CharacterType.Monster);
            for (int i = 0; i < aliveMonsterList.Count; ++i)
            {
                APFCharacterController monCtrl = aliveMonsterList[i].GetCharacterController();
                resultList.Add(monCtrl);
            }
        }
        break;

        default:
        {
            StringBuilder sbLog = new StringBuilder("");
            sbLog.AppendFormat("GetTargetList  =>  switch - case 구현되지 않은 타입이 있음");
            Debug.LogError(sbLog.ToString());
        }
        break;
        }

        return(resultList);
    }
예제 #8
0
    private EGameResult OnCharacterDead(APFCharacterController targetCtrl)
    {
        targetCtrl.OnCharacterDead();

        DeadCharCtrlList.Add(targetCtrl);
        AliveCharCtrlList.Remove(targetCtrl);

        APFPlayerController plrCtrl = PFPlayerStuff.GetPlayerController(AliveCharCtrlList);

        if (plrCtrl == null)
        {
            return(EGameResult.Defeat);
        }
        else if (plrCtrl != null && AliveCharCtrlList.Count == 1)
        {
            return(EGameResult.Victory);
        }

        return(EGameResult.InProgress);
    }
예제 #9
0
    public override void Init(APFCharacterController controller)
    {
        base.Init(controller);

        UIEventTrigger uiEventTrigger = gameObject.AddComponent <UIEventTrigger>();

        EventDelegate.Add(uiEventTrigger.onClick, OnClick_This);
        EventDelegate.Add(uiEventTrigger.onHoverOver, OnHoverOver_This);
        EventDelegate.Add(uiEventTrigger.onHoverOut, OnHoverOut_This);

        BoxCollider boxCollider = gameObject.GetComponent <BoxCollider>();

        if (boxCollider == null)
        {
            string charPrefabPath = PFCharacterTable.GetCharacterPrefabPath(CharacterTableId);

            StringBuilder sbLog = new StringBuilder("");
            sbLog.AppendFormat("{0}.prefab  =>  BoxCollider 셋팅필요", charPrefabPath);
            Debug.LogError(sbLog.ToString());
        }
    }
예제 #10
0
    private void StartGamePlay()
    {
        TurnCharacter = null;

        TurnInfoUI_Player.SetActive(false);
        TurnInfoUI_Monster.SetActive(false);

        GameOverUI.gameObject.SetActive(false);

        for (int i = 0; i < AliveCharCtrlList.Count; ++i)
        {
            AliveCharCtrlList[i].StartGamePlay();
        }

        APFPlayerController plrController = PFPlayerStuff.GetPlayerController(AliveCharCtrlList);

        if (plrController != null)
        {
            TurnBegin(plrController);
        }
    }
예제 #11
0
    public static APFCharacterController GetNextTurnCharacter(List <APFCharacterController> targetList, APFCharacterController currTurnChar)
    {
        if (targetList != null && currTurnChar != null)
        {
            int findIdx = targetList.FindIndex(comp =>
            {
                return(comp == currTurnChar);
            });

            if (findIdx != -1)
            {
                int nextIdx = findIdx + 1;
                nextIdx = nextIdx % targetList.Count;
                APFCharacterController nextTurnChar = targetList[nextIdx];

                return(nextTurnChar);
            }
        }

        return(null);
    }
예제 #12
0
    private List <APFCharacterController> GetTargetList(PFTable.Card srcCard, APFCharacterController specifiedTarget)
    {
        List <APFCharacterController> resultList = new List <APFCharacterController>();

        PFTable.ECardApplyTarget applyTarget = PFCardTable.GetApplyTarget(srcCard.uid);
        if (applyTarget == PFTable.ECardApplyTarget.EnemyAll)
        {
            List <APFCharacter> aliveMonsterList = APFGameMode.GetInstance().GetAliveCharList(PFTable.CharacterType.Monster);

            for (int i = 0; i < aliveMonsterList.Count; ++i)
            {
                APFCharacterController monCtrl = aliveMonsterList[i].GetCharacterController();
                resultList.Add(monCtrl);
            }
        }
        else
        {
            resultList.Add(specifiedTarget);
        }

        return(resultList);
    }
예제 #13
0
    public static int GetDamage(APFCharacterController attackerCharCtrl, int cardTableId)
    {
        if (attackerCharCtrl != null)
        {
            int characterTableId = attackerCharCtrl.CharacterTableId;

            PFTable.Character charTable = PFTable.GetCharacter(characterTableId);
            PFTable.Card      cardTable = PFTable.GetCard(cardTableId);

            if (charTable != null &&
                cardTable != null)
            {
                float atkRateSum = attackerCharCtrl.GetCardEffectSum(ECardEffect.AtkRate);

                float atkRatio = charTable.atkRatio + atkRateSum;

                float fDamage = atkRatio * cardTable.damage;
                int   iDamage = (int)fDamage;//소수점이 발생하면 버린다.
                return(iDamage);
            }
        }

        return(0);
    }
예제 #14
0
    private void OnUseCard(APFCharacterController srcCharCtrl, PFTable.Card srcCard, APFCharacterController target_clickedChar)
    {
        if (srcCharCtrl != null && srcCard != null)
        {
            EGameResult gameResult = EGameResult.InProgress;

            PFTable.ECardActiveType cardActiveType = PFCardTable.GetCardActiveType(srcCard.uid);
            //if (cardActiveType == PFTable.ECardActiveType.Instant)
            {
                List <APFCharacterController> targetList = GetTargetList(srcCard, target_clickedChar);

                int damage = PFSkill.GetDamage(srcCharCtrl, srcCard.uid);

                for (int i = 0; i < targetList.Count; ++i)
                {
                    targetList[i].OnBeAttacked(damage);

                    srcCharCtrl.OnUseCard_AfterApplyDmg(srcCard, targetList[i]);

                    if (targetList[i].GetHP() <= PFConst.HP_Min)
                    {
                        gameResult = OnCharacterDead(targetList[i]);
                    }
                }
            }



            int[] cardEffectIdList = srcCard.CardEffectIdList;
            if (cardEffectIdList != null)
            {
                for (int i = 0; i < cardEffectIdList.Length; ++i)
                {
                    //PFTable.CardEffect.EType cardEffectType = PFCardEffectTable.GetCardEffectType(cardEffectIdList[i]);
                    //if (cardEffectType == PFTable.CardEffect.EType.DecreaseHP)
                    //{

                    //}

                    int effectId = cardEffectIdList[i];



                    PFTable.Damage effect_Damage = PFTable.GetEffect_Damage(effectId);
                    if (effect_Damage != null)
                    {
                        if (effect_Damage.ActuationTiming == PFTable.EActuationTiming.Instant)
                        {
                            DoDamage(srcCharCtrl, effectId, target_clickedChar);
                            //StartCoroutine(DoDamage(srcCharCtrl, effectId, target_clickedChar));

                            /*
                             * if (targetList[j].GetHP() <= PFConst.HP_Min)
                             * {
                             *  gameResult = OnCharacterDead(targetList[j]);
                             * }
                             */
                        }
                        else
                        {
                            srcCharCtrl.PendingEffect_DamageList.Add(effectId);
                        }
                    }

                    PFTable.AddAtkRate addAtkRate = PFTable.GetAddAtkRate(effectId);
                    if (addAtkRate != null)
                    {
                        //addAtkRate.Amount
                        //addAtkRate.TargetType
                        if (addAtkRate.ActuationTiming == PFTable.EActuationTiming.Instant)
                        {
                        }
                    }



                    PFTable.CardEffect cardEffect = PFTable.GetCardEffect(effectId);
                    if (cardEffect != null)
                    {
                        if (cardEffect.CardEffectType == PFTable.CardEffect.EType.DecreaseHP)
                        {
                            //cardEffect.Amount
                        }
                    }
                }
            }



            if (gameResult == EGameResult.InProgress)
            {
                PFTable.CharacterType srcCharType = PFCharacterTable.GetCharacterType(srcCharCtrl.CharacterTableId);
                if (srcCharType == PFTable.CharacterType.Monster)
                {
                    int remainCost = srcCharCtrl.GetCost();
                    if (remainCost <= 0)
                    {
                        TurnEnd(srcCharCtrl);
                    }
                }
            }
            else if (gameResult == EGameResult.Victory)
            {
                GameOverUI.Title_UILabel.text = PFConst.StrGameResultVictory;
                GameOverUI.gameObject.SetActive(true);
            }
            else if (gameResult == EGameResult.Defeat)
            {
                GameOverUI.Title_UILabel.text = PFConst.StrGameResultDefeat;
                GameOverUI.gameObject.SetActive(true);
            }
        }
    }
예제 #15
0
 private void TurnBegin(APFCharacterController turnBeginChar)
 {
     StartCoroutine(this.OnTurnBegin(turnBeginChar));
 }
예제 #16
0
 private void SetController(APFCharacterController controller)
 {
     CharacterController = controller;
 }