ddnet/src/game/editor/component.h

93 lines
1.8 KiB
C
Raw Normal View History

#ifndef GAME_EDITOR_COMPONENT_H
#define GAME_EDITOR_COMPONENT_H
#include <functional>
2023-08-14 08:12:06 +00:00
#include <game/client/ui.h>
class CEditor;
class IInput;
class IClient;
class CConfig;
class IConsole;
class IEngine;
class IGraphics;
class ISound;
class ITextRender;
class IStorage;
class CRenderTools;
class CEditorComponent
{
public:
2023-08-14 06:53:59 +00:00
virtual ~CEditorComponent() = default;
/**
* Initialise the component and interface pointers.
* Needs to be the first function that is called.
*/
2023-08-14 06:53:59 +00:00
virtual void Init(CEditor *pEditor);
2023-08-14 08:12:06 +00:00
/**
* Calls `OnRender` and then maybe `OnHot` or `OnActive`.
*/
2023-08-14 08:12:06 +00:00
void OnUpdate(CUIRect View);
/**
* Gets called before `OnRender`. Should return true
* if the event was consumed.
*/
virtual bool OnInput(const IInput::CEvent &Event);
2023-08-14 08:12:06 +00:00
virtual void OnRender(CUIRect View);
/**
* Gets called after `OnRender` when the component is hot but not active.
* I
*/
virtual void OnHot();
/**
* Gets called after `OnRender` when the component is active.
*/
virtual void OnActive();
virtual void OnReset();
virtual void OnMapLoad();
bool IsHot();
void SetHot();
void UnsetHot();
bool IsActive();
void SetActive();
void SetInactive();
/**
* Initialise all registered subcomponents.
* Needs to be called after the interfaces have been initialised.
*/
void InitSubComponents();
void RegisterSubComponent(CEditorComponent &Component);
2023-08-14 06:53:59 +00:00
CEditor *Editor();
const CEditor *Editor() const;
2023-08-14 06:53:59 +00:00
IInput *Input();
IClient *Client();
CConfig *Config();
IConsole *Console();
IEngine *Engine();
IGraphics *Graphics();
ISound *Sound();
ITextRender *TextRender();
IStorage *Storage();
CUI *UI();
CRenderTools *RenderTools();
private:
2023-08-14 06:53:59 +00:00
CEditor *m_pEditor;
std::vector<std::reference_wrapper<CEditorComponent>> m_vSubComponents = {};
};
#endif