internal List <int> attack_animation(AttackAnims anim) { List <Battle_Animation_Variable_Set> anim_set; if (anim.HasEnumFlag(AttackAnims.Attack)) { anim_set = Attack; } else if (anim.HasEnumFlag(AttackAnims.Hold)) { anim_set = Hold; } else //if (anim.Overlaps(AttackAnims.Return)) { anim_set = Return; } for (int i = anim_set.Count - 1; i >= 0; i--) { var animation = anim_set[i]; // Check for hit, crit, damage caused if (!animation.test_attack_flag_match(anim, AttackAnims.HitDefined, AttackAnims.Hit)) { continue; } if (!animation.test_attack_flag_match(anim, AttackAnims.CritDefined, AttackAnims.Crit)) { continue; } if (!animation.test_attack_flag_match(anim, AttackAnims.DamageDefined, AttackAnims.CausedDamage)) { continue; } if (!animation.test_attack_flag_match(anim, AttackAnims.SkillDefined, AttackAnims.SkillActive)) { continue; } // All checks passed return(animation.Animation); } // Should never hit this, but just in case return(null); }
internal bool test_attack_flag_match(AttackAnims anim, AttackAnims definition_flag, AttackAnims test_flag) { // If this animation doesn't care about this definition, return true if (!AnimDefinition.HasEnumFlag(definition_flag)) { return(true); } // Check if the animation data and the requested anim have the same flag return(AnimDefinition.HasEnumFlag(test_flag) == anim.HasEnumFlag(test_flag)); }
public bool test_attack_flag_match(AttackAnims anim) { foreach (var pair in ATTACK_DEFINITION_FLAGS) { AttackAnims definition_flag = pair.Key; AttackAnims test_flag = pair.Value; // If this animation doesn't care about this definition, continue if (!AnimDefinition.HasEnumFlag(definition_flag)) { continue; } // Check if the animation data and the requested anim have the same flag if (AnimDefinition.HasEnumFlag(test_flag) != anim.HasEnumFlag(test_flag)) { return(false); } } return(true); }
public override string ToString() { string key = "Default"; if (AnimDefinition != AttackAnims.None) { List <string> flags = new List <string>(); if (AnimDefinition.HasEnumFlag(AttackAnims.HitDefined)) { flags.Add(AnimDefinition.HasEnumFlag(AttackAnims.Hit) ? "Hit" : "Miss"); } if (AnimDefinition.HasEnumFlag(AttackAnims.CritDefined)) { flags.Add(AnimDefinition.HasEnumFlag(AttackAnims.Crit) ? "Crit" : "No-crit"); } if (AnimDefinition.HasEnumFlag(AttackAnims.DamageDefined)) { flags.Add(AnimDefinition.HasEnumFlag(AttackAnims.CausedDamage) ? "Damage" : "No-dmg"); } if (AnimDefinition.HasEnumFlag(AttackAnims.SkillDefined)) { flags.Add(AnimDefinition.HasEnumFlag(AttackAnims.SkillActive) ? "Skill" : "No-skill"); } key = string.Join(", ", flags); } return(string.Format("{0}: {1}", key, !Animation.Any() ? "Nothing" : string.Join(", ", Animation))); }