private static MultiBinding GetStatBinding(BattleEntity source, BattleEntityStatCalculationData calculationData) { var statBinding = new MultiBinding { Converter = new BattleEntityStatCalculationConverter() }; statBinding.Bindings.Add(new Binding { Source = calculationData.CalculationFunction }); foreach (var bindingPath in calculationData.BindingPaths) { statBinding.Bindings.Add(new Binding(bindingPath) { Source = source }); } return statBinding; }
public BattleEntityInBattle(BattleEntity battleEntity) { BattleEntity = battleEntity; var normalizedStartingAction = 100.0 * battleEntity.BaseStats.Speed / Constants.STATS_MAX_PRIMARY_STAT; ActionCounter = Math.Max(0, RandomUtility.RandomGaussian(normalizedStartingAction, 25)); //wire up the is alive property var isAliveBinding = new Binding("BattleEntity.CurrentHealth") { Source = this, Converter = new BattleEntityInBattleIsAliveConverter() }; BindingOperations.SetBinding(this, IsAliveProperty, isAliveBinding); //wire up the action status property var actionStatusBinding = new MultiBinding { Converter = new BattlePartyMemberActionStatusConverter() }; actionStatusBinding.Bindings.Add(new Binding("ActionCounter") { Source = this }); actionStatusBinding.Bindings.Add(new Binding("HasQueuedAbility") { Source = this }); BindingOperations.SetBinding(this, ActionStatusProperty, actionStatusBinding); }
public static Int32 GetArmorMitigatedDamageDefault(BattleEntity target, DamageType damageType, Int32 originalDamage) { if (damageType == DamageType.Direct) { //no armor calculation return originalDamage; } //we have an armor calculation if (damageType == DamageType.Physical) { //for physical damage, just scale var reduction = target.BaseStats.PhysicalArmor / (Double)Constants.STATS_MAX_PHYSICAL_ARMOR * Constants.STATS_MAX_ARMOR_REDUCTION_MULTIPLIER; return Convert.ToInt32(originalDamage * (1 - reduction)); } //we must have elemental damage, scale at a factor determined by half the maximum elemental armor var halfMaxArmor = Constants.STATS_MAX_ELEMENTAL_ARMOR / 2; var multiplier = (halfMaxArmor - GetElementalArmor(target, damageType)) / (Double)halfMaxArmor; return Convert.ToInt32(originalDamage * multiplier); }
protected ShowAbilityAnimationMessage(AbilityAnimation animation, BattleEntity source, BattleEntity[] targets) { Animation = animation; Source = source; Targets = targets; }
public static ShowAbilityAnimationMessage New(AbilityAnimation animation, BattleEntity source, BattleEntity[] targets) { return new ShowAbilityAnimationMessage(animation, source, targets); }
public static BattleEntityDiedMessage New(BattleEntity entity) { var battleEntityInBattle = BattleUtility.GetBattleEntityInBattleByBattleEntity(entity); return new BattleEntityDiedMessage(battleEntityInBattle); }
public static BattleEntityDodgedMessage New(BattleEntity entity, LuckyEvent luckyEvent) { var battleEntityInBattle = BattleUtility.GetBattleEntityInBattleByBattleEntity(entity); return new BattleEntityDodgedMessage(battleEntityInBattle, luckyEvent); }
public static BattleEntityTookHealingMessage New(BattleEntity entity, HealingModel healingModel) { var battleEntityInBattle = BattleUtility.GetBattleEntityInBattleByBattleEntity(entity); return new BattleEntityTookHealingMessage(battleEntityInBattle, healingModel); }
public static LuckyEvent GetSkillAttackCritEvent(BattleEntity entity) { return RandomUtility.GetLuckyEvent(entity.BaseStats.SkillCrit, entity.BaseStats.Luck); }
public static LuckyEvent GetDodgeEvent(BattleEntity entity) { return RandomUtility.GetLuckyEvent(entity.BaseStats.Evade, entity.BaseStats.Luck); }
private static Int32 GetElementalArmor(BattleEntity entity, DamageType type) { switch (type) { case DamageType.Fire: return entity.BaseStats.FireArmor; case DamageType.Ice: return entity.BaseStats.IceArmor; case DamageType.Lightning: return entity.BaseStats.LightningArmor; case DamageType.Air: return entity.BaseStats.AirArmor; case DamageType.Poison: return entity.BaseStats.PoisonArmor; case DamageType.Earth: return entity.BaseStats.EarthArmor; } return 0; }
public static BattleEntityTookDamageMessage New(BattleEntity entity, Dictionary<DamageType, Int32> damageByType, LuckyEvent crit) { var battleEntityInBattle = BattleUtility.GetBattleEntityInBattleByBattleEntity(entity); return new BattleEntityTookDamageMessage(battleEntityInBattle, damageByType, crit); }
public static BattleEntityInBattle GetBattleEntityInBattleByBattleEntity(BattleEntity battleEntity) { var battleData = BattleModel.Instance?.BattleData; if (battleData == null) { return null; } if (battleEntity == battleData.PartyMemberInBattle1.BattleEntity) return battleData.PartyMemberInBattle1; if (battleEntity == battleData.PartyMemberInBattle2.BattleEntity) return battleData.PartyMemberInBattle2; if (battleEntity == battleData.PartyMemberInBattle3.BattleEntity) return battleData.PartyMemberInBattle3; if (battleEntity == battleData.PartyMemberInBattle4.BattleEntity) return battleData.PartyMemberInBattle4; return battleData.AllEnemiesInBattle.Where(x => x.BattleEntity == battleEntity).FirstOrDefault(); }