public override void init()
        {
            base.init();

            entities.Clear();
            entities.Add("solid", new List<bEntity>());
            entities.Add("nodes", new List<bEntity>());

            map = new WorldMap(parameters.mapfile);
            _add(map, "solid");

            foreach (LevelNode n in map.nodes)
            {
                _add(n, "nodes");
            }

            foreach (LevelNode n in entities["nodes"])
                n.setData();

            currentNode = entities["nodes"][data.state.currentNode] as LevelNode;
            nextNode = null;
            nextNodePosition = 0;

            bgColor = Color.Black;

            playerMaker = new PlayerLocationMarker(0, 0);
            _add(playerMaker, "nodes");
            playerMaker.placeAt(currentNode);

            camera = new bCamera2d(game.GraphicsDevice);
            camera.Pos = new Vector2(128, 120);

            (game as KoM).dataManager.state.currentWorld = 0;
            (game as KoM).dataManager.state.currentNode = currentNode.id;
        }
 public void placeAt(LevelNode node)
 {
     this.x = node.x + (node.graphic.width / 2) - graphic.spriteWidth / 2;
     this.y = node.y + (node.graphic.height / 2) - graphic.spriteHeight / 2;
 }
        public override void update(GameTime dt)
        {
            base.update(dt);

            List<LevelNode> available = currentNode.links;
            nextNode = available[nextNodePosition];
            playerMaker.placeAt(currentNode);
            if (KoM.input.pressed(Microsoft.Xna.Framework.Input.Buttons.B))
                nextNodePosition = (nextNodePosition + 1) % available.Count;
            else if (KoM.input.pressed(Microsoft.Xna.Framework.Input.Buttons.A))
            {
                currentNode = nextNode;
                nextNodePosition = 0;
                (game as KoM).dataManager.state.currentNode = currentNode.id;
            }
            else if (KoM.input.pressed(Microsoft.Xna.Framework.Input.Buttons.Start))
            {
                (game as KoM).goToLevel(0, currentNode.level, currentNode.entrance);
            }

            if (KoM.input.pressed(Microsoft.Xna.Framework.Input.Keys.S))
                data.saveGame();

            foreach (bEntity ge in entities["solid"])
                ge.update();
            foreach (bEntity ge in entities["nodes"])
                ge.update();
        }
        protected LevelNode parseNode(XmlReader element)
        {
            LevelNode node = null;

            // Fetch common attributes
            int id, x, y;
            id = int.Parse(element.GetAttribute("id"));
            x = int.Parse(element.GetAttribute("x"));
            y = int.Parse(element.GetAttribute("y"));

            // Create entitiy by element name
            switch (element.Name)
            {
                case "LevelNode":
                    node = new LevelNode(x, y, element.GetAttribute("links"), element.GetAttribute("level"));
                    node.id = id;
                    break;
            }

            return node;
        }