private void ProcessThisCharacterSkillActivation(ActivationTime currentTime, int skillNumber)
    {
        charIsUsingSkill = true;
        myCombatUIManager.UsingSkillDisplayUI(this.gameObject, thisCharacterSkills[skillNumber].GetSkillName());
        SkillType thisSkillType = thisCharacterSkills[skillNumber].GetSkillType();

        switch (thisSkillType)
        {
        case SkillType.Damage:
            ProcessDamageSkill(thisCharacterSkills[skillNumber]);
            break;

        case SkillType.Heal:
            ProcessHealingSkill(thisCharacterSkills[skillNumber]);
            break;

        case SkillType.Buffing:
            ProcessStatChangeSkill(thisCharacterSkills[skillNumber]);
            break;

        default:
            Debug.LogError("Error in processing " + thisCharacterSkills[skillNumber].GetSkillName() + " at " + currentTime.ToString());
            break;
        }
    }
 public void RecalculateActivationTime()
 {
     if (Definition.MinActivationTime == Definition.MaxActivationTime)
     {
         ActivationTime = Definition.MinActivationTime.Value;
     }
     else
     {
         ActivationTime = MyUtils.GetRandomTimeSpan(Definition.MinActivationTime.Value, Definition.MaxActivationTime.Value);
     }
     MySandboxGame.Log.WriteLine("MyGlobalEvent.RecalculateActivationTime:");
     MySandboxGame.Log.WriteLine("Next activation in " + ActivationTime.ToString());
 }
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(ID);
            sb.Append(" ");
            if (ActivationTime != null)
            {
                sb.Append(ActivationTime.ToFormatString());
            }
            sb.Append(" ");
            sb.Append(Duration);
            return(sb.ToString());
        }
    IEnumerator ProgressNextPhaseAfterSkillResolved(ActivationTime currentTime)
    {
        myCombatUIManager.SetTurnOutcomeText("All effects in this phase are resolved.\nTap to progress the battle.");

        // After combat, resolving buff debuff duration
        if (currentTime == ActivationTime.afterCombat)
        {
            playerChar.CheckForThisCharacterBuffDebuffDuration();
            enemyChar.CheckForThisCharacterBuffDebuffDuration();
        }

        yield return(WaitForKeyPress());

        if (currentTime == ActivationTime.beforeCombat)
        {
            StartCoroutine(BeginCombatProcedure());
        }
        else if (currentTime == ActivationTime.afterCombat)
        {
            NextCombatTurnProcedure();
        }
    }
 public ConfigurationAttribute(string comment, ActivationTime activationTime, string sinceVersion = "0.0.1")
 {
     Comment        = comment;
     SinceVersion   = sinceVersion;
     ActivationTime = activationTime;
 }
    public void AttemptToUseSkill(ActivationTime currentTime, CombatCommand unitCommand, CombatCommand opponentCommand)
    {
        float randomValue = Random.Range(0f, 100f);

        switch (currentTime)
        {
        case ActivationTime.beforeCombat:
            for (int i = 0; i < thisCharacterSkills.Count; i++)
            {
                if (thisCharacterSkills[i].GetMinActivationRNG() < randomValue && thisCharacterSkills[i].GetMaxActivationRNG() >= randomValue)
                {
                    if (thisCharacterSkills[i].GetSkillActivationTime() != currentTime)
                    {
                        continue;
                    }

                    ProcessThisCharacterSkillActivation(currentTime, i);
                    break;
                }
            }
            break;

        case ActivationTime.duringCombatOffense:
            for (int i = 0; i < thisCharacterSkills.Count; i++)
            {
                if (thisCharacterSkills[i].GetMinActivationRNG() < randomValue && thisCharacterSkills[i].GetMaxActivationRNG() >= randomValue)
                {
                    if (thisCharacterSkills[i].GetSkillActivationTime() != currentTime)
                    {
                        continue;
                    }
                    if (thisCharacterSkills[i].GetCommandThatTriggersSkill() != unitCommand)
                    {
                        continue;
                    }

                    ProcessThisCharacterSkillActivation(currentTime, i);
                    break;
                }
            }
            break;

        // Dealing with all the counters and retaliates
        case ActivationTime.duringCombatDefense:
            for (int i = 0; i < thisCharacterSkills.Count; i++)
            {
                if (thisCharacterSkills[i].GetMinActivationRNG() < randomValue && thisCharacterSkills[i].GetMaxActivationRNG() >= randomValue)
                {
                    if (thisCharacterSkills[i].GetSkillActivationTime() != currentTime)
                    {
                        continue;
                    }
                    if (thisCharacterSkills[i].GetCommandThatTriggersSkill() != unitCommand)
                    {
                        continue;
                    }
                    if (thisCharacterSkills[i].GetOpponentCommandThatTriggers() != opponentCommand)
                    {
                        continue;
                    }

                    ProcessThisCharacterSkillActivation(currentTime, i);
                    break;
                }
            }
            break;

        case ActivationTime.afterCombat:
            for (int i = 0; i < thisCharacterSkills.Count; i++)
            {
                if (thisCharacterSkills[i].GetMinActivationRNG() < randomValue && thisCharacterSkills[i].GetMaxActivationRNG() >= randomValue)
                {
                    if (thisCharacterSkills[i].GetSkillActivationTime() != currentTime)
                    {
                        continue;
                    }

                    ProcessThisCharacterSkillActivation(currentTime, i);
                    break;
                }
            }
            break;

        default:
            Debug.LogError("Error in processing skill.");
            break;
        }
    }
示例#7
0
 public override string ToString()
 {
     return(ID.ToString() + " " + ActivationTime.ToString() + " " + Duration.ToString());
 }
    // Use Dynamic Programming to process skill count
    private void PreCombatEndCombatSkillActivation(Character currentChar, int processCount, ActivationTime currentTime)
    {
        bool skillActivated = false;

        // Once done process both character, move on to next phase
        if (processCount == 2)
        {
            StartCoroutine(ProgressNextPhaseAfterSkillResolved(currentTime));
            return;
        }

        processCount++;

        if (currentChar == playerChar)
        {
            playerSkillScript.AttemptToUseSkill(currentTime, playerCommand, enemyCommand);
            skillActivated = playerSkillScript.GetIsThisCharacterUsingSkill();

            if (skillActivated)
            {
                StartCoroutine(PreCombatWaitForKeyPress(playerSkillScript, processCount, enemyChar, currentTime));
            }
            else
            {
                PreCombatEndCombatSkillActivation(enemyChar, processCount, currentTime);
            }
        }
        else if (currentChar == enemyChar)
        {
            enemySkillScript.AttemptToUseSkill(currentTime, enemyCommand, playerCommand);
            skillActivated = enemySkillScript.GetIsThisCharacterUsingSkill();

            if (skillActivated)
            {
                StartCoroutine(PreCombatWaitForKeyPress(enemySkillScript, processCount, playerChar, currentTime));
            }
            else
            {
                PreCombatEndCombatSkillActivation(playerChar, processCount, currentTime);
            }
        }
    }
    IEnumerator PreCombatWaitForKeyPress(SkillScript charSkillScript, int processCount, Character nextCharacter, ActivationTime currentTime)
    {
        yield return(WaitForKeyPress());

        charSkillScript.SetThisCharacterUsingSkill(false);
        PreCombatEndCombatSkillActivation(nextCharacter, processCount, currentTime);
    }
 public static T SetActivationTime <T>(this T entity, ActivationTime value)
     where T : FeatureDefinitionPower
 {
     entity.SetField("activationTime", value);
     return(entity);
 }