Пример #1
0
        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));
        }
Пример #7
0
 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));
     }
 }
Пример #9
0
 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();
 }
Пример #10
0
 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;
             }
         }
     }
 }