TODO.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. --------- ALL LONG TERM TASKS / FIXES BELONG TO GOOGLE DOCS: ImplementationTODO OR PossibleImprovements ----------
  2. ----------------------------------------------------------------------
  3. C# Material/Shader:
  4. TODO - Implement param block and sampler support
  5. TODO - When creating a Material without a shader, a default one should be used, at least in editor
  6. TODO - Setting Material array parameters isn't possible from C#
  7. ---------------------------------------------------------------------
  8. ProjectLibrary import
  9. I'm not sure if queued dependencies are handled properly. They're handled on an internal ProjectLibrary loop but perhaps I should
  10. return them in checkForModifications?
  11. ----------------------------------------------------------------------
  12. Polish
  13. Other polish:
  14. - Add menu items:
  15. - Edit: Cut/Copy/Paste/Duplicate/Delete(need to make sure it works in Hierarchy, with shortcuts), View/Move/rotate/scale
  16. - Game Object (also add to context): Create(Empty, Empty Child, Camera, Renderable, Point/Spot/Directional Light), Apply prefab, Break prefab, Revert prefab
  17. - When I expand inspector elements and them come back to that object it should remember the previous state
  18. - In the Inspector base add a dictionary "Persistent<string, object>"
  19. - InspectorWindow will keep a reference to this dictionary whenever it creates a new inspector for SO or resource
  20. - Or if one already exists it will restore it
  21. - This dictionary will not persist editor shutdown
  22. - Generic inspector and inspectable fields can use the serialized property name for the key
  23. - Will need a way to retrieve the full property name, up to the parent Component/Resource
  24. - Will need to extend inspectable fields so they know their parent inspector so they have access to the dictionar
  25. - Custom inspectors can get rid of manual "isExpanded" bools and use the dictionary instead
  26. Stage 2 polish:
  27. - Game window
  28. - Game play/pause/step (+ save/restore objects on play/pause switch)
  29. - Resource hotswap
  30. - When managed exception happens log an error and continue execution
  31. - Doing a pass over all methods referencing Internal_ methods ensuring they do proper checking on C# side would be good
  32. - Game publishing (Build window, collect resources, output exe, default viewport) (described below)
  33. - Console window
  34. Optional:
  35. - When starting drag from hierarchy tree view it tends to select another object (can't repro)
  36. - Handle seems to lag behind the selected mesh
  37. - When resizing library window while docked, selection area appears
  38. - Move all the code files into subfolders so their hierarchy is similar to VS filters
  39. - Undo/Redo
  40. - CmdRecordSO records an SO and all its children but it should only record a single SO
  41. - CmdRecordSO should instead of recording the entire object record a diff
  42. - There should be a CmdRecordSO equivalent for resources (probably)
  43. - Add commands for breaking or reverting a scene object
  44. - Test & finalize undo/redo system
  45. - Add "focus on object" key (F) - animate it: rotate camera towards then speed towards while zooming in (+ menu entry)
  46. - Ortographic camera views (+ gizmo in scene view corner that shows camera orientation)
  47. - MenuBar - will likely need a way to mark elements as disabled when not appropriate (e.g. no "frame selected unless scene is focused")
  48. - Likely use a user-provided callback to trigger when populating the menus (I already added a callback to MenuItem, just need to implement it)
  49. - Need to list all script components in the Components menu
  50. - Cursors should be replaced with better ones, or at least hot-spots fixed
  51. Seriously optional:
  52. - Drag to select in scene view
  53. - Automatically generate readable inspector names and add [Name] attribute that allows custom naming
  54. - Add Range[] attribute to C# that forces a float/int to be displayed as a slider
  55. - GUI tabbing to switch between elements
  56. - Better Prefab inspector - display SceneObject inspector of top-level object, and possibly prefab hierarchy?
  57. - Do another optimization pass
  58. Finalizing:
  59. - Add copyright notices in all files & change license to GPL
  60. - Need to generate a proper merge of dev and preview branches
  61. - Use "git revert --no-commit <COMMITID>..HEAD" to reverse anything on the preview branch that was done after the branch creation, then merge
  62. ----------------------------------------------------------------------
  63. Build system
  64. - Test Resources (if loading works and if they're properly packaged in build)
  65. - Game/Editor assemblies in editor are compiled with debug information, add a toggle for this in build settings and recompile without it if needed
  66. - Will also need to compile a different version of the built-in BansheeEngine assembly
  67. - The final build procedure for the game should be:
  68. - Copy all the prebuilt binaries (Banshee libraries, Banshee assemblies, 3rd party libraries and prebuilt executable) from Editor install folder to output folder
  69. - Which set of binaries is used depends on selected platform (e.g. win/mac/linux or 32/64bit)
  70. - Recompile script assemblies if needed and copy them from project Internal folder to output folder
  71. - Copy the Builtin resources for engine from Editor install folder to output folder
  72. - Copy all the resources marked with the flag mentioned above to \Data subfolder in the output folder, preserving the same asset structure
  73. - Make sure to go over texture resources and ensure they are saved in the valid format
  74. as we don't want to do format conversion at runtime (Not cruical, but it should be done eventually)
  75. - This should something similar to Unity where when changing the platform all resources get reimported
  76. - Make sure to clear all prefab diffs (possibly store them elsewhere in the first place)
  77. - And all prefab instances should have updateFromPrefab called on them.
  78. ----------------------------------------------------------------------
  79. Other
  80. There is a memory corruption happening. Haven't determined where exactly but it's possible it has something
  81. to do with the opening of ColorPicker window. One time I got a heap read after delete error caused by GUIManager
  82. attempting to allocate a new transient mesh, and another time I got a hang when inserting a script object into a std::set.
  83. /*********************************************************************/
  84. /************************ LESS IMPORTANT *****************************/
  85. /*********************************************************************/
  86. ----------------------------------------------------------------------
  87. Mono notes
  88. I can get mono errors by checking g_print calls in goutput.c
  89. - Calling thunks incorrectly can cause those weird errors with no real callstack
  90. Running embedded mono with VS attached causes managed null refs to be registered as access violations
  91. There seems to be a bug in Mono when passing complex structs from C# to C++. e.g. passing Rect3 as a parameter
  92. will corrupt the parameter after it, even if layout and size is exact as the C++ version.
  93. Rect3 has child structs (Vector3) which could be the reason. Be aware of other similar problems.
  94. Mono cannot marshal structures? Taken from their documentation:
  95. Internal calls do not provide support for marshalling structures. This means that any API calls that take a structure
  96. (excluding the system types like int32, int64, etc) must be passed as a pointer, in C# this means passing the value as a "ref" or "out" parameter.
  97. Mono has problems with returning a struct from an internal C++ method. Returned value might end up being corrupted. It works weirdly as
  98. I am able (for example) return a Rect2 with no problems, but it doesn't work when returning a Degree struct. Returning the value as input
  99. parameter solves the problem (presumably boxing the return value would also work).
  100. Sometimes exceptions cause a crash in Event, although this is due to an exception triggering a dialog box which triggers
  101. the message loop and causes another exception. Make sure to look for the original exception.
  102. Finalizers on attribute members will get called more than once. This causes issues if some of the members reference native
  103. objects as already deleted native objects will try to be deleted again.
  104. ----------------------------------------------------------------------
  105. MenuItem
  106. - Add keyboard controls to GUIMenuBar (left/right arrows should move between entries if user is not browsing a sub-menu)
  107. - esc should cancel out of the menu bar
  108. - alt should focus the menu bar
  109. ----------------------------------------------------------------------
  110. VisualStudio integration
  111. - VS integration will likely not work with VSExpress or Community edition
  112. - VSExpress doesn't support EnvDTE so the only option is to open it using a shell command which doesn't seem to offer precise parameters
  113. - Community edition should work similarily to Pro, but might have a different executable and/or registry paths
  114. - Make sure that 3rd party assemblies can be imported in the project, and that they are properly referenced in VS project generation and compilation
  115. ----------------------------------------------------------------------
  116. Script compilation
  117. - I need to hook up script compilation with assembly refresh, and the build system.
  118. - e.g. when recompiling inside the editor it should automatically start compiling when changes are detected,
  119. show some kind of visual indicator and refresh assemblies when its done. When publishing it should recompile
  120. assemblies for release. Also hook up console to compiler output?
  121. ----------------------------------------------------------------------
  122. Library window
  123. - Might need to improve search (need to test). Do multiple search keywords work properly?
  124. - Consider delaying search until user stops pressing keys (so not to have thousands of search results in the initial stages)
  125. - Save & restore scroll position when Refresh happens
  126. ----------------------------------------------------------------------
  127. Handles
  128. - Ideally free scale handle indicator should always render and be interactable and never be hidden by axis scale indicators (Not high priority)
  129. - Raycast snapping Ribek suggested
  130. ----------------------------------------------------------------------
  131. Include files:
  132. - Test if default values work
  133. - Test project library dependant resources (e.g. changing an include and seeing if shader is reimported)
  134. ----------------------------------------------------------------------
  135. Scene View
  136. Test:
  137. - Custom handles from C#
  138. - Handle snapping
  139. - Multi-select Move/Rotate/scale