DDNet documentation
Loading...
Searching...
No Matches
editor.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_EDITOR_EDITOR_H
4#define GAME_EDITOR_EDITOR_H
5
6#include "editor_history.h"
8#include "editor_trackers.h"
9#include "editor_ui.h"
10#include "font_typer.h"
11#include "layer_selector.h"
12#include "map_view.h"
13#include "quad_art.h"
14#include "smooth_value.h"
15
16#include <base/bezier.h>
17#include <base/fs.h>
18
20#include <engine/graphics.h>
21
22#include <game/client/ui.h>
24#include <game/editor/enums.h>
39#include <game/editor/prompt.h>
42#include <game/mapitems.h>
44#include <deque>
45#include <functional>
46#include <map>
47#include <memory>
48#include <string>
49#include <vector>
50
51template<typename T>
52using FDropdownRenderCallback = std::function<void(const T &, char (&aOutput)[128], std::vector<STextColorSplit> &)>;
53
54// CEditor SPECIFIC
55enum
56{
60
62};
63
64enum
65{
70
71 // The font typer component sets m_Dialog
72 // while it is active to make sure no other component
73 // interprets the key presses
75};
76
78{
79public:
80 CProperty(const char *pName, int Value, int Type, int Min, int Max) :
81 m_pName(pName), m_Value(Value), m_Type(Type), m_Min(Min), m_Max(Max) {}
82
83 CProperty(std::nullptr_t) :
84 m_pName(nullptr), m_Value(0), m_Type(0), m_Min(0), m_Max(0) {}
85
86 const char *m_pName;
88 int m_Type;
89 int m_Min;
90 int m_Max;
91};
92
93enum
94{
106};
108class CEditor : public IEditor, public IEnvelopeEval
109{
110 class IInput *m_pInput = nullptr;
111 class IClient *m_pClient = nullptr;
113 class CConfig *m_pConfig = nullptr;
114 class IEngine *m_pEngine = nullptr;
115 class IGraphics *m_pGraphics = nullptr;
116 class ITextRender *m_pTextRender = nullptr;
117 class ISound *m_pSound = nullptr;
118 class IStorage *m_pStorage = nullptr;
121
122 std::vector<std::reference_wrapper<CEditorComponent>> m_vComponents;
128
130
132
138
140
148 std::shared_ptr<CLayerGroup> m_apSavedBrushes[10];
149 static constexpr ColorRGBA ms_DefaultPropColor = ColorRGBA(1, 1, 1, 0.5f);
150
151public:
152 class IInput *Input() const { return m_pInput; }
153 class IClient *Client() const { return m_pClient; }
155 class CConfig *Config() const { return m_pConfig; }
156 class IEngine *Engine() const { return m_pEngine; }
157 class IGraphics *Graphics() const { return m_pGraphics; }
158 class ISound *Sound() const { return m_pSound; }
159 class ITextRender *TextRender() const { return m_pTextRender; }
160 class IStorage *Storage() const { return m_pStorage; }
161 CUi *Ui() { return &m_UI; }
164 CEditorMap *Map() { return &m_Map; }
165 const CEditorMap *Map() const { return &m_Map; }
166 CMapView *MapView() { return &m_MapView; }
167 const CMapView *MapView() const { return &m_MapView; }
169
170 void FillGameTiles(EGameTileOp FillTile) const;
171 bool CanFillGameTiles() const;
172 void AddQuadOrSound();
173 void AddGroup();
174 void AddSoundLayer();
175 void AddTileLayer();
176 void AddQuadsLayer();
177 void AddSwitchLayer();
178 void AddFrontLayer();
180 void AddSpeedupLayer();
182 void DeleteSelectedLayer();
183 void LayerSelectImage();
184 bool IsNonGameTileLayerSelected() const;
185 void MapDetails();
186 void TestMapLocally();
187#define REGISTER_QUICK_ACTION(name, text, callback, disabled, active, button_color, description) CQuickAction m_QuickAction##name;
189#undef REGISTER_QUICK_ACTION
190
192#define REGISTER_QUICK_ACTION(name, text, callback, disabled, active, button_color, description) m_QuickAction##name(text, description, callback, disabled, active, button_color),
193#include <game/editor/quick_actions.h>
195 m_ZoomEnvelopeX(1.0f, 0.1f, 600.0f),
196 m_ZoomEnvelopeY(640.0f, 0.1f, 32000.0f),
198 m_Map(this)
199 {
200 m_EntitiesTexture.Invalidate();
201 m_FrontTexture.Invalidate();
202 m_TeleTexture.Invalidate();
203 m_SpeedupTexture.Invalidate();
204 m_SwitchTexture.Invalidate();
205 m_TuneTexture.Invalidate();
206
208 m_Dialog = 0;
209
210 m_BrushColorEnabled = true;
211
212 m_aFilenamePendingLoad[0] = '\0';
214 m_PopupEventActivated = false;
216
218
219 m_SelectEntitiesImage = "DDNet";
220
222 m_OffsetEnvelopeX = 0.1f;
224
226
227 m_GuiActive = true;
228 m_PreviewZoom = false;
229
231 m_ShowDetail = true;
232 m_Animate = false;
233 m_AnimateStart = 0;
234 m_AnimateTime = 0;
235 m_AnimateSpeed = 1;
236 m_AnimateUpdatePopup = false;
238 for(size_t i = 0; i < std::size(m_aSavedColors); ++i)
239 {
240 m_aSavedColors[i] = color_cast<ColorRGBA>(ColorHSLA(i / (float)std::size(m_aSavedColors), 1.0f, 0.5f));
241 }
242
244 for(auto &CursorTexture : m_aCursorTextures)
245 CursorTexture.Invalidate();
246
248
249 // DDRace
250
251 m_TeleNumber = 1;
254
255 m_TuningNumber = 1;
256 m_ViewTuning = 0;
257
259 m_SwitchDelay = 0;
260 m_SpeedupForce = 50;
262 m_SpeedupAngle = 0;
263 m_LargeLayerWasWarned = false;
267 }
268
269 class CHoverTile
270 {
271 public:
272 CHoverTile(int Group, int Layer, int x, int y, const CTile Tile) :
273 m_Group(Group),
274 m_Layer(Layer),
275 m_X(x),
276 m_Y(y),
277 m_Tile(Tile)
278 {
279 }
280
281 int m_Group;
283 int m_X;
284 int m_Y;
285 const CTile m_Tile;
286 };
287 std::vector<CHoverTile> m_vHoverTiles;
288 const std::vector<CHoverTile> &HoverTiles() const { return m_vHoverTiles; }
289
290 void Init() override;
291 void OnUpdate() override;
292 void OnRender() override;
293 void OnActivate() override;
294 void OnWindowResize() override;
295 void OnClose() override;
296 void OnDialogClose();
297 bool HasUnsavedData() const override { return Map()->m_Modified; }
298 void UpdateMentions() override { m_Mentions++; }
299 void ResetMentions() override { m_Mentions = 0; }
300 void OnIngameMoved() override { m_IngameMoved = true; }
301 void ResetIngameMoved() override { m_IngameMoved = false; }
302
304 void OnMouseMove(vec2 MousePos);
305 void MouseAxisLock(vec2 &CursorRel);
306 vec2 m_MouseAxisInitialPos = vec2(0.0f, 0.0f);
307 enum class EAxisLock
309 START,
310 NONE,
312 VERTICAL,
314
320 float m_LastAutosaveUpdateTime = -1.0f;
321 void HandleAutosave();
323
324 // TODO: The name of the ShowFileDialogError function is not accurate anymore, this is used for generic error messages.
325 // Popups in UI should be shared_ptrs to make this even more generic.
327 {
328 public:
329 bool operator()(const char *pLhs, const char *pRhs) const;
330 };
331 std::map<const char *, CUi::SMessagePopupContext *, CStringKeyComparator> m_PopupMessageContexts;
332 [[gnu::format(printf, 2, 3)]] void ShowFileDialogError(const char *pFormat, ...);
333
334 void Reset(bool CreateDefault = true);
335 bool Save(const char *pFilename) override;
336 bool Load(const char *pFilename, int StorageType) override;
337 bool HandleMapDrop(const char *pFilename, int StorageType) override;
338 void LoadCurrentMap();
339 void Render();
340
341 void RenderPressedKeys(CUIRect View);
344 void UpdateColorPipette();
345 void RenderMousePointer();
346 void RenderIngameEntities(const CLayerGroup &Group, const CLayerTiles &TilesLayer);
347
348 template<typename E>
349 SEditResult<E> DoPropertiesWithState(CUIRect *pToolbox, CProperty *pProps, int *pIds, int *pNewVal, const std::vector<ColorRGBA> &vColors = {});
350 int DoProperties(CUIRect *pToolbox, CProperty *pProps, int *pIds, int *pNewVal, const std::vector<ColorRGBA> &vColors = {});
351
353 const void *m_pColorPickerPopupActiveId = nullptr;
354 void DoColorPickerButton(const void *pId, const CUIRect *pRect, ColorRGBA Color, const std::function<void(ColorRGBA Color)> &SetColor);
355
356 int m_Mode;
357 int m_Dialog;
358 char m_aTooltip[256] = "";
359
361
366
367 enum
369 POPEVENT_EXIT = 0,
388 };
389
395
396 enum class EUnusedEntities
397 {
398 ALLOWED_IMPLICIT = -1,
399 NOT_ALLOWED = 0,
401 };
403 bool IsAllowPlaceUnusedTiles() const;
404
406
407 int m_Mentions = 0;
408 bool m_IngameMoved = false;
409
411
412 std::vector<std::string> m_vSelectEntitiesFiles;
413 std::string m_SelectEntitiesImage;
414
415 // Zooming
418
420
421 float m_OffsetEnvelopeX;
422 float m_OffsetEnvelopeY;
423
425 bool m_GuiActive;
426
427 bool m_PreviewZoom;
428 float m_MouseWorldScale = 1.0f; // Mouse (i.e. UI) scale relative to the World (selected Group)
429 vec2 m_MouseWorldPos = vec2(0.0f, 0.0f);
430 vec2 m_MouseWorldNoParaPos = vec2(0.0f, 0.0f);
431 vec2 m_MouseDeltaWorld = vec2(0.0f, 0.0f);
432 const void *m_pContainerPanned;
433 const void *m_pContainerPannedLast;
434 char m_MapEditorId; // UI element ID for the main map editor
435
436 enum EShowTile
437 {
441 };
443 bool m_ShowDetail;
444
445 bool m_Animate;
446 int64_t m_AnimateStart;
447 float m_AnimateTime;
448 float m_AnimateSpeed;
450
451 enum EExtraEditor
452 {
453 EXTRAEDITOR_NONE = -1,
458 };
460 float m_aExtraEditorSplits[NUM_EXTRAEDITORS] = {250.0f, 250.0f, 250.0f};
461 float m_ToolBoxWidth = 100.0f;
462
463 bool m_ShowEnvelopePreview = false;
464 enum class EEnvelopePreview
465 {
466 NONE,
467 SELECTED,
468 ALL,
469 };
472 {
473 NONE = 0,
474 MOVE,
475 ROTATE,
476 };
478
479 bool m_ShowPicker;
480
481 // Color palette and pipette
482 ColorRGBA m_aSavedColors[8];
483 ColorRGBA m_PipetteColor = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f);
484 bool m_ColorPipetteActive = false;
485
486 IGraphics::CTextureHandle m_CheckerTexture;
487
488 enum ECursorType
489 {
494 };
495 IGraphics::CTextureHandle m_aCursorTextures[ECursorType::NUM_CURSORS];
497
498 IGraphics::CTextureHandle GetEntitiesTexture();
499
500 std::shared_ptr<CLayerGroup> m_pBrush;
501 std::shared_ptr<CLayerTiles> m_pTilesetPicker;
502 std::shared_ptr<CLayerQuads> m_pQuadsetPicker;
503
504 const void *m_pUiGotContext = nullptr;
505
506 std::deque<std::shared_ptr<CDataFileWriterFinishJob>> m_WriterFinishJobs;
507
508 void EnvelopeEval(int TimeOffsetMillis, int EnvelopeIndex, ColorRGBA &Result, size_t Channels) override;
509
510 CLineInputBuffered<256> m_SettingsCommandInput;
511 CMapSettingsBackend m_MapSettingsBackend;
512 CMapSettingsBackend::CContext m_MapSettingsCommandContext;
513
514 // editor_ui.cpp
515 void UpdateTooltip(const void *pId, const CUIRect *pRect, const char *pToolTip);
516 ColorRGBA GetButtonColor(const void *pId, int Checked);
517 int DoButtonLogic(const void *pId, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip);
518 int DoButton_Editor(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip);
519 int DoButton_Env(const void *pId, const char *pText, int Checked, const CUIRect *pRect, const char *pToolTip, ColorRGBA Color, int Corners);
520 int DoButton_Ex(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip, int Corners, float FontSize = EditorFontSizes::MENU, int Align = TEXTALIGN_MC);
521 int DoButton_FontIcon(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip, int Corners, float FontSize = 10.0f);
522 int DoButton_MenuItem(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags = BUTTONFLAG_LEFT, const char *pToolTip = nullptr);
523 int DoButton_DraggableEx(const void *pId, const char *pText, int Checked, const CUIRect *pRect, bool *pClicked, bool *pAbrupted, int Flags, const char *pToolTip = nullptr, int Corners = IGraphics::CORNER_ALL, float FontSize = 10.0f);
524 bool DoEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners = IGraphics::CORNER_ALL, const char *pToolTip = nullptr, const std::vector<STextColorSplit> &vColorSplits = {});
525 bool DoClearableEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners = IGraphics::CORNER_ALL, const char *pToolTip = nullptr, const std::vector<STextColorSplit> &vColorSplits = {});
526 SEditResult<int> UiDoValueSelector(const void *pId, CUIRect *pRect, const char *pLabel, int Current, int Min, int Max, int Step, float Scale, const char *pToolTip, bool IsDegree = false, bool IsHex = false, int Corners = IGraphics::CORNER_ALL, const ColorRGBA *pColor = nullptr, bool ShowValue = true);
527 void RenderBackground(CUIRect View, IGraphics::CTextureHandle Texture, float Size, float Brightness) const;
528
529 // editor_server_settings.cpp
530 void DoMapSettingsEditBox(CMapSettingsBackend::CContext *pContext, const CUIRect *pRect, float FontSize, float DropdownMaxHeight, int Corners = IGraphics::CORNER_ALL, const char *pToolTip = nullptr);
531 template<typename T>
532 int DoEditBoxDropdown(SEditBoxDropdownContext *pDropdown, CLineInput *pLineInput, const CUIRect *pEditBoxRect, int x, float MaxHeight, bool AutoWidth, const std::vector<T> &vData, const FDropdownRenderCallback<T> &pfnMatchCallback);
533 template<typename T>
534 int RenderEditBoxDropdown(SEditBoxDropdownContext *pDropdown, CUIRect View, CLineInput *pLineInput, int x, float MaxHeight, bool AutoWidth, const std::vector<T> &vData, const FDropdownRenderCallback<T> &pfnMatchCallback);
535
536 // For tile art popups
537 CImageInfo m_TileArtImageInfo;
539 void TileArtCheckColors();
540
541 // For quad art popups
542 CImageInfo m_QuadArtImageInfo;
543 CQuadArtParameters m_QuadArtParameters;
544
545 static CUi::EPopupMenuFunctionResult PopupMenuFile(void *pContext, CUIRect View, bool Active);
546 static CUi::EPopupMenuFunctionResult PopupMenuTools(void *pContext, CUIRect View, bool Active);
547 static CUi::EPopupMenuFunctionResult PopupMenuSettings(void *pContext, CUIRect View, bool Active);
548 static CUi::EPopupMenuFunctionResult PopupGroup(void *pContext, CUIRect View, bool Active);
549 struct SLayerPopupContext : public SPopupMenuId
550 {
552 std::vector<std::shared_ptr<CLayerTiles>> m_vpLayers;
553 std::vector<int> m_vLayerIndices;
554 CLayerTiles::SCommonPropState m_CommonPropState;
555 };
556 static CUi::EPopupMenuFunctionResult PopupLayer(void *pContext, CUIRect View, bool Active);
557 class CQuadPopupContext : public SPopupMenuId
558 {
559 public:
562 int m_Color;
563 };
565 static CUi::EPopupMenuFunctionResult PopupQuad(void *pContext, CUIRect View, bool Active);
566 static CUi::EPopupMenuFunctionResult PopupSource(void *pContext, CUIRect View, bool Active);
567 class CPointPopupContext : public SPopupMenuId
568 {
569 public:
573 };
575 static CUi::EPopupMenuFunctionResult PopupPoint(void *pContext, CUIRect View, bool Active);
576 static CUi::EPopupMenuFunctionResult PopupEnvPoint(void *pContext, CUIRect View, bool Active);
577 static CUi::EPopupMenuFunctionResult PopupEnvPointMulti(void *pContext, CUIRect View, bool Active);
578 static CUi::EPopupMenuFunctionResult PopupEnvPointCurveType(void *pContext, CUIRect View, bool Active);
579 static CUi::EPopupMenuFunctionResult PopupImage(void *pContext, CUIRect View, bool Active);
580 static CUi::EPopupMenuFunctionResult PopupSound(void *pContext, CUIRect View, bool Active);
581 static CUi::EPopupMenuFunctionResult PopupMapInfo(void *pContext, CUIRect View, bool Active);
582 static CUi::EPopupMenuFunctionResult PopupEvent(void *pContext, CUIRect View, bool Active);
583 static CUi::EPopupMenuFunctionResult PopupSelectImage(void *pContext, CUIRect View, bool Active);
584 static CUi::EPopupMenuFunctionResult PopupSelectSound(void *pContext, CUIRect View, bool Active);
585 static CUi::EPopupMenuFunctionResult PopupSelectGametileOp(void *pContext, CUIRect View, bool Active);
586 static CUi::EPopupMenuFunctionResult PopupSelectConfigAutoMap(void *pContext, CUIRect View, bool Active);
587 static CUi::EPopupMenuFunctionResult PopupSelectAutoMapReference(void *pContext, CUIRect View, bool Active);
588 static CUi::EPopupMenuFunctionResult PopupTele(void *pContext, CUIRect View, bool Active);
589 static CUi::EPopupMenuFunctionResult PopupSpeedup(void *pContext, CUIRect View, bool Active);
590 static CUi::EPopupMenuFunctionResult PopupSwitch(void *pContext, CUIRect View, bool Active);
591 static CUi::EPopupMenuFunctionResult PopupTune(void *pContext, CUIRect View, bool Active);
592 static CUi::EPopupMenuFunctionResult PopupGoto(void *pContext, CUIRect View, bool Active);
593 static CUi::EPopupMenuFunctionResult PopupEntities(void *pContext, CUIRect View, bool Active);
594 static CUi::EPopupMenuFunctionResult PopupProofMode(void *pContext, CUIRect View, bool Active);
595 static CUi::EPopupMenuFunctionResult PopupAnimateSettings(void *pContext, CUIRect View, bool Active);
597 static CUi::EPopupMenuFunctionResult PopupEnvelopeCurvetype(void *pContext, CUIRect View, bool Active);
598 static CUi::EPopupMenuFunctionResult PopupQuadArt(void *pContext, CUIRect View, bool Active);
599
600 static bool CallbackOpenMap(const char *pFilename, int StorageType, void *pUser);
601 static bool CallbackAppendMap(const char *pFilename, int StorageType, void *pUser);
602 static bool CallbackSaveMap(const char *pFilename, int StorageType, void *pUser);
603 static bool CallbackSaveCopyMap(const char *pFilename, int StorageType, void *pUser);
604 static bool CallbackAddTileArt(const char *pFilepath, int StorageType, void *pUser);
605 static bool CallbackAddQuadArt(const char *pFilepath, int StorageType, void *pUser);
606 static bool CallbackSaveImage(const char *pFilename, int StorageType, void *pUser);
607 static bool CallbackSaveSound(const char *pFilename, int StorageType, void *pUser);
608 static bool CallbackCustomEntities(const char *pFilename, int StorageType, void *pUser);
609
610 void PopupSelectImageInvoke(int Current, float x, float y);
612
613 void PopupSelectGametileOpInvoke(float x, float y);
615
616 void PopupSelectConfigAutoMapInvoke(int Current, float x, float y);
618
619 void PopupSelectSoundInvoke(int Current, float x, float y);
621
622 void PopupSelectAutoMapReferenceInvoke(int Current, float x, float y);
624
625 void DoQuadEnvelopes(const CLayerQuads *pLayerQuads);
626 void DoQuadEnvPoint(const CQuad *pQuad, CEnvelope *pEnvelope, int QuadIndex, int PointIndex);
627 void DoQuadPoint(int LayerIndex, const std::shared_ptr<CLayerQuads> &pLayer, CQuad *pQuad, int QuadIndex, int v);
628 void UpdateHotQuadPoint(const CLayerQuads *pLayer);
629
630 float TriangleArea(vec2 A, vec2 B, vec2 C);
631 bool IsInTriangle(vec2 Point, vec2 A, vec2 B, vec2 C);
632 void DoQuadKnife(int QuadIndex);
633
634 void DoSoundSource(int LayerIndex, CSoundSource *pSource, int Index);
635 void UpdateHotSoundSource(const CLayerSounds *pLayer);
636
637 enum class EAxis
638 {
639 NONE = 0,
640 X,
641 Y,
642 };
644 {
645 enum
646 {
647 POINT_TL = 0,
648 POINT_TR,
649 POINT_BL,
650 POINT_BR,
653 };
655 };
656 void DoMapEditor(CUIRect View);
657 void DoToolbarLayers(CUIRect Toolbar);
658 void DoToolbarImages(CUIRect Toolbar);
659 void DoToolbarSounds(CUIRect Toolbar);
660 void DoQuad(int LayerIndex, const std::shared_ptr<CLayerQuads> &pLayer, CQuad *pQuad, int Index);
661 void PreparePointDrag(const CQuad *pQuad, int QuadIndex, int PointIndex);
662 void DoPointDrag(CQuad *pQuad, int QuadIndex, int PointIndex, ivec2 Offset);
663 EAxis GetDragAxis(ivec2 Offset) const;
664 void DrawAxis(EAxis Axis, CPoint &OriginalPoint, CPoint &Point) const;
665 void DrawAABB(const SAxisAlignedBoundingBox &AABB, ivec2 Offset) const;
666
667 // Alignment methods
668 // These methods take `OffsetX` and `OffsetY` because the calculations are made with the original positions
669 // of the quad(s), before we started dragging. This allows us to edit `OffsetX` and `OffsetY` based on the previously
670 // calculated alignments.
671 struct SAlignmentInfo
672 {
673 CPoint m_AlignedPoint; // The "aligned" point, which we want to align/snap to
674 union
675 {
676 // The current changing value when aligned to this point. When aligning to a point on the X axis, then the X value is changing because
677 // we aligned the Y values (X axis aligned => Y values are the same, Y axis aligned => X values are the same).
678 int m_X;
679 int m_Y;
680 };
681 EAxis m_Axis; // The axis we are aligning on
682 int m_PointIndex; // The point index we are aligning
683 int m_Diff; // Store the difference
684 };
685 void ComputePointAlignments(const std::shared_ptr<CLayerQuads> &pLayer, CQuad *pQuad, int QuadIndex, int PointIndex, ivec2 Offset, std::vector<SAlignmentInfo> &vAlignments, bool Append = false) const;
686 void ComputePointsAlignments(const std::shared_ptr<CLayerQuads> &pLayer, bool Pivot, ivec2 Offset, std::vector<SAlignmentInfo> &vAlignments) const;
687 void ComputeAABBAlignments(const std::shared_ptr<CLayerQuads> &pLayer, const SAxisAlignedBoundingBox &AABB, ivec2 Offset, std::vector<SAlignmentInfo> &vAlignments) const;
688 void DrawPointAlignments(const std::vector<SAlignmentInfo> &vAlignments, ivec2 Offset) const;
689 void QuadSelectionAABB(const std::shared_ptr<CLayerQuads> &pLayer, SAxisAlignedBoundingBox &OutAABB);
690 void ApplyAlignments(const std::vector<SAlignmentInfo> &vAlignments, ivec2 &Offset);
691 void ApplyAxisAlignment(ivec2 &Offset) const;
693 bool ReplaceImage(const char *pFilename, int StorageType, bool CheckDuplicate);
694 static bool ReplaceImageCallback(const char *pFilename, int StorageType, void *pUser);
695 bool ReplaceSound(const char *pFilename, int StorageType, bool CheckDuplicate);
696 static bool ReplaceSoundCallback(const char *pFilename, int StorageType, void *pUser);
697 static bool AddImage(const char *pFilename, int StorageType, void *pUser);
698 static bool AddSound(const char *pFilename, int StorageType, void *pUser);
699
700 static bool IsVanillaImage(const char *pImage);
701
708 };
709 class CRenderLayersState
710 {
711 public:
720 std::vector<int> m_vInitialLayerIndices;
721 const char m_AddGroupButtonId = 0;
722 const char m_CollapseAllButtonId = 0;
723 const SPopupMenuId m_PopupGroupId = {};
724 SLayerPopupContext m_LayerPopupContext;
726 void Reset();
727 };
728 CRenderLayersState m_RenderLayersState;
729 void RenderLayers(CUIRect LayersBox);
730
732 void RenderSelectedImage(CUIRect View) const;
733 void RenderSounds(CUIRect Toolbox);
734 void RenderModebar(CUIRect View);
735 void RenderStatusbar(CUIRect View, CUIRect *pTooltipRect);
736 void RenderTooltip(CUIRect TooltipRect);
737
738 void RenderEnvelopeEditor(CUIRect View);
739 void RenderEnvelopeEditorColorBar(CUIRect ColorBar, const std::shared_ptr<CEnvelope> &pEnvelope);
740
742 void RenderServerSettingsEditor(CUIRect View, bool ShowServerSettingsEditorLast);
743 static void MapSettingsDropdownRenderCallback(const SPossibleValueMatch &Match, char (&aOutput)[128], std::vector<STextColorSplit> &vColorSplits);
744
745 void RenderEditorHistory(CUIRect View);
746
747 enum class EDragSide // Which side is the drag bar on
748 {
749 BOTTOM,
750 LEFT,
751 TOP,
752 RIGHT,
753 };
754 void DoEditorDragBar(CUIRect View, CUIRect *pDragBar, EDragSide Side, float *pValue, float MinValue = 100.0f, float MaxValue = 400.0f);
755
756 void UpdateHotEnvelopePoint(const CUIRect &View, const CEnvelope *pEnvelope, int ActiveChannels);
758 void RenderMenubar(CUIRect Menubar);
759 void ShowHelp();
760
761 void DoAudioPreview(CUIRect View, const void *pPlayPauseButtonId, const void *pStopButtonId, const void *pSeekBarId, int SampleId);
763 // Zooming
764 void ZoomAdaptOffsetX(float ZoomFactor, const CUIRect &View);
765 void UpdateZoomEnvelopeX(const CUIRect &View);
766
767 void ZoomAdaptOffsetY(float ZoomFactor, const CUIRect &View);
768 void UpdateZoomEnvelopeY(const CUIRect &View);
769
770 void ResetZoomEnvelope(const std::shared_ptr<CEnvelope> &pEnvelope, int ActiveChannels);
771 void RemoveTimeOffsetEnvelope(const std::shared_ptr<CEnvelope> &pEnvelope);
772 float ScreenToEnvelopeX(const CUIRect &View, float x) const;
773 float EnvelopeToScreenX(const CUIRect &View, float x) const;
774 float ScreenToEnvelopeY(const CUIRect &View, float y) const;
775 float EnvelopeToScreenY(const CUIRect &View, float y) const;
776 float ScreenToEnvelopeDX(const CUIRect &View, float DeltaX);
777 float ScreenToEnvelopeDY(const CUIRect &View, float DeltaY);
779 // DDRace
787 unsigned char m_TeleNumber;
789 unsigned char m_ViewTeleNumber;
791 unsigned char m_TuningNumber;
792 unsigned char m_ViewTuning;
793
794 unsigned char m_SpeedupForce;
795 unsigned char m_SpeedupMaxSpeed;
798 unsigned char m_SwitchNumber;
799 unsigned char m_SwitchDelay;
800 unsigned char m_ViewSwitch;
802 void AdjustBrushSpecialTiles(bool UseNextFree, int Adjust = 0);
804private:
806
808
809 std::map<int, CPoint[5]> m_QuadDragOriginalPoints;
811
812#endif
Definition config.h:30
Definition editor_history.h:13
Definition map.h:56
bool m_Modified
Definition map.h:86
CHoverTile(int Group, int Layer, int x, int y, const CTile Tile)
Definition editor.h:677
int m_Layer
Definition editor.h:687
const CTile m_Tile
Definition editor.h:690
int m_Group
Definition editor.h:686
int m_X
Definition editor.h:688
int m_Y
Definition editor.h:689
Definition editor.h:973
CEditor * m_pEditor
Definition editor.h:975
int m_SelectedQuadIndex
Definition editor.h:977
int m_SelectedQuadPoint
Definition editor.h:976
Definition editor.h:963
int m_Color
Definition editor.h:967
int m_SelectedQuadIndex
Definition editor.h:966
CEditor * m_pEditor
Definition editor.h:965
float m_InitialCutHeight
Definition editor.h:1122
void Reset()
Definition editor.cpp:3054
const char m_CollapseAllButtonId
Definition editor.h:1127
const char m_AddGroupButtonId
Definition editor.h:1126
const SPopupMenuId m_PopupGroupId
Definition editor.h:1128
ELayerOperation m_Operation
Definition editor.h:1118
bool m_ScrollToSelectionNext
Definition editor.h:1123
CScrollRegion m_ScrollRegion
Definition editor.h:1117
float m_InitialMouseY
Definition editor.h:1121
SLayerPopupContext m_LayerPopupContext
Definition editor.h:1129
int m_InitialGroupIndex
Definition editor.h:1124
std::vector< int > m_vInitialLayerIndices
Definition editor.h:1125
ELayerOperation m_PreviousOperation
Definition editor.h:1119
const void * m_pDraggedButton
Definition editor.h:1120
Definition editor.h:732
bool operator()(const char *pLhs, const char *pRhs) const
Definition editor.cpp:4185
IGraphics::CTextureHandle GetSpeedupTexture()
Definition editor.cpp:7035
unsigned char m_SpeedupForce
Definition editor.h:1199
static CUi::EPopupMenuFunctionResult PopupSelectImage(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2239
class IStorage * m_pStorage
Definition editor.h:118
static CUi::EPopupMenuFunctionResult PopupMenuFile(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:23
CEditorMap m_Map
Definition editor.h:1210
void OnClose() override
Definition editor.cpp:7423
int DoButton_DraggableEx(const void *pId, const char *pText, int Checked, const CUIRect *pRect, bool *pClicked, bool *pAbrupted, int Flags, const char *pToolTip=nullptr, int Corners=IGraphics::CORNER_ALL, float FontSize=10.0f)
Definition editor_ui.cpp:152
void DoColorPickerButton(const void *pId, const CUIRect *pRect, ColorRGBA Color, const std::function< void(ColorRGBA Color)> &SetColor)
Definition editor.cpp:2987
int DoButton_Env(const void *pId, const char *pText, int Checked, const CUIRect *pRect, const char *pToolTip, ColorRGBA Color, int Corners)
Definition editor_ui.cpp:92
int PopupSelectGameTileOpResult()
Definition popups.cpp:2416
EEnvelopePreview m_ActiveEnvelopePreview
Definition editor.h:875
bool m_ShowMousePointer
Definition editor.h:829
int m_ToolbarPreviewSound
Definition editor.h:815
void ZoomAdaptOffsetY(float ZoomFactor, const CUIRect &View)
Definition editor.cpp:4339
void RenderPressedKeys(CUIRect View)
Definition editor.cpp:6614
static CUi::EPopupMenuFunctionResult PopupLayer(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:746
bool IsNonGameTileLayerSelected() const
Definition quick_actions.cpp:142
void DoMapSettingsEditBox(CMapSettingsBackend::CContext *pContext, const CUIRect *pRect, float FontSize, float DropdownMaxHeight, int Corners=IGraphics::CORNER_ALL, const char *pToolTip=nullptr)
Definition editor_server_settings.cpp:290
void DoMapEditor(CUIRect View)
Definition editor.cpp:2346
CPrompt m_Prompt
Definition editor.h:126
int RenderEditBoxDropdown(SEditBoxDropdownContext *pDropdown, CUIRect View, CLineInput *pLineInput, int x, float MaxHeight, bool AutoWidth, const std::vector< T > &vData, const FDropdownRenderCallback< T > &pfnMatchCallback)
Definition editor_server_settings.cpp:463
void TestMapLocally()
Definition quick_actions.cpp:218
bool m_IngameMoved
Definition editor.h:813
EUnusedEntities
Definition editor.h:802
@ NOT_ALLOWED
Definition editor.h:804
@ ALLOWED_IMPLICIT
Definition editor.h:803
@ ALLOWED_EXPLICIT
Definition editor.h:805
IGraphics::CTextureHandle GetFrontTexture()
Definition editor.cpp:7021
EAxisLock
Definition editor.h:713
@ VERTICAL
Definition editor.h:717
@ HORIZONTAL
Definition editor.h:716
@ START
Definition editor.h:714
@ NONE
Definition editor.h:715
bool m_BrushColorEnabled
Definition editor.h:765
const void * m_pUiGotContext
Definition editor.h:909
float m_AnimateSpeed
Definition editor.h:853
void PreparePointDrag(const CQuad *pQuad, int QuadIndex, int PointIndex)
Definition editor.cpp:874
void UpdateHotQuadPoint(const CLayerQuads *pLayer)
Definition editor.cpp:2940
bool m_EditorWasUsedBefore
Definition editor.h:129
IGraphics::CTextureHandle GetTuneTexture()
Definition editor.cpp:7049
void RenderEnvelopeEditor(CUIRect View)
Definition editor.cpp:4584
static bool ReplaceSoundCallback(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:3959
static CUi::EPopupMenuFunctionResult PopupSource(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1132
CEditorHistory & ActiveHistory()
Definition editor.cpp:7509
CMapSettingsBackend::CContext m_MapSettingsCommandContext
Definition editor.h:917
bool HasUnsavedData() const override
Definition editor.h:702
static bool CallbackOpenMap(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:98
std::shared_ptr< CLayerTiles > m_pTilesetPicker
Definition editor.h:906
IGraphics::CTextureHandle m_FrontTexture
Definition editor.h:133
int DoButton_Editor(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip)
Definition editor_ui.cpp:83
unsigned char m_ViewSwitch
Definition editor.h:1205
void DeleteSelectedLayer()
Definition quick_actions.cpp:193
CLayerSelector m_LayerSelector
Definition editor.h:124
void DoQuadPoint(int LayerIndex, const std::shared_ptr< CLayerQuads > &pLayer, CQuad *pQuad, int QuadIndex, int v)
Definition editor.cpp:1650
void RenderMousePointer()
Definition editor.cpp:6723
void AddGroup()
Definition quick_actions.cpp:50
vec2 m_MouseDeltaWorld
Definition editor.h:836
void Init() override
Definition editor.cpp:7063
static CUi::EPopupMenuFunctionResult PopupGoto(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2917
bool m_ShowPicker
Definition editor.h:884
void ComputePointsAlignments(const std::shared_ptr< CLayerQuads > &pLayer, bool Pivot, ivec2 Offset, std::vector< SAlignmentInfo > &vAlignments) const
Definition editor.cpp:1038
std::vector< CHoverTile > m_vHoverTiles
Definition editor.h:692
void UpdateHotEnvelopePoint(const CUIRect &View, const CEnvelope *pEnvelope, int ActiveChannels)
Definition editor.cpp:4529
void OnUpdate() override
Definition editor.cpp:7313
void PopupSelectImageInvoke(int Current, float x, float y)
Definition popups.cpp:2300
static CUi::EPopupMenuFunctionResult PopupSwitch(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2718
const void * m_pContainerPannedLast
Definition editor.h:838
unsigned char m_SpeedupMaxSpeed
Definition editor.h:1200
float ScreenToEnvelopeDX(const CUIRect &View, float DeltaX)
Definition editor.cpp:4426
bool Save(const char *pFilename) override
Definition editor.cpp:7457
IGraphics::CTextureHandle m_TuneTexture
Definition editor.h:137
CUi * Ui()
Definition editor.h:161
vec2 m_MouseWorldNoParaPos
Definition editor.h:835
float m_ToolBoxWidth
Definition editor.h:866
void RenderMenubar(CUIRect Menubar)
Definition editor.cpp:6192
IGraphics::CTextureHandle GetEntitiesTexture()
Definition editor.cpp:7056
IGraphics::CTextureHandle GetTeleTexture()
Definition editor.cpp:7028
static bool CallbackAddQuadArt(const char *pFilepath, int StorageType, void *pUser)
Definition quad_art.cpp:198
bool m_GuiActive
Definition editor.h:830
ELayerOperation
Definition editor.h:1108
@ CLICK
Definition editor.h:1110
@ GROUP_DRAG
Definition editor.h:1112
@ LAYER_DRAG
Definition editor.h:1111
void DoPointDrag(CQuad *pQuad, int QuadIndex, int PointIndex, ivec2 Offset)
Definition editor.cpp:879
int DoProperties(CUIRect *pToolbox, CProperty *pProps, int *pIds, int *pNewVal, const std::vector< ColorRGBA > &vColors={})
Definition editor_props.cpp:9
void AddSoundLayer()
Definition quick_actions.cpp:57
unsigned char m_TeleCheckpointNumber
Definition editor.h:1193
CImageInfo m_TileArtImageInfo
Definition editor.h:942
int m_PopupEventActivated
Definition editor.h:796
bool m_LargeLayerWasWarned
Definition editor.h:798
void DoEditorDragBar(CUIRect View, CUIRect *pDragBar, EDragSide Side, float *pValue, float MinValue=100.0f, float MaxValue=400.0f)
Definition editor.cpp:6138
class ITextRender * TextRender() const
Definition editor.h:159
void HandleCursorMovement()
Definition editor.cpp:7109
void OnRender() override
Definition editor.cpp:7367
static bool CallbackCustomEntities(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:232
@ POPEVENT_REMOVE_USED_IMAGE
Definition editor.h:789
@ POPEVENT_TILE_ART_BIG_IMAGE
Definition editor.h:785
@ POPEVENT_IMAGE_MAX
Definition editor.h:782
@ POPEVENT_TILE_ART_TOO_MANY_COLORS
Definition editor.h:787
@ POPEVENT_LOAD
Definition editor.h:775
@ POPEVENT_LARGELAYER
Definition editor.h:779
@ POPEVENT_TILE_ART_MANY_COLORS
Definition editor.h:786
@ POPEVENT_RESTART_SERVER
Definition editor.h:791
@ POPEVENT_EXIT
Definition editor.h:774
@ POPEVENT_SOUND_MAX
Definition editor.h:783
@ POPEVENT_RESTARTING_SERVER
Definition editor.h:792
@ POPEVENT_LOADCURRENT
Definition editor.h:776
@ POPEVENT_QUAD_ART_BIG_IMAGE
Definition editor.h:788
@ POPEVENT_REMOVE_USED_SOUND
Definition editor.h:790
@ POPEVENT_NEW
Definition editor.h:778
@ POPEVENT_PREVENTUNUSEDTILES
Definition editor.h:780
@ POPEVENT_PLACE_BORDER_TILES
Definition editor.h:784
@ POPEVENT_LOADDROP
Definition editor.h:777
@ POPEVENT_IMAGEDIV16
Definition editor.h:781
std::map< int, CPoint[5]> m_QuadDragOriginalPoints
Definition editor.h:1214
static bool CallbackAppendMap(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:117
void LayerSelectImage()
Definition quick_actions.cpp:161
void DoToolbarLayers(CUIRect Toolbar)
Definition editor.cpp:350
CUi::SColorPickerPopupContext m_ColorPickerPopupContext
Definition editor.h:757
void ResetZoomEnvelope(const std::shared_ptr< CEnvelope > &pEnvelope, int ActiveChannels)
Definition editor.cpp:4352
bool m_Animate
Definition editor.h:850
static CUi::EPopupMenuFunctionResult PopupEntities(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2961
class IConfigManager * ConfigManager() const
Definition editor.h:154
void ShowFileDialogError(const char *pFormat,...)
Definition editor.cpp:4190
void EnvelopeEval(int TimeOffsetMillis, int EnvelopeIndex, ColorRGBA &Result, size_t Channels) override
Definition editor.cpp:86
int DoButton_MenuItem(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags=BUTTONFLAG_LEFT, const char *pToolTip=nullptr)
Definition editor_ui.cpp:132
int PopupSelectAutoMapReferenceResult()
Definition popups.cpp:2535
static bool CallbackSaveMap(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:136
static bool CallbackSaveCopyMap(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:174
void PopupSelectGametileOpInvoke(float x, float y)
Definition popups.cpp:2409
EAxis
Definition editor.h:1043
@ X
Definition editor.h:1045
@ Y
Definition editor.h:1046
static CUi::EPopupMenuFunctionResult PopupEnvPointMulti(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1572
static CUi::EPopupMenuFunctionResult PopupAnimateSettings(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:3023
CPointPopupContext m_PointPopupContext
Definition editor.h:979
static CUi::EPopupMenuFunctionResult PopupTune(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2821
static CUi::EPopupMenuFunctionResult PopupEnvPointCurveType(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1589
CQuadPopupContext m_QuadPopupContext
Definition editor.h:969
const CMapView * MapView() const
Definition editor.h:167
void PopupSelectConfigAutoMapInvoke(int Current, float x, float y)
Definition popups.cpp:2466
float m_LastAutosaveUpdateTime
Definition editor.h:725
const std::vector< CHoverTile > & HoverTiles() const
Definition editor.h:693
CFontTyper m_FontTyper
Definition editor.h:127
float TriangleArea(vec2 A, vec2 B, vec2 C)
Definition editor.cpp:1861
static constexpr ColorRGBA ms_DefaultPropColor
Definition editor.h:149
static CUi::EPopupMenuFunctionResult PopupSpeedup(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2678
unsigned char m_TeleNumber
Definition editor.h:1192
bool IsAllowPlaceUnusedTiles() const
Definition editor.cpp:3048
void AddTeleLayer()
Definition quick_actions.cpp:131
IGraphics::CTextureHandle m_aCursorTextures[ECursorType::NUM_CURSORS]
Definition editor.h:900
bool ReplaceImage(const char *pFilename, int StorageType, bool CheckDuplicate)
Definition editor.cpp:3742
CRenderLayersState m_RenderLayersState
Definition editor.h:1133
std::shared_ptr< CLayerGroup > m_pBrush
Definition editor.h:905
unsigned char m_SwitchNumber
Definition editor.h:1203
void HandleAutosave()
Definition editor.cpp:7244
void UpdateColorPipette()
Definition editor.cpp:6671
static bool ReplaceImageCallback(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:3790
void DoToolbarSounds(CUIRect Toolbar)
Definition editor.cpp:722
void DoToolbarImages(CUIRect Toolbar)
Definition editor.cpp:708
void RenderBackground(CUIRect View, IGraphics::CTextureHandle Texture, float Size, float Brightness) const
Definition editor_ui.cpp:324
EShowTile
Definition editor.h:842
@ SHOW_TILE_DECIMAL
Definition editor.h:844
@ SHOW_TILE_OFF
Definition editor.h:843
@ SHOW_TILE_HEXADECIMAL
Definition editor.h:845
void AddFrontLayer()
Definition quick_actions.cpp:98
CSmoothValue m_ZoomEnvelopeY
Definition editor.h:822
int m_Mode
Definition editor.h:761
ColorRGBA m_PipetteColor
Definition editor.h:888
static CUi::EPopupMenuFunctionResult PopupEnvPoint(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1402
class IEngine * m_pEngine
Definition editor.h:114
EShowTile m_ShowTileInfo
Definition editor.h:847
char m_MapEditorId
Definition editor.h:839
IGraphics::CTextureHandle m_CheckerTexture
Definition editor.h:891
CLineInputBuffered< 256 > m_SettingsCommandInput
Definition editor.h:915
void DoQuadKnife(int QuadIndex)
Definition editor.cpp:1887
static void MapSettingsDropdownRenderCallback(const SPossibleValueMatch &Match, char(&aOutput)[128], std::vector< STextColorSplit > &vColorSplits)
Definition editor_server_settings.cpp:1017
bool HandleMapDrop(const char *pFilename, int StorageType) override
Definition editor.cpp:7474
void RenderModebar(CUIRect View)
Definition editor.cpp:4215
ECursorType m_CursorType
Definition editor.h:901
IGraphics::CTextureHandle m_SpeedupTexture
Definition editor.h:135
void AddQuadsLayer()
Definition quick_actions.cpp:77
int DoEditBoxDropdown(SEditBoxDropdownContext *pDropdown, CLineInput *pLineInput, const CUIRect *pEditBoxRect, int x, float MaxHeight, bool AutoWidth, const std::vector< T > &vData, const FDropdownRenderCallback< T > &pfnMatchCallback)
Definition editor_server_settings.cpp:402
static CUi::EPopupMenuFunctionResult PopupProofMode(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2998
float EnvelopeToScreenX(const CUIRect &View, float x) const
Definition editor.cpp:4411
void AddSpeedupLayer()
Definition quick_actions.cpp:120
bool m_ShowEnvelopePreview
Definition editor.h:868
void ApplyAxisAlignment(ivec2 &Offset) const
Definition editor.cpp:1318
char m_aTooltip[256]
Definition editor.h:763
int DoButton_Ex(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip, int Corners, float FontSize=EditorFontSizes::MENU, int Align=TEXTALIGN_MC)
Definition editor_ui.cpp:104
class IInput * Input() const
Definition editor.h:152
bool DoEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners=IGraphics::CORNER_ALL, const char *pToolTip=nullptr, const std::vector< STextColorSplit > &vColorSplits={})
Definition editor_ui.cpp:174
CMapSettingsBackend m_MapSettingsBackend
Definition editor.h:916
char m_aFilenamePendingLoad[IO_MAX_PATH_LENGTH]
Definition editor.h:770
void RenderServerSettingsEditor(CUIRect View, bool ShowServerSettingsEditorLast)
Definition editor_server_settings.cpp:56
static CUi::EPopupMenuFunctionResult PopupQuad(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:861
const void * m_pColorPickerPopupActiveId
Definition editor.h:758
class IStorage * Storage() const
Definition editor.h:160
void AdjustBrushSpecialTiles(bool UseNextFree, int Adjust=0)
Definition editor.cpp:7525
vec2 m_MouseWorldPos
Definition editor.h:834
static CUi::EPopupMenuFunctionResult PopupEnvelopeCurvetype(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:3080
float m_OffsetEnvelopeY
Definition editor.h:827
class IGraphics * m_pGraphics
Definition editor.h:115
int PopupSelectConfigAutoMapResult()
Definition popups.cpp:2477
class IClient * m_pClient
Definition editor.h:111
void FreeDynamicPopupMenus()
Definition editor.cpp:6655
static CUi::EPopupMenuFunctionResult PopupImage(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1694
static CUi::EPopupMenuFunctionResult PopupPoint(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1320
static CUi::EPopupMenuFunctionResult PopupQuadArt(void *pContext, CUIRect View, bool Active)
Definition quad_art.cpp:224
void DrawAABB(const SAxisAlignedBoundingBox &AABB, ivec2 Offset) const
Definition editor.cpp:1233
void RenderTooltip(CUIRect TooltipRect)
Definition editor.cpp:4309
std::vector< std::reference_wrapper< CEditorComponent > > m_vComponents
Definition editor.h:122
std::vector< std::string > m_vSelectEntitiesFiles
Definition editor.h:817
static CUi::EPopupMenuFunctionResult PopupSelectSound(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2321
void RenderEnvelopeEditorColorBar(CUIRect ColorBar, const std::shared_ptr< CEnvelope > &pEnvelope)
Definition editor.cpp:5889
void RenderIngameEntities(const CLayerGroup &Group, const CLayerTiles &TilesLayer)
Definition editor.cpp:6782
static bool CallbackSaveImage(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:192
EEnvelopePreview
Definition editor.h:870
@ ALL
Definition editor.h:873
@ NONE
Definition editor.h:871
@ SELECTED
Definition editor.h:872
IGraphics::CTextureHandle m_SwitchTexture
Definition editor.h:136
EExtraEditor m_ActiveExtraEditor
Definition editor.h:864
EPreviewState
Definition editor.h:142
@ PREVIEW_UNLOADED
Definition editor.h:143
@ PREVIEW_ERROR
Definition editor.h:145
@ PREVIEW_LOADED
Definition editor.h:144
static CUi::EPopupMenuFunctionResult PopupGroup(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:484
bool DoClearableEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners=IGraphics::CORNER_ALL, const char *pToolTip=nullptr, const std::vector< STextColorSplit > &vColorSplits={})
Definition editor_ui.cpp:180
static bool AddSound(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:3848
void MapDetails()
Definition quick_actions.cpp:175
int GetTextureUsageFlag() const
Definition editor.cpp:7016
SEditResult< int > UiDoValueSelector(const void *pId, CUIRect *pRect, const char *pLabel, int Current, int Min, int Max, int Step, float Scale, const char *pToolTip, bool IsDegree=false, bool IsHex=false, int Corners=IGraphics::CORNER_ALL, const ColorRGBA *pColor=nullptr, bool ShowValue=true)
Definition editor_ui.cpp:186
int m_PopupEnvelopeSelectedPoint
Definition editor.h:1001
void RenderStatusbar(CUIRect View, CUIRect *pTooltipRect)
Definition editor.cpp:4283
const CEditorMap * Map() const
Definition editor.h:165
void TileArtCheckColors()
Definition tile_art.cpp:172
float ScreenToEnvelopeX(const CUIRect &View, float x) const
Definition editor.cpp:4406
void OnIngameMoved() override
Definition editor.h:705
void QuadSelectionAABB(const std::shared_ptr< CLayerQuads > &pLayer, SAxisAlignedBoundingBox &OutAABB)
Definition editor.cpp:1257
void Reset(bool CreateDefault=true)
Definition editor.cpp:6987
int m_Dialog
Definition editor.h:762
class IClient * Client() const
Definition editor.h:153
void UpdateMentions() override
Definition editor.h:703
void OnActivate() override
Definition editor.cpp:7412
void UpdateHotSoundSource(const CLayerSounds *pLayer)
Definition editor.cpp:847
static bool IsVanillaImage(const char *pImage)
Definition editor.cpp:81
void OnWindowResize() override
Definition editor.cpp:7418
float m_AnimateTime
Definition editor.h:852
bool m_ColorPipetteActive
Definition editor.h:889
bool m_ResetZoomEnvelope
Definition editor.h:824
void RenderSavingIndicator(CUIRect View)
Definition editor.cpp:6637
int DoButtonLogic(const void *pId, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip)
Definition editor_ui.cpp:71
CRenderMap * RenderMap()
Definition editor.h:162
class ISound * Sound() const
Definition editor.h:158
std::shared_ptr< CLayerGroup > m_apSavedBrushes[10]
Definition editor.h:148
class ISound * m_pSound
Definition editor.h:117
void RemoveTimeOffsetEnvelope(const std::shared_ptr< CEnvelope > &pEnvelope)
Definition editor.cpp:4436
const void * m_pContainerPanned
Definition editor.h:837
EDragSide
Definition editor.h:1153
@ BOTTOM
Definition editor.h:1154
@ RIGHT
Definition editor.h:1157
@ TOP
Definition editor.h:1156
@ LEFT
Definition editor.h:1155
float ScreenToEnvelopeY(const CUIRect &View, float y) const
Definition editor.cpp:4416
static CUi::EPopupMenuFunctionResult PopupEvent(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2016
void DoQuad(int LayerIndex, const std::shared_ptr< CLayerQuads > &pLayer, CQuad *pQuad, int Index)
Definition editor.cpp:1340
static bool AddImage(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:3795
bool m_AnimateUpdatePopup
Definition editor.h:854
unsigned char m_TuningNumber
Definition editor.h:1196
int64_t m_AnimateStart
Definition editor.h:851
static CUi::EPopupMenuFunctionResult PopupMapInfo(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1941
void MouseAxisLock(vec2 &CursorRel)
Definition editor.cpp:7204
class ITextRender * m_pTextRender
Definition editor.h:116
int DoButton_FontIcon(const void *pId, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip, int Corners, float FontSize=10.0f)
Definition editor_ui.cpp:119
void DoQuadEnvPoint(const CQuad *pQuad, CEnvelope *pEnvelope, int QuadIndex, int PointIndex)
Definition editor.cpp:2275
void AddTuneLayer()
Definition quick_actions.cpp:109
enum CEditor::EAxisLock m_MouseAxisLockState
void OnMouseMove(vec2 MousePos)
Definition editor.cpp:7156
bool CanFillGameTiles() const
Definition quick_actions.cpp:16
CRenderMap m_RenderMap
Definition editor.h:119
IGraphics::CTextureHandle GetSwitchTexture()
Definition editor.cpp:7042
static CUi::EPopupMenuFunctionResult PopupMenuSettings(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:234
CEditorMap * Map()
Definition editor.h:164
void ComputeAABBAlignments(const std::shared_ptr< CLayerQuads > &pLayer, const SAxisAlignedBoundingBox &AABB, ivec2 Offset, std::vector< SAlignmentInfo > &vAlignments) const
Definition editor.cpp:1099
float EnvelopeToScreenY(const CUIRect &View, float y) const
Definition editor.cpp:4421
static CUi::EPopupMenuFunctionResult PopupTele(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2547
std::string m_SelectEntitiesImage
Definition editor.h:818
class IConfigManager * m_pConfigManager
Definition editor.h:112
CImageInfo m_QuadArtImageInfo
Definition editor.h:947
class CConfig * Config() const
Definition editor.h:155
bool m_BrushDrawDestructive
Definition editor.h:810
class IInput * m_pInput
Definition editor.h:110
void DrawPointAlignments(const std::vector< SAlignmentInfo > &vAlignments, ivec2 Offset) const
Definition editor.cpp:1209
bool m_PreviewZoom
Definition editor.h:832
float m_OffsetEnvelopeX
Definition editor.h:826
void PopupSelectAutoMapReferenceInvoke(int Current, float x, float y)
Definition popups.cpp:2525
void ApplyAlignments(const std::vector< SAlignmentInfo > &vAlignments, ivec2 &Offset)
Definition editor.cpp:1291
void RenderMapSettingsErrorDialog()
Definition editor_server_settings.cpp:547
void AddSwitchLayer()
Definition quick_actions.cpp:87
ColorRGBA GetButtonColor(const void *pId, int Checked)
Definition editor_ui.cpp:16
class IEngine * Engine() const
Definition editor.h:156
int PopupSelectImageResult()
Definition popups.cpp:2308
void UpdateZoomEnvelopeX(const CUIRect &View)
Definition editor.cpp:4332
CMapView * MapView()
Definition editor.h:166
ECursorType
Definition editor.h:894
@ NUM_CURSORS
Definition editor.h:898
@ CURSOR_NORMAL
Definition editor.h:895
@ CURSOR_RESIZE_V
Definition editor.h:896
@ CURSOR_RESIZE_H
Definition editor.h:897
void HandleWriterFinishJobs()
Definition editor.cpp:7280
void Render()
Definition editor.cpp:6285
void ResetIngameMoved() override
Definition editor.h:706
CQuadArtParameters m_QuadArtParameters
Definition editor.h:948
class CConfig * m_pConfig
Definition editor.h:113
CMapView m_MapView
Definition editor.h:123
IGraphics::CTextureHandle m_EntitiesTexture
Definition editor.h:131
static CUi::EPopupMenuFunctionResult PopupSelectAutoMapReference(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2490
bool Load(const char *pFilename, int StorageType) override
Definition editor.cpp:7490
void UpdateZoomEnvelopeY(const CUIRect &View)
Definition editor.cpp:4345
short m_SpeedupAngle
Definition editor.h:1201
static bool CallbackAddTileArt(const char *pFilepath, int StorageType, void *pUser)
Definition tile_art.cpp:194
unsigned char m_ViewTeleNumber
Definition editor.h:1194
void AddQuadOrSound()
Definition quick_actions.cpp:24
void ShowHelp()
Definition editor.cpp:6276
static bool CallbackSaveSound(const char *pFilename, int StorageType, void *pUser)
Definition editor.cpp:212
EExtraEditor
Definition editor.h:857
@ EXTRAEDITOR_ENVELOPES
Definition editor.h:859
@ EXTRAEDITOR_NONE
Definition editor.h:858
@ NUM_EXTRAEDITORS
Definition editor.h:862
@ EXTRAEDITOR_SERVER_SETTINGS
Definition editor.h:860
@ EXTRAEDITOR_HISTORY
Definition editor.h:861
std::shared_ptr< CLayerQuads > m_pQuadsetPicker
Definition editor.h:907
ColorRGBA m_aSavedColors[8]
Definition editor.h:887
void RenderImagesList(CUIRect Toolbox)
Definition editor.cpp:3964
void PopupSelectSoundInvoke(int Current, float x, float y)
Definition popups.cpp:2355
int m_PopupEventType
Definition editor.h:795
void UpdateTooltip(const void *pId, const CUIRect *pRect, const char *pToolTip)
Definition editor_ui.cpp:8
void DoAudioPreview(CUIRect View, const void *pPlayPauseButtonId, const void *pStopButtonId, const void *pSeekBarId, int SampleId)
Definition editor.cpp:263
EQuadEnvelopePointOperation m_QuadEnvelopePointOperation
Definition editor.h:882
static CUi::EPopupMenuFunctionResult PopupSelectGametileOp(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2391
EUnusedEntities m_AllowPlaceUnusedTiles
Definition editor.h:807
unsigned char m_ViewTuning
Definition editor.h:1197
int m_PopupEventWasActivated
Definition editor.h:797
float ScreenToEnvelopeDY(const CUIRect &View, float DeltaY)
Definition editor.cpp:4431
static CUi::EPopupMenuFunctionResult PopupMenuTools(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:152
void RenderLayers(CUIRect LayersBox)
Definition editor.cpp:3068
CEditor()
Definition editor.h:191
void ZoomAdaptOffsetX(float ZoomFactor, const CUIRect &View)
Definition editor.cpp:4326
std::map< const char *, CUi::SMessagePopupContext *, CStringKeyComparator > m_PopupMessageContexts
Definition editor.h:736
class IGraphics * Graphics() const
Definition editor.h:157
void AddTileLayer()
Definition quick_actions.cpp:67
bool m_ShowDetail
Definition editor.h:848
void DoQuadEnvelopes(const CLayerQuads *pLayerQuads)
Definition editor.cpp:2116
int m_Mentions
Definition editor.h:812
void OnDialogClose()
Definition editor.cpp:7433
EAxis GetDragAxis(ivec2 Offset) const
Definition editor.cpp:884
CSmoothValue m_ZoomEnvelopeX
Definition editor.h:821
void FillGameTiles(EGameTileOp FillTile) const
Definition quick_actions.cpp:9
static CUi::EPopupMenuFunctionResult PopupSound(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:1834
void RenderSounds(CUIRect Toolbox)
Definition editor.cpp:4097
EQuadEnvelopePointOperation
Definition editor.h:877
@ ROTATE
Definition editor.h:880
@ NONE
Definition editor.h:878
@ MOVE
Definition editor.h:879
float m_aExtraEditorSplits[NUM_EXTRAEDITORS]
Definition editor.h:865
vec2 m_MouseAxisInitialPos
Definition editor.h:711
std::deque< std::shared_ptr< CDataFileWriterFinishJob > > m_WriterFinishJobs
Definition editor.h:911
CFileBrowser m_FileBrowser
Definition editor.h:125
bool ReplaceSound(const char *pFilename, int StorageType, bool CheckDuplicate)
Definition editor.cpp:3902
bool IsInTriangle(vec2 Point, vec2 A, vec2 B, vec2 C)
Definition editor.cpp:1866
CLayerSelector * LayerSelector()
Definition editor.h:168
void LoadCurrentMap()
Definition editor.cpp:7439
void DoSoundSource(int LayerIndex, CSoundSource *pSource, int Index)
Definition editor.cpp:754
void RenderEditorHistory(CUIRect View)
Definition editor.cpp:5987
int PopupSelectSoundResult()
Definition popups.cpp:2363
SEditResult< E > DoPropertiesWithState(CUIRect *pToolbox, CProperty *pProps, int *pIds, int *pNewVal, const std::vector< ColorRGBA > &vColors={})
Definition editor_props.cpp:16
unsigned char m_SwitchDelay
Definition editor.h:1204
void ComputePointAlignments(const std::shared_ptr< CLayerQuads > &pLayer, CQuad *pQuad, int QuadIndex, int PointIndex, ivec2 Offset, std::vector< SAlignmentInfo > &vAlignments, bool Append=false) const
Definition editor.cpp:917
bool m_PreventUnusedTilesWasWarned
Definition editor.h:799
CUi m_UI
Definition editor.h:120
IGraphics::CTextureHandle m_TeleTexture
Definition editor.h:134
char m_aTileArtFilename[IO_MAX_PATH_LENGTH]
Definition editor.h:943
void RenderSelectedImage(CUIRect View) const
Definition editor.cpp:4074
float m_MouseWorldScale
Definition editor.h:833
static CUi::EPopupMenuFunctionResult PopupSelectConfigAutoMap(void *pContext, CUIRect View, bool Active)
Definition popups.cpp:2429
void ResetMentions() override
Definition editor.h:704
void DrawAxis(EAxis Axis, CPoint &OriginalPoint, CPoint &Point) const
Definition editor.cpp:895
Definition envelope.h:11
Definition file_browser.h:17
Definition font_typer.h:19
Definition layer_group.h:12
Definition layer_selector.h:7
Definition layer_tiles.h:44
Definition map_view.h:14
Definition prompt.h:12
Definition editor.h:78
int m_Max
Definition editor.h:90
int m_Value
Definition editor.h:87
int m_Type
Definition editor.h:88
CProperty(std::nullptr_t)
Definition editor.h:83
CProperty(const char *pName, int Value, int Type, int Min, int Max)
Definition editor.h:80
const char * m_pName
Definition editor.h:86
int m_Min
Definition editor.h:89
Definition mapitems.h:337
Definition render_map.h:55
Definition ui_scrollregion.h:90
Definition smooth_value.h:12
Definition mapitems.h:351
Definition ui_rect.h:12
Definition ui.h:304
EPopupMenuFunctionResult
Definition ui.h:310
Definition color.h:145
Definition color.h:182
Definition client.h:42
Definition config.h:9
Definition editor.h:8
Definition engine.h:15
Definition render_interfaces.h:23
Definition graphics.h:205
void Invalidate()
Definition graphics.h:218
Definition graphics.h:188
@ CORNER_ALL
Definition graphics.h:473
Definition input.h:18
Definition sound.h:12
Definition storage.h:21
Definition textrender.h:194
constexpr T color_cast(const F &)=delete
#define REGISTER_QUICK_ACTION(name, text, callback, disabled, active, button_color, description)
Definition editor.h:187
@ PROPTYPE_NULL
Definition editor.h:95
@ PROPTYPE_AUTOMAPPER_REFERENCE
Definition editor.h:105
@ PROPTYPE_BOOL
Definition editor.h:96
@ PROPTYPE_SHIFT
Definition editor.h:102
@ PROPTYPE_COLOR
Definition editor.h:99
@ PROPTYPE_ENVELOPE
Definition editor.h:101
@ PROPTYPE_AUTOMAPPER
Definition editor.h:104
@ PROPTYPE_ANGLE_SCROLL
Definition editor.h:98
@ PROPTYPE_IMAGE
Definition editor.h:100
@ PROPTYPE_SOUND
Definition editor.h:103
@ PROPTYPE_INT
Definition editor.h:97
@ MODE_SOUNDS
Definition editor.h:59
@ MODE_LAYERS
Definition editor.h:57
@ NUM_MODES
Definition editor.h:61
@ MODE_IMAGES
Definition editor.h:58
@ DIALOG_NONE
Definition editor.h:66
@ DIALOG_QUICK_PROMPT
Definition editor.h:69
@ DIALOG_FILE
Definition editor.h:67
@ DIALOG_MAPSETTINGS_ERROR
Definition editor.h:68
@ DIALOG_PSEUDO_FONT_TYPER
Definition editor.h:74
std::function< void(const T &, char(&aOutput)[128], std::vector< STextColorSplit > &)> FDropdownRenderCallback
Definition editor.h:52
EGameTileOp
Definition enums.h:20
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
ivec2 CPoint
Definition mapitems.h:255
static constexpr float MENU
Definition editor_ui.h:26
#define B(i, j)
Definition editor.h:1077
int m_Diff
Definition editor.h:1088
CPoint m_AlignedPoint
Definition editor.h:1078
int m_PointIndex
Definition editor.h:1087
EAxis m_Axis
Definition editor.h:1086
Definition editor.h:1049
@ NUM_POINTS
Definition editor.h:1057
@ POINT_CENTER
Definition editor.h:1056
@ POINT_TR
Definition editor.h:1053
@ POINT_TL
Definition editor.h:1052
@ POINT_BL
Definition editor.h:1054
@ POINT_BR
Definition editor.h:1055
CPoint m_aPoints[NUM_POINTS]
Definition editor.h:1059
Definition editor.h:955
std::vector< int > m_vLayerIndices
Definition editor.h:958
std::vector< std::shared_ptr< CLayerTiles > > m_vpLayers
Definition editor.h:957
CLayerTiles::SCommonPropState m_CommonPropState
Definition editor.h:959
CEditor * m_pEditor
Definition editor.h:956
Definition ui.h:32
Definition ui.h:293
Definition editor_server_settings.h:49
@ TEXTALIGN_MC
Definition textrender.h:35
@ BUTTONFLAG_LEFT
Definition ui.h:232
vector2_base< int > ivec2
Definition vmath.h:163
vector2_base< float > vec2
Definition vmath.h:161