public static float GetRoleAtkRelationRate(ElementRelation eleRelation) { var exAttrScript = ""; if (GemDataPack.Instance.SelectedGemItem.GemExAttrRecord != null) { exAttrScript = GemDataPack.Instance.SelectedGemItem.GemExAttrRecord.Script; } if (exAttrScript.Equals("DoubleEnhance")) { if (eleRelation == ElementRelation.Restraint || eleRelation == ElementRelation.MutualRestraint) { return(2.5f); } } else if (exAttrScript.Equals("HalfEnhance")) { if (eleRelation == ElementRelation.BeRestraint) { return(0.75f); } } return(GetRelationRate(eleRelation)); }
IEnumerator _0() { CameraManager.instance.SetColorToFadePlane(new Color(0, 0, 0, 0.3f)); ElementRelation element_relation = ElementManager.instance.GetRelationBetween(player_element, enemy_element); if (player_element == Element.DARK) { PopupSmall.instance.text_label.text = "Your attack was of type Void : the concept of nothingness.\n" + "Void is the only thing which can negate absolute perfection, which is an ideal reality.\n" + "But the void get crushed by fire and earth, which are the two elements which manifest concrete reality."; } else if (player_element == Element.LIGHT) { PopupSmall.instance.text_label.text = "Your attack was of type Absolute : the ideal ultimate reality.\n" + "Ideal perfection is always superior to concrete manifestation of reality like fire and earth.\n" + "But even something as powerful as ideal perfection can be suppressed by it's denial."; } else if (player_element == Element.FIRE) { PopupSmall.instance.text_label.text = "Your attack was of type Fire : one of the two natural elements in this world.\n" + "Only a concrete manifestation of reality like fire can crush the concept of non-reality.\n" + "But because fire is bound to reality, it will never be able transcend absolute perfection.\n" + "Fire is also naturally weak against Rock."; } else if (player_element == Element.ROCK) { PopupSmall.instance.text_label.text = "Your attack was of type Rock : one of the two natural elements in this world.\n" + "Only a concrete manifestation of reality like earth can crush the concept of non-reality.\n" + "But because earth is bound to reality, it will never be able transcend absolute perfection.\n" + "Rock is also naturally strong against Fire."; } PopupSmall.instance.Show(25, 80, 527, 200); yield return(null); }
IEnumerator _3() { ElementRelation element_relation = ElementManager.instance.GetRelationBetween(player_element, enemy_element); string player_element_string = ElementManager.instance.ElementToString(player_element); string enemy_element_string = ElementManager.instance.ElementToString(enemy_element); bool is_burst = (EventsTimeline.instance.event_to_schedule.event_type == TimelineEventType.PLAYER_BURST_ATTACK); if (is_burst) { player_power *= 2; } if (element_relation == ElementRelation.NORMAL) { PopupSmall.instance.text_label.text = "You attacked using the element " + player_element_string + " with a power of " + player_power + "\n" + "against the enemy which defended with the element " + enemy_element_string + " with an affinity of: " + enemy_power + "\n" + "So the enemy took: " + player_power + " - " + enemy_power + " = " + Mathf.Max(0, player_power - enemy_power) + "."; } else if (element_relation == ElementRelation.STRONG) { PopupSmall.instance.text_label.text = "You have the advantage using the element " + player_element_string + " with a power of " + player_power + "\n" + "against the enemy which defended with the element " + enemy_element_string + " with an affinity of: " + enemy_power + "\n" + "So the enemy took: (" + player_power + " * 2) + " + enemy_power + " = " + Mathf.Max(0, player_power * 2 + enemy_power) + "."; } else if (element_relation == ElementRelation.WEAK) { PopupSmall.instance.text_label.text = "You have the disadvantage using the element " + player_element_string + " with a power of " + player_power + "\n" + "against the enemy which defended with the element " + enemy_element_string + " with an affinity of: " + enemy_power + "\n" + "So the enemy took: (" + player_power + " / 2) - " + enemy_power + " = " + Mathf.Max(0, player_power / 2 - enemy_power) + "."; } yield return(null); }
public static ElementRelation GetElementRelation(ELEMENT_TYPE elementAtk, ELEMENT_TYPE elementDef) { ElementRelation eleRelation = BattleField.ElementRelation.None; switch (elementAtk) { case ELEMENT_TYPE.FIRE: if (elementDef == ELEMENT_TYPE.ICE) { eleRelation = ElementRelation.BeRestraint; } if (elementDef == ELEMENT_TYPE.WIND) { eleRelation = ElementRelation.Restraint; } break; case ELEMENT_TYPE.ICE: if (elementDef == ELEMENT_TYPE.WIND) { eleRelation = ElementRelation.BeRestraint; } if (elementDef == ELEMENT_TYPE.FIRE) { eleRelation = ElementRelation.Restraint; } break; case ELEMENT_TYPE.WIND: if (elementDef == ELEMENT_TYPE.FIRE) { eleRelation = ElementRelation.BeRestraint; } if (elementDef == ELEMENT_TYPE.ICE) { eleRelation = ElementRelation.Restraint; } break; case ELEMENT_TYPE.LIGHT: if (elementDef == ELEMENT_TYPE.DARK) { eleRelation = ElementRelation.MutualRestraint; } break; case ELEMENT_TYPE.DARK: if (elementDef == ELEMENT_TYPE.LIGHT) { eleRelation = ElementRelation.MutualRestraint; } break; } return(eleRelation); }
public static ElementRelation GetRoleDefRelation(ELEMENT_TYPE elementAtk) { var exAttrScript = ""; if (GemDataPack.Instance.SelectedGemItem.GemExAttrRecord != null) { exAttrScript = GemDataPack.Instance.SelectedGemItem.GemExAttrRecord.Script; } ElementRelation eleRelation = ElementRelation.None; if (exAttrScript.Equals("FireDefence")) { if (elementAtk == ELEMENT_TYPE.FIRE) { eleRelation = ElementRelation.BeRestraint; return(eleRelation); } } else if (exAttrScript.Equals("IceDefence")) { if (elementAtk == ELEMENT_TYPE.ICE) { eleRelation = ElementRelation.BeRestraint; return(eleRelation); } } else if (exAttrScript.Equals("WindDefence")) { if (elementAtk == ELEMENT_TYPE.WIND) { eleRelation = ElementRelation.BeRestraint; return(eleRelation); } } else if (exAttrScript.Equals("LightDefence")) { if (elementAtk == ELEMENT_TYPE.LIGHT) { eleRelation = ElementRelation.BeRestraint; return(eleRelation); } } else if (exAttrScript.Equals("DarkDefence")) { if (elementAtk == ELEMENT_TYPE.DARK) { eleRelation = ElementRelation.BeRestraint; return(eleRelation); } } return(ElementRelation.None); }
static void DrawElementLink(ElementRelation link, Color color, Vector3 help) { Gizmos.color = color; var triggerPos = link.GetTrigger().transform.position; var waitingPos = link.GetWaiting().transform.position; var centerPos = 0.5f * triggerPos + 0.5f * waitingPos; var traceBack = triggerPos - waitingPos; Gizmos.DrawSphere(triggerPos, 0.1f); Gizmos.DrawLine(triggerPos, waitingPos); Gizmos.DrawLine(centerPos, GetBackPoint(centerPos, traceBack, help, arrowDegree, arrowLength)); Gizmos.DrawLine(centerPos, GetBackPoint(centerPos, traceBack, help, -arrowDegree, arrowLength)); }
IEnumerator _2() { ElementRelation element_relation = ElementManager.instance.GetRelationBetween(player_element, enemy_element); if (element_relation == ElementRelation.NORMAL) { PopupSmall.instance.text_label.text = "When the attacking and defending types are the same, the damages are reduced by the value of the defending affinity.\n"; } else if (element_relation == ElementRelation.STRONG) { PopupSmall.instance.text_label.text = "When the attacking type is strong against the defending type, the damages are doubled and the defending affinity is taken as extra damage."; } else if (element_relation == ElementRelation.WEAK) { PopupSmall.instance.text_label.text = "When the attacking type is weak against the defending type, the damages are halved and then reduced by the value of the defending affinity."; } yield return(null); }
public static float GetRelationRate(ElementRelation eleRelation) { switch (eleRelation) { case ElementRelation.None: return(1); case ElementRelation.Restraint: return(2); case ElementRelation.BeRestraint: return(0.5f); case ElementRelation.MutualRestraint: return(2); default: return(1); } }
public static ElementRelation GetRoleAtkRelation(ELEMENT_TYPE elementAtk, ELEMENT_TYPE elementDef) { var exAttrScript = ""; if (GemDataPack.Instance.SelectedGemItem.GemExAttrRecord != null) { exAttrScript = GemDataPack.Instance.SelectedGemItem.GemExAttrRecord.Script; } ElementRelation eleRelation = ElementRelation.None; if (exAttrScript.Equals("FireEnhance")) { if (elementAtk == ELEMENT_TYPE.FIRE && elementDef == ELEMENT_TYPE.ICE) { eleRelation = ElementRelation.None; return(eleRelation); } } else if (exAttrScript.Equals("IceEnhance")) { if (elementAtk == ELEMENT_TYPE.ICE && elementDef == ELEMENT_TYPE.WIND) { eleRelation = ElementRelation.None; return(eleRelation); } } else if (exAttrScript.Equals("WindEnhance")) { if (elementAtk == ELEMENT_TYPE.WIND && elementDef == ELEMENT_TYPE.FIRE) { eleRelation = ElementRelation.None; return(eleRelation); } } else if (exAttrScript.Equals("FireDouble")) { if (elementAtk == ELEMENT_TYPE.FIRE) { if (elementDef == ELEMENT_TYPE.FIRE) { eleRelation = ElementRelation.Restraint; } } } else if (exAttrScript.Equals("IceDouble")) { if (elementAtk == ELEMENT_TYPE.ICE) { if (elementDef == ELEMENT_TYPE.ICE) { eleRelation = ElementRelation.Restraint; } } } else if (exAttrScript.Equals("WindDouble")) { if (elementAtk == ELEMENT_TYPE.WIND) { if (elementDef == ELEMENT_TYPE.WIND) { eleRelation = ElementRelation.Restraint; } } } else if (exAttrScript.Equals("LightDouble")) { if (elementAtk == ELEMENT_TYPE.LIGHT) { if (elementDef == ELEMENT_TYPE.LIGHT) { eleRelation = ElementRelation.Restraint; } } } else if (exAttrScript.Equals("DarkDouble")) { if (elementAtk == ELEMENT_TYPE.DARK) { if (elementDef == ELEMENT_TYPE.DARK) { eleRelation = ElementRelation.Restraint; } } } if (eleRelation == ElementRelation.None) { eleRelation = GetElementRelation(elementAtk, elementDef); } return(eleRelation); }
IEnumerator Coroutine_EnemyAttackEffects(EnemyAttack enemy_attack) { ParticleSystem attack_FX = attacks_FX[(int)enemy_attack.element]; StartCoroutine(Coroutine_AttackFX(attack_FX, enemy_attack.is_burst)); if (enemy_attack.is_burst == true) { StartCoroutine(Coroutine_EnemyChangeElement(enemy_attack.element)); yield return(new WaitForSeconds(0.5f + extra_time_for_burst_attack)); attack_FX.startLifetime -= life_time_delta_for_burst_attack; attack_FX.startSpeed -= speed_delta_for_burst_attack; attack_FX.startSize -= extra_size_for_burst_attack; } else { yield return(new WaitForSeconds(0.5f)); } last_enemy_attacked_applied = enemy_attack; if (PlayerBattle.instance.has_element == true) { ElementRelation element_relation = ElementManager.instance.GetRelationBetween( enemy_attack.element, PlayerBattle.instance.current_element ); int current_affinity = PlayerBattle.instance.GetCurrentElementAffinity(); switch (element_relation) { case ElementRelation.NORMAL: SoundManager.instance.PlayIndependant(SoundManager.instance.normal_damage_sound); StartCoroutine(SpecialEffectsManager.instance.normal_damage_shake.LaunchShake(PlayerBattle.instance.visuals_transform)); PlayerBattle.instance.TakeDamage(Mathf.Max(0, enemy_attack.damage - current_affinity)); break; case ElementRelation.STRONG: SoundManager.instance.PlayIndependant(SoundManager.instance.strong_damage_sound); StartCoroutine(SpecialEffectsManager.instance.critical_damage_shake.LaunchShake(PlayerBattle.instance.visuals_transform)); PlayerBattle.instance.TakeDamage((enemy_attack.damage * 2) + current_affinity); break; case ElementRelation.WEAK: SoundManager.instance.PlayIndependant(SoundManager.instance.weak_damage_sound); PlayerBattle.instance.generic_animator.SetTrigger("StayStill"); PlayerBattle.instance.TakeDamage(Mathf.Max(0, (enemy_attack.damage / 2) - current_affinity)); break; } Debug.LogWarning("Player took damage, element_relation:" + element_relation); } else { SoundManager.instance.PlayIndependant(SoundManager.instance.normal_damage_sound); StartCoroutine(SpecialEffectsManager.instance.normal_damage_shake.LaunchShake(PlayerBattle.instance.visuals_transform)); PlayerBattle.instance.TakeDamage(enemy_attack.damage); //NEUTRAL } Debug.LogWarning("enemy_attack: base_damage:" + enemy_attack.damage); Debug.LogWarning("new_player_life: " + Player.instance.current_life); Player.instance.CheckDeath(); yield return(new WaitForSeconds(0.001f)); }
public static Fixed GetDamagePercent(this ElementRelation relation) => default;
IEnumerator Coroutine_SkillEffects(Skill skill, bool is_burst = false) { ParticleSystem attack_FX = attacks_FX[(int)skill.element]; Debug.LogWarning("is_burst = " + is_burst); is_casting_skill = false; casted_skill = null; StartCoroutine(Coroutine_AttackFX(attack_FX, is_burst)); if (is_burst == true) { yield return(new WaitForSeconds(0.5f + BattleManager.instance.extra_time_for_burst_attack)); attack_FX.startLifetime -= BattleManager.instance.life_time_delta_for_burst_attack; attack_FX.startSpeed -= BattleManager.instance.speed_delta_for_burst_attack; attack_FX.startSize -= BattleManager.instance.extra_size_for_burst_attack; } else { bonus_affinity_to_be_added_next = Mathf.CeilToInt(((float)GetEffectiveBattleElementAffinity(skill.element)) * skill.combos_bonus_affinity_ratio); yield return(new WaitForSeconds(0.5f)); } SkillEffects skill_effects = skill.GetEffects(is_burst); last_skill_effect_applied = skill_effects; if (is_burst == true) { bonus_affinity_to_be_added_next = 0; ResetAffinities(); Player.instance.base_element_affinities[(int)skill.element] += 1; } if (skill_effects.deals_damage) { if (BattleManager.instance.enemy_has_element == true) { ElementRelation element_relation = ElementManager.instance.GetRelationBetween( skill.element, BattleManager.instance.enemy_current_element ); int current_boss_affinity = BattleManager.instance.GetEnemyCurrentElementAffinity(); switch (element_relation) { case ElementRelation.NORMAL: SoundManager.instance.PlayIndependant(SoundManager.instance.normal_damage_sound); StartCoroutine(SpecialEffectsManager.instance.normal_damage_shake.LaunchShake(BattleManager.instance.enemy_moster.visuals_transform)); BattleManager.instance.EnemyTakeDamage(Mathf.Max(0, skill_effects.damages - current_boss_affinity)); break; case ElementRelation.STRONG: SoundManager.instance.PlayIndependant(SoundManager.instance.strong_damage_sound); StartCoroutine(SpecialEffectsManager.instance.critical_damage_shake.LaunchShake(BattleManager.instance.enemy_moster.visuals_transform)); BattleManager.instance.EnemyTakeDamage((skill_effects.damages * 2) + current_boss_affinity); break; case ElementRelation.WEAK: SoundManager.instance.PlayIndependant(SoundManager.instance.weak_damage_sound); BattleManager.instance.enemy_moster.moster_data.moster_battle.generic_animator.SetTrigger("StayStill"); BattleManager.instance.EnemyTakeDamage(Mathf.Max(0, (skill_effects.damages / 2) - current_boss_affinity)); break; } Debug.LogWarning("element_relation:" + element_relation + ", enemy affinity: " + current_boss_affinity); } else { SoundManager.instance.PlayIndependant(SoundManager.instance.normal_damage_sound); StartCoroutine(SpecialEffectsManager.instance.normal_damage_shake.LaunchShake(BattleManager.instance.enemy_moster.visuals_transform)); BattleManager.instance.EnemyTakeDamage(skill_effects.damages); } Debug.LogWarning("skill_effect: base_damage:" + skill_effects.damages); Debug.LogWarning("new_boss_life: " + BattleManager.instance.enemy_current_life); } if (BattleManager.instance.CheckEnemyDeath() == false) { Player.instance.CheckDeath(); } skill_ended = true; yield return(new WaitForSeconds(0.001f)); }