diff options
Diffstat (limited to 'src/game/editor')
| -rw-r--r-- | src/game/editor/ed_editor.cpp | 141 | ||||
| -rw-r--r-- | src/game/editor/ed_popups.cpp | 5 |
2 files changed, 98 insertions, 48 deletions
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp index 63963dc2..da97ed61 100644 --- a/src/game/editor/ed_editor.cpp +++ b/src/game/editor/ed_editor.cpp @@ -573,7 +573,21 @@ static void CallbackAppendMap(const char *pFileName, void *pUser) else pEditor->SortImages(); } -static void CallbackSaveMap(const char *pFileName, void *pUser){ if(((CEditor*)pUser)->Save(pFileName)) str_copy(((CEditor*)pUser)->m_aFileName, pFileName, 512); } +static void CallbackSaveMap(const char *pFileName, void *pUser) +{ + char aBuf[1024]; + const int Length = str_length(pFileName); + // add map extension + if(Length <= 4 || pFileName[Length-4] != '.' || str_comp_nocase(pFileName+Length-3, "map")) + { + str_format(aBuf, sizeof(aBuf), "%s.map", pFileName); + pFileName = aBuf; + } + + CEditor *pEditor = static_cast<CEditor*>(pUser); + if(pEditor->Save(pFileName)) + str_copy(pEditor->m_aFileName, pFileName, sizeof(pEditor->m_aFileName)); +} void CEditor::DoToolbar(CUIRect ToolBar) { @@ -593,7 +607,7 @@ void CEditor::DoToolbar(CUIRect ToolBar) if(Input()->KeyDown('s') && (Input()->KeyPressed(KEY_LCTRL) || Input()->KeyPressed(KEY_RCTRL))) { if(m_aFileName[0]) - Save(m_aFileName); + CallbackSaveMap(m_aFileName, this); else InvokeFileDialog(IStorage::TYPE_SAVE, Localize("Save map"), Localize("Save"), "maps/", "", CallbackSaveMap, this); } @@ -773,6 +787,17 @@ void CEditor::DoToolbar(CUIRect ToolBar) DoMapBorder(); } } + + TB_Bottom.VSplitLeft(5.0f, 0, &TB_Bottom); + + // refocus button + TB_Bottom.VSplitLeft(50.0f, &Button, &TB_Bottom); + static int s_RefocusButton = 0; + if(DoButton_Editor(&s_RefocusButton, Localize("Refocus"), m_WorldOffsetX&&m_WorldOffsetY?0:-1, &Button, 0, Localize("[HOME] Restore map focus")) || Input()->KeyDown(KEY_HOME)) + { + m_WorldOffsetX = 0; + m_WorldOffsetY = 0; + } } static void Rotate(CPoint *pCenter, CPoint *pPoint, float Rotation) @@ -1317,24 +1342,26 @@ void CEditor::DoMapEditor(CUIRect View, CUIRect ToolBar) } CLayerGroup *g = GetSelectedGroup(); - m_Brush.m_OffsetX += g->m_OffsetX; - m_Brush.m_OffsetY += g->m_OffsetY; - m_Brush.m_ParallaxX = g->m_ParallaxX; - m_Brush.m_ParallaxY = g->m_ParallaxY; - m_Brush.Render(); - float w, h; - m_Brush.GetSize(&w, &h); - - IGraphics::CLineItem Array[4] = { - IGraphics::CLineItem(0, 0, w, 0), - IGraphics::CLineItem(w, 0, w, h), - IGraphics::CLineItem(w, h, 0, h), - IGraphics::CLineItem(0, h, 0, 0)}; - Graphics()->TextureSet(-1); - Graphics()->LinesBegin(); - Graphics()->LinesDraw(Array, 4); - Graphics()->LinesEnd(); - + if(g) + { + m_Brush.m_OffsetX += g->m_OffsetX; + m_Brush.m_OffsetY += g->m_OffsetY; + m_Brush.m_ParallaxX = g->m_ParallaxX; + m_Brush.m_ParallaxY = g->m_ParallaxY; + m_Brush.Render(); + float w, h; + m_Brush.GetSize(&w, &h); + + IGraphics::CLineItem Array[4] = { + IGraphics::CLineItem(0, 0, w, 0), + IGraphics::CLineItem(w, 0, w, h), + IGraphics::CLineItem(w, h, 0, h), + IGraphics::CLineItem(0, h, 0, 0)}; + Graphics()->TextureSet(-1); + Graphics()->LinesBegin(); + Graphics()->LinesDraw(Array, 4); + Graphics()->LinesEnd(); + } } } } @@ -1393,6 +1420,15 @@ void CEditor::DoMapEditor(CUIRect View, CUIRect ToolBar) } } } + else if(UI()->ActiveItem() == s_pEditorId) + { + // release mouse + if(!UI()->MouseButton(0)) + { + s_Operation = OP_NONE; + UI()->SetActiveItem(0); + } + } if(GetSelectedGroup() && GetSelectedGroup()->m_UseClipping) { @@ -1655,19 +1691,6 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) LayersBox.VSplitRight(3.0f, &LayersBox, 0); // extra spacing Scroll.HMargin(5.0f, &Scroll); s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue); - - if(ScrollNum > 0) - { - if(Input()->KeyPresses(KEY_MOUSE_WHEEL_UP)) - s_ScrollValue -= 3.0f/ScrollNum; - if(Input()->KeyPresses(KEY_MOUSE_WHEEL_DOWN)) - s_ScrollValue += 3.0f/ScrollNum; - - if(s_ScrollValue < 0) s_ScrollValue = 0; - if(s_ScrollValue > 1) s_ScrollValue = 1; - } - else - ScrollNum = 0; } int LayerStartAt = (int)(ScrollNum*s_ScrollValue); @@ -1953,19 +1976,6 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) ToolBox.VSplitRight(3.0f, &ToolBox, 0); // extra spacing Scroll.HMargin(5.0f, &Scroll); s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue); - - if(ScrollNum > 0) - { - if(Input()->KeyPresses(KEY_MOUSE_WHEEL_UP)) - s_ScrollValue -= 3.0f/ScrollNum; - if(Input()->KeyPresses(KEY_MOUSE_WHEEL_DOWN)) - s_ScrollValue += 3.0f/ScrollNum; - - if(s_ScrollValue < 0) s_ScrollValue = 0; - if(s_ScrollValue > 1) s_ScrollValue = 1; - } - else - ScrollNum = 0; } int ImageStartAt = (int)(ScrollNum*s_ScrollValue); @@ -2670,7 +2680,7 @@ int CEditor::PopupMenuFile(CEditor *pEditor, CUIRect View) if(pEditor->DoButton_MenuItem(&s_SaveButton, Localize("Save"), 0, &Slot, 0, Localize("Saves the current map"))) { if(pEditor->m_aFileName[0]) - pEditor->Save(pEditor->m_aFileName); + CallbackSaveMap(pEditor->m_aFileName, pEditor); else pEditor->InvokeFileDialog(IStorage::TYPE_SAVE, Localize("Save Map"), Localize("Save"), "maps/", "", CallbackSaveMap, pEditor); return 1; @@ -2865,6 +2875,19 @@ void CEditor::Reset(bool CreateDefault) m_SelectedPoints = 0; m_SelectedEnvelope = 0; m_SelectedImage = 0; + + m_WorldOffsetX = 0; + m_WorldOffsetY = 0; + m_EditorOffsetX = 0.0f; + m_EditorOffsetY = 0.0f; + + m_WorldZoom = 1.0f; + m_ZoomLevel = 200; + + m_MouseDeltaX = 0; + m_MouseDeltaY = 0; + m_MouseDeltaWx = 0; + m_MouseDeltaWy = 0; } void CEditorMap::MakeGameLayer(CLayer *pLayer) @@ -2895,6 +2918,28 @@ void CEditorMap::Clean() void CEditorMap::CreateDefault(int EntitiesTexture) { + // add background + CLayerGroup *pGroup = NewGroup(); + pGroup->m_ParallaxX = 0; + pGroup->m_ParallaxY = 0; + CLayerQuads *pLayer = new CLayerQuads; + pLayer->m_pEditor = m_pEditor; + CQuad *pQuad = pLayer->NewQuad(); + const int Width = 800000; + const int Height = 600000; + pQuad->m_aPoints[0].x = pQuad->m_aPoints[2].x = -Width; + pQuad->m_aPoints[1].x = pQuad->m_aPoints[3].x = Width; + pQuad->m_aPoints[0].y = pQuad->m_aPoints[1].y = -Height; + pQuad->m_aPoints[2].y = pQuad->m_aPoints[3].y = Height; + pQuad->m_aColors[0].r = pQuad->m_aColors[1].r = 94; + pQuad->m_aColors[0].g = pQuad->m_aColors[1].g = 132; + pQuad->m_aColors[0].b = pQuad->m_aColors[1].b = 174; + pQuad->m_aColors[2].r = pQuad->m_aColors[3].r = 204; + pQuad->m_aColors[2].g = pQuad->m_aColors[3].g = 232; + pQuad->m_aColors[2].b = pQuad->m_aColors[3].b = 255; + pGroup->AddLayer(pLayer); + + // add game layer MakeGameGroup(NewGroup()); MakeGameLayer(new CLayerGame(50, 50)); m_pGameGroup->AddLayer(m_pGameLayer); @@ -2938,7 +2983,7 @@ void CEditor::DoMapBorder() pT->m_pTiles[i].m_Index = 1; } - for(int i = ((pT->m_Width-2)*pT->m_Height); i < pT->m_Width*pT->m_Height; ++i) + for(int i = (pT->m_Width*(pT->m_Height-2)); i < pT->m_Width*pT->m_Height; ++i) pT->m_pTiles[i].m_Index = 1; } diff --git a/src/game/editor/ed_popups.cpp b/src/game/editor/ed_popups.cpp index 5e833ba6..001a7249 100644 --- a/src/game/editor/ed_popups.cpp +++ b/src/game/editor/ed_popups.cpp @@ -20,6 +20,10 @@ static int g_UiNumPopups = 0; void CEditor::UiInvokePopupMenu(void *Id, int Flags, float x, float y, float w, float h, int (*pfnFunc)(CEditor *pEditor, CUIRect Rect), void *pExtra) { dbg_msg("", "invoked"); + if(x + w > UI()->Screen()->w) + x -= w; + if(y + h > UI()->Screen()->h) + y -= h; s_UiPopups[g_UiNumPopups].m_pId = Id; s_UiPopups[g_UiNumPopups].m_IsMenu = Flags; s_UiPopups[g_UiNumPopups].m_Rect.x = x; @@ -84,6 +88,7 @@ int CEditor::PopupGroup(CEditor *pEditor, CUIRect View) pEditor->DoButton_Editor(&s_DeleteButton, Localize("Delete group"), 0, &Button, 0, Localize("Delete group"))) { pEditor->m_Map.DeleteGroup(pEditor->m_SelectedGroup); + pEditor->m_SelectedGroup = max(0, pEditor->m_SelectedGroup-1); return 1; } |