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(); }
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(); }
// 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(); }
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; } }
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); }