Пример #1
0
    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));
    }
Пример #2
0
    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);
    }
Пример #3
0
    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);
    }
Пример #4
0
    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);
    }
Пример #5
0
    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));
    }
Пример #7
0
    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);
    }
Пример #8
0
    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);
        }
    }
Пример #9
0
    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);
    }
Пример #10
0
    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));
    }
Пример #11
0
 public static Fixed GetDamagePercent(this ElementRelation relation) => default;
Пример #12
0
    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));
    }