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; } }
/// <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 ); }
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; } }
/// <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; } } }