| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- --------- ALL LONG TERM TASKS / FIXES BELONG TO GOOGLE DOCS: ImplementationTODO OR PossibleImprovements ----------
- ----------------------------------------------------------------------
- Assembly refresh
- When serializing Camera I cannot save the reference to RenderTexture. Make it a Resource?
- Possibly set up automatic refresh in debug mode after initialization? As an ad-hoc unit test
- Modal windows are set up as persistent but I don't serialize their internal data anywhere
- ----------------------------------------------------------------------
- C# Material/Shader:
- TODO - Implement param block and sampler support
- TODO - When creating a Material without a shader, a default one should be used, at least in editor
- TODO - Setting Material array parameters isn't possible from C#
- GUIResourceField doesn't distinguish between tex2d, tex3d and texcube.
- ---------------------------------------------------------------------
- ProjectLibrary import
- I'm not sure if queued dependencies are handled properly. They're handled on an internal ProjectLibrary loop but perhaps I should
- return them in checkForModifications?
- ---------------------------------------------------------------------
- Prefab diff
- Add "dirty object" system to C#. Each ScriptResource and ScriptGameObject should have a dirty flag.
- - It should be toggle-able via EditorUtility.SetDirty or similar. (Possibly make this part of ProjectLibrary)
- - There should also be a method to check if something is dirty via EditorUtility.IsDirty or similar. (Possibly make this part of ProjectLibrary)
- - 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)
- - Add a "Save Project" button that automatically saves all dirty assets. Do this automatically when user quits the editor.
- - Call SetDirty manually whenever:
- - A new object or component is added to the scene
- - An object or component is removed from the scene
- - An object is reparented
- - When component or resource is modified from inspector
- - Record all portions where objects & components get modified so I can mark them dirty, will likely need
- to use those some points for undo/redo
- Test (likely later once I have more editor functionality working):
- - Game object handle compare
- - ID restore systems
- - Native+Managed diff (only the link between the two)
- Code quality improvements:
- - Modify BinarySerializer so that _encodeIntermediate outputs intermediate format directly without a full on encode
- - Consider making ManagedSerializable* array/list/dictionary method/field references static (right now each instance has its own instance
- but they're identical)
- ----------------------------------------------------------------------
- Polish
- Ribek use:
- - Default material has no shader. What shader to assign to default materials?
- - When I'm directly editing a resource like material, I need to save it after editing is done. Use the "dirty" system for that?
- - Hook up color picker to guicolor field
- - Test release mode
- Other polish:
- - Add menu items:
- - Edit: Cut/Copy/Paste/Duplicate/Delete(need to make sure it works in Hierarchy, with shortcuts), View/Move/rotate/scale
- - Game Object (also add to context): Create(Empty, Empty Child, Camera, Renderable, Point/Spot/Directional Light), Apply prefab, Break prefab, Revert prefab
- - When I expand inspector elements and them come back to that object it should remember the previous state
- - Add a chaching mechanism to inspector (likely based on instance ID & property names)
- - This has to work not only when I come back to the object, but whenever inspector rebuilds (e.g. after removing element from array)
- - Consider saving this information with the serialized object
- - This has to work for custom inspectors as well (e.g. manually adding GUIFoldout) - manually recording "isExpanded" bool might be okay in this case
- - Need a proper way to detect when the scene was modified (and display it somewhere)
- Stage 2 polish:
- - Prefabs
- - Game window
- - Game play/pause/step (+ save/restore objects on play/pause switch)
- - Resource hotswap
- - C# script compiling in editor
- - VS integration
- - When managed exception happens log an error and continue execution
- - Doing a pass over all methods referencing Internal_ methods ensuring they do proper checking on C# side would be good
- - Game publishing (Build window, collect resources, output exe, default viewport) (described below)
- - Splash screen
- - Settings/Preferences window (+ menu entry)
- - Console window
- - About box - license info, version info and other general info (+ menu entry)
- Optional:
- - When starting drag from hierarchy tree view it tends to select another object (can't repro)
- - Handle seems to lag behind the selected mesh
- - When resizing library window while docked, selection area appears
- - Move all the code files into subfolders so their hierarchy is similar to VS filters
- - Undo/Redo
- - CmdRecordSO records an SO and all its children but it should only record a single SO
- - CmdRecordSO should instead of recording the entire object record a diff
- - There should be a CmdRecordSO equivalent for resources (probably)
- - Add commands for breaking or reverting a scene object
- - Test & finalize undo/redo system
- - Add "focus on object" key (F) - animate it: rotate camera towards then speed towards while zooming in (+ menu entry)
- - Ortographic camera views (+ gizmo in scene view corner that shows camera orientation)
- - Drag to select in scene view
- - MenuBar - will likely need a way to mark elements as disabled when not appropriate (e.g. no "frame selected unless scene is focused")
- - Likely use a user-provided callback to trigger when populating the menus (I already added a callback to MenuItem, just need to implement it)
- - Need to list all script components in the Components menu
- Seriously optional:
- - Automatically generate readable inspector names and add [Name] attribute that allows custom naming
- - Add Range[] attribute to C# that forces a float/int to be displayed as a slider
- - GUI tabbing to switch between elements
- - Better Prefab inspector - display SceneObject inspector of top-level object, and possibly prefab hierarchy?
- Finalizing:
- - Add copyright notices in all files & change license to GPL
- - Need to generate a proper merge of dev and preview branches
- - Use "git revert --no-commit <COMMITID>..HEAD" to reverse anything on the preview branch that was done after the branch creation, then merge
- ----------------------------------------------------------------------
- Build system
- - Test Resources (if loading works and if they're properly packaged in build)
- - The final build procedure for the game should be:
- - Copy all the prebuilt binaries (Banshee libraries, Banshee assemblies, 3rd party libraries and prebuilt executable) from Editor install folder to output folder
- - Which set of binaries is used depends on selected platform (e.g. win/mac/linux or 32/64bit)
- - Recompile script assemblies if needed and copy them from project Internal folder to output folder
- - Copy the Builtin resources for engine from Editor install folder to output folder
- - Copy all the resources marked with the flag mentioned above to \Data subfolder in the output folder, preserving the same asset structure
- - Make sure to go over texture resources and ensure they are saved in the valid format
- as we don't want to do format conversion at runtime (Not cruical, but it should be done eventually)
- - This should something similar to Unity where when changing the platform all resources get reimported
- - Make sure to clear all prefab diffs (possibly store them elsewhere in the first place)
- - And all prefab instances should have updateFromPrefab called on them.
- ----------------------------------------------------------------------
- Other
- There is a memory corruption happening. Haven't determined where exactly but it's possible it has something
- to do with the opening of ColorPicker window. One time I got a heap read after delete error caused by GUIManager
- attempting to allocate a new transient mesh, and another time I got a hang when inserting a script object into a std::set.
- /*********************************************************************/
- /************************ LESS IMPORTANT *****************************/
- /*********************************************************************/
- ----------------------------------------------------------------------
- Mono notes
- I can get mono errors by checking g_print calls in goutput.c
- - Calling thunks incorrectly can cause those weird errors with no real callstack
- Running embedded mono with VS attached causes managed null refs to be registered as access violations
- There seems to be a bug in Mono when passing complex structs from C# to C++. e.g. passing Rect3 as a parameter
- will corrupt the parameter after it, even if layout and size is exact as the C++ version.
- Rect3 has child structs (Vector3) which could be the reason. Be aware of other similar problems.
- Mono cannot marshal structures? Taken from their documentation:
- Internal calls do not provide support for marshalling structures. This means that any API calls that take a structure
- (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.
- Mono has problems with returning a struct from an internal C++ method. Returned value might end up being corrupted. It works weirdly as
- 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
- parameter solves the problem (presumably boxing the return value would also work).
- Sometimes exceptions cause a crash in Event, although this is due to an exception triggering a dialog box which triggers
- the message loop and causes another exception. Make sure to look for the original exception.
- Finalizers on attribute members will get called more than once. This causes issues if some of the members reference native
- objects as already deleted native objects will try to be deleted again.
- ----------------------------------------------------------------------
- MenuItem
- - Add keyboard controls to GUIMenuBar (left/right arrows should move between entries if user is not browsing a sub-menu)
- - esc should cancel out of the menu bar
- - alt should focus the menu bar
- ----------------------------------------------------------------------
- VisualStudio integration
- - VS integration will likely not work with VSExpress or Community edition
- - 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
- - Community edition should work similarily to Pro, but might have a different executable and/or registry paths
- - Make sure that 3rd party assemblies can be imported in the project, and that they are properly referenced in VS project generation and compilation
- ----------------------------------------------------------------------
- Script compilation
- - I need to hook up script compilation with assembly refresh, and the build system.
- - e.g. when recompiling inside the editor it should automatically start compiling when changes are detected,
- show some kind of visual indicator and refresh assemblies when its done. When publishing it should recompile
- assemblies for release. Also hook up console to compiler output?
- ----------------------------------------------------------------------
- Library window
- - Might need to improve search (need to test). Do multiple search keywords work properly?
- - Consider delaying search until user stops pressing keys (so not to have thousands of search results in the initial stages)
- - Save & restore scroll position when Refresh happens
- ----------------------------------------------------------------------
- Handles
- - Ideally free scale handle indicator should always render and be interactable and never be hidden by axis scale indicators (Not high priority)
- - Raycast snapping Ribek suggested
- ----------------------------------------------------------------------
- Include files:
- - Test if default values work
- - Test project library dependant resources (e.g. changing an include and seeing if shader is reimported)
- ----------------------------------------------------------------------
- Scene View
- Test:
- - Custom handles from C#
- - Handle snapping
- - Multi-select Move/Rotate/scale
|