PySoy Scene Designer
My proposal is to create a GUI editor for visualizing a PySoy project. Projects made with the editor will be displayed as a collection of scene nodes, usually connected to each other through some mechanism, e.g. a portal. The connections between scene nodes will be displayed as lines, using collision to determine where the scene nodes are placed relative to each other.
The interface itself is geared at being modern, intuitive, explorative, and of course useful. Modern because it will reduce wasted space as much as possible, much like modern web browsers do. Intuitive because when a new user attempts to use it they should be able to pick it up relatively easily. Explorative because the user should be able to create a body within the editor without knowing what they will need before hand.
The windows within will work like a tiling window manager, using hBoxes and vBoxes to manage where windows go. This way, maximum space will always be used and will not take away time from the developer having to arrange windows. Hiding a window will cause the other windows in it's group to occupy the rest of the space. There will always be a main window, by default set to be the Editor Window. This functionality will also be used for making a window take up the entire screen. (Just 'hide' the other windows, and make the window you want full to take up the entire editor be the main window.) The interface should also adhere well to good principles of user interface design.
Having things use hBoxes and vBoxes will also make switching and resizing windows and areas relative to each other possible. Windows should be able to switch each other inside their hBox or vBox scope shown in the mockup below.
- Editor Window: Window used to place, move and rotate objects. The camera should work like a body which floats outside of the realm of collision, using using the scroll wheel will serve as primary way of zooming in and out. (Although there should be a way to do it just with the keyboard.) As for how to logically attach rooms in such a way that it's intuitive to the user, that will take some more thought. This could simply be done with lines which attach rooms to each other like nodes.
- Scenes Window: Window used to select placed scenes or create new ones, with a sublist attached to each with the bodies in that scene.
- Bodies Window: Window with an ordered list of groups of all placeable bodies. To add a new body, the user can right click on a group and add a new body with which the type of body, material, textures, etc that they want attached to the body.
- Preview Window: Window which will preview the body selected in the Body window.
- Python Console: A python console associated with the current workspace.
The editor window will display scenes as nodes connected to each other, with the scene name labeling the individual nodes. When a user double clicks on a node, the editor will take them into that specific scene for editing. To jump back out the node view should be simple as a keyboard shortcut. Nodes cluster together based on how many connections they have to each other. Nodes that have no connections to each or nodes that are connected to other nodes but not to each other will lie further outside of the main node cluster. The primary node is the node marked as such by the user. This node is the one that all other nodes will be relative too when displayed in the editor. Moving nodes around could also be handled manually by the user, which may end up being the most reasonable option. Internally this could be represented by some derivative of the disjoint set data structure.
Moving around objects within the editor window when inside an individual scene could work on plane basis, with bodies treated like top down 2D objects relative to the camera perspective, so if you move the camera around you also move the axis on which you move the bodies on.
It will be resizable and switchable with the python console.
The python console is pretty straight forward. It will always be associated with whatever node you are in. Perhaps at some point the option to open up multiple python windows should be added. (All vBoxed and hBoxed inside the python console area.
It will be resizable and switchable with the editor window.