TODO.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. --------- ALL LONG TERM TASKS / FIXES BELONG TO GOOGLE DOCS: ImplementationTODO OR PossibleImprovements ----------
  2. ----------------------------------------------------------------------
  3. Assembly refresh
  4. When serializing Camera I cannot save the reference to RenderTexture. Make it a Resource?
  5. Possibly set up automatic refresh in debug mode after initialization? As an ad-hoc unit test
  6. Modal windows are set up as persistent but I don't serialize their internal data anywhere
  7. ----------------------------------------------------------------------
  8. C# Material/Shader:
  9. TODO - Implement param block and sampler support
  10. TODO - When creating a Material without a shader, a default one should be used, at least in editor
  11. TODO - Setting Material array parameters isn't possible from C#
  12. GUIResourceField doesn't distinguish between tex2d, tex3d and texcube.
  13. ---------------------------------------------------------------------
  14. ProjectLibrary import
  15. I'm not sure if queued dependencies are handled properly. They're handled on an internal ProjectLibrary loop but perhaps I should
  16. return them in checkForModifications?
  17. ---------------------------------------------------------------------
  18. Prefab diff
  19. Add "dirty object" system to C#. Each ScriptResource and ScriptGameObject should have a dirty flag.
  20. - It should be toggle-able via EditorUtility.SetDirty or similar. (Possibly make this part of ProjectLibrary)
  21. - There should also be a method to check if something is dirty via EditorUtility.IsDirty or similar. (Possibly make this part of ProjectLibrary)
  22. - Hook this up to Scene.IsModified because it is currently not implemented (Might need to keep a link to active Prefab in scene to do this)
  23. - Add a "Save Project" button that automatically saves all dirty assets. Do this automatically when user quits the editor.
  24. - Call SetDirty manually whenever:
  25. - A new object or component is added to the scene
  26. - An object or component is removed from the scene
  27. - An object is reparented
  28. - When component or resource is modified from inspector
  29. - Record all portions where objects & components get modified so I can mark them dirty, will likely need
  30. to use those some points for undo/redo
  31. Test (likely later once I have more editor functionality working):
  32. - Game object handle compare
  33. - ID restore systems
  34. - Native+Managed diff (only the link between the two)
  35. Code quality improvements:
  36. - Modify BinarySerializer so that _encodeIntermediate outputs intermediate format directly without a full on encode
  37. - Consider making ManagedSerializable* array/list/dictionary method/field references static (right now each instance has its own instance
  38. but they're identical)
  39. ----------------------------------------------------------------------
  40. Polish
  41. Move data folder within current repo
  42. - Store default layout asset in Data/Editor folder
  43. - Store data generated by editor runtime at Data/Runtime
  44. Test:
  45. - Browse for project
  46. - Create project
  47. - See if recent project list is populated and interactable
  48. - Finally test if opening/creating a project while another one is open is possible
  49. Ribek use:
  50. - Crash on shutdown due to RenderStateCoreManager getting shut down before all states are freed
  51. - When mousing over GUIMenu elements cursor changes if underlying GUI element changes
  52. - Hook up color picker to guicolor field
  53. - When starting drag from hierarchy tree view it tends to select another object (can't repro)
  54. - UseCustomInspector isn't implemented
  55. - Camera, Renderable, Material, Texture inspector
  56. - Test release mode
  57. - Ability to create assets in Project view (At least Material)
  58. - (Optionally, needed for GUI editing) GUISkin resource inspector & a way to inspect and save the default editor skin
  59. First screenshot:
  60. - Additional menu bar items:
  61. - Edit: Undo/Redo, Cut/Copy/Paste/Duplicate/Delete(need to make sure it works in Hierarchy, with shortcuts), Frame Selected, Preferences, Play/Pause/Step, View/Move/rotate/scale
  62. - Assets (also add to context): Create(Folder, Material, Shader, Script, Prefab, GUI Skin), Show in explorer
  63. - Game Object (also add to context): Create(Empty, Empty Child, Camera, Renderable, Point/Spot/Directional Light), Apply prefab, Break prefab, Revert prefab
  64. - Possibly create helper objects: Cube, Sphere, Plane, Quad, Capsule, Cylinder
  65. - Help - About, API Reference (link to site)
  66. - (Optionally) New UI look (tabs, component/array containers, better buttons)
  67. - Foldout in scene tree view is hard to click, make it bigger
  68. - (Optionally) Console window
  69. Other polish:
  70. - C# inspectors for Point/Spot/Directional light
  71. - C# interface for Font
  72. - Handle seems to lag behind the selected mesh
  73. - Replace "minimize" button in tabbed title bar with maximize and make sure it works (in both docked and floating mode)
  74. - When I expand inspector elements and them come back to that object it should remember the previous state
  75. - Add a chaching mechanism to inspector (likely based on instance ID & property names)
  76. - This has to work not only when I come back to the object, but whenever inspector rebuilds (e.g. after removing element from array)
  77. - Consider saving this information with the serialized object
  78. - Import option inspectors for Texture, Mesh, Font
  79. - Drag and drop issue:
  80. - Starting a window drag caused a weird crash, likely caused by memory corruption. Cannot reproduce
  81. - Starting drag of the hierarchy window will also start selection drag if the project window was docked above it
  82. - Attempting to dock a dragged window onto the LibraryWindow causes a managed crash
  83. Stage 2 polish:
  84. - Inject an icon into an .exe (Win32 specific)
  85. - Prefabs
  86. - Game window
  87. - Game play/pause/step (+ save/restore objects on play/pause switch)
  88. - Resource hotswap
  89. - C# script compiling in editor
  90. - VS integration
  91. - When managed exception happens log an error and continue execution
  92. - Game publishing (Build window, collect resources, output exe, default viewport) (described below)
  93. Finalizing:
  94. - Add copyright notices in all files & change license to GPL
  95. - Move all the code files into subfolders so their hierarchy is similar to VS filters
  96. - Splash screen
  97. - Settings/Preferences window
  98. - Documentation
  99. - Need to generate a proper merge of dev and preview branches
  100. - (Optionally) GUI tabbing to switch between elements
  101. - Undo/Redo
  102. - CmdRecordSO records an SO and all its children but it should only record a single SO
  103. - CmdRecordSO should instead of recording the entire object record a diff
  104. - There should be a CmdRecordSO equivalent for resources (probably)
  105. - Add commands for breaking or reverting a scene object
  106. - Test & finalize undo/redo system
  107. - Update GUISlider so it works with the new style (and to have min/max limits, plus step size)
  108. - Add "focus on object" key (F) - animate it: rotate camera towards then speed towards while zooming in
  109. - Ortographic camera views (+ gizmo in scene view corner that shows camera orientation)
  110. - Drag to select in scene view
  111. - MenuBar - will likely need a way to mark elements as disabled when not appropriate (e.g. no "frame selected unless scene is focused")
  112. - Likely use a user-provided callback to trigger when populating the menus
  113. - Need to list all script components in the Components menu
  114. ----------------------------------------------------------------------
  115. Build system
  116. - Test Resources (if loading works and if they're properly packaged in build)
  117. - The final build procedure for the game should be:
  118. - Copy all the prebuilt binaries (Banshee libraries, Banshee assemblies, 3rd party libraries and prebuilt executable) from Editor install folder to output folder
  119. - Which set of binaries is used depends on selected platform (e.g. win/mac/linux or 32/64bit)
  120. - Recompile script assemblies if needed and copy them from project Internal folder to output folder
  121. - Copy the Builtin resources for engine from Editor install folder to output folder
  122. - Copy all the resources marked with the flag mentioned above to \Data subfolder in the output folder, preserving the same asset structure
  123. - Make sure to go over texture resources and ensure they are saved in the valid format
  124. as we don't want to do format conversion at runtime (Not cruical, but it should be done eventually)
  125. - This should something similar to Unity where when changing the platform all resources get reimported
  126. - Make sure to clear all prefab diffs (possibly store them elsewhere in the first place)
  127. - And all prefab instances should have updateFromPrefab called on them.
  128. ----------------------------------------------------------------------
  129. Other
  130. There is a memory corruption happening. Haven't determined where exactly but it's possible it has something
  131. to do with the opening of ColorPicker window. One time I got a heap read after delete error caused by GUIManager
  132. attempting to allocate a new transient mesh, and another time I got a hang when inserting a script object into a std::set.
  133. Got a crash on shutdown that was caused by locking a mutex in an Event destructor. Event was Platform::onMouseCaptureChanged.
  134. Issue happened when I closed the app via the X button (if that's relevant). It doesn't seem to happen always.
  135. - This is likely due to some other error. When VS finds an exception it triggers a dialog box which triggers the msg loop in-engine and causes another exception.
  136. /*********************************************************************/
  137. /************************ LESS IMPORTANT *****************************/
  138. /*********************************************************************/
  139. ----------------------------------------------------------------------
  140. Mono notes
  141. I can get mono errors by checking g_print calls in goutput.c
  142. - Calling thunks incorrectly can cause those weird errors with no real callstack
  143. Running embedded mono with VS attached causes managed null refs to be registered as access violations
  144. There seems to be a bug in Mono when passing complex structs from C# to C++. e.g. passing Rect3 as a parameter
  145. will corrupt the parameter after it, even if layout and size is exact as the C++ version.
  146. Rect3 has child structs (Vector3) which could be the reason. Be aware of other similar problems.
  147. Mono cannot marshal structures? Taken from their documentation:
  148. Internal calls do not provide support for marshalling structures. This means that any API calls that take a structure
  149. (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.
  150. ----------------------------------------------------------------------
  151. MenuItem
  152. - Add keyboard controls to GUIMenuBar (left/right arrows should move between entries if user is not browsing a sub-menu)
  153. - esc should cancel out of the menu bar
  154. - alt should focus the menu bar
  155. ----------------------------------------------------------------------
  156. VisualStudio integration
  157. - VS integration will likely not work with VSExpress or Community edition
  158. - 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
  159. - Community edition should work similarily to Pro, but might have a different executable and/or registry paths
  160. - Make sure that 3rd party assemblies can be imported in the project, and that they are properly referenced in VS project generation and compilation
  161. ----------------------------------------------------------------------
  162. Script compilation
  163. - I need to hook up script compilation with assembly refresh, and the build system.
  164. - e.g. when recompiling inside the editor it should automatically start compiling when changes are detected,
  165. show some kind of visual indicator and refresh assemblies when its done. When publishing it should recompile
  166. assemblies for release. Also hook up console to compiler output?
  167. ----------------------------------------------------------------------
  168. Project window
  169. - Might need to improve search (need to test). Do multiple search keywords work properly?
  170. - Consider delaying search until user stops pressing keys (so not to have thousands of search results in the initial stages)
  171. - Save & restore scroll position when Refresh happens
  172. ----------------------------------------------------------------------
  173. Handles
  174. - Ideally free scale handle indicator should always render and be interactable and never be hidden by axis scale indicators (Not high priority)
  175. - Raycast snapping Ribek suggested
  176. ----------------------------------------------------------------------
  177. Include files:
  178. - Test if default values work
  179. - Test project library dependant resources (e.g. changing an include and seeing if shader is reimported)
  180. ----------------------------------------------------------------------
  181. Scene View
  182. Test:
  183. - Custom handles from C#
  184. - Handle snapping
  185. - Multi-select Move/Rotate/scale