public LevelTreeNode(Level level)
 {
     this.level = level;
     ImageIndex			= 2;
     SelectedImageIndex	= 2;
     Text				= level.Id;
     Name				= "level";
 }
示例#2
0
 //-----------------------------------------------------------------------------
 // Constructor
 //-----------------------------------------------------------------------------
 public RoomControl()
 {
     level			= null;
     room			= null;
     tiles			= null;
     roomLocation	= Point2I.Zero;
     entities		= new List<Entity>();
     eventTiles		= new List<EventTile>();
     viewControl		= new ViewControl();
 }
示例#3
0
 public bool FindDestinationInLevel(string id, Level level, out Room destRoom, out EventTileDataInstance destEvent)
 {
     for (int x = 0; x < level.Width; x++) {
         for (int y = 0; y < level.Height; y++) {
             if (FindDestinationInRoom(id, level.GetRoomAt(x, y), out destRoom, out destEvent))
                 return true;
         }
     }
     destRoom = null;
     destEvent = null;
     return false;
 }
示例#4
0
        //-----------------------------------------------------------------------------
        // Constructors
        //-----------------------------------------------------------------------------
        public Room(Level level, int x, int y)
        {
            this.level		= level;
            this.location	= new Point2I(x, y);
            this.tileData	= new TileDataInstance[level.RoomSize.X, level.RoomSize.Y, level.RoomLayerCount];
            this.eventData	= new List<EventTileDataInstance>();
            this.zone		= null;
            this.properties	= new Properties();
            this.properties.PropertyObject = this;
            this.properties.BaseProperties = new Properties();

            this.properties.BaseProperties.Set("id", "")
                .SetDocumentation("ID", "", "", "The id used to refer to this room.", true, false);
            this.properties.BaseProperties.Set("music", "")
                .SetDocumentation("Music", "song", "", "The music to play in this room. Select none to choose the default music.", true, false);
            this.properties.BaseProperties.Set("zone", "")
                .SetDocumentation("Zone", "zone", "", "The zone type for this room.", true, false);
        }
示例#5
0
        private TileDataInstance[,,] tileData; // 3D grid of tile data (x, y, layer)

        #endregion Fields

        #region Constructors

        //-----------------------------------------------------------------------------
        // Constructors
        //-----------------------------------------------------------------------------
        public Room(Level level, int x, int y, Zone zone = null)
        {
            this.level		= level;
            this.location	= new Point2I(x, y);
            this.tileData	= new TileDataInstance[level.RoomSize.X, level.RoomSize.Y, level.RoomLayerCount];
            this.eventData	= new List<EventTileDataInstance>();
            //this.zone		= zone;
            this.events		= new ObjectEventCollection();
            this.properties	= new Properties();
            this.properties.PropertyObject = this;
            this.properties.BaseProperties = new Properties();

            properties.BaseProperties.Set("id", "")
                .SetDocumentation("ID", "", "", "", "The id used to refer to this room.", true, false);
            properties.BaseProperties.Set("music", "")
                .SetDocumentation("Music", "song", "", "", "The music to play in this room. Select none to choose the default music.", true, false);
            properties.BaseProperties.Set("zone", "")
                .SetDocumentation("Zone", "zone", "", "", "The zone type for this room.", true, false);

            properties.BaseProperties.Set("discovered", false);
            properties.BaseProperties.Set("hidden_from_map", false);
            properties.BaseProperties.Set("boss_room", false);

            events.AddEvent("event_room_start", "Room Start", "Occurs when the room begins.");
            properties.BaseProperties.Set("event_room_start", "")
                .SetDocumentation("Room Start", "script", "", "Events", "Occurs when the room begins.");

            events.AddEvent("event_all_monsters_dead", "All Monsters Dead", "Occurs when all monsters are dead.");
            properties.BaseProperties.Set("event_all_monsters_dead", "")
                .SetDocumentation("All Monsters Dead", "script", "", "Events", "Occurs when all monsters are dead.");

            // Room Flags:
            // - sidescroll ??? could be in Zone
            // - underwater ??? could be in Zone
            // - discovered
            // - hiddenFromMap
            // - boss
            // - trasure
            // - signal

            /*if (zone != null)
                this.properties.Set("zone", zone.ID);*/
        }
示例#6
0
 //-----------------------------------------------------------------------------
 // Mutators
 //-----------------------------------------------------------------------------
 public void AddLevel(Level level)
 {
     levels.Add(level);
     level.World = this;
 }
示例#7
0
 public void SetSelectionGridArea(Rectangle2I area, Level level)
 {
     PlaceSelectionGrid();
     selectionGridArea  = area;
     selectionGridLevel = level;
     SetSelectionBox(selectionGridArea.Point * GameSettings.TILE_SIZE,
                     selectionGridArea.Size  * GameSettings.TILE_SIZE);
 }
 // Return an enumerable lits of placed tiles in the given level.
 private IEnumerable<IPropertyObject> GetPropertyObjectsInLevel(Level level)
 {
     foreach (Room room in level.GetRooms()) {
         foreach (TileDataInstance tile in room.GetTiles())
             yield return tile;
         foreach (EventTileDataInstance tile in room.EventData)
             yield return tile;
     }
 }
示例#9
0
 // Open the given level index in the level display.
 public void OpenLevel(int index)
 {
     level = world.Levels[index];
     editorForm.LevelDisplay.UpdateLevel();
     UpdateWindowTitle();
     propertyGridControl.OpenProperties(level.Properties, level);
 }
示例#10
0
 // Close the world file.
 public void CloseFile()
 {
     if (IsWorldOpen) {
         propertyGridControl.CloseProperties();
         world			= null;
         level			= null;
         hasMadeChanges	= false;
         worldFilePath	= "";
         editorForm.LevelTreeView.Nodes.Clear();
     }
 }
示例#11
0
 private void buttonTreeViewNewLevel_Click(object sender, EventArgs e)
 {
     using (LevelAddForm form = new LevelAddForm()) {
         if (form.ShowDialog(this) == DialogResult.OK) {
             Level level = new Level(form.LevelName, form.LevelWidth, form.LevelHeight,
                 form.LevelLayerCount, form.LevelRoomSize, form.LevelZone);
             editorControl.AddLevel(level, true);
             treeViewWorld.SelectedNode = treeViewWorld.Nodes[0].Nodes[0].Nodes[treeViewWorld.Nodes[0].Nodes[0].Nodes.Count - 1];
         }
     }
 }
示例#12
0
 // Close the world file.
 public void CloseFile()
 {
     if (IsWorldOpen) {
         PropertyGrid.CloseProperties();
         world			= null;
         level			= null;
         hasMadeChanges	= false;
         worldFilePath	= "";
         RefreshWorldTreeView();
     }
 }
示例#13
0
 // Add a new level the world, and open it if specified.
 public void AddLevel(Level level, bool openLevel)
 {
     world.Levels.Add(level);
     RefreshWorldTreeView();
     if (openLevel)
         OpenLevel(world.Levels.Count - 1);
 }
示例#14
0
        public void BeginRoom(Room room)
        {
            this.room			= room;
            this.roomLocation	= room.Location;
            this.level			= room.Level;

            // Clear event tiles.
            eventTiles.Clear();

            // Clear all entities from the old room (except for the player).
            entities.Clear();
            if (Player != null) {
                Player.Initialize(this);
                entities.Add(Player);
            }

            // Create the tile grid.
            tiles = new Tile[room.Width, room.Height, room.LayerCount];
            for (int x = 0; x < room.Width; x++) {
                for (int y = 0; y < room.Height; y++) {
                    for (int i = 0; i < room.LayerCount; i++) {
                        TileDataInstance data = room.TileData[x, y, i];
                        tiles[x, y, i] = null;
                        if (data != null)
                            tiles[x, y, i] = Tile.CreateTile(data);
                    }
                }
            }

            // Create the event tiles.
            eventTiles.Capacity = room.EventData.Count;
            for (int i = 0; i < room.EventData.Count; i++) {
                EventTileDataInstance data  = room.EventData[i];
                EventTile eventTile = EventTile.CreateEvent(data);
                eventTiles.Add(eventTile);
            }

            // Initialize the tiles.
            for (int x = 0; x < room.Width; x++) {
                for (int y = 0; y < room.Height; y++) {
                    for (int i = 0; i < room.LayerCount; i++) {
                        Tile t = tiles[x, y, i];
                        if (t != null)
                            t.Initialize(this);
                    }
                }
            }

            // Initialize the event tiles.
            for (int i = 0; i < eventTiles.Count; i++) {
                eventTiles[i].Initialize(this);
            }

            viewControl.Bounds = RoomBounds;
            viewControl.ViewSize = GameSettings.VIEW_SIZE;
        }
示例#15
0
 public DungeonFloor(Level level, int floorNumber)
 {
     this.level = level;
     this.floorNumber = floorNumber;
 }
示例#16
0
 public void RemoveLevel(Level level)
 {
     levels.Remove(level);
 }
示例#17
0
 // Open the given level.
 public void OpenLevel(Level level)
 {
     this.level = level;
     editorForm.LevelDisplay.UpdateLevel();
     UpdateWindowTitle();
     PropertyGrid.OpenProperties(level.Properties, level);
 }
示例#18
0
        // Load a level from an java level file.
        public static Level LoadJavaLevel(string filename)
        {
            BinaryReader bin = new BinaryReader(File.OpenRead(filename));
            int width	= bin.ReadByte();
            int height	= bin.ReadByte();
            Level level	= new Level(width, height, GameSettings.ROOM_SIZE_SMALL);

            // Load the rooms in the level.
            for (int y = 0; y < height; y++) {
                for (int x = 0; x < width; x++) {
                    level.Rooms[x, y] = LoadJavaRoom(bin, level, x, y);
                }
            }

            level.RoomSize = level.Rooms[0, 0].Size;
            level.RoomLayerCount = level.Rooms[0, 0].LayerCount;

            bin.Close();
            return level;
        }
示例#19
0
 // Add Level...
 private void addLevelToolStripMenuItem_Click(object sender, EventArgs e)
 {
     using (LevelAddForm form = new LevelAddForm()) {
         if (form.ShowDialog(this) == DialogResult.OK) {
             Level level = new Level(form.LevelName, form.LevelWidth, form.LevelHeight,
                 form.LevelLayerCount, form.LevelRoomSize, form.LevelZone);
             editorControl.AddLevel(level, true);
         }
     }
 }
示例#20
0
        // Load a single room from an java level file.
        public static Room LoadJavaRoom(BinaryReader bin, Level level, int locX, int locY)
        {
            byte width		= bin.ReadByte();
            byte height		= bin.ReadByte();
            level.RoomSize	= new Point2I(width, height);
            Room room		= new Room(level, locX, locY);
            room.Zone		= GameData.ZONE_SUMMER;

            // Read the tile data.
            for (int y = 0; y < height; y++) {
                for (int x = 0; x < width; x++) {
                    byte tilesetIndex = bin.ReadByte();

                    if (tilesetIndex > 0) {
                        Tileset tileset = GameData.TILESET_OVERWORLD;
                        if (tilesetIndex == 2)
                            tileset = GameData.TILESET_INTERIOR;
                        byte tilesetSourceX = bin.ReadByte();
                        byte tilesetSourceY = bin.ReadByte();
                        room.CreateTile(tileset.TileData[tilesetSourceX, tilesetSourceY], x, y, 0);
                    }
                    else {
                        // Only use default tiles on bottom layer.
                        Tileset tileset = GameData.TILESET_OVERWORLD;
                        room.CreateTile(tileset.TileData[tileset.DefaultTile.X, tileset.DefaultTile.Y], x, y, 0);
                    }

                }
            }

            return room;
        }
示例#21
0
        // Add a new level the world, and open it if specified.
        public void AddLevel(Level level, bool openLevel)
        {
            world.Levels.Add(level);

            // Add node in level list.
            //TreeNode levelNode = new TreeNode(level.Name);
            //editorForm.LevelTreeView.Nodes[0].Nodes.Add(levelNode);
            //levelNode.ContextMenuStrip = editorForm.ContextMenuLevelSelect;
            RefreshWorldTreeView();

            if (openLevel)
                OpenLevel(world.Levels.Count - 1);
        }
示例#22
0
 // Add New Level...
 private void addLevelToolStripMenuItem_Click(object sender, EventArgs e)
 {
     using (LevelAddForm form = new LevelAddForm(editorControl.World)) {
         if (form.ShowDialog(this) == DialogResult.OK) {
             Level level = new Level(form.LevelName, form.LevelWidth, form.LevelHeight,
                 GameSettings.DEFAULT_TILE_LAYER_COUNT, form.LevelRoomSize, form.LevelZone);
             // Setup the level with default tiles.
             level.FillWithDefaultTiles();
             editorControl.AddLevel(level, true);
         }
     }
 }
示例#23
0
 public void CloseLevel()
 {
     level = null;
     editorForm.LevelDisplay.UpdateLevel();
     UpdateWindowTitle();
     propertyGridControl.CloseProperties();
 }
示例#24
0
 public void SetSelectionGrid(TileGrid tileGrid, Point2I location, Level level)
 {
     PlaceSelectionGrid();
     selectionGridArea	= new Rectangle2I(location, tileGrid.Size);
     selectionGridLevel	= level;
     selectionGrid		= tileGrid;
     SetSelectionBox(selectionGridArea.Point * GameSettings.TILE_SIZE,
                     selectionGridArea.Size  * GameSettings.TILE_SIZE);
 }
示例#25
0
        //-----------------------------------------------------------------------------
        // Constructors
        //-----------------------------------------------------------------------------
        public EditorControl()
        {
            this.propertyGridControl	= null;
            this.worldFilePath	= String.Empty;
            this.worldFileName	= "untitled";
            this.world			= null;
            this.level			= null;
            this.tileset		= null;
            this.zone			= null;
            this.rewardManager	= null;
            this.inventory		= null;
            this.timer			= null;
            this.ticks			= 0;
            this.roomSpacing	= 1;
            this.playAnimations	= false;
            this.isInitialized	= false;
            this.hasMadeChanges	= false;

            this.currentLayer				= 0;
            this.currentToolIndex			= 0;
            this.aboveTileDrawMode			= TileDrawModes.Fade;
            this.belowTileDrawMode			= TileDrawModes.Fade;
            this.showRewards				= true;
            this.showGrid					= false;
            this.showEvents					= false;
            this.highlightMouseTile			= true;
            this.selectedRoom				= -Point2I.One;
            this.selectedTile				= -Point2I.One;
            this.selectedTilesetTile		= Point2I.Zero;
            this.selectedTilesetTileData	= null;
            this.playerPlaceMode			= false;
            this.sampleFromAllLayers		= false;
        }
示例#26
0
 //-----------------------------------------------------------------------------
 // Mutators
 //-----------------------------------------------------------------------------
 public void AddLevel(Level level)
 {
     levels.Add(level);
 }