예제 #1
0
 public virtual void Activate(SkillActor actor, Character[] allies, Character enemy, Character[] enemies)
 {
     this.actor   = actor;
     this.allies  = allies;
     this.enemy   = enemy;
     this.enemies = enemies;
     OnActivate.Invoke(actor, enemies);
     SkillEffect();
 }
예제 #2
0
 void AddSkillToEachCharacter(SkillActor skillActor, List <Skill> skills)
 {
     foreach (var skill in skills)
     {
         if (skillActor.skills.Contains(skill) == false)
         {
             skillActor.AddSkill(skill);
         }
     }
 }
예제 #3
0
    void AddSkillToAllies()
    {
        SkillActor warriorSActor = combatManager.AllyTeam.Find(c => c.CharacterName == "Warrior").GetComponent <SkillActor>();
        SkillActor mageSActor    = combatManager.AllyTeam.Find(c => c.CharacterName == "Mage").GetComponent <SkillActor>();
        SkillActor rogueSActor   = combatManager.AllyTeam.Find(c => c.CharacterName == "Rogue").GetComponent <SkillActor>();

        AddSkillToEachCharacter(warriorSActor, WarriorSkills);
        AddSkillToEachCharacter(mageSActor, MageSkills);
        AddSkillToEachCharacter(rogueSActor, RogueSkills);
    }
예제 #4
0
    void RemoveUniqueSkills(SkillActor skillActor)
    {
        Skill defSkill = skillActor.skills.First();

        skillActor.skills.Clear();

        if (defSkill.SkillRequirements.Count != 0)
        {
            return;
        }
        skillActor.skills.Add(defSkill);
    }
예제 #5
0
    void UpdateSpecificTeam(Character selectedChar, Text displayNameText, Transform skillPanel)
    {
        //Skip default Skill
        int skillIndex = 1;

        if (selectedChar != null)
        {
            if (displayNameText != null)
            {
                displayNameText.text = selectedChar.CharacterName;
            }

            SkillActor skillActor = selectedChar.GetComponent <SkillActor>();

            if (skillPanel != null)
            {
                foreach (Transform item in skillPanel)
                {
                    Text   txt    = item.GetComponent <Text>();
                    Button txtBtn = item.GetComponent <Button>();

                    if (txtBtn == null)
                    {
                        return;
                    }

                    //Reset
                    SetButtonInteractable(txtBtn, false);
                    txtBtn.onClick.RemoveAllListeners();

                    if (skillIndex < skillActor.skills.Count)
                    {
                        txt.text = skillActor.skills[skillIndex].skillName;

                        if (selectedChar.Mana >= skillActor.skills[skillIndex].cost)
                        {
                            SetButtonInteractable(txtBtn, true);
                            //txtBtn.onClick.AddListener(() => cSkillUIHandler.UseUniqueSkill(txt.text));
                        }

                        skillIndex++;
                    }
                    else
                    {
                        txt.text = EmptySkillName;
                        SetButtonInteractable(txtBtn, false);
                        //txtBtn.onClick.RemoveListener(() => cSkillUIHandler.UseUniqueSkill(txt.text));
                    }
                }
            }
        }
    }
예제 #6
0
 public virtual void Exit()
 {
     EventDispatch.Broadcast <int>(Events.DlgMainStartCd, this.skillConfig.skillId);
     if (PlayerManager.singleton.MySelf != null)
     {
         PlayerManager.singleton.MySelf.Idle();
     }
     if (actor != null)
     {
         actor.Exit();
         actor = null;
     }
     SkillManager.singleton.runningSkills.Remove(this);
 }
예제 #7
0
    public void ContinueTutorial()
    {
        //AddSkillToMage
        SkillActor sActor = combatManager.AllyTeam.Find(c => c.CharacterName == "Mage").GetComponent <SkillActor>();

        sActor.AddSkill(MageSkills.First());

        combatManager.OnTutorialRoundEnd.Invoke();

        OnPopUpInstruction.AddListener(First_Dialogue_Finish);

        ShowTutorialPanel();

        //Dialogues Setup
        if (DialogueList.Count > 1)
        {
            DialogueList.First().OnDialogueEnd.AddListener(First_Dialogue_Finish);
            NextDialogue();
        }
    }
예제 #8
0
    public override void Interact(GameObject obj)
    {
        if (isInteracted == true && activateOnce || Time.timeScale == 0 || !canInput)
        {
            return;
        }
        canInput = false;
        StartCoroutine(Delay());
        PlayerController player = obj.GetComponent <PlayerController>();
        SkillActor       actor  = player.GetComponent <SkillActor>();

        Debug.Log(actor);
        if (!actor.skills.Any(item => item.ID == skill.ID) && !giveToSpecificPlayer)
        {
            actor.AddSkill(skill);
        }
        if (!actor.skills.Any(item => item.ID == skill.ID) && giveToSpecificPlayer)
        {
            if (player.ID == playerID && !isInteracted)
            {
                actor.AddSkill(skill);
                if (item != null)
                {
                    gameManager.sharedInventory.AddItem(item);
                }
                GetComponent <SpriteRenderer>().sprite = on;
                isInteracted = true;
                EventActivated.Invoke(obj);
                EventInteracted.Invoke(obj);
            }

            else
            {
                if (Time.timeScale == 1)
                {
                    EventOnWrongPlayer.Invoke();
                }
            }
        }
    }
예제 #9
0
    void Third_Dialogue_Start()
    {
        combatManager.OnCurrentRoundEnd.RemoveListener(Third_Dialogue_Start);

        //AddSkillToRogue
        SkillActor sActor = combatManager.AllyTeam.Find(c => c.CharacterName == "Rogue").GetComponent <SkillActor>();

        sActor.AddSkill(RogueSkills.First());

        combatManager.OnTutorialRoundEnd.Invoke();

        OnPopUpInstruction.AddListener(Third_Dialogue_Finish);
        ShowTutorialPanel();

        if (DialogueList.Count > 1)
        {
            //Update Dialogue
            NextDialogue();

            //AddListener
            DialogueList.First().OnDialogueEnd.AddListener(Third_Dialogue_Finish);
        }
    }
예제 #10
0
 public virtual void Start()
 {
     actor = GetComponent <SkillActor>();
 }
예제 #11
0
    public IEnumerator StartCombatFight(int allyAttackTurns, int enemyAttackTurns, int matchCount)
    {
        int firstTeamAttackCount = 0;

        if (AttackList.Count == 0)
        {
            yield break;
        }

        if (AllyTeam.Contains(AttackList.First()))
        {
            firstTeamAttackCount = allyAttackTurns;
        }
        else
        {
            firstTeamAttackCount = enemyAttackTurns;
        }

        while (true)
        {
            if (AttackList.Count > 0 && IsStartAttack == false)
            {
                Character attacker = AttackList.First();

                if (attacker == null || CheckCharacterValidToAttack(attacker) == false)
                {
                    AttackList.Remove(attacker);
                    if (AllyTeam.Contains(attacker))
                    {
                        AllySkillToUse.RemoveAt(0);
                    }
                    continue;
                }

                //Set StartAttack to true
                IsStartAttack = true;

                SkillActor sActor           = attacker.GetComponent <SkillActor>();
                int        actualTurnDeduct = DEFAULT_TURN_DEDUCT;

                actorCharacter = attacker;

                //Ally Attack
                if (AllyTeam.Contains(attacker) == true)
                {
                    //Debug
                    Debug.Log("-------------- Player Turn --------------");

                    //Change Combat State to Ally Turn
                    ChangeCombatState(CombatState.AllyTurn);

                    //Pass what Skill to use
                    if (AllySkillToUse.Count != 0)
                    {
                        SkillToUse = sActor.skillInstances.Find(s => s.skillName == AllySkillToUse.First().skillName);
                        AllySkillToUse.Remove(AllySkillToUse.First());
                    }

                    //If Skill is still null, set default attack as the skill
                    if (SkillToUse == null)
                    {
                        SkillToUse = sActor.skillInstances.First();
                    }

                    actorList       = AllyTeam;
                    targetCharacter = SelectedEnemy;
                    targetList      = EnemyTeam;

                    AllyCombatAction(SkillToUse);
                }
                //Enemy Attack
                else
                {
                    //Debug
                    Debug.Log("-------------- Enemy Turn --------------");

                    //Change Combat State To Enemy Turn
                    ChangeCombatState(CombatState.EnemyTurn);

                    actorList       = EnemyTeam;
                    targetCharacter = GetCharacterFromTeam(AllyTeam);
                    targetList      = AllyTeam;

                    CombatAction(sActor.skillInstances.First(), actualTurnDeduct, ENEMY_MANA_ADD);
                }

                //After Attack assigned
                AttackList.Remove(attacker);
                firstTeamAttackCount--;
            }

            //ROUND END
            if (AttackList.Count == 0 && IsStartAttack == false)
            {
                Debug.Log("END ATTACKS");

                yield return(new WaitForSeconds(MatchDelayTimer));

                LateBuffEffectStart.Invoke();

                //Check If there is a character died or not
                CheckIsDead(AllyTeam);
                CheckIsDead(EnemyTeam);

                if (CurCombatState != CombatState.DialogueMode)
                {
                    MatchingBegin();
                }

                OnCurrentRoundEnd.Invoke();

                //Check Battle Result
                CheckBattleResult();
                yield break;
            }

            yield return(new WaitForEndOfFrame());
        }
    }
 private void OnSkillStart(Character character, SkillSlot skillSlot, SkillActor skillActor)
 {
     _view.PlaySkillStart(skillActor.Data);
 }