Пример #1
0
        IMapNavigator<GridDirection> CreateMatcherNavigator()
        {
            if (RenderType.IsIsometric())
            {
                // Cardinality matches always match against the visual major axes.
                // For iso/hex systems, this is NE, NW, SE, SW. For plain grids it
                // is N,E,S,W in map coordinates.
                return new FixedOffsetRotationGridNavigator(navigator, 1);
            }

            return navigator;
        }
Пример #2
0
        CacheEntry CacheTryFindSourceMask(CardinalIndex dir)
        {
            if (cardinalMaskRegistry.TryFind("mask.blending", dir, out var providedTile) &&
                providedTile.HasTexture)
            {
                return(new CacheEntry(true,
                                      textureOperations.ExtractData(providedTile.Texture, providedTile.Texture.Bounds),
                                      providedTile.Anchor));
            }

            var sourceArea = textureOperations.TileAreaForCardinalDirection(tileSize, dir);

            if (renderType.IsIsometric())
            {
                if (ditherMask.HasTexture)
                {
                    return(new CacheEntry(true,
                                          textureOperations.ExtractData(ditherMask.Texture, sourceArea),
                                          ditherMask.Anchor));
                }
            }

            return(new CacheEntry(false, null, default));
        }
Пример #3
0
        public static void OffsetFor(this SpritePosition p, RenderType t, out ViewportCoordinates result)
        {
            if (t.IsIsometric())
            {
                switch (p)
                {
                case SpritePosition.CellMap:
                    result = new ViewportCoordinates(0, 2);
                    break;

                case SpritePosition.Whole:
                    result = new ViewportCoordinates(0, 0);
                    break;

                case SpritePosition.Up:
                    result = new ViewportCoordinates(0, -1);
                    break;

                case SpritePosition.Right:
                    result = new ViewportCoordinates(1, 0);
                    break;

                case SpritePosition.Down:
                    result = new ViewportCoordinates(0, 1);
                    break;

                case SpritePosition.Left:
                    result = new ViewportCoordinates(-1, 0);
                    break;

                default:
                    result = new ViewportCoordinates(0, 0);
                    break;
                }
            }
            else
            {
                switch (p)
                {
                case SpritePosition.CellMap:
                    result = new ViewportCoordinates(2, -2);
                    break;

                case SpritePosition.Whole:
                    result = new ViewportCoordinates(0, 0);
                    break;

                case SpritePosition.Up:
                    result = new ViewportCoordinates(-1, -1);
                    break;

                case SpritePosition.Right:
                    result = new ViewportCoordinates(1, -1);
                    break;

                case SpritePosition.Down:
                    result = new ViewportCoordinates(1, 1);
                    break;

                case SpritePosition.Left:
                    result = new ViewportCoordinates(-1, 1);
                    break;

                default:
                    result = new ViewportCoordinates(0, 0);
                    break;
                }
            }
        }