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;
            }
示例#4
0
 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]);
        }
示例#11
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);
        }
示例#12
0
 internal override TileResource MakeTileResource(string mapId)
 {
     return(TileResource.MakeClassicRetinaRaster(Id, mapId));
 }
示例#13
0
 internal override TileResource MakeTileResource(string styleUrl)
 {
     return(TileResource.MakeRaster(Id, styleUrl));
 }
示例#14
0
        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;
        }
示例#15
0
        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;
 }
示例#17
0
 internal override TileResource MakeTileResource(string mapId)
 {
     return(TileResource.MakeRawPngRaster(Id, mapId));
 }
示例#18
0
 internal override TileResource MakeTileResource(string tilesetId)
 {
     return(TileResource.MakeRaster(Id, tilesetId));
 }
示例#19
0
        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);
                }
            }
        }