AObject.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.InteropServices;
  4. namespace AtomicEngine
  5. {
  6. public partial class AObject : RefCounted
  7. {
  8. internal Dictionary<uint, EventDelegate> eventHandlers = new Dictionary<uint, EventDelegate>();
  9. public static T GetSubsystem<T>() where T : AObject
  10. {
  11. return AtomicNET.GetSubsystem<T>();
  12. }
  13. internal void HandleEvent(uint eventType, ScriptVariantMap eventData)
  14. {
  15. eventHandlers[eventType](eventType, eventData);
  16. }
  17. public void SubscribeToEvent(uint eventType, EventDelegate eventDelegate)
  18. {
  19. NETCore.RegisterNETEventType(eventType);
  20. eventHandlers[eventType] = eventDelegate;
  21. NativeCore.SubscribeToEvent(this, eventType);
  22. }
  23. public void SubscribeToEvent(string eventType, EventDelegate eventDelegate)
  24. {
  25. SubscribeToEvent(AtomicNET.StringToStringHash(eventType), eventDelegate);
  26. }
  27. public void SendEvent(string eventType, ScriptVariantMap eventData = null)
  28. {
  29. csi_Atomic_AObject_SendEvent(this.nativeInstance, eventType, eventData == null ? IntPtr.Zero : eventData.nativeInstance);
  30. }
  31. [DllImport(Constants.LIBNAME, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
  32. private static extern void csi_Atomic_AObject_SendEvent(IntPtr self, string eventType, IntPtr variantMap);
  33. }
  34. }