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; }
void OnCastAttack(PlayerAttackStats attack) { if (!EnemyLocked) { ForceRotation(); } }
public void InterruptAttack() { StopCoroutine("AttackCoroutine"); StopCoroutine("ImpulsesCoroutine"); attackState = e_AttackState.None; currentAttack = null; }
public HitInfos(LivingBeing Attacker, PlayerAttackStats AttackStats) : this(Attacker, (AttackStats)AttackStats) { PlayerAttackStats = AttackStats; }
void OnCastAttack(PlayerAttackStats attack) { needResetHeavy = true; needResetLight = true; }
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--; } }
void OnAttackStop(PlayerAttackStats attack) { attackTrail.Emit = false; }
void OnAttackStart(PlayerAttackStats attack) { attackTrail.Emit = true; }