Ejemplo n.º 1
0
        void DungeonChanged()
        {
            Dungeon dungeon = Project.GetDungeon(dungeonSpinButton.ValueAsInt);

            dungeonEventWrapper.ReplaceEventSource(dungeon);

            floorSpinButton.Adjustment.Upper = dungeon.NumFloors - 1;
            if (floorSpinButton.ValueAsInt >= dungeon.NumFloors)
            {
                floorSpinButton.Value = dungeon.NumFloors - 1;
            }

            var vrg = dungeon.ValueReferenceGroup;

            if (dungeonVre != null)
            {
                dungeonVre.ReplaceValueReferenceGroup(vrg);
            }
            else
            {
                dungeonVre = new ValueReferenceEditor(Project, vrg, "Base Data");
                dungeonVre.ShowAll();
                dungeonVreContainer.Add(dungeonVre);
            }

            minimap.SetMap(dungeon);
            minimap.Floor = floorSpinButton.ValueAsInt;

            RoomChanged();
        }
Ejemplo n.º 2
0
    void SetTileset(Tileset tileset)
    {
        if (Project == null)
        {
            return;
        }
        if (tileset == tilesetViewer1.Tileset)
        {
            return;
        }

        eventGroup.Lock();

        tilesetViewer1.SetTileset(tileset);
        ActiveRoom.TilesetIndex = tileset.Index;

        if (tilesetModifiedEventWrapper == null)
        {
            tilesetModifiedEventWrapper = new WeakEventWrapper <ValueReferenceGroup>();
            tilesetModifiedEventWrapper.Bind <ValueModifiedEventArgs>("ModifiedEvent",
                                                                      (sender, args) => UpdateLayoutGroupWarning());
        }
        tilesetModifiedEventWrapper.ReplaceEventSource(tileset.GetValueReferenceGroup());

        eventGroup.Unlock();

        UpdateLayoutGroupWarning();
    }
Ejemplo n.º 3
0
    // Called when room index (or season) is changed
    void OnRoomChanged()
    {
        if (ActiveRoom == null)
        {
            return;
        }

        eventGroup.Lock();

        roomSpinButton.Value = ActiveRoom.Index;
        warpEditor.SetMap(ActiveRoom.Index >> 8, ActiveRoom.Index & 0xff);
        SetTileset(ActiveRoomLayout.Tileset);

        if (roomVre == null)
        {
            // This only runs once
            roomVre = new ValueReferenceEditor(Project, ActiveRoom.ValueReferenceGroup);
            roomVre.AddWidgetToRight("Tileset", editTilesetButton);
            roomVreHolder.Add(roomVre);
            roomVre.ShowAll();

            roomTilesetModifiedEventWrapper.Bind <ValueModifiedEventArgs>("ModifiedEvent",
                                                                          (sender, args) => SetTileset((sender as ValueReference).GetIntValue(), ActiveSeason));
        }
        else
        {
            roomVre.ReplaceValueReferenceGroup(ActiveRoom.ValueReferenceGroup);
        }

        // Watch for changes to this room's tileset
        roomTilesetModifiedEventWrapper.ReplaceEventSource(ActiveRoom.ValueReferenceGroup["Tileset"]);

        // Watch for changes to the chest

        UpdateChestData();

        eventGroup.Unlock();

        UpdateLayoutGroupWarning();
    }
Ejemplo n.º 4
0
        public void SetMap(Map m, int index = -1)
        {
            if (_map != m)
            {
                _map   = m;
                _floor = 0;

                dungeonEventWrapper.ReplaceEventSource(_map as Dungeon); // May be null, that's fine

                if (_map != null)
                {
                    if (!scaleSetInConstructor)
                    {
                        if (m.MapWidth >= 16 && m.RoomWidth >= 15)
                        {
                            _scale = 1.0 / 12; // Draw large indoor groups smaller
                        }
                        else
                        {
                            _scale = 1.0 / 8;
                        }
                    }

                    Width      = Map.MapWidth;
                    Height     = Map.MapHeight;
                    TileWidth  = (int)(_map.RoomWidth * 16 * _scale);
                    TileHeight = (int)(_map.RoomHeight * 16 * _scale);
                }

                base.UpdateSizeRequest();
                QueueDraw();
            }

            if (index != -1)
            {
                SelectedIndex = index;
            }
        }
Ejemplo n.º 5
0
    void UpdateChestData()
    {
        Chest chest = ActiveRoom.Chest;

        if (chest != null)
        {
            ValueReferenceGroup vrg = ActiveRoom.Chest.ValueReferenceGroup;
            if (chestVre == null)
            {
                chestVre = new ValueReferenceEditor(Project, vrg);
                chestVreHolder.Add(chestVre);
            }
            else
            {
                chestVre.ReplaceValueReferenceGroup(vrg);
            }

            TreasureObject treasure = chest.Treasure;

            if (treasure == null)
            {
                nonExistentTreasureHolder.ShowAll();
                treasureVreHolder.Hide();

                if (chest.TreasureID >= Project.NumTreasures)
                {
                    treasureDataFrame.Hide();
                }
                else
                {
                    treasureDataFrame.Show();
                }
            }
            else
            {
                nonExistentTreasureHolder.Hide();
                treasureDataFrame.Show();
                treasureVreHolder.Show();

                if (treasureVre == null)
                {
                    treasureVre = new ValueReferenceEditor(Project, treasure.ValueReferenceGroup);
                    treasureVreHolder.Add(treasureVre);
                }
                else
                {
                    treasureVre.ReplaceValueReferenceGroup(treasure.ValueReferenceGroup);
                }
            }

            treasureDataLabel.Text = string.Format("Treasure ${0:X2} Subid ${1:X2} Data",
                                                   vrg.GetIntValue("ID"), vrg.GetIntValue("SubID"));
        }

        if (chest == null)
        {
            chestEditorBox.Hide();
            treasureDataFrame.Hide();
            chestAddHolder.ShowAll();
        }
        else
        {
            chestEditorBox.ShowAll();
            chestAddHolder.Hide();
        }

        chestEventWrapper.ReplaceEventSource(chest);
    }