TODO.txt 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. --------- ALL LONG TERM TASKS / FIXES BELONG TO GOOGLE DOCS: ImplementationTODO OR PossibleImprovements ----------
  2. ----------------------------------------------------------------------
  3. Polish
  4. Other polish:
  5. - Add menu items:
  6. - Edit: Cut/Copy/Paste/Duplicate/Delete(need to make sure it works in Hierarchy, with shortcuts), View/Move/rotate/scale
  7. - Game Object (also add to context): Create(Empty, Empty Child, Camera, Renderable, Point/Spot/Directional Light), Apply prefab, Break prefab, Revert prefab
  8. - Inspector persistance (See below for details)
  9. Optional:
  10. - Ortographic camera views (+ gizmo in scene view corner that shows camera orientation) (Use custom handles and implement this?)
  11. - Add "focus on object" key (F) - animate it: rotate camera towards then speed towards while zooming in (+ menu entry)
  12. - Add tooltips to toolbar items and other buttons with icons
  13. - Undo/Redo
  14. - CmdRecordSO records an SO and all its children but it should only record a single SO
  15. - CmdRecordSO should instead of recording the entire object record a diff
  16. - There should be a CmdRecordSO equivalent for resources (probably)
  17. - Add commands for breaking or reverting a scene object
  18. - Test & finalize undo/redo system
  19. - Crash when adding a new directional light and then shutting down (also crash when just deleting a directional light)
  20. - Test VS 2015 Community as code editor (possibly also move the code to VS 2015)
  21. - Drag and drop of a mesh into Hierarchy doesn't instantiate it
  22. - Drag and dropping a prefab onto the scene (or hierarchy) should work the same as with meshes
  23. - Undocking of editor window doesn't work (they just get lost)
  24. - Start editor in fullscreen
  25. - If user clears the default shader he has no way of re-assigning it - add default shader to project folder? (needs to be packaged with project)
  26. - Toggle to enable/disable SceneObject in Inspector
  27. - Resource import options don't get saved
  28. - Cursors should be replaced with better ones, or at least hot-spots fixed
  29. - Either disable light tool icons before release or make them functional (With gizmos)
  30. More optional:
  31. - Add a way to use GUI elements in game window (Default GUI available to all, plus GUIWidget component for custom ones. Make sure skin can be changed for both.)
  32. - If a field gets optimized out from a material's GPU program it won't get persisted by the inspector (or serialized)
  33. - (i.e. the field exists in shader desc but not as a GPU variable)
  34. - I should probably store a copy of all shader fields in Material itself (and serialize that)
  35. - When I modify this make sure to copy parameter copying method that is called when shader changes (that persist parameters)
  36. - When starting play-in-editor, automatically make the Game Window active
  37. - Need to list all script components in the Components menu
  38. - When resizing library window while docked, selection area appears
  39. - Slow camera rotation at high fps (just limit FPS probably)
  40. - When starting drag from hierarchy tree view it tends to select another object (can't repro)
  41. - Handle seems to lag behind the selected mesh
  42. - Move all the code files into subfolders so their hierarchy is similar to VS filters
  43. - MenuBar - will likely need a way to mark elements as disabled when not appropriate (e.g. no "frame selected unless scene is focused")
  44. - Likely use a user-provided callback to trigger when populating the menus (I already added a callback to MenuItem, just need to implement it)
  45. - Word wrap weirdness
  46. - When a GUI element containing a long piece of text is created, and it has flexible size, the initial optimal size
  47. calculation will try to fit all the text in one row, even if during the actual size calculation that turns out to be impossible.
  48. What happens then is that the text is rendered into multiple rows but its visible area only shows the first row.
  49. Seriously optional:
  50. - Drag to select in scene view
  51. - Coroutines
  52. - Automatically generate readable inspector names and add [Name] attribute that allows custom naming
  53. - Add Range[] attribute to C# that forces a float/int to be displayed as a slider
  54. - GUI tabbing to switch between elements
  55. - Better Prefab inspector - display SceneObject inspector of top-level object, and possibly prefab hierarchy?
  56. - Do another optimization pass
  57. Finalizing:
  58. - Add copyright notices in all files & change license to GPL
  59. - Need to generate a proper merge of dev and preview branches
  60. - Use "git revert --no-commit <COMMITID>..HEAD" to reverse anything on the preview branch that was done after the branch creation, then merge
  61. - Consider moving dev to that branch completely and just marking the release with a tag (this might mean I just need to move the master branch to that repo instead of merging)
  62. - Test if C++ example still works
  63. - Add "example" for using the editor (possibly a video, or a set of screenshots + a data.rar with required resources)
  64. - Make sure to include BansheeOIS source in dependencies.
  65. ----------------------------------------------------------------------
  66. Inspector persistance
  67. - When I expand inspector elements and them come back to that object it should remember the previous state
  68. - In the Inspector base add a dictionary "Persistent<string, object>"
  69. - InspectorWindow will keep a reference to this dictionary whenever it creates a new inspector for SO or resource
  70. - Or if one already exists it will restore it
  71. - This dictionary will not persist editor shutdown
  72. - Generic inspector and inspectable fields can use the serialized property name for the key
  73. - Will need a way to retrieve the full property name, up to the parent Component/Resource
  74. - Will need to extend inspectable fields so they know their parent inspector so they have access to the dictionar
  75. - Custom inspectors can get rid of manual "isExpanded" bools and use the dictionary instead
  76. /*********************************************************************/
  77. /************************ LESS IMPORTANT *****************************/
  78. /*********************************************************************/
  79. ----------------------------------------------------------------------
  80. Mono notes
  81. I can get mono errors by checking g_print calls in goutput.c
  82. - Calling thunks incorrectly can cause those weird errors with no real callstack
  83. Running embedded mono with VS attached causes managed null refs to be registered as access violations
  84. There seems to be a bug in Mono when passing complex structs from C# to C++. e.g. passing Rect3 as a parameter
  85. will corrupt the parameter after it, even if layout and size is exact as the C++ version.
  86. Rect3 has child structs (Vector3) which could be the reason. Be aware of other similar problems.
  87. Mono cannot marshal structures? Taken from their documentation:
  88. Internal calls do not provide support for marshalling structures. This means that any API calls that take a structure
  89. (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.
  90. - This was further confirmed by one of the developers on a forum.
  91. Mono has problems with returning a struct from an internal C++ method. Returned value might end up being corrupted. It works weirdly as
  92. 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
  93. parameter solves the problem (presumably boxing the return value would also work).
  94. Sometimes exceptions cause a crash in Event, although this is due to an exception triggering a dialog box which triggers
  95. the message loop and causes another exception. Make sure to look for the original exception.
  96. Finalizers on attribute members will get called more than once. This causes issues if some of the members reference native
  97. objects as already deleted native objects will try to be deleted again.
  98. ----------------------------------------------------------------------
  99. MenuItem
  100. - Add keyboard controls to GUIMenuBar (left/right arrows should move between entries if user is not browsing a sub-menu)
  101. - esc should cancel out of the menu bar
  102. - alt should focus the menu bar
  103. ----------------------------------------------------------------------
  104. VisualStudio integration
  105. - VS integration will likely not work with VSExpress or Community edition
  106. - 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
  107. - Community edition should work similarily to Pro, but might have a different executable and/or registry paths
  108. - Make sure that 3rd party assemblies can be imported in the project, and that they are properly referenced in VS project generation and compilation
  109. - Support Visual Studio Code on other platforms
  110. ----------------------------------------------------------------------
  111. Library window
  112. - Might need to improve search (need to test). Do multiple search keywords work properly?
  113. - Consider delaying search until user stops pressing keys (so not to have thousands of search results in the initial stages)
  114. - Save & restore scroll position when Refresh happens
  115. ----------------------------------------------------------------------
  116. Handles
  117. - Ideally free scale handle indicator should always render and be interactable and never be hidden by axis scale indicators (Not high priority)
  118. - Raycast snapping Ribek suggested
  119. ----------------------------------------------------------------------
  120. Include files:
  121. - Test if default values work
  122. - Test project library dependant resources (e.g. changing an include and seeing if shader is reimported)
  123. ----------------------------------------------------------------------
  124. Scene View
  125. Test custom handles from C#
  126. ----------------------------------------------------------------------
  127. C# Material/Shader
  128. TODO - Implement param block and sampler support
  129. TODO - When creating a Material without a shader, a default one should be used, at least in editor
  130. TODO - Setting Material array parameters isn't possible from C#