#ifndef TILEGENDIALOG_H #define TILEGENDIALOG_H #ifdef _WIN32 #pragma once #endif #include #include #include #include #include #include "vgui/mousecode.h" #include "vgui/IScheme.h" #include "ConfigManager.h" class CThemeDetails; class CRoomTemplate; class CRoomTemplateListPanel; class CScrollingWindow; class CMapLayoutPanel; class CRoomTemplatePanel; class VMFExporter; class CMapLayout; class CRoom; class CEnterSeedDialog; class CKV_Editor; class CTileGenLayoutPage; class CTilegenLayoutSystemPage; class CLayoutSystem; class CTilegenMissionPreprocessor; namespace vgui { class PanelListPanel; class ImagePanel; class MenuBar; class CheckButton; class Button; class Menu; class PropertySheet; class TextEntry; }; using namespace vgui; // determines max tile grid size #define MAP_LAYOUT_TILES_WIDE 120 enum TileGen_FileSelectType { FST_LAYOUT_OPEN, FST_LAYOUT_SAVE_AS }; //----------------------------------------------------------------------------- // Purpose: Main dialog for tile based map generator //----------------------------------------------------------------------------- class CTileGenDialog : public Frame { DECLARE_CLASS_SIMPLE( CTileGenDialog, Frame ); public: CTileGenDialog( Panel *parent, const char *name ); virtual ~CTileGenDialog(); virtual void PerformLayout(); virtual void OnTick(); virtual void ApplySchemeSettings(vgui::IScheme *pScheme); virtual void OnKeyCodeTyped( vgui::KeyCode code ); // main menu bar MenuBar *m_pMenuBar; // themes and room template browser CThemeDetails* m_pCurrentThemeDetails; CScrollingWindow* m_pTemplateListContainer; vgui::TextEntry *m_pTemplateFilter; CRoomTemplateListPanel* m_pTemplateListPanel; // Tabbed area vgui::PropertySheet* m_pPropertySheet; CTileGenLayoutPage *m_pLayoutPage; CTilegenLayoutSystemPage *m_pLayoutSystemPage; // the current room template attached to the cursor. if this is set, then clicking over the map will stamp down a room with that template void SetCursorRoomTemplate( const CRoomTemplate *pRoomTemplate ); const CRoomTemplate *m_pCursorTemplate; // the current room template we're stamping down CRoomTemplatePanel *m_pCursorPanel; // the panel showing the current room template (attaches to mouse cursor) // the currently selected placed rooms within out map layout void ToggleRoomSelection(CRoom* pRoom); // adds or removes a room from the current selection void SetRoomSelection(CRoom* pRoom); // sets the room selection to just the specified room void ClearRoomSelection(); CUtlVector m_SelectedRooms; void OnStartDraggingSelectedRooms(); // the user may have started dragging a selected room (we will monitor the mouse from here to see if he actually does) bool IsASelectedRoom( CRoom *pRoom ); int m_iStartDragX; int m_iStartDragY; // rubber band selection void StartRubberBandSelection( int mx, int my ); void EndRubberBandSelection( int mx, int my ); bool GetRubberBandStart( int &sx, int &sy ); int m_iStartRubberBandX; int m_iStartRubberBandY; // options vgui::CheckButton* m_pShowExitsCheck; vgui::CheckButton* m_pShowTileSquaresCheck; bool m_bShowExits; // show the blue exit markers on the edges of room templates? bool m_bShowTileSquares; // show the black square corners on each tile of a room template? vgui::Button* m_pZoomInButton; vgui::Button* m_pZoomOutButton; vgui::Label* m_pCoordinateLabel; vgui::Menu* m_pToolsMenu; MESSAGE_FUNC_PARAMS( OnUpdateCurrentTheme, "UpdateCurrentTheme", params ); MESSAGE_FUNC_PARAMS( OnAddToP4, "AddToP4", pKV ); MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel ); MESSAGE_FUNC_PTR( OnTextChanged, "TextChanged", panel ); DECLARE_PANELMAP(); float RoomTemplatePanelTileSize() { return m_fTileSize; } // size of our tiles in the UI int MapLayoutTilesWide() { return MAP_LAYOUT_TILES_WIDE; } // io VMFExporter* m_VMFExporter; void DoFileSaveAs(); void DoFileOpen(); void OnFileSelected(const char *fullpath); TileGen_FileSelectType m_FileSelectType; // set when the file dialog is launched in save mode void GenerateMission( const char *szMissionFile ); bool IsGenerating(); CMapLayout* GetMapLayout() { return m_pMapLayout; } void GenerateRoomThumbnails( bool bAddToPerforce = false ); void Zoom( int iChange ); bool m_bFirstPerformLayout; CScrollingWindow* GetScrollingWindow(); CMapLayoutPanel* GetMapLayoutPanel(); protected: virtual void OnClose(); virtual void OnCommand( const char *command ); // New layout system stuff CLayoutSystem *m_pLayoutSystem; int m_nShowDefaultParametersMenuItemID; int m_nShowAddButtonsMenuItemID; CMapLayout *m_pMapLayout; KeyValues *m_pGenerationOptions; char m_szGenerationOptionsFileName[MAX_PATH]; float m_fTileSize; }; extern CTileGenDialog *g_pTileGenDialog; void VGUIMessageBox( vgui::Panel *pParent, const char *pTitle, const char *pMsg, ... ); char* TileGenCopyString( const char *szString ); #endif // TILEGENDIALOG_H