LumixEngine/src/editor/world_editor.h

182 lines
6.1 KiB
C
Raw Normal View History

2014-06-16 21:18:15 +02:00
#pragma once
2015-08-11 23:55:58 +02:00
#include "lumix.h"
#include "core/array.h"
2014-06-29 15:20:21 +02:00
#include "core/delegate_list.h"
#include "core/quat.h"
#include "universe/component.h"
2014-06-16 21:18:15 +02:00
namespace Lumix
{
class Engine;
class EntityTemplateSystem;
2015-08-12 22:57:22 +02:00
class Hierarchy;
class IArrayDescriptor;
class IPlugin;
class IPropertyDescriptor;
class Path;
class PipelineInstance;
class RayCastModelHit;
class Universe;
2015-09-12 12:44:04 +02:00
struct UniverseContext;
namespace FS
{
class TCPFileServer;
}
2014-07-31 23:45:57 +02:00
struct MouseButton
{
enum Value
2014-06-16 21:18:15 +02:00
{
LEFT,
MIDDLE,
RIGHT
};
};
2015-08-17 23:45:26 +02:00
class LUMIX_EDITOR_API WorldEditor
{
public:
2015-07-25 00:09:11 +02:00
typedef Array<ComponentUID> ComponentList;
typedef class IEditorCommand* (*EditorCommandCreator)(WorldEditor&);
2014-07-05 23:19:02 +02:00
enum class MouseFlags : int
{
ALT = 1,
CONTROL = 2
};
2014-08-04 23:09:36 +02:00
class Plugin
{
public:
virtual ~Plugin() {}
2014-08-04 23:09:36 +02:00
virtual void tick() {}
virtual bool onEntityMouseDown(const RayCastModelHit& /*hit*/, int /*x*/, int /*y*/)
{
return false;
}
virtual void onMouseUp(int /*x*/, int /*y*/, MouseButton::Value /*button*/) {}
virtual void onMouseMove(int /*x*/, int /*y*/, int /*rel_x*/, int /*rel_y*/) {}
virtual bool showGizmo(ComponentUID /*cmp*/) { return false; }
};
2014-06-16 21:18:15 +02:00
public:
static WorldEditor* create(const char* base_path, Engine& engine, IAllocator& allocator);
2015-09-21 21:39:28 +02:00
static void destroy(WorldEditor* editor, IAllocator& allocator);
2015-04-05 18:08:50 +02:00
virtual void update() = 0;
2015-08-14 22:12:51 +02:00
virtual void updateEngine() = 0;
virtual void executeCommand(IEditorCommand* command) = 0;
virtual IEditorCommand* createEditorCommand(uint32 command_type) = 0;
virtual Engine& getEngine() = 0;
2015-09-12 12:44:04 +02:00
virtual UniverseContext* getUniverseContext() = 0;
virtual Universe* getUniverse() = 0;
2015-08-12 22:57:22 +02:00
virtual Hierarchy* getHierarchy() = 0;
virtual const Array<IScene*>& getScenes() const = 0;
virtual IScene* getScene(uint32 hash) = 0;
virtual IScene* getSceneByComponentType(uint32 hash) = 0;
virtual IAllocator& getAllocator() = 0;
virtual void renderIcons(PipelineInstance& pipeline) = 0;
2015-07-25 00:09:11 +02:00
virtual ComponentUID getEditCamera() = 0;
virtual class Gizmo& getGizmo() = 0;
2015-10-16 21:19:27 +02:00
virtual void setGizmoUseStep(bool use) = 0;
2015-09-19 11:38:53 +02:00
virtual bool canUndo() const = 0;
virtual bool canRedo() const = 0;
virtual void undo() = 0;
virtual void redo() = 0;
virtual void loadUniverse(const Path& path) = 0;
2015-09-29 20:48:26 +02:00
virtual void saveUniverse(const Path& path, bool save_path) = 0;
virtual void newUniverse() = 0;
virtual Path getUniversePath() const = 0;
virtual void showEntities() = 0;
virtual void hideEntities() = 0;
virtual void copyEntity() = 0;
2015-09-19 11:38:53 +02:00
virtual bool canPasteEntity() const = 0;
virtual void pasteEntity() = 0;
virtual ComponentUID getComponent(Entity entity, uint32 type) = 0;
2015-07-24 08:42:35 +02:00
virtual ComponentList& getComponents(Entity entity) = 0;
virtual void addComponent(uint32 type_crc) = 0;
2015-07-25 00:09:11 +02:00
virtual void cloneComponent(const ComponentUID& src, Entity entity) = 0;
virtual void destroyComponent(const ComponentUID& cmp) = 0;
virtual bool canRemove(const ComponentUID& cmp) = 0;
virtual Entity addEntity() = 0;
virtual void destroyEntities(const Entity* entities, int count) = 0;
2015-09-24 22:22:53 +02:00
virtual void addEntityToSelection(Entity entity) = 0;
virtual void selectEntities(const Entity* entities, int count) = 0;
virtual void selectEntitiesWithSameMesh() = 0;
virtual Entity addEntityAt(int camera_x, int camera_y) = 0;
2015-09-21 00:11:12 +02:00
virtual void setEntitiesPositions(const Entity* entities, const Vec3* positions, int count) = 0;
virtual void setEntitiesScales(const Entity* entities, const float* scales, int count) = 0;
virtual void setEntitiesRotations(const Entity* entity, const Quat* rotations, int count) = 0;
virtual void setEntitiesPositionsAndRotations(const Entity* entity,
const Vec3* position,
const Quat* rotation,
int count) = 0;
2015-07-24 08:42:35 +02:00
virtual void setEntityName(Entity entity, const char* name) = 0;
2015-10-20 21:46:13 +02:00
virtual void snapDown() = 0;
virtual void toggleGameMode() = 0;
virtual void navigate(float forward, float right, float speed) = 0;
virtual void setProperty(uint32 component,
2015-09-21 00:11:12 +02:00
int index,
IPropertyDescriptor& property,
const void* data,
int size) = 0;
virtual void setAdditiveSelection(bool additive) = 0;
2015-09-21 00:11:12 +02:00
virtual void addArrayPropertyItem(const ComponentUID& cmp, IArrayDescriptor& property) = 0;
2015-07-25 00:09:11 +02:00
virtual void removeArrayPropertyItem(const ComponentUID& cmp,
2015-09-21 00:11:12 +02:00
int index,
IArrayDescriptor& property) = 0;
virtual void onMouseDown(int x, int y, MouseButton::Value button) = 0;
2015-10-16 21:27:55 +02:00
virtual void onMouseMove(int x, int y, int relx, int rely) = 0;
virtual void onMouseUp(int x, int y, MouseButton::Value button) = 0;
virtual float getMouseX() const = 0;
virtual float getMouseY() const = 0;
virtual void lookAtSelected() = 0;
2015-10-12 10:58:22 +02:00
virtual bool isOrbitCamera() const = 0;
virtual void setOrbitCamera(bool enable) = 0;
virtual const char* getBasePath() = 0;
virtual const Array<Entity>& getSelectedEntities() const = 0;
2015-09-24 22:22:53 +02:00
virtual bool isEntitySelected(Entity entity) const = 0;
2014-06-16 21:18:15 +02:00
virtual DelegateList<void(const Array<Entity>&)>& entitySelected() = 0;
virtual DelegateList<void()>& universeCreated() = 0;
virtual DelegateList<void()>& universeDestroyed() = 0;
virtual DelegateList<void()>& universeLoaded() = 0;
2015-07-24 08:42:35 +02:00
virtual DelegateList<void(Entity, const char*)>& entityNameSet() = 0;
2015-07-25 00:09:11 +02:00
virtual DelegateList<void(ComponentUID, const IPropertyDescriptor&)>&
propertySet() = 0;
virtual void addPlugin(Plugin& plugin) = 0;
virtual void removePlugin(Plugin& plugin) = 0;
virtual bool isRelativePath(const char* path) = 0;
2015-08-02 13:25:17 +02:00
virtual void getRelativePath(char* relative_path,
int max_length,
const char* source) = 0;
virtual void getRelativePath(char* relative_path,
int max_length,
const Path& source) = 0;
virtual EntityTemplateSystem& getEntityTemplateSystem() = 0;
virtual Vec3 getCameraRaycastHit() = 0;
2015-09-19 11:38:53 +02:00
virtual bool isMeasureToolActive() const = 0;
virtual float getMeasuredDistance() const = 0;
virtual void toggleMeasure() = 0;
virtual class MeasureTool* getMeasureTool() const = 0;
2014-06-16 21:18:15 +02:00
virtual void saveUndoStack(const Path& path) = 0;
virtual bool executeUndoStack(const Path& path) = 0;
virtual bool runTest(const Path& undo_stack_path,
const Path& result_universe_path) = 0;
virtual void registerEditorCommandCreator(const char* command_type,
EditorCommandCreator) = 0;
virtual bool isGameMode() const = 0;
2014-06-16 21:18:15 +02:00
protected:
virtual ~WorldEditor() {}
};
}