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; } }
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); }