コード例 #1
0
 private static void setCollision(Entity obj, BoxCol collider)
 {
     BoxCollision col = obj.GetComponent <BoxCollision>();
     //col.Position = new Vector(collider.Rectangle.X / (float)tilemap.TileWidth, collider.Rectangle.Y / (float)tilemap.TileHeight);
     //col.Scale = new Vector(collider.Rectangle.Width / (float)tilemap.TileWidth, collider.Rectangle.Height / (float)tilemap.TileHeight);
     //col.TriggerOnly = collider.TriggerOnly;
 }
コード例 #2
0
        public static bool CreateObjectFromTileSet(string name, string tileset, Vector position, Vector scale, float layer,
                                                   out MapObject mapObject, out MapObjectCollision mapObjectCol)
        {
            Tileset tilesetContent = Content.Load <Tileset>("Tilesets\\" + tileset);

            mapObject    = null;
            mapObjectCol = null;

            foreach (Tile tile in tilesetContent.tiles)
            {
                if (tile.Properties.ContainsKey("Name") && tile.Properties["Name"] == name)
                {
                    // Add light
                    if (tile.Properties.ContainsKey("IsLight") && tile.Properties["IsLight"] == "true")
                    {
                        MapLight maplight = SceneManager.GetCurrentScene().CreateEntity <MapLight>();
                        Light    light    = maplight.GetComponent <Light>();

                        light.Position = position + (scale / 2);
                    }

                    // Add collision object
                    if (tile.BoxColliders.Count > 0)
                    {
                        mapObjectCol = SceneManager.GetCurrentScene().CreateEntity <MapObjectCollision>();
                        mapObjectCol.GetComponent <Componets.Transform>().Position = position;
                        mapObjectCol.GetComponent <Componets.Transform>().Scale    = scale;
                        mapObjectCol.GetComponent <Sprite>().ContentName           = tileset;
                        mapObjectCol.GetComponent <Sprite>().SpriteLocation        = tile.Source;
                        mapObjectCol.GetComponent <Sprite>().Layer = layer;

                        BoxCol       collider = tile.BoxColliders.First().Value[0];
                        BoxCollision col      = mapObjectCol.GetComponent <BoxCollision>();

                        BoxData box = new BoxData();
                        box.Position    = new Vector(collider.Rectangle.X / (float)tile.Width, collider.Rectangle.Y / (float)tile.Height);
                        box.Scale       = new Vector(collider.Rectangle.Width / (float)tile.Width, collider.Rectangle.Height / (float)tile.Height);
                        box.TriggerOnly = collider.TriggerOnly;

                        IBox ibox = col.World.Create(position.X + box.Position.X * scale.X,
                                                     position.Y + box.Position.Y * scale.Y,
                                                     box.Scale.X * scale.X,
                                                     box.Scale.Y * scale.Y);

                        ibox.Data = box;
                        col.Boxes.Add(ibox);

                        return(true);
                    }

                    // Add object
                    else
                    {
                        mapObject = SceneManager.GetCurrentScene().CreateEntity <MapObject>();
                        mapObject.GetComponent <Componets.Transform>().Position = position;
                        mapObject.GetComponent <Componets.Transform>().Scale    = scale;
                        mapObject.GetComponent <Sprite>().ContentName           = tileset;
                        mapObject.GetComponent <Sprite>().SpriteLocation        = tile.Source;
                        mapObject.GetComponent <Sprite>().Layer = layer;

                        return(true);
                    }
                }
            }

            return(false);
        }