| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- --------- 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
- ----------------------------------------------------------------------
- Project library
- My GUID generation is screwed up. If multiple GUIDs are generated in succession then the timestamp will remain
- the same and the only variable will be the 4byte random number, which can sometimes end up identical to the previous number.
- ----------------------------------------------------------------------
- C# Material/Shader:
- TODO - Material/Shader has no color type so I cannot know when to display normal vector and when color in inspector
- 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.
- ----------------------------------------------------------------------
- Project window
- Opening drop down when it doesn't fit vertically opens it at the wrong position
- Crash when opening and closing the context menu many times, trying to delete a GUILayout that has already been deleted
- - 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
- - And I can't just call Destroy in finalizer since it accesses its children which might have been finalized already
- - When a window is closed(editor, modal or drop down, do I call destroy on its child layout?)
- Other:
- - Double click doesn't seem to work
- - Elements in the options drop down don't have proper style and are ugly in general
- - List view doesn't look right
- Test context menu
- Test drop down window
- When clicking on drop down window it will interact with GUI elements beneath it
- Simple tasks:
- - Hook up windows drag and drop support
- - Hook up drag and drop internal to project window
- - Hook up drag and drop that interacts with scene and hierarchy windows
- - Ensure dragging near scroll area border scrolls the area
- - Add search bar
- - Add directory bar
- Test:
- - Basic look & navigation, selection/deselection
- - Cut/Copy/Paste/Duplicate
- - Ping scroll and effect
- Later:
- - Shift and ctrl-click to select multiple entries
- - Drag to select multiple entries?
- ----------------------------------------------------------------------
- Resources
- - Load/Unload/UnloadUnused
- - Uses same paths as ProjectLibrary
- - It uses different logic depending on Application.isEditor
- - If not in editor then a different path is used
- - That path is ..\..\Data (relative to the executable)
- - When in editor it also does special ProjectLibrary check to ensure that resource is included in final project
- - Internally just calls Resources (C++) Load/Unload/UnloadUnused
- - Need a flag in ProjectLibrary to include a resource in the final build
- - Need to be able to set that flag from C# (Likely through ProjectLibrary) interface
- - The final build procedure for the game would then 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
- ----------------------------------------------------------------------
- Simple stuff
- C#:
- Dialog.Show(title, text, btn1 text, btn1 callback, btn2 text, btn2 callback, btn3 text, btn3 callback)
- Other simple stuff:
- - Inject an icon into an .exe (Win32 specific)
- - C# wrapper for GUISkin (and a way to assign the current skin to a window)
- - Move all the code files into subfolders so their hierarchy is similar to VS filters
- - Font doesn't have a C# interface
- - Get rid of PoolAlloc and other unused allocators (plus fix bs_new and others which have weird overloads)
- - Call stack from C# to use in Debug.Log calls
- - Get rid of event callback from HString and figure out a better way
- - GUI TextureField similar to ResourceField but it displays the texture it has assigned
- - Better handle and gizmo shaders
- ----------------------------------------------------------------------
- Handles
- When scaling using center make sure to offset the object before scale
- Handles should probably not having shading, or have better shading.
- Rotate handle:
- - How to handle local/global with rotate handle?
- - This maybe just determines initial rotation of the handle?
- - I don't think my code properly handles rotation handle transforms (e.g. arc drawing)
- Ideally free scale handle indicator should always render and be interactable and never be hidden by axis scale indicators (Not high priority)
- Later:
- - Raycast snapping Ribek suggested
- ----------------------------------------------------------------------
- Include files:
- Test:
- - Try preprocessing using one RenderAPi and then load the shaders using another and see if they're created normally
- - Test if default values work
- - Test project library dependant resources (e.g. changing an include and seeing if shader is reimported)
- ----------------------------------------------------------------------
- Scene View
- AFTER I have scene widget in C#:
- - Test custom handles from C#
- - Test handle snapping
- Need a way to drag and drop items from Scene tree view to Scene view
- - When dragging a mesh it should by default create a SceneObject with a renderable
- - I might want a C# DragAndDrop class? It can contain Resource or SceneObject only for now, similar to Selection
- ----------------------------------------------------------------------
- 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.
- Got a crash on shutdown that was caused by locking a mutex in an Event destructor. Event was Platform::onMouseCaptureChanged.
- Issue happened when I closed the app via the X button (if that's relevant). It doesn't seem to happen always.
- - 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.
- Create a stack allocatable custom vector implementation and make getResourceDependencies and getCoreDependencies use it.
- - These methods are called often and cause allocations whenever they are.
- Add ProjectWindow and HierarchyWindow to C#
- - Make TreeViews a C# element?
- Set up a default layout and save it
- ----------------------------------------------------------------------
- Multi-resource saving
- - Modify Font so it doesn't contain a texture, but instead keeps a handle to it
- - Register it in its meta file
- - When saving such a resource with dependencies save the contained files to a sub-directory with the same name as top level resource
- - 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
- - I'm not sure whether to do this for all Resource::save calls or only ones originating from ProjectLIbrary?
- /*********************************************************************/
- /************************ 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.
- ----------------------------------------------------------------------
- MenuItem
- LATER: 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
- For later:
- - 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
- For later:
- - 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?
|