Exemple #1
0
        private void SetModalOptions(TowerModalEV modal, List <PieceEV> piecesAtLocation)
        {
            ModalType modalType = CalcModalType(piecesAtLocation);

            SetModalType(modal, modalType);
            SetTierOptions(modal, modalType, piecesAtLocation);
        }
Exemple #2
0
        public void Step(ref ImmobileCaptureStepState token, int condition)
        {
            TowerModalEV modal = towerModalService.FindModalEV(entitiesDB);

            SetModalOptions(modal);
            UpdateModalView(modal);
        }
Exemple #3
0
 private void SetModalType(TowerModalEV modal, ModalType modalType)
 {
     entitiesDB.ExecuteOnEntity(
         modal.ID,
         (ref TowerModalEV modalToChange) =>
     {
         modalToChange.Type.Type = modalType;
     });
 }
Exemple #4
0
        public void Step(ref ClickPieceStepState token, int condition)
        {
            TowerModalEV   modal            = towerModalService.FindModalEV(entitiesDB);
            List <PieceEV> piecesAtLocation = pieceFindService.FindPiecesByLocation(
                token.ClickedPiece.Location.Location, entitiesDB);

            SetModalOptions(modal, piecesAtLocation);
            towerModalService.DisplayModal(modal);
        }
Exemple #5
0
        private void SetTierOptions(TowerModalEV modal, ModalType modalType, List <PieceEV> piecesAtLocation)
        {
            TurnEV      currentTurn    = turnService.GetCurrentTurnEV(entitiesDB);
            PlayerColor turnColor      = currentTurn.TurnPlayer.PlayerColor;
            PieceEV     pieceTier1     = piecesAtLocation[0];
            PieceEV     pieceTier2     = piecesAtLocation[1];
            PieceEV?    pieceTier3     = modalType == ModalType.TOWER_3RD_TIER ? (PieceEV?)piecesAtLocation[2] : null;
            PlayerColor topPlayerColor = pieceTier3.HasValue ?
                                         pieceTier3.Value.PlayerOwner.PlayerColor : pieceTier2.PlayerOwner.PlayerColor;
            bool immobileCapturePossible = immobileCaptureService.ImmobileCapturePossible(piecesAtLocation, currentTurn.TurnPlayer.PlayerColor, entitiesDB);
            bool noCheckViolationsExist  = immobileCaptureService.NoCheckViolationsExist(piecesAtLocation, immobileCapturePossible, entitiesDB);

            entitiesDB.ExecuteOnEntity(
                modal.ID,
                (ref TowerModalEV modalToChange) =>
            {
                modalToChange.ImmobileCaptureState.ImmobileCaptureDesignated = false;

                modalToChange.Tier1.Enabled = pieceTier1.Tier.TopOfTower ||
                                              (immobileCapturePossible && noCheckViolationsExist &&
                                               pieceTier1.PlayerOwner.PlayerColor != pieceTier2.PlayerOwner.PlayerColor &&
                                               pieceTier1.PlayerOwner.PlayerColor == turnColor);
                modalToChange.Tier1.Name = CalcButtonText(pieceTier1);
                modalToChange.Tier1.ReferencedPieceId = pieceTier1.ID.entityID;
                modalToChange.Tier1.Team      = pieceTier1.PlayerOwner.PlayerColor;
                modalToChange.Tier1.PieceType = pieceTier1.Piece.PieceType;
                modalToChange.Tier1.Back      = pieceTier1.Piece.Back;

                modalToChange.Tier2.Enabled = pieceTier2.Tier.TopOfTower ||
                                              (immobileCapturePossible && noCheckViolationsExist &&
                                               (pieceTier2.PlayerOwner.PlayerColor != pieceTier1.PlayerOwner.PlayerColor ||
                                                (!pieceTier3.HasValue || pieceTier2.PlayerOwner.PlayerColor != pieceTier3.Value.PlayerOwner.PlayerColor)) &&
                                               pieceTier2.PlayerOwner.PlayerColor == turnColor);
                modalToChange.Tier2.Name = CalcButtonText(pieceTier2);
                modalToChange.Tier2.ReferencedPieceId = pieceTier2.ID.entityID;
                modalToChange.Tier2.Team      = pieceTier2.PlayerOwner.PlayerColor;
                modalToChange.Tier2.PieceType = pieceTier2.Piece.PieceType;
                modalToChange.Tier2.Back      = pieceTier2.Piece.Back;

                if (pieceTier3.HasValue)
                {
                    modalToChange.Tier3.Enabled           = pieceTier3.Value.Tier.TopOfTower;
                    modalToChange.Tier3.Name              = CalcButtonText(pieceTier3.Value);
                    modalToChange.Tier3.ReferencedPieceId = pieceTier3.Value.ID.entityID;
                    modalToChange.Tier3.Team              = pieceTier3.Value.PlayerOwner.PlayerColor;
                    modalToChange.Tier3.PieceType         = pieceTier3.Value.Piece.PieceType;
                    modalToChange.Tier3.Back              = pieceTier3.Value.Piece.Back;
                }
                else
                {
                    modalToChange.Tier3.Enabled = false;
                }
            });
        }
Exemple #6
0
        private void SetModalOptions(TowerModalEV modal)
        {
            PieceEV        pieceTier1       = pieceFindService.FindPieceEVById(modal.Tier1.ReferencedPieceId, entitiesDB).Value;
            List <PieceEV> piecesAtLocation = pieceFindService.FindPiecesByLocation(pieceTier1.Location.Location, entitiesDB);

            TurnEV      currentTurnEV = turnService.GetCurrentTurnEV(entitiesDB);
            PlayerColor colorToEnable = TurnService.CalcOtherTurnPlayer(currentTurnEV.TurnPlayer.PlayerColor);

            PieceEV pieceTier2 = piecesAtLocation[1];
            PieceEV?pieceTier3 = piecesAtLocation.Count > 2 ? (PieceEV?)piecesAtLocation[2] : null;

            // TODO I think this logic is unnecessary, but I'm too scared to remove it now (all handled in TowerModalEngine).  Later refactor.
            bool noTier1CheckViolationsExist = immobileCaptureService.NoTier1CheckViolationsExist(piecesAtLocation, entitiesDB);
            bool noTier3BetrayalTwoFileMoveViolationsExist = immobileCaptureService.NoTier3BetrayalTwoFileMoveViolationsExist(piecesAtLocation, entitiesDB);

            entitiesDB.ExecuteOnEntity(
                modal.ID,
                (ref TowerModalEV modalToChange) =>
            {
                modalToChange.ImmobileCaptureState.ImmobileCaptureDesignated = true;

                modalToChange.Tier1.Enabled = noTier1CheckViolationsExist &&
                                              pieceTier1.PlayerOwner.PlayerColor == colorToEnable &&
                                              pieceTier1.PlayerOwner.PlayerColor != pieceTier2.PlayerOwner.PlayerColor;

                modalToChange.Tier2.Enabled = pieceTier2.PlayerOwner.PlayerColor == colorToEnable &&
                                              (pieceTier2.PlayerOwner.PlayerColor != pieceTier1.PlayerOwner.PlayerColor ||
                                               (pieceTier3.HasValue && pieceTier2.PlayerOwner.PlayerColor != pieceTier3.Value.PlayerOwner.PlayerColor));

                if (pieceTier3.HasValue)
                {
                    modalToChange.Tier3.Enabled = noTier3BetrayalTwoFileMoveViolationsExist &&
                                                  pieceTier3.Value.PlayerOwner.PlayerColor == colorToEnable &&
                                                  pieceTier3.Value.PlayerOwner.PlayerColor != pieceTier2.PlayerOwner.PlayerColor;
                }
                else
                {
                    modalToChange.Tier3.Enabled = false;
                }
            });
        }
 public void DisplayModal(TowerModalEV modal)
 {
     modal.Visibility.IsVisible.value = true;
 }
Exemple #8
0
 private void UpdateModalView(TowerModalEV modal)
 {
     modal.Visibility.IsVisible.value = true;
 }