CSharpWrap.txt 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. Classes that need C# wrappers:
  2. Resources:
  3. - Mesh
  4. - Texture
  5. - Font
  6. - Material
  7. - GpuProgram
  8. - Technique
  9. - Shader
  10. - DepthStencil/Blend/Rasterizer/Sampler state
  11. Core objects:
  12. - SceneObject
  13. - Component
  14. - plus specific components Camera, Renderable, maybe others
  15. - (later ofc ability to derive custom C# components)
  16. GUI:
  17. - EditorWindow
  18. - GUIWidget
  19. - GUILabel/GUIButton/GUIToggle/GUIInputBox/GUITexture...
  20. - GUILayoutX/GUILayoutY/GUILayoutOptions
  21. - GUISkin/GUIElementStyle
  22. Systems:
  23. - Resources
  24. - Importer
  25. - Application (startUp/shutDown)
  26. - Cursor
  27. - Debug
  28. - Input
  29. - Time
  30. -----------------
  31. Implementation steps:
  32. - Implement flexible TreeView GUI component
  33. - Finish up Window Docking
  34. - EditorApplication
  35. - a way to return currently open project
  36. - Rethink how Resource .metas are handled
  37. - Implement Resource window
  38. - C# Importer (Internal class)
  39. - Imports resources and stores it within Library of the current Project folder
  40. - C# Resources, Save, Create
  41. - (Drag and drop import)
  42. - (File edit tracking)
  43. ----------------------------
  44. - GUISkin
  45. - List of properties with all common styles, like .button, .label
  46. - Get/SetStyle methods for custom styles
  47. - GUISkin.main <- default skin
  48. - GUI (Non EditorGUI version)
  49. - Implement C# Font
  50. - Implement C# SpriteTexture
  51. When loading resources I need to be able to load both project resources and engine ones.
  52. - BuiltinResources can be used for accessing default resources like GUI skin textures and similar
  53. - They're all loaded from a special folder that is set in EditorApplication
  54. BsApplication::getPrimaryViewport is not implemented
  55. Ensure I can easily ensure that engine and run separate from editor for when game publishing will be implemented.
  56. -----------------
  57. Notes:
  58. - I will need RequireComponent[] attribute. This attribute should automatically add the specified class to the wanted
  59. GameObject. This is useful if you suddenly decide your class is now dependant on another, but you would otherwise have to manually
  60. go through all instances of that GameObject in scene and add the required component.
  61. - HOWEVER, a more generic way of doing this (maybe using prefabs) would be useful. Because what happens when a class suddenly becomes
  62. dependant on a resource, or a specific instance of a class? In that case we cannot use RequireComponent.
  63. - Use FrameUpdate[QueueIdx], OnCreate[QueueIdx], OnDestroy[QueueIdx] attributes to signify to the scripting system when to execute
  64. certain methods. QueueIdx allows you to specify the order in which these methods will be called. In Unity you have Awake and Start methods
  65. for initialization, but here you may just specify OnCreate[0] and OnCreate[1].
  66. - I will likely need C++ equivalents of these queues because C++ components will also require such ordering.