TODO.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. ----------------------------------------------------------------------
  7. Project library
  8. My GUID generation is screwed up. If multiple GUIDs are generated in succession then the timestamp will remain
  9. the same and the only variable will be the 4byte random number, which can sometimes end up identical to the previous number.
  10. ----------------------------------------------------------------------
  11. C# Material/Shader:
  12. TODO - Material/Shader has no color type so I cannot know when to display normal vector and when color in inspector
  13. TODO - Implement param block and sampler support
  14. TODO - When creating a Material without a shader, a default one should be used, at least in editor
  15. TODO - Setting Material array parameters isn't possible from C#
  16. GUIResourceField doesn't distinguish between tex2d, tex3d and texcube.
  17. ----------------------------------------------------------------------
  18. Project window
  19. Opening drop down when it doesn't fit vertically opens it at the wrong position
  20. Crash when opening and closing the context menu many times, trying to delete a GUILayout that has already been deleted
  21. - This might happen when parent layout or panel goes out of scope. It will get destroyed but it will not mark any of its children as destroyed
  22. - And I can't just call Destroy in finalizer since it accesses its children which might have been finalized already
  23. - When a window is closed(editor, modal or drop down, do I call destroy on its child layout?)
  24. Other:
  25. - Double click doesn't seem to work
  26. - Elements in the options drop down don't have proper style and are ugly in general
  27. - List view doesn't look right
  28. Test context menu
  29. Test drop down window
  30. When clicking on drop down window it will interact with GUI elements beneath it
  31. Simple tasks:
  32. - Hook up windows drag and drop support
  33. - Hook up drag and drop internal to project window
  34. - Hook up drag and drop that interacts with scene and hierarchy windows
  35. - Ensure dragging near scroll area border scrolls the area
  36. - Add search bar
  37. - Add directory bar
  38. Test:
  39. - Basic look & navigation, selection/deselection
  40. - Cut/Copy/Paste/Duplicate
  41. - Ping scroll and effect
  42. Later:
  43. - Shift and ctrl-click to select multiple entries
  44. - Drag to select multiple entries?
  45. ----------------------------------------------------------------------
  46. Resources
  47. - Load/Unload/UnloadUnused
  48. - Uses same paths as ProjectLibrary
  49. - It uses different logic depending on Application.isEditor
  50. - If not in editor then a different path is used
  51. - That path is ..\..\Data (relative to the executable)
  52. - When in editor it also does special ProjectLibrary check to ensure that resource is included in final project
  53. - Internally just calls Resources (C++) Load/Unload/UnloadUnused
  54. - Need a flag in ProjectLibrary to include a resource in the final build
  55. - Need to be able to set that flag from C# (Likely through ProjectLibrary) interface
  56. - The final build procedure for the game would then be:
  57. - Copy all the prebuilt binaries (Banshee libraries, Banshee assemblies, 3rd party libraries and prebuilt executable) from Editor install folder to output folder
  58. - Which set of binaries is used depends on selected platform (e.g. win/mac/linux or 32/64bit)
  59. - Recompile script assemblies if needed and copy them from project Internal folder to output folder
  60. - Copy the Builtin resources for engine from Editor install folder to output folder
  61. - Copy all the resources marked with the flag mentioned above to \Data subfolder in the output folder, preserving the same asset structure
  62. ----------------------------------------------------------------------
  63. Simple stuff
  64. C#:
  65. Dialog.Show(title, text, btn1 text, btn1 callback, btn2 text, btn2 callback, btn3 text, btn3 callback)
  66. Other simple stuff:
  67. - Inject an icon into an .exe (Win32 specific)
  68. - C# wrapper for GUISkin (and a way to assign the current skin to a window)
  69. - Move all the code files into subfolders so their hierarchy is similar to VS filters
  70. - Font doesn't have a C# interface
  71. - Get rid of PoolAlloc and other unused allocators (plus fix bs_new and others which have weird overloads)
  72. - Call stack from C# to use in Debug.Log calls
  73. - Get rid of event callback from HString and figure out a better way
  74. - GUI TextureField similar to ResourceField but it displays the texture it has assigned
  75. - Better handle and gizmo shaders
  76. ----------------------------------------------------------------------
  77. Handles
  78. When scaling using center make sure to offset the object before scale
  79. Handles should probably not having shading, or have better shading.
  80. Rotate handle:
  81. - How to handle local/global with rotate handle?
  82. - This maybe just determines initial rotation of the handle?
  83. - I don't think my code properly handles rotation handle transforms (e.g. arc drawing)
  84. Ideally free scale handle indicator should always render and be interactable and never be hidden by axis scale indicators (Not high priority)
  85. Later:
  86. - Raycast snapping Ribek suggested
  87. ----------------------------------------------------------------------
  88. Include files:
  89. Test:
  90. - Try preprocessing using one RenderAPi and then load the shaders using another and see if they're created normally
  91. - Test if default values work
  92. - Test project library dependant resources (e.g. changing an include and seeing if shader is reimported)
  93. ----------------------------------------------------------------------
  94. Scene View
  95. AFTER I have scene widget in C#:
  96. - Test custom handles from C#
  97. - Test handle snapping
  98. Need a way to drag and drop items from Scene tree view to Scene view
  99. - When dragging a mesh it should by default create a SceneObject with a renderable
  100. - I might want a C# DragAndDrop class? It can contain Resource or SceneObject only for now, similar to Selection
  101. ----------------------------------------------------------------------
  102. Other
  103. There is a memory corruption happening. Haven't determined where exactly but it's possible it has something
  104. to do with the opening of ColorPicker window. One time I got a heap read after delete error caused by GUIManager
  105. attempting to allocate a new transient mesh, and another time I got a hang when inserting a script object into a std::set.
  106. Got a crash on shutdown that was caused by locking a mutex in an Event destructor. Event was Platform::onMouseCaptureChanged.
  107. Issue happened when I closed the app via the X button (if that's relevant). It doesn't seem to happen always.
  108. - 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.
  109. Create a stack allocatable custom vector implementation and make getResourceDependencies and getCoreDependencies use it.
  110. - These methods are called often and cause allocations whenever they are.
  111. Add ProjectWindow and HierarchyWindow to C#
  112. - Make TreeViews a C# element?
  113. Set up a default layout and save it
  114. ----------------------------------------------------------------------
  115. Multi-resource saving
  116. - Modify Font so it doesn't contain a texture, but instead keeps a handle to it
  117. - Register it in its meta file
  118. - When saving such a resource with dependencies save the contained files to a sub-directory with the same name as top level resource
  119. - If it already exists in the manifest at a different location do it anyway, keep the other copy as-is in case user wanted it that way
  120. - I'm not sure whether to do this for all Resource::save calls or only ones originating from ProjectLIbrary?
  121. /*********************************************************************/
  122. /************************ LESS IMPORTANT *****************************/
  123. /*********************************************************************/
  124. ----------------------------------------------------------------------
  125. Mono notes
  126. I can get mono errors by checking g_print calls in goutput.c
  127. - Calling thunks incorrectly can cause those weird errors with no real callstack
  128. Running embedded mono with VS attached causes managed null refs to be registered as access violations
  129. There seems to be a bug in Mono when passing complex structs from C# to C++. e.g. passing Rect3 as a parameter
  130. will corrupt the parameter after it, even if layout and size is exact as the C++ version.
  131. Rect3 has child structs (Vector3) which could be the reason. Be aware of other similar problems.
  132. Mono cannot marshal structures? Taken from their documentation:
  133. Internal calls do not provide support for marshalling structures. This means that any API calls that take a structure
  134. (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.
  135. ----------------------------------------------------------------------
  136. MenuItem
  137. LATER: Add keyboard controls to GUIMenuBar (left/right arrows should move between entries if user is not browsing a sub-menu)
  138. - esc should cancel out of the menu bar
  139. - alt should focus the menu bar
  140. ----------------------------------------------------------------------
  141. VisualStudio integration
  142. VS integration will likely not work with VSExpress or Community edition
  143. - 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
  144. - Community edition should work similarily to Pro, but might have a different executable and/or registry paths
  145. For later:
  146. - Make sure that 3rd party assemblies can be imported in the project, and that they are properly referenced in VS project generation and compilation
  147. ----------------------------------------------------------------------
  148. Script compilation
  149. For later:
  150. - I need to hook up script compilation with assembly refresh, and the build system.
  151. - e.g. when recompiling inside the editor it should automatically start compiling when changes are detected,
  152. show some kind of visual indicator and refresh assemblies when its done. When publishing it should recompile
  153. assemblies for release. Also hook up console to compiler output?