Esempio n. 1
0
        private void InitializeBrush(DynamicTileBrush brush)
        {
            _layerControl.ReferenceWidth  = brush.BrushClass.TemplateWidth * brush.TileWidth + 1;
            _layerControl.ReferenceHeight = brush.BrushClass.TemplateHeight * brush.TileHeight + 1;

            _layer = new MultiTileGridLayer("Default", brush.TileWidth, brush.TileHeight, brush.BrushClass.TemplateWidth, brush.BrushClass.TemplateHeight);
            for (int i = 0; i < brush.BrushClass.SlotCount; i++)
            {
                LocatedTile tile = brush.GetLocatedTile(i);
                if (tile.Tile != null)
                {
                    _layer.AddTile(tile.X, tile.Y, tile.Tile);
                }
            }

            _rootLayer.Layers.Clear();
            _rootLayer.Layers.Add(new TileGridLayerPresenter(_layerContext, _layer));
            _rootLayer.Layers.Add(new LocalRenderLayerPresenter(new OverlayRenderCore(this)));
            _rootLayer.Layers.Add(new GridLayerPresenter()
            {
                GridSpacingX = brush.TileWidth,
                GridSpacingY = brush.TileHeight,
            });

            _nameField.Text = brush.Name;

            _brush = brush;

            SelectCurrentPrototype();
            SelectCurrentTileSize();
        }
Esempio n. 2
0
        private void RasterizeTile(SysDrawing.Graphics surface, LocatedTile tile)
        {
            Rectangle levelBounds = LayerContext.Geometry.LevelBounds;

            using (SysDrawing.Bitmap tileBmp = tile.Tile.Pool.Tiles.GetTileTexture(tile.Tile.Uid).CreateBitmap()) {
                SysDrawing.Point location = new SysDrawing.Point(tile.X * Layer.TileWidth - levelBounds.X, tile.Y * Layer.TileHeight - levelBounds.Y);
                surface.DrawImage(tileBmp, location);
            }
        }
Esempio n. 3
0
        public bool IsMemberTile(LocatedTile tile)
        {
            foreach (TileProxy proxy in _tiles)
            {
                if (proxy.Tile != null && proxy.Tile.Uid == tile.Tile.Uid)
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 4
0
        public void Save(XmlDocument doc, XmlElement parent)
        {
            parent.AppendChild(XmlHelper.CreateSimpleNode("Resources", "resources.xml", doc));
            Resources.Save("resources.xml");

            Tile.StaticSave(doc, parent, this);

            XmlElement tilesElem = doc.CreateElement("Tiles");

            for (int y = 0; y < Height; y++)
            {
                for (int x = 0; x < Width; x++)
                {
                    Tile tile = Tiles[x, y];
                    if (tile is LocatedTile)
                    {
                        int k = 0;
                        if (tile is MultiTileTile)
                        {
                            k++;
                        }
                        if (!(tile is MultiTileTile) || ((LocatedTile)tile).Position == new Vector2(x, y))
                        {
                            LocatedTile located     = (LocatedTile)tile;
                            XmlElement  locTileElem = doc.CreateElement("Loc" + "_" + x + "_" + y);
                            locTileElem.AppendChild(XmlHelper.CreateSimpleNode("Type", tile.GetType().Name, doc));
                            located.Save(doc, locTileElem, this);
                            tilesElem.AppendChild(locTileElem);
                        }
                    }
                    else
                    {
                        if (Tile.UnLocatedTile.ContainsValue(tile))
                        {
                            XmlElement tileElem = doc.CreateElement("UnLoc_" + x + "_" + y);
                            tileElem.AppendChild(doc.CreateTextNode(Tile.UnLocatedTile.Where(t => t.Value == tile).First().Key));
                            tilesElem.AppendChild(tileElem);
                        }
                    }
                }
            }
            parent.AppendChild(tilesElem);

            XmlElement entitiesElem = doc.CreateElement("Entities");

            foreach (KeyValuePair <int, Entity> pair in Entities)
            {
                XmlElement entityElem = doc.CreateElement("E" + pair.Key);
                pair.Value.Save(doc, entityElem);
                entitiesElem.AppendChild(entityElem);
            }
            parent.AppendChild(entitiesElem);
        }
Esempio n. 5
0
        private void Load(XmlDocument doc, XmlElement parent)
        {
            string path = (string)XmlHelper.GetSimpleNodeContent <string>("Resources", parent, "resources.xml");

            Resources = new Resources(this, path);

            Tile.StaticLoad(doc, parent, this);

            if (XmlHelper.HasChild("Tiles", parent))
            {
                XmlElement tilesElem = XmlHelper.GetElement("Tiles", parent);
                foreach (XmlElement tileElem in tilesElem.ChildNodes)
                {
                    string   nodeName = tileElem.Name;
                    string[] tab      = nodeName.Split('_');
                    if (tab[0] == "Loc")
                    {
                        int x = int.Parse(tab[1]);
                        int y = int.Parse(tab[2]);
                        if (x < 0 || x >= Width)
                        {
                            continue;
                        }
                        if (y < 0 || y >= Height)
                        {
                            continue;
                        }
                        Type type = this.GetType().Assembly.GetType(typeof(Tile).Namespace + "." + (string)XmlHelper.GetSimpleNodeContent <string>("Type", tileElem, ""));
                        if (type == null)
                        {
                            continue;
                        }
                        LocatedTile locTile = (LocatedTile)type.GetConstructor(new Type[] { typeof(World), typeof(int), typeof(int) }).Invoke(new object[] { this, x, y });
                        locTile.Load(doc, tileElem, this);
                        SetTile(x, y, locTile);
                    }
                    else if (tab[0] == "UnLoc")
                    {
                        string tileId = tileElem.FirstChild.Value;
                        int    x      = int.Parse(tab[1]);
                        int    y      = int.Parse(tab[2]);
                        if (x < 0 || x >= Width)
                        {
                            continue;
                        }
                        if (y < 0 || y >= Height)
                        {
                            continue;
                        }
                        SetTile(x, y, Tile.UnLocatedTile[tileId]);
                    }
                }
            }

            if (XmlHelper.HasChild("Entities", parent))
            {
                Entities = new Dictionary <int, Entity>();
                XmlElement entitiesElem = XmlHelper.GetElement("Entities", parent);
                foreach (XmlElement entityElem in entitiesElem.ChildNodes)
                {
                    Entity entity = Entity.Unserialize(doc, entityElem, this);
                    int    id;
                    bool   good = int.TryParse(entityElem.Name.TrimStart('E'), out id);
                    if (entity != null && good)
                    {
                        Entities.Add(id, entity);
                    }
                }
            }
        }
Esempio n. 6
0
 public bool InRange(LocatedTile tile)
 {
     return CheckBounds(tile.X, tile.Y);
 }
Esempio n. 7
0
 public bool InRange(LocatedTile tile)
 {
     return(CheckBounds(tile.X, tile.Y));
 }