Files
WickedEngine/Editor/Editor.h
T
2018-09-21 21:03:27 +01:00

155 lines
3.0 KiB
C++

#pragma once
#include "WickedEngine.h"
#include "Translator.h"
class MaterialWindow;
class PostprocessWindow;
class WeatherWindow;
class ObjectWindow;
class MeshWindow;
class CameraWindow;
class RendererWindow;
class EnvProbeWindow;
class DecalWindow;
class LightWindow;
class AnimationWindow;
class EmitterWindow;
class HairParticleWindow;
class ForceFieldWindow;
class OceanWindow;
class EditorLoadingScreen : public LoadingScreenComponent
{
private:
wiSprite sprite;
wiFont font;
public:
void Load() override;
void Compose() override;
void Unload() override;
};
class Editor;
class EditorComponent : public Renderable2DComponent
{
private:
wiGraphicsTypes::Texture2D pointLightTex, spotLightTex, dirLightTex, areaLightTex, decalTex, forceFieldTex, emitterTex, hairTex, cameraTex, armatureTex;
public:
MaterialWindow* materialWnd;
PostprocessWindow* postprocessWnd;
WeatherWindow* weatherWnd;
ObjectWindow* objectWnd;
MeshWindow* meshWnd;
CameraWindow* cameraWnd;
RendererWindow* rendererWnd;
EnvProbeWindow* envProbeWnd;
DecalWindow* decalWnd;
LightWindow* lightWnd;
AnimationWindow* animWnd;
EmitterWindow* emitterWnd;
HairParticleWindow* hairWnd;
ForceFieldWindow* forceFieldWnd;
OceanWindow* oceanWnd;
Editor* main;
wiCheckBox* cinemaModeCheckBox;
EditorLoadingScreen* loader;
Renderable3DComponent* renderPath;
enum RENDERPATH
{
RENDERPATH_FORWARD,
RENDERPATH_DEFERRED,
RENDERPATH_TILEDFORWARD,
RENDERPATH_TILEDDEFERRED,
RENDERPATH_PATHTRACING,
};
void ChangeRenderPath(RENDERPATH path);
void DeleteWindows();
void Initialize() override;
void Load() override;
void Start() override;
void FixedUpdate() override;
void Update(float dt) override;
void Render() override;
void Compose() override;
void Unload() override;
enum EDITORSTENCILREF
{
EDITORSTENCILREF_CLEAR = 0x00,
EDITORSTENCILREF_HIGHLIGHT = 0x01,
EDITORSTENCILREF_LAST = 0x0F,
};
struct Picked
{
wiECS::Entity entity;
XMFLOAT3 position, normal;
float distance;
int subsetIndex;
Picked()
{
Clear();
}
// Subset index, position, normal, distance don't distinguish between pickeds!
bool operator==(const Picked& other)
{
return entity == other.entity;
}
void Clear()
{
distance = FLT_MAX;
subsetIndex = -1;
entity = wiECS::INVALID_ENTITY;
}
};
Translator translator;
std::list<Picked> selected;
wiECS::ComponentManager<wiSceneSystem::HierarchyComponent> savedHierarchy;
Picked hovered;
void BeginTranslate();
void EndTranslate();
void AddSelected(const Picked& picked);
wiArchive *clipboard = nullptr;
std::vector<wiArchive*> history;
int historyPos = -1;
enum HistoryOperationType
{
HISTORYOP_TRANSLATOR,
HISTORYOP_DELETE,
HISTORYOP_SELECTION,
HISTORYOP_NONE
};
void ResetHistory();
wiArchive* AdvanceHistory();
void ConsumeHistoryOperation(bool undo);
};
class Editor : public MainComponent
{
public:
Editor();
~Editor();
EditorComponent* renderComponent;
EditorLoadingScreen* loader;
void Initialize();
};