Beispiel #1
0
        private void GenericDiceModification(
            Action callback,
            DiceModificationType modificationType,
            Func <int> getCount,
            List <DieSide> sidesCanBeSelected,
            DieSide newSide,
            DiceModificationTimingType timing,
            bool isTrueReroll       = true,
            bool isForcedFullReroll = false
            )
        {
            switch (modificationType)
            {
            case DiceModificationType.Reroll:
                DiceModificationReroll(callback, getCount, sidesCanBeSelected, timing, isTrueReroll, isForcedFullReroll);
                break;

            case DiceModificationType.Change:
                DiceModificationChange(callback, getCount, sidesCanBeSelected, newSide);
                break;

            case DiceModificationType.Cancel:
                DiceModificationCancel(callback, sidesCanBeSelected, timing);
                break;

            case DiceModificationType.Add:
                DiceModificationAdd(callback, getCount, newSide);
                break;

            default:
                break;
            }
        }
Beispiel #2
0
 /// <summary>
 /// Adds available dice modification
 /// </summary>
 protected void AddDiceModification(
     string name,
     Func <bool> isAvailable,
     Func <int> aiPriority,
     DiceModificationType modificationType,
     int count,
     List <DieSide> sidesCanBeSelected = null,
     DieSide sideCanBeChangedTo        = DieSide.Unknown,
     DiceModificationTimingType timing = DiceModificationTimingType.Normal,
     bool isGlobal = false,
     Action <Action <bool> > payAbilityCost = null,
     Action payAbilityPostCost = null,
     bool isTrueReroll         = true,
     bool isForcedFullReroll   = false
     )
 {
     AddDiceModification(
         name,
         isAvailable,
         aiPriority,
         modificationType,
         delegate { return(count); },
         sidesCanBeSelected,
         sideCanBeChangedTo,
         timing,
         isGlobal,
         payAbilityCost,
         payAbilityPostCost,
         isTrueReroll,
         isForcedFullReroll
         );
 }
Beispiel #3
0
        private void GenericDiceModification(Action callback, DiceModificationType modificationType, Func <int> getCount, List <DieSide> sidesCanBeSelected, DieSide newSide, DiceModificationTimingType timing)
        {
            switch (modificationType)
            {
            case DiceModificationType.Reroll:
                DiceModificationReroll(callback, getCount, sidesCanBeSelected, timing);
                break;

            case DiceModificationType.Change:
                DiceModificationChange(callback, getCount, sidesCanBeSelected, newSide);
                break;

            default:
                break;
            }
        }
Beispiel #4
0
        /// <summary>
        /// Adds available dice modification
        /// </summary>
        protected void AddDiceModification(string name, Func <bool> isAvailable, Func <int> aiPriority, DiceModificationType modificationType, Func <int> getCount, List <DieSide> sidesCanBeSelected = null, DieSide sideCanBeChangedTo = DieSide.Unknown, DiceModificationTimingType timing = DiceModificationTimingType.Normal, bool isGlobal = false, Action <Action <bool> > payAbilityCost = null)
        {
            if (sidesCanBeSelected == null)
            {
                sidesCanBeSelected = new List <DieSide>()
                {
                    DieSide.Blank, DieSide.Focus, DieSide.Success, DieSide.Crit
                }
            }
            ;

            DiceModification = (ship) =>
            {
                CustomDiceModification diceModification = new CustomDiceModification()
                {
                    Name = name,
                    DiceModificationName   = name,
                    ImageUrl               = HostImageUrl,
                    DiceModificationTiming = timing,
                    Host   = HostShip,
                    Source = HostUpgrade,
                    CheckDiceModificationAvailable     = isAvailable,
                    GenerateDiceModificationAiPriority = aiPriority,
                    DoDiceModification = (Action callback) =>
                    {
                        if (payAbilityCost == null)
                        {
                            payAbilityCost = payCallback => payCallback(true);
                        }

                        payAbilityCost(success =>
                        {
                            if (success)
                            {
                                GenericDiceModification(callback, modificationType, getCount, sidesCanBeSelected, sideCanBeChangedTo, timing);
                            }
                            else
                            {
                                callback();
                            }
                        });
                    },
                    IsReroll = modificationType == DiceModificationType.Reroll,
                };
                ship.AddAvailableDiceModification(diceModification);
            };

            if (!isGlobal)
            {
                switch (timing)
                {
                case DiceModificationTimingType.AfterRolled:
                    HostShip.OnGenerateDiceModificationsAfterRolled += DiceModification;
                    break;

                case DiceModificationTimingType.Normal:
                    HostShip.OnGenerateDiceModifications += DiceModification;
                    break;

                case DiceModificationTimingType.Opposite:
                    HostShip.OnGenerateDiceModificationsOpposite += DiceModification;
                    break;

                case DiceModificationTimingType.CompareResults:
                    HostShip.OnGenerateDiceModificationsCompareResults += DiceModification;
                    break;

                default:
                    break;
                }
            }
            else
            {
                switch (timing)
                {
                case DiceModificationTimingType.AfterRolled:
                    GenericShip.OnGenerateDiceModificationsAfterRolledGlobal += DiceModification;
                    break;

                case DiceModificationTimingType.Normal:
                    GenericShip.OnGenerateDiceModificationsGlobal += DiceModification;
                    break;

                case DiceModificationTimingType.Opposite:
                    GenericShip.OnGenerateDiceModificationsOppositeGlobal += DiceModification;
                    break;

                case DiceModificationTimingType.CompareResults:
                    GenericShip.OnGenerateDiceModificationsCompareResultsGlobal += DiceModification;
                    break;

                default:
                    break;
                }
            }
        }