private static void AddObjectLayerTiles(ReducedLayerInfo reducedLayerInfo, AbstractMapLayer tiledLayer, Tileset tileSet, uint?gid, int tileWidth, int tileHeight) { var asMapLayer = tiledLayer as mapObjectgroup; // early out if (asMapLayer.@object == null) { return; } foreach (var objectInstance in asMapLayer.@object) { if (objectInstance.gid > 0) { ReducedQuadInfo quad = new DataTypes.ReducedQuadInfo(); quad.LeftQuadCoordinate = (float)objectInstance.x; quad.BottomQuadCoordinate = (float)-objectInstance.y; quad.OverridingWidth = objectInstance.width; quad.OverridingHeight = objectInstance.height; quad.RotationDegrees = (float)objectInstance.Rotation; quad.FlipFlags = (byte)(gid.Value & 0xf0000000 >> 7); var valueWithoutFlip = gid.Value & 0x0fffffff; int leftPixelCoord; int topPixelCoord; int rightPixelCoord; int bottomPixelCoord; TiledMapSave.GetPixelCoordinatesFromGid(gid.Value, tileSet, out leftPixelCoord, out topPixelCoord, out rightPixelCoord, out bottomPixelCoord); quad.LeftTexturePixel = (ushort)Math.Min(leftPixelCoord, rightPixelCoord); quad.TopTexturePixel = (ushort)Math.Min(topPixelCoord, bottomPixelCoord); quad.Name = objectInstance.Name; if (string.IsNullOrEmpty(quad.Name)) { var prop = quad.QuadSpecificProperties.FirstOrDefault(quadProp => quadProp.Name.ToLowerInvariant() == "name"); quad.Name = (string)prop.Value; } reducedLayerInfo?.Quads.Add(quad); } } }
private static void AddTileLayerTiles(TiledMapSave tiledMapSave, ReducedLayerInfo reducedLayerInfo, int i, AbstractMapLayer tiledLayer, Tileset tileSet, int tileWidth, int tileHeight) { var asMapLayer = tiledLayer as MapLayer; var count = asMapLayer.data[0].tiles.Count; for (int dataId = 0; dataId < count; dataId++) { var dataAtIndex = asMapLayer.data[0].tiles[dataId]; if (dataAtIndex != 0) { ReducedQuadInfo quad = new DataTypes.ReducedQuadInfo(); float tileCenterX; float tileCenterY; float tileZ; tiledMapSave.CalculateWorldCoordinates(i, dataId, tileWidth, tileHeight, asMapLayer.width, out tileCenterX, out tileCenterY, out tileZ); quad.LeftQuadCoordinate = tileCenterX - tileWidth / 2.0f; quad.BottomQuadCoordinate = tileCenterY - tileHeight / 2.0f; var gid = dataAtIndex; //quad.FlipFlags = (byte)((gid & 0xf0000000) >> 28); var valueWithoutFlip = gid & 0x0fffffff; spriteSaveForConversion.RotationZ = 0; spriteSaveForConversion.FlipHorizontal = false; TiledMapSave.SetSpriteTextureCoordinates(gid, spriteSaveForConversion, tileSet, tiledMapSave.orientation); bool isRotated = spriteSaveForConversion.RotationZ != 0; if (isRotated) { quad.FlipFlags = (byte)(quad.FlipFlags | ReducedQuadInfo.FlippedDiagonallyFlag); } var leftTextureCoordinate = System.Math.Min(spriteSaveForConversion.LeftTextureCoordinate, spriteSaveForConversion.RightTextureCoordinate); var topTextureCoordinate = System.Math.Min(spriteSaveForConversion.TopTextureCoordinate, spriteSaveForConversion.BottomTextureCoordinate); if (spriteSaveForConversion.LeftTextureCoordinate > spriteSaveForConversion.RightTextureCoordinate) { quad.FlipFlags = (byte)(quad.FlipFlags | ReducedQuadInfo.FlippedHorizontallyFlag); } if (spriteSaveForConversion.TopTextureCoordinate > spriteSaveForConversion.BottomTextureCoordinate) { quad.FlipFlags = (byte)(quad.FlipFlags | ReducedQuadInfo.FlippedVerticallyFlag); } quad.LeftTexturePixel = (ushort)FlatRedBall.Math.MathFunctions.RoundToInt(leftTextureCoordinate * tileSet.Images[0].width); quad.TopTexturePixel = (ushort)FlatRedBall.Math.MathFunctions.RoundToInt(topTextureCoordinate * tileSet.Images[0].height); if (tileSet.TileDictionary.ContainsKey(valueWithoutFlip - tileSet.Firstgid)) { var dictionary = tileSet.TileDictionary[valueWithoutFlip - tileSet.Firstgid].PropertyDictionary; if (dictionary.ContainsKey("name")) { quad.Name = tileSet.TileDictionary[valueWithoutFlip - tileSet.Firstgid].PropertyDictionary["name"]; } else if (dictionary.ContainsKey("Name")) { quad.Name = tileSet.TileDictionary[valueWithoutFlip - tileSet.Firstgid].PropertyDictionary["Name"]; } } reducedLayerInfo?.Quads.Add(quad); } } }