private void FixNarwhalChargeAttack() { if (Left.Stock.Name == StockNames.Narwhal || Right.Stock.Name == StockNames.Narwhal) { StockStatCalculator backLegsSide = GetStockSide(Limb.BackLegs); // Check if using back legs for charge attack if (GameAttributes[AbilityNames.ChargeAttack] > 0 && backLegsSide != null && backLegsSide.GetLimbAttributeValue(AbilityNames.ChargeAttack) > 0) { return; // Charge attack is good } // Check if narwhal charge is good StockStatCalculator tailSide = GetStockSide(Limb.Tail); if (tailSide.Name == StockNames.Narwhal && ChosenBodyParts[Limb.BackLegs] == Side.Empty && !HasLandSpeed() && !HasAirSpeed() && GetStockSide(Limb.Torso).Name != StockNames.GiantSquid) // Special case idk why { GameAttributes[AbilityNames.ChargeAttack] = 1; // Charge attack is good } else { GameAttributes[AbilityNames.ChargeAttack] = 0; // Bad charge attack from tuna } } }
private Dictionary <Limb, StockStatCalculator> InitChosenLimbs( StockStatCalculator left, StockStatCalculator right, Dictionary <Limb, Side> chosenBodyParts) { Dictionary <Limb, StockStatCalculator> chosenLimbs = new Dictionary <Limb, StockStatCalculator>(); foreach (Limb limb in Enum.GetValues(typeof(Limb))) { Side side = chosenBodyParts[limb]; if (side == Side.Left) { chosenLimbs.Add(limb, left); } else if (side == Side.Right) { chosenLimbs.Add(limb, right); } else { chosenLimbs.Add(limb, null); } } return(chosenLimbs); }
public CreatureStatCalculator( StockStatCalculator left, StockStatCalculator right, Dictionary <Limb, Side> chosenBodyParts) { ChosenLimbs = InitChosenLimbs(left, right, chosenBodyParts); Left = left; Right = right; }
public double GetMeleeType(Limb limb) { StockStatCalculator side = ChosenLimbs[limb]; if (side == null) { return(0); } return(side.GetLimbMeleeType(limb)); }
public double GetRangeSpecial(Limb limb) { StockStatCalculator side = ChosenLimbs[limb]; if (side == null) { return(0); } return(side.GetLimbRangeSpecial(limb)); }
public double CalcRangeMax(Limb limb) { StockStatCalculator side = ChosenLimbs[limb]; if (side == null) { return(0); } return(side.GetLimbRangeMax(OtherSideSize(side), limb)); }
private Stock OtherSide(StockStatCalculator stock) { if (stock.Name == Left.Name) { return(Right.Stock); } else { return(Left.Stock); } }
private double OtherSideSize(StockStatCalculator stock) { if (stock.Name == Left.Name) { return(Right.GetLimbAttributeValue(Attributes.Size)); } else { return(Left.GetLimbAttributeValue(Attributes.Size)); } }
public CreatureBuilder(Stock left, Stock right, Dictionary <Limb, Side> chosenBodyParts) { Left = new StockStatCalculator(left); Right = new StockStatCalculator(right); ChosenBodyParts = chosenBodyParts; Calculator = new CreatureStatCalculator(Left, Right, ChosenBodyParts); InitGameAttributes(); InitStats(); InitAbilities(); FixTunaLeapAttack(); FixNarwhalChargeAttack(); }
private void InitAbilities() { InitPassiveAbilities(); // TODO: Could hardcode or cache the limbs for abilities to reduce inner loop foreach (Limb limb in Enum.GetValues(typeof(Limb))) { StockStatCalculator side = GetStockSide(limb); if (side == null) { continue; } foreach (string ability in AbilityNames.Abilities) { int bodyPart = side.GetLimbAttributeBodyPart(ability); if (bodyPart > -1 && (Limb)bodyPart == limb && side.GetLimbAttributeValue(ability) > 0) { GameAttributes[ability] = 1; } } } }