diff options
author | LordSk <lordskelethom@gmail.com> | 2020-11-22 15:04:15 +0100 |
---|---|---|
committer | LordSk <lordskelethom@gmail.com> | 2020-11-22 15:04:15 +0100 |
commit | 045bf3aa1e2cd927df14ac1b483b095d6a23c9d4 (patch) | |
tree | 58d80009203f8c5e529b015f8659cbb593219a8e | |
parent | a59768598151afbe538ca3e4b2e12ee381a39912 (diff) |
Automap stroke paint. Added a small "pressed" effect when painting.
-rw-r--r-- | src/game/editor/ed2_actions.cpp | 68 | ||||
-rw-r--r-- | src/game/editor/ed2_common.h | 66 | ||||
-rw-r--r-- | src/game/editor/editor2.cpp | 79 | ||||
-rw-r--r-- | src/game/editor/editor2.h | 89 |
4 files changed, 171 insertions, 131 deletions
diff --git a/src/game/editor/ed2_actions.cpp b/src/game/editor/ed2_actions.cpp index 42891a497..6aa39a403 100644 --- a/src/game/editor/ed2_actions.cpp +++ b/src/game/editor/ed2_actions.cpp @@ -635,7 +635,7 @@ void CEditor2::EditTileLayerAutoMapSection(int LayerID, int RulesetID, int Start HistoryNewEntry(aHistoryEntryAction, aHistoryEntryDesc); } -void CEditor2::EditHistCondLayerChangeName(int LayerID, const char* pNewName, bool HistoryCondition) +void CEditor2::EditSeqLayerChangeName(int LayerID, const char* pNewName, bool SequenceEnd) { dbg_assert(m_Map.m_aLayers.IsValid(LayerID), "LayerID out of bounds"); @@ -649,7 +649,7 @@ void CEditor2::EditHistCondLayerChangeName(int LayerID, const char* pNewName, bo str_copy(aOldName, Layer.m_aName, sizeof(aOldName)); str_copy(Layer.m_aName, pNewName, sizeof(Layer.m_aName)); - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -660,7 +660,7 @@ void CEditor2::EditHistCondLayerChangeName(int LayerID, const char* pNewName, bo } } -void CEditor2::EditHistCondLayerChangeColor(int LayerID, vec4 NewColor, bool HistoryCondition) +void CEditor2::EditSeqLayerChangeColor(int LayerID, vec4 NewColor, bool SequenceEnd) { dbg_assert(m_Map.m_aLayers.IsValid(LayerID), "LayerID out of bounds"); @@ -672,7 +672,7 @@ void CEditor2::EditHistCondLayerChangeColor(int LayerID, vec4 NewColor, bool His Layer.m_Color = NewColor; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -684,7 +684,7 @@ void CEditor2::EditHistCondLayerChangeColor(int LayerID, vec4 NewColor, bool His } } -void CEditor2::EditHistCondGroupChangeName(int GroupID, const char* pNewName, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeName(int GroupID, const char* pNewName, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -698,7 +698,7 @@ void CEditor2::EditHistCondGroupChangeName(int GroupID, const char* pNewName, bo str_copy(aOldName, Group.m_aName, sizeof(aOldName)); str_copy(Group.m_aName, pNewName, sizeof(Group.m_aName)); - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -709,7 +709,7 @@ void CEditor2::EditHistCondGroupChangeName(int GroupID, const char* pNewName, bo } } -void CEditor2::EditHistCondGroupChangeParallax(int GroupID, int NewParallaxX, int NewParallaxY, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeParallax(int GroupID, int NewParallaxX, int NewParallaxY, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -726,7 +726,7 @@ void CEditor2::EditHistCondGroupChangeParallax(int GroupID, int NewParallaxX, in Group.m_ParallaxX = NewParallaxX; Group.m_ParallaxY = NewParallaxY; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -739,7 +739,7 @@ void CEditor2::EditHistCondGroupChangeParallax(int GroupID, int NewParallaxX, in } } -void CEditor2::EditHistCondGroupChangeOffset(int GroupID, int NewOffsetX, int NewOffsetY, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeOffset(int GroupID, int NewOffsetX, int NewOffsetY, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -756,7 +756,7 @@ void CEditor2::EditHistCondGroupChangeOffset(int GroupID, int NewOffsetX, int Ne Group.m_OffsetX = NewOffsetX; Group.m_OffsetY = NewOffsetY; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -769,7 +769,7 @@ void CEditor2::EditHistCondGroupChangeOffset(int GroupID, int NewOffsetX, int Ne } } -void CEditor2::EditHistCondGroupChangeClipX(int GroupID, int NewClipX, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeClipX(int GroupID, int NewClipX, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -785,7 +785,7 @@ void CEditor2::EditHistCondGroupChangeClipX(int GroupID, int NewClipX, bool Hist if(Group.m_ClipWidth < 0) Group.m_ClipWidth = 0; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -797,7 +797,7 @@ void CEditor2::EditHistCondGroupChangeClipX(int GroupID, int NewClipX, bool Hist } } -void CEditor2::EditHistCondGroupChangeClipY(int GroupID, int NewClipY, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeClipY(int GroupID, int NewClipY, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -813,7 +813,7 @@ void CEditor2::EditHistCondGroupChangeClipY(int GroupID, int NewClipY, bool Hist if(Group.m_ClipHeight < 0) Group.m_ClipHeight = 0; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -826,7 +826,7 @@ void CEditor2::EditHistCondGroupChangeClipY(int GroupID, int NewClipY, bool Hist } } -void CEditor2::EditHistCondGroupChangeClipRight(int GroupID, int NewClipRight, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeClipRight(int GroupID, int NewClipRight, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -840,7 +840,7 @@ void CEditor2::EditHistCondGroupChangeClipRight(int GroupID, int NewClipRight, b if(Group.m_ClipWidth < 0) Group.m_ClipWidth = 0; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -851,7 +851,7 @@ void CEditor2::EditHistCondGroupChangeClipRight(int GroupID, int NewClipRight, b } } -void CEditor2::EditHistCondGroupChangeClipBottom(int GroupID, int NewClipBottom, bool HistoryCondition) +void CEditor2::EditSeqGroupChangeClipBottom(int GroupID, int NewClipBottom, bool SequenceEnd) { dbg_assert(m_Map.m_aGroups.IsValid(GroupID), "GroupID out of bounds"); @@ -865,7 +865,7 @@ void CEditor2::EditHistCondGroupChangeClipBottom(int GroupID, int NewClipBottom, if(Group.m_ClipHeight < 0) Group.m_ClipHeight = 0; - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -876,7 +876,7 @@ void CEditor2::EditHistCondGroupChangeClipBottom(int GroupID, int NewClipBottom, } } -void CEditor2::EditHistCondBrushPaintStrokeOnLayer(int StartTX, int StartTY, int EndTX, int EndTY, int LayerID, bool HistoryCondition) +void CEditor2::EditSeqBrushPaintStroke(int StartTX, int StartTY, int EndTX, int EndTY, int LayerID, bool SequenceEnd) { dbg_assert(m_Map.m_aLayers.IsValid(LayerID), "LayerID out of bounds"); dbg_assert(m_Map.m_aLayers.Get(LayerID).IsTileLayer(), "Layer is not a tile layer"); @@ -884,7 +884,7 @@ void CEditor2::EditHistCondBrushPaintStrokeOnLayer(int StartTX, int StartTY, int // TODO: trace from Start to End BrushPaintLayer(m_Brush, EndTX, EndTY, LayerID); - if(HistoryCondition) + if(SequenceEnd) { char aHistoryEntryAction[64]; char aHistoryEntryDesc[64]; @@ -894,6 +894,34 @@ void CEditor2::EditHistCondBrushPaintStrokeOnLayer(int StartTX, int StartTY, int } } +void CEditor2::EditSeqBrushPaintStrokeAutomap(int StartTX, int StartTY, int EndTX, int EndTY, int LayerID, int RulesetID, bool SequenceEnd) +{ + dbg_assert(m_Map.m_aLayers.IsValid(LayerID), "LayerID out of bounds"); + dbg_assert(m_Map.m_aLayers.Get(LayerID).IsTileLayer(), "Layer is not a tile layer"); + + // TODO: trace from Start to End + BrushPaintLayer(m_Brush, EndTX, EndTY, LayerID); + + CEditorMap2::CLayer& Layer = m_Map.m_aLayers.Get(LayerID); + dbg_assert(Layer.m_ImageID >= 0 && Layer.m_ImageID < m_Map.m_Assets.m_ImageCount, "ImageID out of bounds or invalid"); + + CTilesetMapper2* pMapper = m_Map.AssetsFindTilesetMapper(Layer.m_ImageID); + + dbg_assert(pMapper != 0, "Tileset mapper not found"); + dbg_assert(Layer.m_aTiles.size() == Layer.m_Width*Layer.m_Height, "Tile count does not match layer size"); + + pMapper->AutomapLayerSection(Layer.m_aTiles.base_ptr(), EndTX, EndTY, m_Brush.m_Width, m_Brush.m_Height, Layer.m_Width, Layer.m_Height, RulesetID); + + if(SequenceEnd) + { + char aHistoryEntryAction[64]; + char aHistoryEntryDesc[64]; + str_format(aHistoryEntryAction, sizeof(aHistoryEntryAction), Localize("Layer %d: brush paint auto"), LayerID); + str_format(aHistoryEntryDesc, sizeof(aHistoryEntryDesc), "(%d, %d)", EndTX, EndTY); + HistoryNewEntry(aHistoryEntryAction, aHistoryEntryDesc); + } +} + void CEditor2::ConLoad(IConsole::IResult* pResult, void* pUserData) { CEditor2 *pSelf = (CEditor2 *)pUserData; diff --git a/src/game/editor/ed2_common.h b/src/game/editor/ed2_common.h index 2ff8706f2..e00a3f10f 100644 --- a/src/game/editor/ed2_common.h +++ b/src/game/editor/ed2_common.h @@ -270,3 +270,69 @@ inline void ArraySetSizeAndZero(array<T>* pArray, int NewSize) for(int i = 0; i < Diff; i++) (*pArray)[i+OldElementCount] = T(); } + +template<class T, u32 CAPACITY_> +struct StackPool +{ + enum + { + CAPACITY = CAPACITY_ + }; + + T m_aEntries[CAPACITY]; + u8 m_aUsed[CAPACITY]; + + StackPool() + { + mem_zero(m_aUsed, sizeof(m_aUsed)); + } + + ~StackPool() + { + Clear(); + } + + T* Allocate() + { + for(int i = 0; i < CAPACITY; i++) + { + if(!m_aUsed[i]) + { + m_aUsed[i] = 1; + return &m_aEntries[i]; + } + } + + return 0x0; + } + + T* New() + { + T* pElt = Allocate(); + if(!pElt) return 0x0; + + new(pElt) T(); + return pElt; + } + + void Free(T* pElt) + { + const int Index = pElt - m_aEntries; + dbg_assert(Index >= 0 && Index < CAPACITY, "element out of bounds"); + pElt->~T(); + m_aUsed[Index] = 0; + } + + void Clear() + { + for(int i = 0; i < CAPACITY; i++) + { + if(m_aUsed[i]) + { + m_aEntries[i].~T(); + } + } + + mem_zero(m_aUsed, sizeof(m_aUsed)); + } +}; diff --git a/src/game/editor/editor2.cpp b/src/game/editor/editor2.cpp index 953eff8a7..d1def3811 100644 --- a/src/game/editor/editor2.cpp +++ b/src/game/editor/editor2.cpp @@ -284,7 +284,12 @@ void CEditor2::Render() Graphics()->Clear(0.3f, 0.3f, 0.3f); if(m_Page == PAGE_MAP_EDITOR) + { RenderMap(); + //TODO: find a better name + DoToolStuff(); + RenderMapEditorUI(); + } else if(m_Page == PAGE_ASSET_MANAGER) RenderAssetManager(); @@ -530,7 +535,7 @@ void CEditor2::EnvelopeEval(float TimeOffset, int EnvID, float* pChannels) void CEditor2::RenderMap() { // Move the map view - // We do this here so there are no frame delay + // We do this here so there is no frame delay // NOTE: we use the same id as in DoToolStuff() on purpose CUIButton MapViewButton; UiDoButtonBehavior(&m_MapViewDrag, m_UiMainViewRect, &MapViewButton); @@ -817,12 +822,6 @@ void CEditor2::RenderMap() Graphics()->QuadsDrawTL(&RecOriginLineYtY, 1); Graphics()->QuadsEnd(); - - //TODO: find a better name - DoToolStuff(); - - // user interface - RenderMapEditorUI(); } void CEditor2::DoToolStuff() @@ -1066,7 +1065,12 @@ void CEditor2::DoToolBrush(int MouseTx, int MouseTy, vec2 MouseWorldPos, vec2 Gr RenderBrush(PreviewBrush, GridMousePos); */ - RenderBrush(m_Brush, GridMousePos); + // draw brush + vec4 BrushOverlayColor = vec4(0, 0, 0, 0); + if(pMouseDrag->m_IsDragging) + BrushOverlayColor = vec4(0, 0, 0, 0.2f); + + RenderBrush(m_Brush, GridMousePos, BrushOverlayColor); // block paint if(IsShiftPressed) @@ -1093,13 +1097,21 @@ void CEditor2::DoToolBrush(int MouseTx, int MouseTy, vec2 MouseWorldPos, vec2 Gr } else // stroke paint { - // TODO: automap stroke painting + // TODO: input last mouse position as "StartTX/Y" + if(pMouseDrag->m_IsDragging) // TODO: we don't need to do this *every* frame + EditSeqBrushPaintStrokeAutomap(MouseTx, MouseTy, MouseTx, MouseTy, SelectedLayerID, AutomapRuleID, false); + else if(FinishedDragging) + EditSeqBrushPaintStrokeAutomap(MouseTx, MouseTy, MouseTx, MouseTy, SelectedLayerID, AutomapRuleID, true); // push history entry when we finish the stroke } } else { // draw brush - RenderBrush(m_Brush, GridMousePos); + vec4 BrushOverlayColor = vec4(0, 0, 0, 0); + if(pMouseDrag->m_IsDragging) + BrushOverlayColor = vec4(0, 0, 0, 0.2f); + + RenderBrush(m_Brush, GridMousePos, BrushOverlayColor); // block paint if(IsShiftPressed) @@ -1128,9 +1140,9 @@ void CEditor2::DoToolBrush(int MouseTx, int MouseTy, vec2 MouseWorldPos, vec2 Gr { // TODO: input last mouse position as "StartTX/Y" if(pMouseDrag->m_IsDragging) // TODO: we don't need to do this *every* frame - EditHistCondBrushPaintStrokeOnLayer(MouseTx, MouseTy, MouseTx, MouseTy, SelectedLayerID, false); + EditSeqBrushPaintStroke(MouseTx, MouseTy, MouseTx, MouseTy, SelectedLayerID, false); else if(FinishedDragging) - EditHistCondBrushPaintStrokeOnLayer(MouseTx, MouseTy, MouseTx, MouseTy, SelectedLayerID, true); // push history entry when we finish the stroke + EditSeqBrushPaintStroke(MouseTx, MouseTy, MouseTx, MouseTy, SelectedLayerID, true); // push history entry when we finish the stroke } } } @@ -1400,25 +1412,25 @@ void CEditor2::RenderMapEditorUI() if(UiGrabHandle(HandleTop, &s_GrabHandleTop, ColNormal, ColActive)) { - EditHistCondGroupChangeClipY(m_UiSelectedGroupID, WorldMousePos.y, false); + EditSeqGroupChangeClipY(m_UiSelectedGroupID, WorldMousePos.y, false); ToolTipPos = vec2(HandleTop.x, HandleTop.y); } if(UiGrabHandle(HandleLeft, &s_GrabHandleLeft, ColNormal, ColActive)) { - EditHistCondGroupChangeClipX(m_UiSelectedGroupID, WorldMousePos.x, false); + EditSeqGroupChangeClipX(m_UiSelectedGroupID, WorldMousePos.x, false); ToolTipPos = vec2(HandleLeft.x, HandleLeft.y); } if(UiGrabHandle(HandleBottom, &s_GrabHandleBot, ColNormal, ColActive)) { - EditHistCondGroupChangeClipBottom(m_UiSelectedGroupID, WorldMousePos.y, false); + EditSeqGroupChangeClipBottom(m_UiSelectedGroupID, WorldMousePos.y, false); ToolTipPos = vec2(HandleBottom.x, HandleBottom.y); } if(UiGrabHandle(HandleRight, &s_GrabHandleRight, ColNormal, ColActive)) { - EditHistCondGroupChangeClipRight(m_UiSelectedGroupID, WorldMousePos.x, false); + EditSeqGroupChangeClipRight(m_UiSelectedGroupID, WorldMousePos.x, false); ToolTipPos = vec2(HandleRight.x, HandleRight.y); } @@ -1427,26 +1439,26 @@ void CEditor2::RenderMapEditorUI() { SelectedGroup.m_ClipX = BeforeGrabbingClipX; SelectedGroup.m_ClipWidth = BeforeGrabbingClipWidth; - EditHistCondGroupChangeClipX(m_UiSelectedGroupID, WorldMousePos.x, true); + EditSeqGroupChangeClipX(m_UiSelectedGroupID, WorldMousePos.x, true); } if(!s_GrabHandleTop.m_IsGrabbed && WasGrabbingTop) { SelectedGroup.m_ClipY = BeforeGrabbingClipY; SelectedGroup.m_ClipHeight = BeforeGrabbingClipHeight; - EditHistCondGroupChangeClipY(m_UiSelectedGroupID, WorldMousePos.y, true); + EditSeqGroupChangeClipY(m_UiSelectedGroupID, WorldMousePos.y, true); } if(!s_GrabHandleRight.m_IsGrabbed && WasGrabbingRight) { SelectedGroup.m_ClipWidth = BeforeGrabbingClipWidth; - EditHistCondGroupChangeClipRight(m_UiSelectedGroupID, WorldMousePos.x, true); + EditSeqGroupChangeClipRight(m_UiSelectedGroupID, WorldMousePos.x, true); } if(!s_GrabHandleBot.m_IsGrabbed && WasGrabbingBot) { SelectedGroup.m_ClipHeight = BeforeGrabbingClipHeight; - EditHistCondGroupChangeClipBottom(m_UiSelectedGroupID, WorldMousePos.y, true); + EditSeqGroupChangeClipBottom(m_UiSelectedGroupID, WorldMousePos.y, true); } // Size tooltip info @@ -1787,7 +1799,7 @@ void CEditor2::RenderMapEditorUiLayerGroups(CUIRect NavRect) if(ShowButState.m_Clicked) m_UiLayerState[LyID].m_IsHidden ^= 1; - const bool IsShown = !m_UiLayerState[LyID].m_IsHovered; + const bool IsShown = !m_UiLayerState[LyID].m_IsHidden; vec4 ShowButColor = StyleColorButton; if(ShowButState.m_Hovered) @@ -2100,13 +2112,13 @@ void CEditor2::RenderMapEditorUiDetailPanel(CUIRect DetailRect) // "preview" new name instantly if(UiTextInput(ButtonRect, aNewName, sizeof(aNewName), &s_TIGroupName)) - EditHistCondGroupChangeName(m_UiSelectedGroupID, aNewName, false); + EditSeqGroupChangeName(m_UiSelectedGroupID, aNewName, false); // if not selected, restore old name and change to new name with history entry if(!s_TIGroupName.m_Selected) { str_copy(SelectedGroup.m_aName, aBeforeSelectionName, sizeof(SelectedGroup.m_aName)); - EditHistCondGroupChangeName(m_UiSelectedGroupID, aNewName, true); + EditSeqGroupChangeName(m_UiSelectedGroupID, aNewName, true); } } @@ -2135,14 +2147,14 @@ void CEditor2::RenderMapEditorUiDetailPanel(CUIRect DetailRect) ParallaxChanged |= UiIntegerInput(ButtonRect, &NewGroupParallaxX, &s_IntInpParallaxX); ParallaxChanged |= UiIntegerInput(ButtonRect2, &NewGroupParallaxY, &s_IntInpParallaxY); if(ParallaxChanged) - EditHistCondGroupChangeParallax(m_UiSelectedGroupID, NewGroupParallaxX, NewGroupParallaxY, false); + EditSeqGroupChangeParallax(m_UiSelectedGroupID, NewGroupParallaxX, NewGroupParallaxY, false); // restore "before preview" parallax, the nchange to new one if(!s_IntInpParallaxX.m_TextInput.m_Selected && !s_IntInpParallaxY.m_TextInput.m_Selected) { SelectedGroup.m_ParallaxX = BsGroupParallaX; SelectedGroup.m_ParallaxY = BsGroupParallaY; - EditHistCondGroupChangeParallax(m_UiSelectedGroupID, NewGroupParallaxX, NewGroupParallaxY, true); + EditSeqGroupChangeParallax(m_UiSelectedGroupID, NewGroupParallaxX, NewGroupParallaxY, true); } // offset @@ -2170,14 +2182,14 @@ void CEditor2::RenderMapEditorUiDetailPanel(CUIRect DetailRect) OffsetChanged |= UiIntegerInput(ButtonRect, &NewGroupOffsetX, &s_IntInpOffsetX); OffsetChanged |= UiIntegerInput(ButtonRect2, &NewGroupOffsetY, &s_IntInpOffsetY); if(OffsetChanged) - EditHistCondGroupChangeOffset(m_UiSelectedGroupID, NewGroupOffsetX, NewGroupOffsetY, false); + EditSeqGroupChangeOffset(m_UiSelectedGroupID, NewGroupOffsetX, NewGroupOffsetY, false); // restore "before preview" offset, the nchange to new one if(!s_IntInpOffsetX.m_TextInput.m_Selected && !s_IntInpOffsetY.m_TextInput.m_Selected) { SelectedGroup.m_OffsetX = BsGroupOffsetX; SelectedGroup.m_OffsetY = BsGroupOffsetY; - EditHistCondGroupChangeOffset(m_UiSelectedGroupID, NewGroupOffsetX, NewGroupOffsetY, true); + EditSeqGroupChangeOffset(m_UiSelectedGroupID, NewGroupOffsetX, NewGroupOffsetY, true); } // clip @@ -2247,13 +2259,13 @@ void CEditor2::RenderMapEditorUiDetailPanel(CUIRect DetailRect) // "preview" new name instantly if(UiTextInput(ButtonRect, aNewName, sizeof(aNewName), &s_TILayerName)) - EditHistCondLayerChangeName(m_UiSelectedLayerID, aNewName, false); + EditSeqLayerChangeName(m_UiSelectedLayerID, aNewName, false); // if not selected, restore old name and change to new name with history entry if(!s_TILayerName.m_Selected) { str_copy(SelectedLayer.m_aName, aBeforeSelectionName, sizeof(SelectedLayer.m_aName)); - EditHistCondLayerChangeName(m_UiSelectedLayerID, aNewName, true); + EditSeqLayerChangeName(m_UiSelectedLayerID, aNewName, true); } } @@ -2357,13 +2369,13 @@ void CEditor2::RenderMapEditorUiDetailPanel(CUIRect DetailRect) // "preview" change instantly if(SliderModified) - EditHistCondLayerChangeColor(m_UiSelectedLayerID, NewColor, false); + EditSeqLayerChangeColor(m_UiSelectedLayerID, NewColor, false); // restore old color before preview, then change it if(!AnySliderSelected) { SelectedLayer.m_Color = ColorBeforePreview; - EditHistCondLayerChangeColor(m_UiSelectedLayerID, NewColor, true); + EditSeqLayerChangeColor(m_UiSelectedLayerID, NewColor, true); } // Auto map @@ -3460,7 +3472,7 @@ bool CEditor2::DoPopupYesNo(CUIPopupYesNo* state) return false; } -void CEditor2::RenderBrush(const CBrush& Brush, vec2 Pos) +void CEditor2::RenderBrush(const CBrush& Brush, vec2 Pos, vec4 Overlay) { if(Brush.IsEmpty()) return; @@ -3473,7 +3485,6 @@ void CEditor2::RenderBrush(const CBrush& Brush, vec2 Pos) const CEditorMap2::CLayer& SelectedTileLayer = m_Map.m_aLayers.Get(m_UiSelectedLayerID); dbg_assert(SelectedTileLayer.IsTileLayer(), "Selected layer is not a tile layer"); - const float TileSize = 32; const CUIRect BrushRect = {0, 0, Brush.m_Width * TileSize, Brush.m_Height * TileSize}; DrawRect(BrushRect, vec4(1, 1, 1, 0.1f)); @@ -3491,7 +3502,7 @@ void CEditor2::RenderBrush(const CBrush& Brush, vec2 Pos) Graphics()->BlendNormal(); RenderTools()->RenderTilemap(Brush.m_aTiles.base_ptr(), Brush.m_Width, Brush.m_Height, TileSize, White, LAYERRENDERFLAG_TRANSPARENT, 0, 0, -1, 0); - DrawRectBorder(BrushRect, vec4(0, 0, 0, 0), 1, vec4(1, 1, 1, 1)); + DrawRectBorder(BrushRect, Overlay, 1, vec4(1, 1, 1, 1)); Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1); } diff --git a/src/game/editor/editor2.h b/src/game/editor/editor2.h index b372aaa97..0222d78f6 100644 --- a/src/game/editor/editor2.h +++ b/src/game/editor/editor2.h @@ -229,72 +229,6 @@ class CEditor2: public IEditor, public CEditor2Ui CBrush m_Brush; - template<class T, u32 CAPACITY_> - struct StackPool - { - enum - { - CAPACITY = CAPACITY_ - }; - - T m_aEntries[CAPACITY]; - u8 m_aUsed[CAPACITY]; - - StackPool() - { - mem_zero(m_aUsed, sizeof(m_aUsed)); - } - - ~StackPool() - { - Clear(); - } - - T* Allocate() - { - for(int i = 0; i < CAPACITY; i++) - { - if(!m_aUsed[i]) - { - m_aUsed[i] = 1; - return &m_aEntries[i]; - } - } - - return 0x0; - } - - T* New() - { - T* pElt = Allocate(); - if(!pElt) return 0x0; - - new(pElt) T(); - return pElt; - } - - void Free(T* pElt) - { - const int Index = pElt - m_aEntries; - dbg_assert(Index >= 0 && Index < CAPACITY, "element out of bounds"); - pElt->~T(); - m_aUsed[Index] = 0; - } - - void Clear() - { - for(int i = 0; i < CAPACITY; i++) - { - if(m_aUsed[i]) - { - m_aEntries[i].~T(); - } - } - - mem_zero(m_aUsed, sizeof(m_aUsed)); - } - }; - struct CUISnapshot { int m_SelectedLayerID; @@ -495,7 +429,7 @@ class CEditor2: public IEditor, public CEditor2Ui bool DoFileSelect(CUIRect MainRect, CUIFileSelect *pState, CUIRect *pPreviewRect = 0); bool DoPopupYesNo(CUIPopupYesNo* state); - void RenderBrush(const CBrush& Brush, vec2 Pos); + void RenderBrush(const CBrush& Brush, vec2 Pos, vec4 Overlay = vec4(0, 0, 0, 0)); void DrawBrushGridHoverRect(vec2 Pos); void RenderAssetManager(); @@ -554,16 +488,17 @@ class CEditor2: public IEditor, public CEditor2Ui void EditTileLayerAutoMapWhole(int LayerID, int RulesetID); void EditTileLayerAutoMapSection(int LayerID, int RulesetID, int StartTx, int StartTy, int SectionWidth, int SectionHeight); - void EditHistCondLayerChangeName(int LayerID, const char* pNewName, bool HistoryCondition); - void EditHistCondLayerChangeColor(int LayerID, vec4 NewColor, bool HistoryCondition); - void EditHistCondGroupChangeName(int GroupID, const char* pNewName, bool HistoryCondition); - void EditHistCondGroupChangeParallax(int GroupID, int NewParallaxX, int NewParallaxY, bool HistoryCondition); - void EditHistCondGroupChangeOffset(int GroupID, int NewOffsetX, int NewOffsetY, bool HistoryCondition); - void EditHistCondGroupChangeClipX(int GroupID, int NewClipX, bool HistoryCondition); - void EditHistCondGroupChangeClipY(int GroupID, int NewClipY, bool HistoryCondition); - void EditHistCondGroupChangeClipRight(int GroupID, int NewClipRight, bool HistoryCondition); - void EditHistCondGroupChangeClipBottom(int GroupID, int NewClipBottom, bool HistoryCondition); - void EditHistCondBrushPaintStrokeOnLayer(int StartTX, int StartTY, int EndTX, int EndTY, int LayerID, bool HistoryCondition); + void EditSeqLayerChangeName(int LayerID, const char* pNewName, bool SequenceEnd); + void EditSeqLayerChangeColor(int LayerID, vec4 NewColor, bool SequenceEnd); + void EditSeqGroupChangeName(int GroupID, const char* pNewName, bool SequenceEnd); + void EditSeqGroupChangeParallax(int GroupID, int NewParallaxX, int NewParallaxY, bool SequenceEnd); + void EditSeqGroupChangeOffset(int GroupID, int NewOffsetX, int NewOffsetY, bool SequenceEnd); + void EditSeqGroupChangeClipX(int GroupID, int NewClipX, bool SequenceEnd); + void EditSeqGroupChangeClipY(int GroupID, int NewClipY, bool SequenceEnd); + void EditSeqGroupChangeClipRight(int GroupID, int NewClipRight, bool SequenceEnd); + void EditSeqGroupChangeClipBottom(int GroupID, int NewClipBottom, bool SequenceEnd); + void EditSeqBrushPaintStroke(int StartTX, int StartTY, int EndTX, int EndTY, int LayerID, bool SequenceEnd); + void EditSeqBrushPaintStrokeAutomap(int StartTX, int StartTY, int EndTX, int EndTY, int LayerID, int RulesetID, bool SequenceEnd); void HistoryClear(); CHistoryEntry* HistoryAllocEntry(const char* pActionStr, const char* pDescStr); |