using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Newtonsoft.Json; using RecrownedAthenaeum.Data; using RecrownedAthenaeum.SpecialTypes; using System.IO; namespace RecrownedAthenaeum.ContentReaders { class TextureAtlasDataReader : ContentTypeReader { protected override TextureAtlas Read(ContentReader input, TextureAtlas existingInstance) { string serialized = input.ReadString(); TextureAtlasData atlasData = JsonConvert.DeserializeObject(serialized); Texture2D atlasTexture = input.ContentManager.Load(Path.GetFileNameWithoutExtension(atlasData.textureName)); TextureAtlas atlas = new TextureAtlas(atlasTexture, GenerateAtlasRegionsFromData(atlasData, atlasTexture)); return atlas; } /// /// Generates region given . /// /// The data to generate the regions from. /// The texture containing the atlas. /// An array of regions. public TextureAtlas.Region[] GenerateAtlasRegionsFromData(TextureAtlasData textureAtlasData, Texture2D atlasTexture) { TextureAtlas.Region[] regions = new TextureAtlas.Region[textureAtlasData.regions.Length]; for (int regionID = 0; regionID < regions.Length; regionID++) { TextureAtlasData.AtlasRegionData regionData = textureAtlasData.regions[regionID]; NinePatch nPatch = null; if (regionData.ninePatchData != null) { NinePatchData nPatchData = regionData.ninePatchData; nPatch = new NinePatch(atlasTexture, nPatchData.left, nPatchData.right, nPatchData.bottom, nPatchData.bottom); } regions[regionID] = new TextureAtlas.Region(regionData.name, regionData.location, nPatch, atlasTexture); } return regions; } } }