public bool LoadTile(TileResource resource, string name) { try { if (TileNames.ContainsKey(name)) { var old = TileNames[name]; for (int i = 0; i < Tiles.Count; i++) { if (Tiles[i].Resource == old) { Tiles[i].Resource = resource; } } TileNames[name] = resource; } else { TileNames.Add(name, resource); } ResortTiles(); return(true); } catch { return(false); } }
public void ToResource(TileResource r) { r.Texture.Link = TextureLink; r.Properties = Properties; r.Form = Form; r.Anchors = Anchors; r.Reactions = Reactions; r.Solidity = Solidity; r.Light = Light; r.Layer = Layer; r.PartSize = PartSize; r.FramesCount = FramesCount; r.FrameDelay = FrameDelay; r.OffsetX = OffsetX; r.OffsetY = OffsetY; r.SetupEvent.Link = SetupEvent; r.ReformEvent.Link = ReformEvent; r.TouchEvent.Link = TouchEvent; r.ActivateEvent.Link = ActivateEvent; r.RecieveEvent.Link = RecieveEvent; r.RemoveEvent.Link = RemoveEvent; r.BackColor = BackColor; r.GridEnabled = GridEnabled; }
public State(TileResource r) { TextureLink = r.Texture.Link; Properties = r.Properties; Form = r.Form; Anchors = r.Anchors; Reactions = r.Reactions; Solidity = r.Solidity; Light = r.Light; Layer = r.Layer; PartSize = r.PartSize; FramesCount = r.FramesCount; FrameDelay = r.FrameDelay; OffsetX = r.OffsetX; OffsetY = r.OffsetY; SetupEvent = r.SetupEvent.Link; ReformEvent = r.ReformEvent.Link; TouchEvent = r.TouchEvent.Link; ActivateEvent = r.ActivateEvent.Link; RecieveEvent = r.RecieveEvent.Link; RemoveEvent = r.RemoveEvent.Link; BackColor = r.BackColor; GridEnabled = r.GridEnabled; }
public Tile(Point location, TileResource res, TileTerrainBase tbase, TileTerrainFeature tfeature, TileImprovment impr) { Pillaged = false; Location = location; Resource = res; TerrainBase = tbase; TerrainFeature = tfeature; Improvement = impr; CityID = -1; }
public void GetUrlRaster() { var res1 = TileResource.MakeRaster(_tileId, null); Assert.AreEqual(_api + "styles/v1/mapbox/satellite-v9/tiles/0/0/0", res1.GetUrl().Split("?".ToCharArray())[0]); var res2 = TileResource.MakeRaster(_tileId, "mapbox://styles/mapbox/basic-v9"); Assert.AreEqual(_api + "styles/v1/mapbox/basic-v9/tiles/0/0/0", res2.GetUrl().Split("?".ToCharArray())[0]); var res3 = TileResource.MakeRaster(_tileId, "https://api.mapbox.com/styles/v1/penny/penny-map/tiles"); Assert.AreEqual(_api + "styles/v1/penny/penny-map/tiles/0/0/0", res3.GetUrl().Split("?".ToCharArray())[0]); }
public void GetUrlVector() { var res1 = TileResource.MakeVector(this.id, null); Assert.AreEqual(this.api + "v4/mapbox.mapbox-streets-v7/0/0/0.vector.pbf", res1.GetUrl()); var res2 = TileResource.MakeVector(this.id, "foobar"); Assert.AreEqual(this.api + "v4/foobar/0/0/0.vector.pbf", res2.GetUrl()); var res3 = TileResource.MakeVector(this.id, "test"); Assert.AreEqual(this.api + "v4/test/0/0/0.vector.pbf", res3.GetUrl()); }
public void GetUrlClassicRaster() { var res1 = TileResource.MakeClassicRaster(this.id, null); Assert.AreEqual(this.api + "v4/mapbox.satellite/0/0/0.png", res1.GetUrl()); var res2 = TileResource.MakeClassicRaster(this.id, "foobar"); Assert.AreEqual(this.api + "v4/foobar/0/0/0.png", res2.GetUrl()); var res3 = TileResource.MakeClassicRaster(this.id, "test"); Assert.AreEqual(this.api + "v4/test/0/0/0.png", res3.GetUrl()); }
public void GetUrlRaster() { var res1 = TileResource.MakeRaster(this.id, null); Assert.AreEqual(this.api + "styles/v1/mapbox/satellite-v9/tiles/0/0/0", res1.GetUrl()); var res2 = TileResource.MakeRaster(this.id, "mapbox://styles/mapbox/basic-v9"); Assert.AreEqual(this.api + "styles/v1/mapbox/basic-v9/tiles/0/0/0", res2.GetUrl()); var res3 = TileResource.MakeRaster(this.id, "https://api.mapbox.com/styles/v1/penny/penny-map/tiles"); Assert.AreEqual(this.api + "styles/v1/penny/penny-map/tiles/0/0/0", res3.GetUrl()); }
public void GetUrlClassicRaster() { var res1 = TileResource.MakeClassicRaster(_tileId, null); Assert.AreEqual(_api + "v4/mapbox.satellite/0/0/0.png", res1.GetUrl().Split("?".ToCharArray())[0]); var res2 = TileResource.MakeClassicRaster(_tileId, "foobar"); Assert.AreEqual(_api + "v4/foobar/0/0/0.png", res2.GetUrl().Split("?".ToCharArray())[0]); var res3 = TileResource.MakeClassicRaster(_tileId, "test"); Assert.AreEqual(_api + "v4/test/0/0/0.png", res3.GetUrl().Split("?".ToCharArray())[0]); }
public void GetUrlVector() { var res1 = TileResource.MakeVector(_tileId, null); Assert.AreEqual(_api + "v4/mapbox.mapbox-streets-v7/0/0/0.vector.pbf", res1.GetUrl().Split("?".ToCharArray())[0]); var res2 = TileResource.MakeVector(_tileId, "foobar"); Assert.AreEqual(_api + "v4/foobar/0/0/0.vector.pbf", res2.GetUrl().Split("?".ToCharArray())[0]); var res3 = TileResource.MakeVector(_tileId, "test"); Assert.AreEqual(_api + "v4/test/0/0/0.vector.pbf", res3.GetUrl().Split("?".ToCharArray())[0]); }
public override void Compile(string path) { var res = new TileResource(Path.Combine(RootDirectory, path)); var ctile = new CTile(); ctile.OffsetX = res.OffsetX; ctile.OffsetY = res.OffsetY; ctile.Properties = (uint)res.Properties; ctile.Form = (uint)res.Form; ctile.Anchors = (uint)res.Anchors; ctile.Reactions = (uint)res.Reactions; ctile.Light = new TextureCompiler.CColor(res.Light); ctile.Solidity = res.Solidity; ctile.TextureIndex = Texture.FindLoad( RootDirectory, ResolveLink(path, res.Texture), (Image <Rgba32> tex) => { int tw = tex.Width; int th = tex.Height; int ucw = tw / res.PartSize; int uch = th / res.FrameCount / res.PartSize; //if (tex.Width % res.PartSize != 0 || tex.Height % res.FrameCount != 0 || uch != ucw || // tex.Height / res.FrameCount % res.PartSize != 0 || ucw % 2 != 0 || uch % 2 != 0) // LogQueue.Put("Warning: Bad tile texture proporions."); int uc = Math.Min(ucw, uch); return(GetTilePixels(tex, res.PartSize, uc, res.FrameCount)); }); ctile.PartSize = res.PartSize; ctile.FrameCount = res.FrameCount; ctile.FrameDelay = res.FrameDelay; ctile.Layer = res.Layer; ctile.SetupEventID = Table[ResolveLink(path, res.SetupEvent)]; ctile.ReformEventID = Table[ResolveLink(path, res.ReformEvent)]; ctile.TouchEventID = Table[ResolveLink(path, res.TouchEvent)]; ctile.ActivateEventID = Table[ResolveLink(path, res.ActivateEvent)]; ctile.RecieveEventID = Table[ResolveLink(path, res.RecieveEvent)]; ctile.RemoveEventID = Table[ResolveLink(path, res.RemoveEvent)]; Writer.WriteStruct(ctile); }
internal override TileResource MakeTileResource(string mapId) { return(TileResource.MakeClassicRetinaRaster(Id, mapId)); }
internal override TileResource MakeTileResource(string styleUrl) { return(TileResource.MakeRaster(Id, styleUrl)); }
public TileControl(string path) { InitializeComponent(); SolidityNumeric.FixMouseWheel(); LayerNumeric.FixMouseWheel(); SizeNumeric.FixMouseWheel(); FramesCountNumeric.FixMouseWheel(); FrameDelayNumeric.FixMouseWheel(); OffsetXNumeric.FixMouseWheel(); OffsetYNumeric.FixMouseWheel(); TileComboBox.SelectedIndex = 0; MenuTabs = new ToolStripMenuItem[] { new ToolStripMenuItem("Link texture", null, LinkTextureMenuItem_Click, Keys.Control | Keys.I), new ToolStripMenuItem("Link event", null, LinkEventMenuItem_Click, Keys.Control | Keys.Shift | Keys.I), new ToolStripMenuItem("Toggle grid", null, ToggleGridMenuItem_Click, Keys.Control | Keys.G), new ToolStripMenuItem("Background color", null, BackColorMenuItem_Click, Keys.Control | Keys.L), new ToolStripMenuItem("Reset position", null, ResetPositionMenuItem_Click, Keys.Control | Keys.R), }; GLSurface.MakeCurrent(); LoadedResource = new TileResource(path); SolidityNumeric.ValueChanged += (object sender, EventArgs e) => SyncNumericValue(sender, LoadedResource.Solidity, v => LoadedResource.Solidity = v); LayerNumeric.ValueChanged += (object sender, EventArgs e) => { SyncNumericValue(sender, LoadedResource.Layer, v => LoadedResource.Layer = v); GLSurface.ResortTiles(); }; SizeNumeric.ValueChanged += (object sender, EventArgs e) => SyncNumericValue(sender, LoadedResource.PartSize, v => LoadedResource.PartSize = v); FramesCountNumeric.ValueChanged += (object sender, EventArgs e) => SyncNumericValue(sender, LoadedResource.FramesCount, v => LoadedResource.FramesCount = v); FrameDelayNumeric.ValueChanged += (object sender, EventArgs e) => SyncNumericValue(sender, LoadedResource.FrameDelay, v => LoadedResource.FrameDelay = v); OffsetXNumeric.ValueChanged += (object sender, EventArgs e) => SyncNumericValue(sender, LoadedResource.OffsetX, v => LoadedResource.OffsetX = v); OffsetYNumeric.ValueChanged += (object sender, EventArgs e) => SyncNumericValue(sender, LoadedResource.OffsetY, v => LoadedResource.OffsetY = v); TReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.T); TLReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.TL); LReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.L); LDReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.LD); DReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.D); DRReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.DR); RReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.R); RUReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.RT); MReactionBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxReaction(sender, LoadedResource.Reactions, v => LoadedResource.Reactions = v, TileResource.Reaction.M); TAnchorBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxAnchor(sender, LoadedResource.Anchors, v => LoadedResource.Anchors = v, TileResource.Anchor.T); LAnchorBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxAnchor(sender, LoadedResource.Anchors, v => LoadedResource.Anchors = v, TileResource.Anchor.L); DAnchorBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxAnchor(sender, LoadedResource.Anchors, v => LoadedResource.Anchors = v, TileResource.Anchor.D); RAnchorBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxAnchor(sender, LoadedResource.Anchors, v => LoadedResource.Anchors = v, TileResource.Anchor.R); FAnchorBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxAnchor(sender, LoadedResource.Anchors, v => LoadedResource.Anchors = v, TileResource.Anchor.F); BAnchorBox.CheckedChanged += (object sender, EventArgs e) => SyncCheckBoxAnchor(sender, LoadedResource.Anchors, v => LoadedResource.Anchors = v, TileResource.Anchor.B); PropertiesListBox.ItemCheck += (object sender, ItemCheckEventArgs e) => SyncFlags(sender, e, LoadedResource.Properties, v => LoadedResource.Properties = v); Story = new StoryItem <State>(new State(LoadedResource)); Story.ValueChanged += Story_ValueChanged; TextureLinkTextBox.Subresource = LoadedResource.Texture; ResourcePath = path; ResourceName = Path.GetFileName(path); ShapeComboBox.Items.AddRange(Enum.GetNames(typeof(TileResource.Shape))); EventsComboBox.SelectedIndex = 0; ShapeComboBox.SelectedIndex = (int)LoadedResource.Form; for (int i = 0; i < PropertiesListBox.Items.Count; i++) { PropertiesListBox.SetItemChecked(i, LoadedResource[i]); } PropertiesListBox.SelectedIndexChanged += (object sender, EventArgs e) => PropertiesListBox.SelectedIndex = -1; SolidityNumeric.Value = (decimal)LoadedResource.Solidity; LayerNumeric.Value = (decimal)LoadedResource.Layer; SizeNumeric.Value = (decimal)LoadedResource.PartSize; FramesCountNumeric.Value = (decimal)LoadedResource.FramesCount; FrameDelayNumeric.Value = (decimal)LoadedResource.FrameDelay; OffsetXNumeric.Value = (decimal)LoadedResource.OffsetX; OffsetYNumeric.Value = (decimal)LoadedResource.OffsetY; TReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.T); TLReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.TL); LReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.L); LDReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.LD); DReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.D); DRReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.DR); RReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.R); RUReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.RT); MReactionBox.Checked = LoadedResource.Reactions.HasFlag(TileResource.Reaction.M); TAnchorBox.Checked = LoadedResource.Anchors.HasFlag(TileResource.Anchor.T); LAnchorBox.Checked = LoadedResource.Anchors.HasFlag(TileResource.Anchor.L); DAnchorBox.Checked = LoadedResource.Anchors.HasFlag(TileResource.Anchor.D); RAnchorBox.Checked = LoadedResource.Anchors.HasFlag(TileResource.Anchor.R); FAnchorBox.Checked = LoadedResource.Anchors.HasFlag(TileResource.Anchor.F); BAnchorBox.Checked = LoadedResource.Anchors.HasFlag(TileResource.Anchor.B); GLFrameTimer.Start(); int ox = (int)(GLSurface.FieldW / 2); int oy = (int)(GLSurface.FieldH / 2); GLSurface.LoadTile(LoadedResource, TileName); GLSurface.PlaceTile(TileName, ox + 0, oy + 0); GLSurface.PlaceTile(TileName, ox - 1, oy + 0); GLSurface.PlaceTile(TileName, ox + 1, oy + 0); GLSurface.PlaceTile(TileName, ox + 0, oy - 1); GLSurface.PlaceTile(TileName, ox + 0, oy + 1); GLSurface.BackColor = Color.FromArgb(LoadedResource.BackColor); GLSurface.GridEnabled = LoadedResource.GridEnabled; GetTab("Toggle grid").Checked = LoadedResource.GridEnabled; }
private void ReadRooms() { var version = ReadInt(); var count = ReadInt(); for (var i = 0; i < count; i++) { Project.Rooms.NextIndex = i; if (ReadInt() != 0) { var room = Project.Rooms.Create(); room.Name = ReadString(); version = ReadInt(); room.Caption = ReadString(); room.Width = ReadInt(); room.Height = ReadInt(); room.SnapY = ReadInt(); room.SnapX = ReadInt(); room.Isometric = ReadBool(); room.Speed = ReadInt(); room.Persistent = ReadBool(); room.BackgroundColor = ReadInt(); room.DrawBackgroundColor = ReadBool(); room.CreationCode = ReadString(); var backgroundCount = ReadInt(); room.Backgrounds = new List <RoomBackground>(backgroundCount); for (var j = 0; j < backgroundCount; j++) { var bg = new RoomBackground { VisibleWhenRoomStarts = ReadBool(), ForegroundImage = ReadBool(), BackgroundImageIndex = ReadInt(), X = ReadInt(), Y = ReadInt(), TileHorizontally = ReadBool(), TileVertically = ReadBool(), HorizontalSpeed = ReadInt(), VerticalSpeed = ReadInt(), Stretch = ReadBool() }; room.Backgrounds.Add(bg); } room.EnableViews = ReadBool(); room.Views = new List <RoomView>(8); for (int viewc = ReadInt(), j = 0; j < viewc; j++) { var view = new RoomView(); view.VisibleWhenRoomStarts = ReadBool(); if (version == 520) { view.Left = ReadInt(); view.Top = ReadInt(); view.Width = ReadInt(); view.Height = ReadInt(); view.X = ReadInt(); view.Y = ReadInt(); } else if (version >= 541) { view.X = ReadInt(); view.Y = ReadInt(); view.Width = ReadInt(); view.Height = ReadInt(); view.ViewportX = ReadInt(); view.ViewportY = ReadInt(); view.ViewportWidth = ReadInt(); view.ViewportHeight = ReadInt(); } view.HorizontalBorder = ReadInt(); view.VerticalBorder = ReadInt(); view.HorizontalSpeed = ReadInt(); view.VerticalSpeed = ReadInt(); view.ObjectFollowing = ReadInt(); room.Views.Add(view); } room.Instances = new List <InstanceResource>(); for (int instanceCount = ReadInt(), j = 0; j < instanceCount; j++) { var instance = new InstanceResource { X = ReadInt(), Y = ReadInt(), ObjectIndex = ReadInt(), Id = ReadInt(), CreationCode = ReadString(), Locked = ReadBool() }; Project.Instances[instance.Id] = instance; room.Instances.Add(instance); } room.Tiles = new List <TileResource>(); for (int tileCount = ReadInt(), j = 0; j < tileCount; j++) { var tile = new TileResource { X = ReadInt(), Y = ReadInt(), BackgroundIndex = ReadInt(), TileX = ReadInt(), TileY = ReadInt(), Width = ReadInt(), Height = ReadInt(), Layer = ReadInt(), Id = ReadInt(), Locked = ReadBool() }; Project.Tiles[tile.Id] = tile; room.Tiles.Add(tile); } room.RememberRoomEditorInfo = ReadBool(); room.EditorWidth = ReadInt(); room.EditorHeight = ReadInt(); room.ShowGrid = ReadBool(); room.ShowObjects = ReadBool(); room.ShowTiles = ReadBool(); room.ShowBackgrounds = ReadBool(); room.ShowForegrounds = ReadBool(); room.ShowViews = ReadBool(); room.DeleteUnderlyingObjects = ReadBool(); room.DeleteUnderlyingTiles = ReadBool(); if (version == 520) { room.TileWidth = ReadInt(); room.TileHeight = ReadInt(); room.TileHorizontalSeparation = ReadInt(); room.TileVerticalSeparation = ReadInt(); room.TileHorizontalOffset = ReadInt(); room.TileVerticalOffset = ReadInt(); } room.CurrentTab = ReadInt(); room.ScrollbarX = ReadInt(); room.ScrollbarY = ReadInt(); } } }
public Tile(int x, int y, TileResource r) { PositionX = x; PositionY = y; Resource = r; }
internal override TileResource MakeTileResource(string mapId) { return(TileResource.MakeRawPngRaster(Id, mapId)); }
internal override TileResource MakeTileResource(string tilesetId) { return(TileResource.MakeRaster(Id, tilesetId)); }
private void CompileTiles() { LogQueue.Put("Compiling tiles..."); var TileTexturePixels = new List <uint>(); var TileTextureIndexes = new Dictionary <string, int>(); int id = 0; Compiled.Tile[] CompiledTiles = new Compiled.Tile[TilesIDTable.LastID + 1]; foreach (var t in TilesIDTable.Items) { int dist = id; while (id < t.ID) { CompiledTiles[id++] = new Compiled.Tile(); } dist = id - dist; if (dist > 0) { LogQueue.Put("IDs skipped: " + dist); } LogQueue.Put("Compiling [" + t.Path + "]..."); TileResource res = null; try { res = new TileResource(t.Path); } catch { LogQueue.Put("Tile [" + t.Path + "] not found. ID skipped."); CompiledTiles[id] = new Compiled.Tile(); id++; continue; } CompiledTiles[id].SetupEventID = EventsIDTable[res.SetupEvent.Link]; CompiledTiles[id].ReformEventID = EventsIDTable[res.ReformEvent.Link]; CompiledTiles[id].TouchEventID = EventsIDTable[res.TouchEvent.Link]; CompiledTiles[id].ActivateEventID = EventsIDTable[res.ActivateEvent.Link]; CompiledTiles[id].RecieveEventID = EventsIDTable[res.RecieveEvent.Link]; CompiledTiles[id].RemoveEventID = EventsIDTable[res.RemoveEvent.Link]; if (res.SetupEvent.Link.Length > 0 && CompiledTiles[id].SetupEventID < 0) { LogQueue.Put("Warning: Setup event [" + res.SetupEvent.Link + "] not found."); } if (res.ReformEvent.Link.Length > 0 && CompiledTiles[id].ReformEventID < 0) { LogQueue.Put("Warning: Reform event [" + res.ReformEvent.Link + "] not found."); } if (res.TouchEvent.Link.Length > 0 && CompiledTiles[id].TouchEventID < 0) { LogQueue.Put("Warning: Touch event [" + res.TouchEvent.Link + "] not found."); } if (res.ActivateEvent.Link.Length > 0 && CompiledTiles[id].ActivateEventID < 0) { LogQueue.Put("Warning: Activate event [" + res.ActivateEvent.Link + "] not found."); } if (res.RecieveEvent.Link.Length > 0 && CompiledTiles[id].RecieveEventID < 0) { LogQueue.Put("Warning: Recieve event [" + res.RecieveEvent.Link + "] not found."); } if (res.RemoveEvent.Link.Length > 0 && CompiledTiles[id].RemoveEventID < 0) { LogQueue.Put("Warning: Remove event [" + res.RemoveEvent.Link + "] not found."); } CompiledTiles[id].OffsetX = res.OffsetX; CompiledTiles[id].OffsetY = res.OffsetY; CompiledTiles[id].Properties = (uint)res.Properties; CompiledTiles[id].Form = (uint)res.Form; CompiledTiles[id].Anchors = (uint)res.Anchors; CompiledTiles[id].Reactions = (uint)res.Reactions; CompiledTiles[id].Light = res.Light; CompiledTiles[id].Solidity = res.Solidity; if (!TileTextureIndexes.ContainsKey(res.Texture.Link)) { try { int ind = TileTexturePixels.Count; var tex = res.Texture.Resource.Texture; int tw = tex.Width; int th = tex.Height; int ucw = tw / res.PartSize; int uch = th / res.FramesCount / res.PartSize; if (tex.Width % res.PartSize != 0 || tex.Height % res.FramesCount != 0 || uch != ucw || tex.Height / res.FramesCount % res.PartSize != 0 || ucw % 2 != 0 || uch % 2 != 0) { LogQueue.Put("Warning: Bad tile texture proporions."); } int uc = Math.Min(ucw, uch); if (uc == 2) { TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 0, 0)); } else if (uc == 4) { TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 1, 1)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 1, 0)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 0, 1)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 0, 0)); } else if (uc == 6) { TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 2, 2)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 2, 1)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 1, 2)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 1, 1)); TileTexturePixels.AddRange(Compiled.GetTilePartsCompound(tex, res.PartSize, uc, res.FramesCount, 0, 0)); } else { throw new Exception("Tile texture compilation error: Unsupported texture [" + res.Texture.Link + "] format."); } TileTextureIndexes.Add(res.Texture.Link, ind); CompiledTiles[id].TextureIndex = TileTextureIndexes[res.Texture.Link]; LogQueue.Put("Loaded texture [" + res.Texture.Link + "] index [" + CompiledTiles[id].TextureIndex + "]."); } catch { CompiledTiles[id].TextureIndex = -1; LogQueue.Put("Texture [" + res.Texture.Link + "] nod found index [" + CompiledTiles[id].TextureIndex + "]."); } } else { CompiledTiles[id].TextureIndex = TileTextureIndexes[res.Texture.Link]; LogQueue.Put("Found texture [" + res.Texture.Link + "] index [" + CompiledTiles[id].TextureIndex + "]."); } CompiledTiles[id].PartSize = res.PartSize; CompiledTiles[id].FramesCount = res.FramesCount; CompiledTiles[id].FrameDelay = res.FrameDelay; CompiledTiles[id].Layer = res.Layer; LogQueue.Put("Tile [" + t.Path + "] compiled with id [" + id + "]."); id++; } LogQueue.Put("Tiles compiled."); //var bmp = new Bitmap(8, TileTexturePixels.Count / 8); //for (int y = 0; y < TileTexturePixels.Count / 8; y++) //{ // for (int x = 0; x < 8; x++) // { // uint p = TileTexturePixels[y * 8 + x]; // bmp.SetPixel(x, y, Color.FromArgb(((int)p >> 8) | ((int)p << 24))); // } //} //bmp.Save("out.png", System.Drawing.Imaging.ImageFormat.Png); Directory.CreateDirectory("../Compilation"); using (var w = new BinaryWriter(File.Create("../Compilation/Tiles"))) { w.Write(TileTexturePixels.Count); foreach (var p in TileTexturePixels) { w.Write(p); } w.Write(CompiledTiles.Length); foreach (var t in CompiledTiles) { w.Write(t); } } }