From d12db45c488bb72558b2baa049abae7abfd9b7f3 Mon Sep 17 00:00:00 2001 From: oy Date: Sat, 12 Feb 2011 19:10:45 +0100 Subject: added editor function to construct different game tiles from a layer. Closes #460 --- src/game/editor/ed_editor.h | 4 ++++ src/game/editor/ed_layer_tiles.cpp | 37 ++++++++----------------------------- src/game/editor/ed_popups.cpp | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 29 deletions(-) (limited to 'src/game') diff --git a/src/game/editor/ed_editor.h b/src/game/editor/ed_editor.h index 461cdeed..007e94f1 100644 --- a/src/game/editor/ed_editor.h +++ b/src/game/editor/ed_editor.h @@ -653,12 +653,16 @@ public: static int PopupQuad(CEditor *pEditor, CUIRect View); static int PopupPoint(CEditor *pEditor, CUIRect View); static int PopupSelectImage(CEditor *pEditor, CUIRect View); + static int PopupSelectGametileOp(CEditor *pEditor, CUIRect View); static int PopupImage(CEditor *pEditor, CUIRect View); static int PopupMenuFile(CEditor *pEditor, CUIRect View); void PopupSelectImageInvoke(int Current, float x, float y); int PopupSelectImageResult(); + + void PopupSelectGametileOpInvoke(float x, float y); + int PopupSelectGameTileOpResult(); vec4 ButtonColorMul(const void *pId); diff --git a/src/game/editor/ed_layer_tiles.cpp b/src/game/editor/ed_layer_tiles.cpp index 71489d7c..6ef2d256 100644 --- a/src/game/editor/ed_layer_tiles.cpp +++ b/src/game/editor/ed_layer_tiles.cpp @@ -333,41 +333,20 @@ int CLayerTiles::RenderProperties(CUIRect *pToolBox) if(InGameGroup) { static int s_ColclButton = 0; - if(m_pEditor->DoButton_Editor(&s_ColclButton, Localize("Clear collision"), 0, &Button, 0, Localize("Removes collision from this layer"))) - { - CLayerTiles *gl = m_pEditor->m_Map.m_pGameLayer; - int w = min(gl->m_Width, m_Width); - int h = min(gl->m_Height, m_Height); - for(int y = 0; y < h; y++) - { - for(int x = 0; x < w; x++) - { - if(gl->m_pTiles[y*gl->m_Width+x].m_Index <= TILE_SOLID) - { - if(m_pTiles[y*m_Width+x].m_Index) - gl->m_pTiles[y*gl->m_Width+x].m_Index = TILE_AIR; - } - } - } - return 1; - } - - static int s_ColButton = 0; - pToolBox->HSplitBottom(5.0f, pToolBox, &Button); - pToolBox->HSplitBottom(12.0f, pToolBox, &Button); - if(m_pEditor->DoButton_Editor(&s_ColButton, Localize("Make collision"), 0, &Button, 0, Localize("Constructs collision from this layer"))) + if(m_pEditor->DoButton_Editor(&s_ColclButton, Localize("Game tiles"), 0, &Button, 0, Localize("Constructs game tiles from this layer"))) + m_pEditor->PopupSelectGametileOpInvoke(m_pEditor->UI()->MouseX(), m_pEditor->UI()->MouseY()); + + int Result = m_pEditor->PopupSelectGameTileOpResult(); + if(Result > -1) { CLayerTiles *gl = m_pEditor->m_Map.m_pGameLayer; int w = min(gl->m_Width, m_Width); int h = min(gl->m_Height, m_Height); for(int y = 0; y < h; y++) - { for(int x = 0; x < w; x++) - { - if(gl->m_pTiles[y*gl->m_Width+x].m_Index <= TILE_SOLID) - gl->m_pTiles[y*gl->m_Width+x].m_Index = m_pTiles[y*m_Width+x].m_Index?TILE_SOLID:TILE_AIR; - } - } + if(gl->m_pTiles[y*gl->m_Width+x].m_Index >= TILE_AIR && gl->m_pTiles[y*gl->m_Width+x].m_Index <= TILE_NOHOOK) + gl->m_pTiles[y*gl->m_Width+x].m_Index = m_pTiles[y*m_Width+x].m_Index?TILE_AIR+Result:TILE_AIR; + return 1; } } diff --git a/src/game/editor/ed_popups.cpp b/src/game/editor/ed_popups.cpp index 2054e67f..c0fcc5d5 100644 --- a/src/game/editor/ed_popups.cpp +++ b/src/game/editor/ed_popups.cpp @@ -470,7 +470,40 @@ int CEditor::PopupSelectImageResult() return g_SelectImageCurrent; } +static int s_GametileOpSelected = -1; +int CEditor::PopupSelectGametileOp(CEditor *pEditor, CUIRect View) +{ + /* This is for scripts/update_localization.py to work, don't remove! + Localize("Clear"); Localize("Collision"); Localize("Death"); Localize("Unhookable"); */ + static const char *s_pButtonNames[] = { "Clear", "Collision", "Death", "Unhookable" }; + static unsigned s_NumButtons = sizeof(s_pButtonNames) / sizeof(char*); + CUIRect Button; + + for(unsigned i = 0; i < s_NumButtons; ++i) + { + View.HSplitTop(2.0f, 0, &View); + View.HSplitTop(12.0f, &Button, &View); + if(pEditor->DoButton_Editor(&s_pButtonNames[i], Localize(s_pButtonNames[i]), 0, &Button, 0, 0)) + s_GametileOpSelected = i; + } + return 0; +} +void CEditor::PopupSelectGametileOpInvoke(float x, float y) +{ + static int s_SelectGametileOpPopupId = 0; + s_GametileOpSelected = -1; + UiInvokePopupMenu(&s_SelectGametileOpPopupId, 0, x, y, 120.0f, 70.0f, PopupSelectGametileOp); +} +int CEditor::PopupSelectGameTileOpResult() +{ + if(s_GametileOpSelected < 0) + return -1; + + int Result = s_GametileOpSelected; + s_GametileOpSelected = -1; + return Result; +} -- cgit 1.4.1