summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLordSk <lordskelethom@gmail.com>2020-11-22 15:04:15 +0100
committerLordSk <lordskelethom@gmail.com>2020-11-22 15:04:15 +0100
commit045bf3aa1e2cd927df14ac1b483b095d6a23c9d4 (patch)
tree58d80009203f8c5e529b015f8659cbb593219a8e
parenta59768598151afbe538ca3e4b2e12ee381a39912 (diff)
Automap stroke paint. Added a small "pressed" effect when painting.
-rw-r--r--src/game/editor/ed2_actions.cpp68
-rw-r--r--src/game/editor/ed2_common.h66
-rw-r--r--src/game/editor/editor2.cpp79
-rw-r--r--src/game/editor/editor2.h89
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);