public XmlWrite()
 {
     // initialise levelFolder
     StaticVariables.execFolder = AppDomain.CurrentDomain.BaseDirectory;
     StaticVariables.levelFolder = StaticVariables.execFolder;
     // create world
     this.w = new World(10, 10);
     // fill world
     this.w.FillWorld(TERRAIN.grass_normal, new Size(10, 10));
     // initialize player
     this.w.InitPlayer(new PointF(5, 5));
     this.p = w.getPlayer();
     LevelWriter.saveWorld(this.w, this.file);
     beforelist = new TerrainTile[w.getTerrain().Count];
     before = new Entity[w.getEntities().Count];
     // save beforlist
     w.getTerrain().CopyTo(beforelist);
     w.getEntities().CopyTo(before);
     world = new World(10, 10);
     world.loadLevel(this.file);
     afterlist = new TerrainTile[world.getTerrain().Count];
     after = new Entity[world.getEntities().Count];
     // save afterlist
     world.getTerrain().CopyTo(afterlist);
     world.getEntities().CopyTo(after);
 }
        public static void saveWorld(World world, String fileName)
        {
            List<TerrainTile> tiles = world.getTerrain ();
            List<Entity> entities = world.getEntities ();
            Size size = world.getSize ();

            using (XmlWriter writer = XmlWriter.Create(Path.Combine(StaticVariables.levelFolder, fileName + ".xml")))
            {
                writer.WriteStartDocument();
                writer.WriteStartElement("world");
                writer.WriteStartElement("size");
                writer.WriteElementString(xmlVar.Width, size.Width.ToString());
                writer.WriteElementString(xmlVar.Height, size.Width.ToString());
                writer.WriteEndElement();
                writer.WriteStartElement("tiles");

                foreach (TerrainTile tile in tiles)
                {
                    writer.WriteStartElement(xmlVar.Tile);
                    writer.WriteElementString(xmlVar.ID, tile.getID().ToString());
                    writer.WriteEndElement();
                }

                writer.WriteEndElement();
                writer.WriteStartElement("entities");

                foreach (Entity e in entities) {
                    writer.WriteStartElement(xmlVar.Entity);
                    writer.WriteElementString(xmlVar.ID, e.getID().ToString());
                    writer.WriteElementString(xmlVar.Type, ((int)e.getType()).ToString());
                    writer.WriteElementString(xmlVar.SpriteID, e.getSpriteID().ToString());
                    writer.WriteElementString("x", e.getLocation().X.ToString());
                    writer.WriteElementString("y", e.getLocation().Y.ToString());
                    writer.WriteElementString(xmlVar.Solid, e.getSolid().ToString());
                    writer.WriteElementString(xmlVar.DrawOrder, e.getDrawOrder().ToString());
                    writer.WriteElementString(xmlVar.BoudingBox, e.getBoundingBox().ToString());
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndDocument();
            }
        }
Exemple #3
0
        /// <summary>
        /// Drop first item in inventory back into the world
        /// </summary>
        /// <param name="world"></param>
        public void DropItem(World world)
        {
            PointF dropLocation = GetLocationInFrontOfPlayer();
            // Check if item can be dropped on target from dropLocation
            bool isLand = world.getTerraintile(dropLocation).IsWalkable;
            bool hasSolidEntitiesOnTarget = world.checkCollision(this, dropLocation);
            List<Entity> entitiesOnTerrainTile = world.getEntitiesOnTerrainTile(location);
            List<Entity> entitiesOnTargetTerrainTile = world.getEntitiesOnTerrainTile(dropLocation);
            bool hasWaterlilyOnTarget = entitiesOnTargetTerrainTile.Exists(e => e.getSpriteID() == (int) SPRITES.waterlily);

            // If no item exists in inventory or
            //      there is a solid target on dropLocation or
            //      targettile is not land, return
            if (!Inventory.Any() || hasSolidEntitiesOnTarget ||
                (!isLand && !hasWaterlilyOnTarget))
                return;
            // If item is key, lock door
            if (Inventory[0].Entity is Key)
            {
                // If player is standing in a door, cancel action
                if (entitiesOnTerrainTile.Exists(e => e is Door))
                    return;
                world.LockDoor((Key)Inventory[0].Entity);
            }

            // Set droplocation on item
            Inventory[0].Entity.setLocation(dropLocation);
            // Push item in world objects list
            world.getEntities().Add(Inventory[0].Entity);
            // Remove item from inventory
            Inventory.RemoveAt(0);
        }
Exemple #4
0
 /// <summary>
 /// Pickup first item on given tile
 /// </summary>
 /// <param name="w"></param>
 public void PickupItems(World w)
 {
     if (Inventory.Count >= 10) return;
     // Get a list with nonSolid entities on terrain tile and filter for bananas or keys
     List<Entity> EntitiesOnTile =
         w.getEntitiesOnTerrainTile(getLocation(), true)
             .Where(e => e.getType() == ENTITIES.fruit || e.getType() == ENTITIES.key)
             .ToList();
     // If there's nothing in the list of entities, return;
     if (EntitiesOnTile.Count == 0) return;
     // Add first item of list to inventory
     Inventory.Add(new Item(EntitiesOnTile[0]));
     // If key is picked up, unlock door
     if (EntitiesOnTile[0] is Key)
         w.UnlockDoor((Key)EntitiesOnTile[0]);
     // Remove item from world
     w.getEntities().Remove(EntitiesOnTile[0]);
 }
Exemple #5
0
        /// <summary>
        /// Moves the player to the given relative location
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="relativeLocation"></param>
        public override void move(World sender, PointF relativeLocation)
        {
            float moveLocationX = location.X + relativeLocation.X;
            float moveLocationY = location.Y + relativeLocation.Y;

            PointF targetPoint = new PointF(moveLocationX, moveLocationY);
            TerrainTile targetTile = sender.getTerraintile (targetPoint);

            // If terrain contains solid objects OR if tile has no walkable entity on a non-walkable tile
            if (targetTile == null || sender.checkCollision(this, targetPoint) || !targetTile.IsWalkable && !sender.checkCollision(this, targetPoint, false))
                return;

            location.X = (float)Math.Round(moveLocationX, 1);
            location.Y = (float)Math.Round(moveLocationY, 1);

            //Check if the player is moving on a entity and call oncolission of that entity
            List<Entity> entities = sender.getEntities();

            for(int i = 0; i < entities.Count; i++)
            {
                if(sender.checkCollision(this, entities[i]) && entities[i].getType() != ENTITIES.player)
                {
                    entities[i].onCollision(this);
                }
            }
        }