Example #1
0
    IEnumerator AttackCoroutine(PlayerAttackStats attack)
    {
        currentAttack = attack;
        attackState   = e_AttackState.Casting;

        yield return(new WaitForSeconds(attack.CastTime));

        attackState = e_AttackState.Attacking;

        try
        {
            GameObject   o  = Instantiate(attack.attackModel, Body.position, Visual.rotation, transform);
            AttackObject ao = o.GetComponent <AttackObject>();
            ao.Initialize(new HitInfos(PB, attack), GetWeightByThreshold(attack.weight));
        }
        catch { Debug.LogError("No Prefab Found !"); }

        SendMessage("OnAttackStart", attack);
        yield return(new WaitForSeconds(attack.AttackTime));

        SendMessage("OnAttackStop", attack);

        attackState = e_AttackState.Recovering;
        yield return(new WaitForSeconds(attack.RecoverTime));

        attackState   = e_AttackState.None;
        currentAttack = null;
    }
Example #2
0
 void OnCastAttack(PlayerAttackStats attack)
 {
     if (!EnemyLocked)
     {
         ForceRotation();
     }
 }
Example #3
0
    public void InterruptAttack()
    {
        StopCoroutine("AttackCoroutine");
        StopCoroutine("ImpulsesCoroutine");

        attackState   = e_AttackState.None;
        currentAttack = null;
    }
Example #4
0
 public HitInfos(LivingBeing Attacker, PlayerAttackStats AttackStats) : this(Attacker, (AttackStats)AttackStats)
 {
     PlayerAttackStats = AttackStats;
 }
Example #5
0
 void OnCastAttack(PlayerAttackStats attack)
 {
     needResetHeavy = true;
     needResetLight = true;
 }
Example #6
0
    void DisplayAttack(PlayerAttackStats att, p_AttackController ac, ref PlayerAttackStats[] parentRef)
    {
        EditorGUILayout.BeginHorizontal();

        att.fold = EditorGUILayout.Foldout(att.fold, att.Name, true, EditorStyles.boldLabel);

        if (GUILayout.Button("-", GUILayout.MaxWidth(40)))
        {
            List <PlayerAttackStats> list = new List <PlayerAttackStats>(parentRef);
            list.Remove(att);
            parentRef = list.ToArray();
            EditorUtility.SetDirty(ac);
            return;
        }
        EditorGUILayout.EndHorizontal();

        if (att.fold)
        {
            EditorGUI.indentLevel++;
            att.Name        = EditorGUILayout.TextField("Name", att.Name);
            att.AttackInput = (PlayerAttackStats.AttackInputType)EditorGUILayout.EnumPopup("Attack Input", att.AttackInput);
            att.MoveInput   = (p_MovementController.e_MovementState)EditorGUILayout.EnumFlagsField("Move Input", att.MoveInput);
            att.weight      = (AttackStats.AttackWeightType)EditorGUILayout.EnumPopup("Attack Weight", att.weight);
            EditorGUILayout.Separator();
            att.damages   = EditorGUILayout.FloatField("Damages", att.damages);
            att.knockback = EditorGUILayout.Vector3Field("Knockback", att.knockback);
            att.stunForce = EditorGUILayout.FloatField("Stun Force", att.stunForce);
            att.stunTime  = EditorGUILayout.FloatField("Stun Time", att.stunTime);
            EditorGUILayout.Separator();
            att.followCaster   = EditorGUILayout.Toggle("Follow Caster", att.followCaster);
            att.hitboxLifeTime = EditorGUILayout.FloatField("Hitbox Lifetime", att.hitboxLifeTime);
            att.maxHitTimes    = EditorGUILayout.IntField("Max Hits", att.maxHitTimes);
            EditorGUILayout.Separator();
            att.CastTime    = EditorGUILayout.FloatField("Cast Time", att.CastTime);
            att.AttackTime  = EditorGUILayout.FloatField("Attack Time", att.AttackTime);
            att.RecoverTime = EditorGUILayout.FloatField("Recover Time", att.RecoverTime);
            EditorGUILayout.Separator();
            att.attackModel = (GameObject)EditorGUILayout.ObjectField("Attack Model", att.attackModel, typeof(GameObject), false);
            EditorGUILayout.Separator();

            EditorGUILayout.BeginHorizontal();
            att.impulseFold = EditorGUILayout.Foldout(att.impulseFold, "Impulses", true, EditorStyles.boldLabel);

            if (att.impulseFold && GUILayout.Button("+", GUILayout.MaxWidth(35)))
            {
                List <AttackStats.Impulse> list = new List <AttackStats.Impulse>(att.impulses);
                list.Add(new AttackStats.Impulse());
                EditorUtility.SetDirty(ac);
                att.impulses = list.ToArray();
            }
            EditorGUILayout.EndHorizontal();

            if (att.impulseFold)
            {
                for (int i = 0; i < att.impulses.Length; i++)
                {
                    EditorGUI.indentLevel++;

                    EditorGUILayout.BeginHorizontal();
                    float totalTime = 0f;
                    for (int j = 0; j <= i; j++)
                    {
                        totalTime += att.impulses[j].time;
                    }

                    att.impulses[i].fold = EditorGUILayout.Foldout(att.impulses[i].fold, totalTime.ToString("0.00") + " : " + att.impulses[i].impulse.magnitude.ToString("0.00"), true, EditorStyles.boldLabel);

                    if (GUILayout.Button("-", GUILayout.MaxWidth(30)))
                    {
                        List <AttackStats.Impulse> list = new List <AttackStats.Impulse>(att.impulses);
                        list.Remove(att.impulses[i]);
                        att.impulses = list.ToArray();
                        return;
                    }
                    EditorGUILayout.EndHorizontal();
                    if (att.impulses[i].fold)
                    {
                        EditorGUI.indentLevel++;
                        att.impulses[i].impulse  = EditorGUILayout.Vector3Field("Impulse", att.impulses[i].impulse);
                        att.impulses[i].time     = EditorGUILayout.FloatField("Time", att.impulses[i].time);
                        att.impulses[i].duration = EditorGUILayout.FloatField("Duration", att.impulses[i].duration);
                        EditorGUI.indentLevel--;
                    }

                    EditorGUI.indentLevel--;
                }
            }

            EditorGUILayout.Separator();
            DisplayAttackGroup(ref att.comboFold, ref att.ComboAttacks, ac, "Possible Combo Attacks");

            EditorGUI.indentLevel--;
        }
    }
Example #7
0
 void OnAttackStop(PlayerAttackStats attack)
 {
     attackTrail.Emit = false;
 }
Example #8
0
 void OnAttackStart(PlayerAttackStats attack)
 {
     attackTrail.Emit = true;
 }