BsScriptHandleManager.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include "BsScriptEditorPrerequisites.h"
  3. #include "BsHandleManager.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BED_EXPORT ScriptHandleManager : public HandleManager
  8. {
  9. struct CustomHandleData
  10. {
  11. MonoClass* handleType;
  12. MonoClass* componentType;
  13. MonoMethod* ctor;
  14. };
  15. struct ActiveCustomHandleData
  16. {
  17. MonoObject* object;
  18. uint32_t gcHandle;
  19. };
  20. struct ActiveCustomHandles
  21. {
  22. HSceneObject selectedObject;
  23. Vector<ActiveCustomHandleData> handles;
  24. };
  25. public:
  26. ScriptHandleManager(ScriptAssemblyManager& scriptObjectManager);
  27. ~ScriptHandleManager();
  28. protected:
  29. void refreshHandles();
  30. void triggerHandles();
  31. void queueDrawCommands();
  32. void reloadAssemblyData();
  33. bool isValidHandleType(MonoClass* type, MonoClass*& componentType, MonoMethod*& ctor);
  34. void callPreInput(MonoObject* instance);
  35. void callPostInput(MonoObject* instance);
  36. void callDraw(MonoObject* instance);
  37. void callDestroy(MonoObject* instance);
  38. ScriptAssemblyManager& mScriptObjectManager;
  39. HEvent mDomainLoadConn;
  40. Map<String, CustomHandleData> mHandles;
  41. ActiveCustomHandles mActiveHandleData;
  42. MonoObject* mDefaultHandleManager = nullptr;
  43. uint32_t mDefaultHandleManagerGCHandle = 0;
  44. MonoClass* mCustomHandleAttribute = nullptr;
  45. MonoField* mTypeField = nullptr;
  46. MonoClass* mHandleBaseClass = nullptr;
  47. MonoClass* mDefaultHandleManagerClass = nullptr;
  48. typedef void(__stdcall *DestroyThunkDef) (MonoObject*, MonoException**);
  49. MonoMethod* mPreInputMethod;
  50. MonoMethod* mPostInputMethod;
  51. MonoMethod* mDrawMethod;
  52. DestroyThunkDef mDestroyThunk;
  53. };
  54. }