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