private void SetModalOptions(TowerModalEV modal, List <PieceEV> piecesAtLocation) { ModalType modalType = CalcModalType(piecesAtLocation); SetModalType(modal, modalType); SetTierOptions(modal, modalType, piecesAtLocation); }
public void Step(ref ImmobileCaptureStepState token, int condition) { TowerModalEV modal = towerModalService.FindModalEV(entitiesDB); SetModalOptions(modal); UpdateModalView(modal); }
private void SetModalType(TowerModalEV modal, ModalType modalType) { entitiesDB.ExecuteOnEntity( modal.ID, (ref TowerModalEV modalToChange) => { modalToChange.Type.Type = modalType; }); }
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); }
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; } }); }
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; }
private void UpdateModalView(TowerModalEV modal) { modal.Visibility.IsVisible.value = true; }