internal override AEffect Compute(AttackInfos a_attackInfos) { EffectDamage dmg = new EffectDamage(); dmg.attackInfos = a_attackInfos; IntModifier damageFromStats = a_attackInfos.source.attack.GetBonusDamage(type); IntModifier arpenFromStats = a_attackInfos.source.attack.GetPenetration(type); if (canCrit && a_attackInfos.critType == ECriticalType.Crititcal) { damageFromStats.Add(a_attackInfos.source.attack.CriticalDamages); arpenFromStats.Add(a_attackInfos.source.attack.CriticalArpen); } else if (canCrit && a_attackInfos.critType == ECriticalType.Penetration) { damageFromStats.Add(a_attackInfos.source.attack.PenetrationDamages); arpenFromStats.Add(a_attackInfos.source.attack.PenetrationArpen); } dmg.amount = baseAmount.Value; dmg.amount = damageFromStats.Compute(dmg.amount, FFEngine.Game.Constants.DAMAGE_BONUS_IS_FLAT_FIRST); dmg.arpen = arpenFromStats; dmg.type = type; return(dmg); }
internal override AEffectReport Apply(Unit a_target) { DamageReport report = new DamageReport(); IntModifier reduction = a_target.defense.GetResistance(type).Compute(arpen); report.attackInfos = attackInfos; report.effectInfos = effectInfos; int baseDmg = ComputeStackModifications(); report.target = a_target; report.type = type; report.unreduced = baseDmg; report.final = reduction.Compute(report.unreduced, FFEngine.Game.Constants.DAMAGE_REDUCTION_FROM_ARMOR_IS_FLAT_FIRST); //Scratching if (attackInfos.critType == ECriticalType.Normal && a_target.defense.ShouldScratch(this)) { report.didScratch = true; report.final = Mathf.FloorToInt(report.final * FFEngine.Game.Constants.SCRATCH_DAMAGE_MULTIPLIER); } else { report.didScratch = false; } report.reducedByArmor = report.final - report.unreduced; return(report); }
public override void OnGUI(SerializedPropertyX property, GUIContent label) { IntRange attr = property.GetValue <IntRange>(); label.text = property.displayName + " (" + attr.Value + ")"; property.isExpanded = EditorGUILayout.Foldout(property.isExpanded, label); if (property.isExpanded) { property["baseValue"].Value = EditorGUILayout.IntField(new GUIContent("Base Value"), property["baseValue"].GetValue <int>()); if (Mathf.Approximately(attr.BaseValue, 0)) { attr.BaseValue = 0; } attr.BaseValue = property["baseValue"].GetValue <int>(); property["currentValue"].Value = attr.Value; EditorGUI.indentLevel++; IntModifier[] modifiers = attr.GetReadOnlyModiferList(); for (int i = 0; i < modifiers.Length; i++) { IntModifier modifier = modifiers[i]; string valueStr = "Flat: " + modifier.flatBonus + " Percent: " + modifier.percentBonus; GUI.enabled = false; EditorGUILayout.TextField(new GUIContent(modifier.id), valueStr); GUI.enabled = true; } EditorGUILayoutX.PropertyField(property["min"]); EditorGUILayoutX.PropertyField(property["max"]); EditorGUI.indentLevel--; } }
private void DoDamage(CallReason continueReason) { var healthModifier = new IntModifier(ModifyMode.Addition, AttributeCode.Health, -5); var sourcePos = World.Instance.GetEntity(ActionSource).Position; log.InfoFormat("Bow Attack LookDir is {0}", LookDirection); var LookDirP = new Vector(LookDirection.Z, -LookDirection.X); var P1 = sourcePos + LookDirP * 0.5f * ATTACKWIDTH; var P2 = sourcePos - LookDirP * 0.5f * ATTACKWIDTH; var P3 = P2 + LookDirection * ATTACKDISTANCE; var dmgArea = new RectangleAreaTarget(P1, P2, P3) { AreaTargetOption = AreaTargetOption.IgnoreSource, SourceName = ActionSource }; World.Instance.ApplyModifier(dmgArea, healthModifier); // SetIdle AddCondition(new TimedContinueCondition(new System.TimeSpan(0, 0, 0, 0, 500))); ContinueEvent -= DoDamage; ContinueEvent += SetIdle; StartConditions(); }
public static IntModifier operator +(IntModifier x, IntModifier y) { IntModifier result = new IntModifier(); result.flat = x.flat + y.flat; result.percent = x.percent + y.percent; return(result); }
internal IntModifier Compute(IntModifier a_arpen) { IntModifier reduc = new IntModifier(); reduc.percent = GameConstants.ArmorPercentReduction(armor, a_arpen); reduc.flat = flat - Mathf.CeilToInt(flat * a_arpen.percent); return(reduc); }
internal IntModifier Compute() { IntModifier mod = new IntModifier(); mod.percent = percent; mod.flat = flat; return(mod); }
private void DoHealing(CallReason continueReason) { if (continueReason == CallReason.Interupted) { return; } var healthModifier = new IntModifier(ModifyMode.Addition, AttributeCode.Health, 30); World.Instance.ApplyModifier(Target, healthModifier); }
internal static float ArmorPercentReduction(int a_armor, IntModifier a_arpen) { int effectiveArmor = a_armor; if (a_arpen != null) { effectiveArmor = a_arpen.Compute(effectiveArmor, FFEngine.Game.Constants.ARMOR_REDUCTION_FROM_ARPEN_IS_FLAT_FIRST); } float reduction = 1f + (-1f / Mathf.Exp(effectiveArmor / 50f)); return(reduction); }
public void RemoveModifier(string id) { for (int i = 0; i < modifiers.Count; i++) { if (modifiers[i].id == id) { IntModifier prev = modifiers[i]; flatBonus -= prev.flatBonus; percentBonus -= prev.percentBonus; BaseValue = BaseValue; break; } } }
internal IntModifier GetPower(EDamageType a_type) { IntModifier mod = null; switch(a_type) { case EDamageType.Slashing : case EDamageType.Crushing : case EDamageType.Piercing : mod = PhysicalBonusDamages; break; default : mod = new IntModifier(); break; } return mod; }
private void DoDamage(CallReason continueReason) { var healthModifier = new IntModifier(ModifyMode.Addition, AttributeCode.Health, -7); var sourcePos = World.Instance.GetEntity(ActionSource).Position; var dmgArea = new CircleAreaTarget(sourcePos, RADIUS) { AreaTargetOption = AreaTargetOption.IgnoreSource, SourceName = ActionSource }; World.Instance.ApplyModifier(dmgArea, healthModifier); var interupted = World.Instance.GetEntitesInArea(dmgArea); m_InteruptionHandler.OnInterupt(interupted); }
public void AssignModifiers() { StrModifier = RaceStr / 2 - 5; DexModifier = RaceDex / 2 - 5; ConModifier = RaceCon / 2 - 5; IntModifier = RaceInt / 2 - 5; WisModifier = RaceWis / 2 - 5; ChaModifier = RaceCha / 2 - 5; StrMod.Text = StrModifier.ToString(); DexMod.Text = DexModifier.ToString(); ConMod.Text = ConModifier.ToString(); IntMod.Text = IntModifier.ToString(); WisMod.Text = WisModifier.ToString(); ChaMod.Text = ChaModifier.ToString(); }
public void SetModifier(string id, IntModifier modifier) { modifier = new IntModifier(id, modifier); for (int i = 0; i < modifiers.Count; i++) { if (modifiers[i].id == id) { IntModifier prev = modifiers[i]; flatBonus -= prev.flatBonus; percentBonus -= prev.percentBonus; break; } } modifiers.Add(modifier); flatBonus += modifier.flatBonus; percentBonus += modifier.percentBonus; }
public override void OnGUI(SerializedPropertyX property, GUIContent label) { IntValue attr = property.GetValue <IntValue>(); string labelText = property.displayName + " (" + attr.Value + ")"; if (attr.Value == int.MaxValue || attr.Value == int.MinValue) { labelText = property.displayName + " (--)"; } label.text = labelText; shown = EditorGUILayout.Foldout(shown, label); if (shown) { EditorGUI.indentLevel++; attr.BaseValue = EditorGUILayout.IntField(new GUIContent("Base Value"), attr.BaseValue); property["baseValue"].Value = attr.BaseValue; IntRange.IntRangeBoundry rangeBoundry = attr as IntRange.IntRangeBoundry; if (rangeBoundry != null) { //this code makes sure the parent's value is clamped now that we've updated a range boundry rangeBoundry.BaseValue = property["baseValue"].GetValue <int>(); int parentValue = rangeBoundry.parent.Value; property["parent"]["currentValue"].Value = parentValue; } IntModifier[] modifiers = attr.GetReadOnlyModiferList(); for (int i = 0; i < modifiers.Length; i++) { IntModifier modifier = modifiers[i]; string valueStr = ""; if (modifier.flatBonus != 0) { valueStr += modifier.flatBonus; } else if (modifier.percentBonus != 0) { valueStr += modifier.percentBonus + " %"; } EditorGUILayout.LabelField(modifier.id); EditorGUILayout.LabelField(valueStr); } EditorGUI.indentLevel--; } }
public void SetModifier(string id, IntModifier modifier) { modifier = new IntModifier(id, modifier); for (int i = 0; i < modifiers.Count; i++) { if (modifiers[i].id == id) { IntModifier prev = modifiers[i]; flatBonus -= prev.flatBonus; percentBonus -= prev.percentBonus; break; } } modifiers.Add(modifier); flatBonus += modifier.flatBonus; percentBonus += modifier.percentBonus; }
//Rolls stats and modifiers private void btnStats_Click(object sender, RoutedEventArgs e) { stats = Stats.RollStats(); stats2 = stats; StrScore.Text = stats.Str.ToString(); DexScore.Text = stats.Dex.ToString(); ConScore.Text = stats.Con.ToString(); IntScore.Text = stats.Int.ToString(); WisScore.Text = stats.Wis.ToString(); ChaScore.Text = stats.Cha.ToString(); StrModifier = stats.Str / 2 - 5; DexModifier = stats.Dex / 2 - 5; ConModifier = stats.Con / 2 - 5; IntModifier = stats.Int / 2 - 5; WisModifier = stats.Wis / 2 - 5; ChaModifier = stats.Cha / 2 - 5; StrMod.Text = StrModifier.ToString(); DexMod.Text = DexModifier.ToString(); ConMod.Text = ConModifier.ToString(); IntMod.Text = IntModifier.ToString(); WisMod.Text = WisModifier.ToString(); ChaMod.Text = ChaModifier.ToString(); //update stats to char sheet CharacterStrength.Content = stats.Str; CharacterDexterity.Content = stats.Dex; CharacterConstitution.Content = stats.Con; CharacterIntelligence.Content = stats.Int; CharacterWisdom.Content = stats.Wis; CharacterCharisma.Content = stats.Cha; // update char sheet modifiers CharStrMod.Content = StrMod.Text; CharDexMod.Content = DexMod.Text; CharConMod.Content = ConMod.Text; CharIntMod.Content = IntMod.Text; CharWisMod.Content = WisMod.Text; CharChaMod.Content = ChaMod.Text; }
private void DoDamage(CallReason continueReason) { var healthModifier = new IntModifier(ModifyMode.Addition, AttributeCode.Health, -5); var sourcePos = World.Instance.GetEntity(ActionSource).Position; log.InfoFormat("DS LookDir is {0}", LookDirection); var LookDirP = new Vector(LookDirection.Z, -LookDirection.X); var P1 = sourcePos + LookDirP * 0.5f * ATTACKWIDTH; var P2 = sourcePos - LookDirP * 0.5f * ATTACKWIDTH; var P3 = P2 + LookDirection * ATTACKDISTANCE; var dmgArea = new RectangleAreaTarget(P1, P2, P3) { AreaTargetOption = AreaTargetOption.IgnoreSource, SourceName = ActionSource }; World.Instance.ApplyModifier(dmgArea, healthModifier); var interupted = World.Instance.GetEntitesInArea(dmgArea); m_InteruptionHandler.OnInterupt(interupted); }
internal IntModifier GetPenetration(EDamageType a_type) { IntModifier result; switch (a_type) { case EDamageType.Slashing: case EDamageType.Crushing: case EDamageType.Piercing: result = new IntModifier(); break; case EDamageType.Fire: case EDamageType.Frost: case EDamageType.Ligthing: result = new IntModifier(); break; default: result = new IntModifier(); break; } return(result); }
private void DoDamage(CallReason continueReason) { if (continueReason == CallReason.Interupted) { SetIdle(continueReason); return; } var healthModifier = new IntModifier(ModifyMode.Addition, AttributeCode.Health, -5); var sourcePos = World.Instance.GetEntity(ActionSource).Position; var dmgArea = new Cone2DAreaTarget(sourcePos, LookDirection, ATTACKANGLE, ATTACKDISTANCE) { AreaTargetOption = AreaTargetOption.IgnoreSource, SourceName = ActionSource }; World.Instance.ApplyModifier(dmgArea, healthModifier); AddCondition(new TimedContinueCondition(new System.TimeSpan(0, 0, 0, 0, 500))); ContinueEvent -= DoDamage; ContinueEvent += SetIdle; StartConditions(); }
internal IntModifier GetBonusDamage(EDamageType a_type) { IntModifier mod = null; switch (a_type) { case EDamageType.Slashing: case EDamageType.Crushing: case EDamageType.Piercing: mod = BonusPhysicalDamages; break; case EDamageType.Fire: case EDamageType.Frost: case EDamageType.Ligthing: mod = BonusMagicDamages; break; default: mod = new IntModifier(); break; } return(mod); }
public IntModifier(string id, IntModifier other) { this.id = id; flatBonus = other.flatBonus; percentBonus = other.percentBonus; }
public CharCreation2() { InitializeComponent(); try { string chardata = File.ReadAllText(@"char.txt"); List <string> chardatalist = new List <string>(); char delimiter = ','; string[] substrings = chardata.Split(delimiter); foreach (var substring in substrings) { chardatalist.Add(substring); } CharacterName.Content = chardatalist[0]; CharacterRace.Content = chardatalist[1]; CharacterClass.Content = chardatalist[2]; StrScore.Text = chardatalist[3].ToString(); DexScore.Text = chardatalist[4].ToString(); ConScore.Text = chardatalist[5].ToString(); IntScore.Text = chardatalist[6].ToString(); WisScore.Text = chardatalist[7].ToString(); ChaScore.Text = chardatalist[8].ToString(); int strength, dexterity, constitution, intelligence, wisdom, charisma; int.TryParse(StrScore.Text, out strength); int.TryParse(DexScore.Text, out dexterity); int.TryParse(ConScore.Text, out constitution); int.TryParse(IntScore.Text, out intelligence); int.TryParse(WisScore.Text, out wisdom); int.TryParse(ChaScore.Text, out charisma); stats.Str = strength; stats.Dex = dexterity; stats.Con = constitution; stats.Int = intelligence; stats.Wis = wisdom; stats.Cha = charisma; StrScore.Text = stats.Str.ToString(); DexScore.Text = stats.Dex.ToString(); ConScore.Text = stats.Con.ToString(); IntScore.Text = stats.Int.ToString(); WisScore.Text = stats.Wis.ToString(); ChaScore.Text = stats.Cha.ToString(); StrModifier = stats.Str / 2 - 5; DexModifier = stats.Dex / 2 - 5; ConModifier = stats.Con / 2 - 5; IntModifier = stats.Int / 2 - 5; WisModifier = stats.Wis / 2 - 5; ChaModifier = stats.Cha / 2 - 5; StrMod.Text = StrModifier.ToString(); DexMod.Text = DexModifier.ToString(); ConMod.Text = ConModifier.ToString(); IntMod.Text = IntModifier.ToString(); WisMod.Text = WisModifier.ToString(); ChaMod.Text = ChaModifier.ToString(); //update stats to char sheet CharacterStrength.Content = stats.Str; CharacterDexterity.Content = stats.Dex; CharacterConstitution.Content = stats.Con; CharacterIntelligence.Content = stats.Int; CharacterWisdom.Content = stats.Wis; CharacterCharisma.Content = stats.Cha; // update char sheet modifiers CharStrMod.Content = StrMod.Text; CharDexMod.Content = DexMod.Text; CharConMod.Content = ConMod.Text; CharIntMod.Content = IntMod.Text; CharWisMod.Content = WisMod.Text; CharChaMod.Content = ChaMod.Text; } catch (FileNotFoundException) { throw; } }
public IntModifier(string id, IntModifier other) { this.id = id; flatBonus = other.flatBonus; percentBonus = other.percentBonus; }
public AnimateDeadEffect(IResolvable source, Card target) : base(source) { this.target = target; modifier = new IntModifier(source, nameof(Card.Power), -1); }
internal void Add(IntModifier a_toAdd) { percent += a_toAdd.percent; flat += a_toAdd.flat; }
internal override AEffectReport Apply(Unit a_target) { if (effectInfos == null) { Debug.LogError("Null effect for this modifier effect"); return(null); } FloatModifier percent; IntModifier flat; IntModifierFromEffect intMod; FloatModifierFromEffect floatMod; //PHYSICAL if (physical.flat > 0) { flat = new IntModifier(); flat.flat = ComputeStackModification(physical.flat); intMod = new IntModifierFromEffect(); intMod.modifier = flat; intMod.source = effectInfos.effectOverTime; a_target.attack.bonusPhysical.damage.flat.AddModifierFromEffect(intMod); } if (physical.percent > 0) { percent = new FloatModifier(); percent.flat = ComputeStackModification(physical.percent); // Only flat % modification. floatMod = new FloatModifierFromEffect(); floatMod.modifier = percent; floatMod.source = effectInfos.effectOverTime; a_target.attack.bonusPhysical.damage.percent.AddModifierFromEffect(floatMod); } //MAGIC if (magic.flat > 0) { flat = new IntModifier(); flat.flat = ComputeStackModification(magic.flat); intMod = new IntModifierFromEffect(); intMod.modifier = flat; intMod.source = effectInfos.effectOverTime; a_target.attack.bonusMagical.damage.flat.AddModifierFromEffect(intMod); } if (magic.percent > 0) { percent = new FloatModifier(); percent.flat = ComputeStackModification(magic.percent); // Only flat % modification. floatMod = new FloatModifierFromEffect(); floatMod.modifier = percent; floatMod.source = effectInfos.effectOverTime; a_target.attack.bonusMagical.damage.percent.AddModifierFromEffect(floatMod); } return(null); }
public GloriousAnthemEffect(IResolvable source) : base(source) { powerModifier = new IntModifier(this, nameof(Card.Power), 1); toughnessModifier = new IntModifier(this, nameof(Card.Toughness), 1); }