We’re probably getting a bit saturated with these things now, but here’s my attempt: http://thetechartist.com/?p=279 It uses the gizmo module I cooked up, as well as coppertop’s ODE Middleware module for the “game”. All UI stuff is done with wxPython.
Easy to use, fairly powerful, and it sounds like it’s fun to make.
I love making editors and have made many in DarkBASIC, but my next one I want to try making with Panda. I’m not entirely sure how to go about it though.
To my knowledge there are still a few users developing editors: Coppertop for one. I’m still trying to spend any and all available time developing this one however
Will hopefully put a usability test video up soon for you to have a gander!
None currently. Most of the base functionality is there though, so I suppose I could release a base version soon.
The Unity-style functionality is a bit more complex as it has a heavy influence on how you code your game; plus it starts getting into “that’s not how I would have done it” territory - potentially limiting the user base.
I would rather get a simpler but solid framework out sooner which does not include this, but including the appropriate hooks so that people can easily add functionality suitable to their project.
That sounds like a good idea.
Though I haven’t really used editors like these myself so I don’t really know how a general (non game-genre specific) editor can get into the “that’s not how I would have done it” territory.
I’ve just finished a major overhaul of my code and am gearing up for a first release. It’s going to be pretty light on features but should contain most of the basics:
Adding / transforming nodes
Editing node properties
Saving / Loading
Project management
Build to P3D option
Plugin system
Is this something people would be interested in using? Is this something people would be interested in contributing to? I’m trying to put the code together as simply as possible and am hoping that the plugin system will allow the core to remain light, solid and project agnostic while encouraging users to expand functionality for their individual needs. I’d be interested to hear people’s thoughts
How is the workflow planned? How do you attach your code to the nodes?
I’m trying hard at doing a level editor myself and i borrowed many ideas from Unity. So yeah, the demand is there, but the editor would need to be multiplatform, very well documented and stable. If the ideas and paradigms behind it are clear, then it shouldn’t be too hard to extend, so yes, you can expect collaboration in that case.
Like you I’m taking my cues from Unity. Currently a user attaches a script to a node my dragging and dropping it over the node in the viewport. The script is attached to the node path using a “hook” object (the circular reference kind).
I don’t know. It might be a bit late, since we both already have quite some code, which most probably follows different ideas (we only have the UI in common). And I doubt anybody is willing to abandon his project in favor of another one.
I’ve decided to make an initial release of the editor in order to get some opinions and feedback. I’s pretty light-weight on features at the moment but hopefully you should be able to gauge where the project is heading: https://github.com/Derfies/panda3d-editor
Linux users might run into some trouble at the moment as I’m running into the familiar GetHandle() returning 0 when trying to embed a panda viewport into a wx panel. If anyone knows the workaround I would love to hear it ( might be as simple as dropping my homebrew wxPandaPanel in favour of the support available in 1.8 ).
Usage
To give the editor a spin, try the following:
Create a new project
Import some models (.egg or .bam)
Middle mouse drag them into the scene
Translate, rotate and scale them as your desire
Set up some lights with the Create menu
Save the scene as test.xml
Build your project (File -> Build)
You should now have a p3d file which runs your scene.
Keys
4 - Wireframe view
5 - Shaded view
6 - Textured view
Q - Select
W - Translate
E - Rotate
R - Scale
Z - Undo
Shift-Z - Redo
F - Frame selection
Backspace - Delete
Ctrl-D - Duplicate
Arrow up - Select parent
Arrow down - Select child
Arrow left - Select previous child
Arrow right - Select next child
Mouse left - Pointing and selecting
Middle mouse - Your “doing” button. Use then to reparent nodes in the scene graph, or drag-drop models into the scene.
Requires
wxPython
There’s still a lot to do, but if you’re interested in the project then please leave your opinions below. Thanks!
I run into the GetHandle() issue. My workaround is the following:
self.GetTopLevelParent().Bind(wx.EVT_SHOW, self._onShow)
(...)
def _onShow(self, event):
if event.GetShow() and self.GetHandle():
# M$ Windows makes problems when initializing here. Call it after this function.
if os.name == "nt":
wx.CallAfter(self.initialize)
# All other OSes should be okay with instant init.
else:
self.initialize()
event.Skip()
:display:wgldisplay: Attempt to create pbuffer failed.
:display:wgldisplay: Attempt to create pbuffer failed.
:display:wgldisplay: Attempt to create pbuffer failed.
:display: wglGraphicsBuffer wouldn't open; abandoning.
:ShowBase(warning): Unable to open 'none' window.
Traceback (most recent call last):
File "main.py", line 7, in <module>
app = pandaEditor.App( redirect=False )
File "C:\Panda3D-1.8.0\python\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 7981, in __init__
self._BootstrapApp()
File "C:\Panda3D-1.8.0\python\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 7555, in _BootstrapApp
return _core_.PyApp__BootstrapApp(*args, **kwargs)
File "D:\Derfies-panda3d-editor-b0e8f1e\src\pandaEditor\app.py", line 37, in OnInit
ShowBase( self.frame.pnlGameView, self.frame.pnlEdView )
File "D:\Derfies-panda3d-editor-b0e8f1e\src\pandaEditor\showBase.py", line 14, in __init__
self.SetupEdWindow( wxGameWin, wxEdWin )
File "D:\Derfies-panda3d-editor-b0e8f1e\src\pandaEditor\showBase.py", line 65, in SetupEdWindow
wxGameWin.Initialize()
File "D:\Derfies-panda3d-editor-b0e8f1e\src\p3d\wxPanda.py", line 87, in Initialize
base.openDefaultWindow( props=wp, gsg=None )
File "C:\Panda3D-1.8.0\direct\showbase\ShowBase.py", line 884, in openDefaultWindow
self.openMainWindow(*args, **kw)
File "C:\Panda3D-1.8.0\direct\showbase\ShowBase.py", line 920, in openMainWindow
self.openWindow(*args, **kw)
File "C:\Panda3D-1.8.0\direct\showbase\ShowBase.py", line 675, in openWindow
raise StandardError, 'Could not open window.'
StandardError: Could not open window.
My system:
win 7, radeon hd6470m, panda 1.8, wxPython 2.8, python 2.7
wxPython with panda works on this machine with some samples from forum
If I were you, I would not use the path used by Unity to create * Object-scripts* like.
For example, I am passed from Unity to Panda3D for this reason, because I think that the Classes are easier to manage when the code is more complex.
@crolli: I think I know what might be going on. I’ll see if I can get a patch in tonight. Thanks for testing it.
@adanf: The first iteration of the editor does not include this feature: ive moved that functionality into a plugin which I will release later. At that stage you can choose to use it or just use the editor to build your scenes - whatever works best for you.
However, I would bet on more of a * Class-script * method like.
For example, for the class that support a model, you can drag and drop the script over 3d model and it become automatically a class object.
You can also make a variable like “class-instance” that automatically makes all 3d model instances (of the specified model above) part of the same class.
Therefore, if you have a 3d model of a tank (in a model list box or in the 3d editor) from an hypothetical RTS, with a simple drag and drop you can instantiate under the same class all the 3d model like it.
p.s.: I would do it if I had more time, but at the moment I have another project in mind, so you’re free to copy my idea
p.p.s.: Always remember that the problem in programming is not how you save the code, but the amount of code that a programmer must remember.
@crolli: I think I’ve fixed the issue you were having earlier. Give it another try and let me know how it goes.
@Nemesis: I’m not sure I understand how your code fix works - or at least I think my code already creates the wx panel first and then starts ShowBase. Can you explain a little or even submit a patch?