版权声明:未经同意,不能用于商业用途,版权归本博主所有 https://blog.csdn.net/qq_16123279/article/details/82110761
文件路径:
CRYENGINE\Code\Sandbox\Plugins\EditorCommon\IObjectManager.h
管理器接口名:
IObjectManager
对象类型:
enum ObjectType
{
OBJTYPE_GROUP = 1 << 0,
OBJTYPE_TAGPOINT = 1 << 1,
OBJTYPE_AIPOINT = 1 << 2,
OBJTYPE_ENTITY = 1 << 3,
OBJTYPE_SHAPE = 1 << 4,
OBJTYPE_VOLUME = 1 << 5,
OBJTYPE_BRUSH = 1 << 6,
OBJTYPE_PREFAB = 1 << 7,
OBJTYPE_SOLID = 1 << 8,
OBJTYPE_CLOUD = 1 << 9,
OBJTYPE_CLOUDGROUP = 1 << 10,
OBJTYPE_VOXEL = 1 << 11,
OBJTYPE_ROAD = 1 << 12,
OBJTYPE_OTHER = 1 << 13,
OBJTYPE_DECAL = 1 << 14,
OBJTYPE_DISTANCECLOUD = 1 << 15,
OBJTYPE_TELEMETRY = 1 << 16,
OBJTYPE_REFPICTURE = 1 << 17,
OBJTYPE_GEOMCACHE = 1 << 18,
OBJTYPE_VOLUMESOLID = 1 << 19,
OBJTYPE_ANY = 0xFFFFFFFF,
};
对象事件:
enum ObjectEvent
{
EVENT_PREINGAME = 1,//!< Signals that editor is going to switch into the game mode.
EVENT_INGAME, //!< Signals that editor is switching into the game mode.
EVENT_OUTOFGAME, //!< Signals that editor is switching out of the game mode.
EVENT_REFRESH, //!< Signals that editor is refreshing level.
EVENT_PLACE_STATIC, //!< Signals that editor needs to place all static objects on terrain.
EVENT_REMOVE_STATIC,//!< Signals that editor needs to remove all static objects from terrain.
EVENT_DBLCLICK, //!< Signals that object have been double clicked.
EVENT_RELOAD_ENTITY,//!< Signals that entities scripts must be reloaded.
EVENT_RELOAD_TEXTURES,//!< Signals that all posible textures in objects should be reloaded.
EVENT_RELOAD_GEOM, //!< Signals that all posible geometries should be reloaded.
EVENT_MISSION_CHANGE, //!< Signals that mission have been changed.
EVENT_PREFAB_REMAKE,//!< Recreate all objects in prefabs.
EVENT_ALIGN_TOGRID, //!< Object should align itself to the grid.
EVENT_PHYSICS_GETSTATE,//!< Signals that entities should accept thier phyical state from game.
EVENT_PHYSICS_RESETSTATE,//!< Signals that physics state must be reseted on objects.
EVENT_PHYSICS_APPLYSTATE,//!< Signals that teh stored physics state must be applied to objects.
EVENT_PRE_EXPORT, //!< Signals that the game is about to be exported, prepare any data if the object needs to
EVENT_FREE_GAME_DATA,//!< Object should free game data that its holding.
EVENT_CONFIG_SPEC_CHANGE, //!< Called when config spec changed.
EVENT_HIDE_HELPER, //!< Signals that happens when Helper mode switches to be hidden.
EVENT_SHOW_HELPER, //!< Signals that happens when Helper mode switches to be shown.
EVENT_TRANSFORM_FINISHED //!< Signal when the object was transformed
};
对象监听事件:
enum EObjectListenerEvent
{
OBJECT_ON_DELETE = 0,// Sent after object was deleted from object manager.
OBJECT_ON_ADD, // Sent after object was added to object manager.
OBJECT_ON_SELECT, // Sent when objects becomes selected.
OBJECT_ON_UNSELECT, // Sent when objects unselected.
OBJECT_ON_TRANSFORM, // Sent when object transformed.
OBJECT_ON_VISIBILITY, // Sent when object visibility changes.
OBJECT_ON_RENAME, // Sent when object changes name.
OBJECT_ON_CHILDATTACHED, // Sent when object gets a child attached.
OBJECT_ON_PREDELETE, // Sent before an object is processed to be deleted from the object manager.
OBJECT_ON_DETACHFROMPARENT, // Sent when the object detaches from a parent.
OBJECT_ON_GROUP_OPEN, // Sent when this group/prefab object is opened
OBJECT_ON_GROUP_CLOSE, // Sent when this group/prefab object is closed
OBJECT_ON_PREFAB_CHANGED, // Sent when prefab representation has been changed
OBJECT_ON_UI_PROPERTY_CHANGED, // Sent when any misc variable/property changes (Meant for UI/inspector).
OBJECT_ON_LAYERCHANGE, // Sent after object has changed layer
OBJECT_ON_PRELINKED, // Sent before the object is linked
OBJECT_ON_LINKED, // Sent after the object is linked
OBJECT_ON_PREUNLINKED, // Sent before the object is linked
OBJECT_ON_UNLINKED, // Sent after the object is linked
OBJECT_EVENT_LAST
};
大概所拥有的功能如下:
//对象增删改查
- NewObject(被重载3个)
- FindObjectBy >>Name,Type,guid..
- DeleteObject
- DeleteObjects
- DeleteAllObjects
- CloneObject参数obj返回obj
- Link链接单一对象到目标或链接多个对象到目标,被重载2
- FilterLinkedObjects
- Display在指定上下文渲染对象
- HitTest(HitContext& hitInfo)相交测试,返回bool
- void SendEvent(ObjectEvent event)发送事件给全部对象
- void SendEvent(ObjectEvent event, const AABB& bounds)给选择的对象发送事件
- void HideObject(CBaseObject* obj, bool hide)隐藏对象
- void UnhideAll()全部显示
- void FreezeObject(CBaseObject* obj, bool freeze)冻结对象
- ToggleHideAllBut(CBaseObject* obj) 只有参数被隐藏其他被显示
- ToggleFreezeAllBut(CBaseObject* pObject) 同上
- UnfreezeAll()全部解冻
//对象选取操作
enum class ESelectOp
{
eSelect,
eUnselect,
eToggle,
eNone
};
- SelectObject
- UnselectObject
- SelectObjects
- UnselectObjects
- ToggleSelectObjects//切换选取
- SelectAndUnselectObjects
- SelectAll
- SelectObjectsInRect(CViewport* view, const CRect& rect, ESelectOp bSelect)选取一个区域内的对象
- ClearSelection//清除选择对象
- InvertSelection//反选对象
- CSelectionGroup* GetSelection()//获取被选择的对象组
- void DeleteSelection()删除被选择的对象组
//对象的加载和导出
- Export(const string& levelPath, XmlNodeRef& rootNode, bool isOnlyShared)导出对象【isOnlyShared为ture仅仅导出共享对象,否则完全导出】
- virtual void Serialize(XmlNodeRef& rootNode, bool isLoading, int flags = SERIALIZE_ALL)序列化对象
- LoadObjects加载对象
- virtual void StartObjectsLoading(int numObjects) = 0;
- virtual void EndObjectsLoading() = 0;
//对象事件回调
typedef Functor2<CBaseObject*, int> EventCallback;
virtual void AddObjectEventListener(const EventCallback& cb) = 0;
virtual void RemoveObjectEventListener(const EventCallback& cb) = 0;
//通告上层管理
- NotifyObjectListeners(CBaseObject* pObject, enum EObjectListenerEvent event)//单个对象对应发生了什么事件