示例#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;
            }
        }
示例#2
0
        public override void UseDiceModifications(DiceModificationTimingType type)
        {
            base.UseDiceModifications(type);
            Combat.ShowDiceModificationButtons(type);

            GameController.CheckExistingCommands();
        }
示例#3
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
         );
 }
示例#4
0
        public virtual void UseDiceModifications(DiceModificationTimingType type)
        {
            Phases.CurrentSubPhase.IsReadyForCommands = true;

            Roster.HighlightPlayer(PlayerNo);
            Combat.ShowDiceModificationButtons(type);
            GameController.CheckExistingCommands();
        }
示例#5
0
 public DiceModificationStep(CombatStep combatStep, PlayerRole stepOwner, DiceModificationTimingType timing, Type subphaseType)
 {
     CombatStep             = combatStep;
     StepOwner              = stepOwner;
     SubphaseType           = subphaseType;
     DiceModificationTiming = timing;
     IsVital = IsVitalStep();
 }
示例#6
0
    private static void ReGenerateListOfButtons(DiceModificationTimingType timingType)
    {
        HideDiceModificationButtons();

        switch (timingType)
        {
        case DiceModificationTimingType.Normal:
            ShowDiceModificationButtons();
            break;

        case DiceModificationTimingType.Opposite:
            ShowOppositeDiceModificationButtons(true);
            break;

        case DiceModificationTimingType.CompareResults:
            ShowCompareResultsButtons(true);
            break;

        default:
            break;
        }
    }
示例#7
0
        // DICE MODIFICATIONS

        // GENERATE LIST OF AVAILABLE DICE MODIFICATIONS

        public void GenerateDiceModifications(DiceModificationTimingType type)
        {
            switch (type)
            {
            case DiceModificationTimingType.Normal:
                GenerateDiceModificationsNormal();
                break;

            case DiceModificationTimingType.AfterRolled:
                GenerateDiceModificationsAfterRolled();
                break;

            case DiceModificationTimingType.Opposite:
                GenerateDiceModificationsOpposite();
                break;

            case DiceModificationTimingType.CompareResults:
                GenerateDiceModificationsCompareResults();
                break;

            default:
                break;
            }
        }
示例#8
0
 public virtual void UseDiceModifications(DiceModificationTimingType type)
 {
     Roster.HighlightPlayer(PlayerNo);
 }
示例#9
0
        private void DiceModificationReroll(Action callback, Func <int> getCount, List <DieSide> sidesCanBeSelected, DiceModificationTimingType timing)
        {
            int diceCount = getCount();

            if (diceCount > 0)
            {
                DiceRerollManager diceRerollManager = new DiceRerollManager
                {
                    NumberOfDiceCanBeRerolled = diceCount,
                    SidesCanBeRerolled        = sidesCanBeSelected,
                    IsOpposite = timing == DiceModificationTimingType.Opposite,
                    CallBack   = callback
                };
                diceRerollManager.Start();
            }
            else
            {
                Messages.ShowErrorToHuman("0 dice can be rerolled");
                callback();
            }
        }
示例#10
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;
            }
        }
示例#11
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;
                }
            }
        }
示例#12
0
        public override void UseDiceModifications(DiceModificationTimingType type)
        {
            base.UseDiceModifications(type);

            Combat.ShowDiceModificationButtons(type);
        }
示例#13
0
        private void DiceModificationCancel(Action callback, Func <int> getCount, List <DieSide> sidesCanBeSelected, DiceModificationTimingType timing)
        {
            int diceCount = getCount();

            for (int i = 0; i < diceCount; i++)
            {
                Die die = DiceRoll.CurrentDiceRoll.DiceList.Where(d => sidesCanBeSelected.Contains(d.Side)).FirstOrDefault();
                if (die != null)
                {
                    DiceRoll.CurrentDiceRoll.DiceList.Remove(die);
                    die.RemoveModel();
                }
                else
                {
                    break;
                }
            }

            //DiceRoll.CurrentDiceRoll.OrganizeDicePositions();

            callback();
        }
示例#14
0
文件: Combat.cs 项目: xNyer/FlyCasual
    public static void ShowDiceModificationButtons(DiceModificationTimingType type, bool isForced = false)
    {
        HideDiceModificationButtons();

        UnityAction CloseButtonEffect = null;

        switch (type)
        {
        case DiceModificationTimingType.Opposite:
            Selection.ActiveShip = (AttackStep == CombatStep.Attack) ? Defender : Attacker;
            CloseButtonEffect    = SwitchToAfterRolledDiceModifications;
            break;

        case DiceModificationTimingType.AfterRolled:
            Selection.ActiveShip = (AttackStep == CombatStep.Attack) ? Attacker : Defender;
            CloseButtonEffect    = SwitchToRegularDiceModifications;
            break;

        case DiceModificationTimingType.Normal:
            Selection.ActiveShip = (AttackStep == CombatStep.Attack) ? Attacker : Defender;
            CloseButtonEffect    = Combat.ConfirmDiceResults;
            break;

        case DiceModificationTimingType.CompareResults:
            Selection.ActiveShip = Attacker;
            CloseButtonEffect    = CompareResultsAndDealDamageClient;
            break;

        default:
            break;
        }

        Phases.CurrentSubPhase.RequiredPlayer = Selection.ActiveShip.Owner.PlayerNo;

        AvailableDecisions = new Dictionary <string, GenericAction>();
        Selection.ActiveShip.GenerateDiceModifications(type);

        if (Selection.ActiveShip.GetDiceModificationsGenerated().Count > 0 || isForced)
        {
            float   offset          = 0;
            Vector3 defaultPosition = GameObject.Find("UI/CombatDiceResultsPanel").transform.Find("DiceModificationsPanel").position;

            foreach (var actionEffect in Selection.ActiveShip.GetDiceModificationsGenerated())
            {
                AvailableDecisions.Add(actionEffect.Name, actionEffect);

                Vector3 position = defaultPosition + new Vector3(0, -offset, 0);
                CreateDiceModificationsButton(actionEffect, position);
                offset += 40;
            }

            ShowCloseButton(CloseButtonEffect);
            ShowDiceResultsPanel();
        }
        else
        {
            if (type != DiceModificationTimingType.Normal)
            {
                CloseButtonEffect.Invoke();
            }
            else
            {
                ShowCloseButton(CloseButtonEffect);
                ShowDiceResultsPanel();
            }
        }
    }
示例#15
0
        public override void UseDiceModifications(DiceModificationTimingType type)
        {
            base.UseDiceModifications(type);

            Action FinalEffect = null;

            switch (type)
            {
            case DiceModificationTimingType.Normal:
                Selection.ActiveShip = (Combat.AttackStep == CombatStep.Attack) ? Combat.Attacker : Combat.Defender;
                FinalEffect          = Phases.CurrentSubPhase.CallBack;
                break;

            case DiceModificationTimingType.AfterRolled:
                Selection.ActiveShip = (Combat.AttackStep == CombatStep.Attack) ? Combat.Attacker : Combat.Defender;
                FinalEffect          = Combat.SwitchToRegularDiceModifications;
                break;

            case DiceModificationTimingType.Opposite:
                Selection.ActiveShip = (Combat.AttackStep == CombatStep.Attack) ? Combat.Defender : Combat.Attacker;
                FinalEffect          = Combat.SwitchToAfterRolledDiceModifications;
                break;

            case DiceModificationTimingType.CompareResults:
                Selection.ActiveShip = Combat.Attacker;
                FinalEffect          = Combat.CompareResultsAndDealDamage;
                break;

            default:
                break;
            }

            Selection.ActiveShip.GenerateDiceModifications(type);
            List <GenericAction> availableDiceModifications = Selection.ActiveShip.GetDiceModificationsGenerated();

            Dictionary <GenericAction, int> actionsPriority = new Dictionary <GenericAction, int>();

            foreach (var diceModification in availableDiceModifications)
            {
                int priority = diceModification.GetDiceModificationPriority();
                Selection.ActiveShip.CallOnAiGetDiceModificationPriority(diceModification, ref priority);
                actionsPriority.Add(diceModification, priority);
            }

            actionsPriority = actionsPriority.OrderByDescending(n => n.Value).ToDictionary(n => n.Key, n => n.Value);

            bool isActionEffectTaken = false;

            if (actionsPriority.Count > 0)
            {
                KeyValuePair <GenericAction, int> prioritizedActionEffect = actionsPriority.First();
                if (prioritizedActionEffect.Value > 0)
                {
                    isActionEffectTaken = true;
                    Messages.ShowInfo("AI uses \"" + prioritizedActionEffect.Key.Name + "\"");

                    GameManagerScript.Wait(1, delegate {
                        GameCommand command = Combat.GenerateDiceModificationCommand(prioritizedActionEffect.Key.Name);
                        GameMode.CurrentGameMode.ExecuteCommand(command);
                    });
                }
            }

            if (!isActionEffectTaken)
            {
                if (type == DiceModificationTimingType.Normal)
                {
                    GameManagerScript.Wait(1, delegate {
                        GameCommand command = Combat.GenerateDiceModificationCommand("OK");
                        GameMode.CurrentGameMode.ExecuteCommand(command);
                    });
                }
                else
                {
                    FinalEffect.Invoke();
                }
            }
        }
示例#16
0
 public virtual void UseDiceModifications(DiceModificationTimingType type)
 {
     Roster.HighlightPlayer(PlayerNo);
     Combat.ShowDiceModificationButtons(type);
     GameController.CheckExistingCommands();
 }
示例#17
0
        public override void UseDiceModifications(DiceModificationTimingType type)
        {
            base.UseDiceModifications(type);

            switch (type)
            {
            case DiceModificationTimingType.Normal:
                Selection.ActiveShip = (Combat.AttackStep == CombatStep.Attack) ? Combat.Attacker : Combat.Defender;
                break;

            case DiceModificationTimingType.AfterRolled:
                Selection.ActiveShip = (Combat.AttackStep == CombatStep.Attack) ? Combat.Attacker : Combat.Defender;
                break;

            case DiceModificationTimingType.Opposite:
                Selection.ActiveShip = (Combat.AttackStep == CombatStep.Attack) ? Combat.Defender : Combat.Attacker;
                break;

            case DiceModificationTimingType.CompareResults:
                Selection.ActiveShip = Combat.Attacker;
                break;

            default:
                break;
            }

            Dictionary <GenericAction, int> actionsPriority = new Dictionary <GenericAction, int>();

            foreach (var diceModification in Combat.DiceModifications.AvailableDiceModifications.Values)
            {
                int priority = diceModification.GetDiceModificationPriority();
                Selection.ActiveShip.CallOnAiGetDiceModificationPriority(diceModification, ref priority);
                actionsPriority.Add(diceModification, priority);
            }

            actionsPriority = actionsPriority.OrderByDescending(n => n.Value).ToDictionary(n => n.Key, n => n.Value);

            bool isActionEffectTaken = false;

            if (actionsPriority.Count > 0)
            {
                KeyValuePair <GenericAction, int> prioritizedActionEffect = actionsPriority.First();
                if (prioritizedActionEffect.Value > 0)
                {
                    isActionEffectTaken = true;

                    GameManagerScript.Wait(1, delegate {
                        GameCommand command = DiceModificationsManager.GenerateDiceModificationCommand(prioritizedActionEffect.Key.Name);
                        GameMode.CurrentGameMode.ExecuteCommand(command);
                    });
                }
            }

            if (!isActionEffectTaken)
            {
                GameManagerScript.Wait(1, delegate {
                    GameCommand command = DiceModificationsManager.GenerateDiceModificationCommand("OK");
                    GameMode.CurrentGameMode.ExecuteCommand(command);
                });
            }
        }
示例#18
0
 private static void ReGenerateListOfButtons(DiceModificationTimingType timingType)
 {
     ShowDiceModificationButtons(timingType, true);
     Roster.GetPlayer(Phases.CurrentSubPhase.RequiredPlayer).UseDiceModifications(timingType);
 }
示例#19
0
        private void DiceModificationReroll(Action callback, Func <int> getCount, List <DieSide> sidesCanBeSelected, DiceModificationTimingType timing, bool isTrueReroll = true, bool isForcedFullReroll = false)
        {
            int diceCount = getCount();

            if (diceCount > 0)
            {
                DiceRerollManager diceRerollManager = new DiceRerollManager
                {
                    NumberOfDiceCanBeRerolled = diceCount,
                    SidesCanBeRerolled        = sidesCanBeSelected,
                    IsOpposite         = timing == DiceModificationTimingType.Opposite,
                    IsTrueReroll       = isTrueReroll,
                    IsForcedFullReroll = isForcedFullReroll,
                    CallBack           = callback
                };
                diceRerollManager.Start();
            }
            else
            {
                Messages.ShowErrorToHuman("No dice are eligible to be rerolled");
                callback();
            }
        }
示例#20
0
文件: Combat.cs 项目: xNyer/FlyCasual
 private static void ReGenerateListOfButtons(DiceModificationTimingType timingType)
 {
     ShowDiceModificationButtons(timingType, true);
 }
示例#21
0
        private void DiceModificationCancel(Action callback, List <DieSide> sidesCanBeSelected, DiceModificationTimingType timing)
        {
            List <Die> diceToCancel = DiceRoll.CurrentDiceRoll.DiceList.Where(d => sidesCanBeSelected.Contains(d.Side)).ToList();

            foreach (Die die in diceToCancel)
            {
                DiceRoll.CurrentDiceRoll.DiceList.Remove(die);
                die.RemoveModel();
            }

            //DiceRoll.CurrentDiceRoll.OrganizeDicePositions();

            callback();
        }