mbrlabs / mundus Goto Github PK
View Code? Open in Web Editor NEWA 3D world/level editor built with Java, Kotlin & libGDX.
License: Apache License 2.0
A 3D world/level editor built with Java, Kotlin & libGDX.
License: Apache License 2.0
Currently all load/store operations happen on the UI thread. While this is not a problem for small scenes, the editor is going to be unresponsive if they get bigger.
This requires also a load/store process dialog while the operation is running. The best way to do this is probably to have something like an AsyncTask (see how Android does it).
When switching between tools, the last selected tool should be used for all subsequent clicks on game objects.
This is especially important if the user selects a game object from the outline.
Currently the tool defaults back to the translate tool if the game object is deselected using the ESC key.
I think sooner or later we will need a physics component for the game objects:
So the question is, which priority does this feature have and which features must be implemented first to achieve a good solution?
Currently all model assets have one or more default materials. All model components that use this model asset adopt these materials and you can not change the material of model components individually.
Model components must store the materials asset ids they use by themselves. This way, the can change materials assets and modify them.
Hey guys,
for the first real usable release it would be cool if we had a project logo.
We need 2 logos/icons:
Unfortunately i'm not very artistic. So this is the current placeholder:
As continuation of the
#4
After I've passed the corresponding param to jvm via modified run
task, Mundus editor has successfully started. But when I've tried WSAD keys to move my camera around -- the Mundus window has disappeared( but the process wasn't killed). I had 3 retries with the same result. So I've tried to figure out and it seems that the statement from GLFW in exception covers the reason:
Please run the JVM with -XstartOnFirstThread and
make sure a window toolkit other than GLFW (e.g. AWT or JavaFX) is not initialized.
at org.lwjgl.glfw.EventLoop
I have added jvmArgs "-Djava.awt.headless=true"
to the run task extended in #4
and had to remove the GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
from com.mbrlabs.mundus.Main
because it throws exception in headless mode.
After such set of changes everything works like a charm.
Currently the ui tree in the outline gets rebuilt from scratch if a game object is added, deleted or moved. This causes all expanded nodes to collapse, which is bad.
After last tons of changes with assets there is an issue with mundus.
`
:editor:run[23:08][Fatal][Log] java.io.IOException: The system cannot find the path specified
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at com.mbrlabs.mundus.utils.Log.prepareLogFile(Log.java:92)
at com.mbrlabs.mundus.utils.Log.init(Log.java:70)
at com.mbrlabs.mundus.Main.main(Main.java:37)
[23:08][Fatal][Log] java.lang.NullPointerException
at com.mbrlabs.mundus.utils.Log.prepareLogFile(Log.java:98)
at com.mbrlabs.mundus.utils.Log.init(Log.java:70)
at com.mbrlabs.mundus.Main.main(Main.java:37)
[23:08][Fatal][Log] Uncaught exception occurred, error report will be saved
Exception: java.lang.NullPointerException thrown from the UncaughtExceptionHandler in thread "main"
`
The problem is it doesn't create the .mundus subfolder under Windows user's folder.
Also, just wondering -- is it typo or "as designed" -- the name of the log file is mundusspacedate.log?
Implement a scale tool. Take a look at the TranslateTool for a starting point.
Should look something like the scale tool in unity: http://docs.unity3d.com/400/Documentation/Images/manual/Transforms-3.jpg
Define a stable editor api and load plugins at runtime. More like a v.0.2.0 feature
Api scope:
Russia is top!
Implement a Unity-like asset system.
I dont't know the actual planned workflow to create a game with mundus, but i think we will need something for the game logic.
1 Solution (possible in near future):
2 Integrate a script component (javascript):
3 Integrate other compatible scripting language (but which is compatible with android?)
But why use a scripting component?
What do you think? Do we need scripting add all, how far will this project go?
Materials are special asset files, that describe the material of a model or anything that can be rendered.
Thy can be be created, edited and assigned to models.
In the outline you should be able to duplicate game objects.
-> deep copy of game object with all children + attached components
When I select an asset like a tree, I see in the dialog the tree rotating, but when I try to import, nothing happens. I can supply screenshots if necessary.
Hey, fine job in there. Do you by aby chance have scaling on your radar? Maybe I could help.
Currently, when one puts the model to some point on terrain, the model has its normal always facing Y-UP(0,1,0). IMHO, model should respect the slope of the terrain when user places it. It means it should ac-ly respect the normal at the point of terrain. Please see the image with example how it looks like after the corresponding code change:
At least, we should give an option to the user if he wants his model to respect the slope of the terrain.
This is improvement, not a bug :)
I have an exception:
java.io.FileNotFoundException: C:\Users\LINKOR.mundus\mundus.registry (Не удается найти указанный файл)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at com.mbrlabs.mundus.editor.core.kryo.KryoManager.loadRegistry(KryoManager.java:94)
at com.mbrlabs.mundus.editor.Mundus.(Mundus.kt:93)
at com.mbrlabs.mundus.editor.Mundus.(Mundus.kt:54)
at com.mbrlabs.mundus.editor.Editor.create(Editor.kt:62)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.initializeListener(Lwjgl3Window.java:416)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:364)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:136)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:110)
at com.mbrlabs.mundus.editor.Main.launchEditor(Main.kt:52)
at com.mbrlabs.mundus.editor.Main.main(Main.kt:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
[09:08][Fatal][Log] com.badlogic.gdx.utils.GdxRuntimeException: java.lang.ExceptionInInitializerError
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:116)
at com.mbrlabs.mundus.editor.Main.launchEditor(Main.kt:52)
at com.mbrlabs.mundus.editor.Main.main(Main.kt:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ExceptionInInitializerError
at com.mbrlabs.mundus.editor.Editor.setupInput(Editor.kt:96)
at com.mbrlabs.mundus.editor.Editor.create(Editor.kt:70)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.initializeListener(Lwjgl3Window.java:416)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:364)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:136)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:110)
... 7 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: No com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle registered with name: default
at com.badlogic.gdx.scenes.scene2d.ui.Skin.get(Skin.java:154)
at com.badlogic.gdx.scenes.scene2d.ui.Window.(Window.java:61)
at com.kotcrab.vis.ui.widget.VisWindow.(VisWindow.java:52)
at com.kotcrab.vis.ui.widget.VisWindow.(VisWindow.java:47)
at com.kotcrab.vis.ui.widget.file.FileChooser.(FileChooser.java:170)
at com.kotcrab.vis.ui.widget.file.FileChooser.(FileChooser.java:162)
at com.mbrlabs.mundus.editor.ui.UI.(UI.kt:58)
at com.mbrlabs.mundus.editor.ui.UI.(UI.kt:47)
... 13 more
[09:08][Fatal][Log] Uncaught exception occurred, error report will be saved
I ran Mundus in IntelliJ IDEA...
Russia is top!
I tried building the project from the command line and after the dependencies were downloaded, I got a NullPointerException. Here is the full message:
[08:34][Fatal] java.lang.NullPointerException
at com.mbrlabs.mundus.core.Mundus.dispose(Mundus.java:238)
at com.mbrlabs.mundus.Editor.dispose(Editor.java:234)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.dispose(Lwjgl3Window.java:281)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.cleanup(Lwjgl3Application.java:153)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:104)
at com.mbrlabs.mundus.Main.main(Main.java:51)
When dispose is called, goPicker, toolManager, commandHistory, and projectManager are null. When I tried to comment out those dispose() calls, I got this error:
[08:35][Fatal] java.lang.IllegalStateException: frame buffer couldn't be constructed: incomplete attachment
at com.badlogic.gdx.graphics.glutils.GLFrameBuffer.build(GLFrameBuffer.java:223)
at com.badlogic.gdx.graphics.glutils.GLFrameBuffer.<init>(GLFrameBuffer.java:118)
at com.badlogic.gdx.graphics.glutils.FrameBuffer.<init>(FrameBuffer.java:57)
at com.badlogic.gdx.graphics.glutils.FrameBuffer.<init>(FrameBuffer.java:45)
at com.mbrlabs.mundus.tools.picker.BasePicker.<init>(BasePicker.java:40)
at com.mbrlabs.mundus.tools.picker.GameObjectPicker.<init>(GameObjectPicker.java:39)
at com.mbrlabs.mundus.core.Mundus.init(Mundus.java:105)
at com.mbrlabs.mundus.Editor.create(Editor.java:83)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.initializeListener(Lwjgl3Window.java:272)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:239)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:127)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:97)
at com.mbrlabs.mundus.Main.main(Main.java:51)
[08:35][Fatal] Uncaught exception occurred, error report will be saved
I don't know enough about Libgdx or this project to fix the bug but hopefully it can be fixed. This happened on macOS.
Implement new history command for undo/redoing deletion of game objects. On every delete, create a new command and add it to the command history.
Implementation of some common noise functions (e.g. Perlin noise) for the terrain (Terrain.java).
Each noise function should have it's own class to keep the terrain class clean.
UI controls should be implemented in the Terrain widget of the inspector (TerrainComponentWidget.java / TerrainGenTab.java).
Thumbnail images for texture,model & material assets.
Hi,
Considering you've switched this project to use LWJGL3, these changes require passing additional property to JVM on MacOS X( any 7\8 jvm will fail): -XstartOnFirstThread
Otherwise application fails during the start with the following:
Exception in thread "main" java.lang.ExceptionInInitializerError at org.lwjgl.glfw.GLFW.glfwShowWindow(GLFW.java:1689) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.setVisible(Lwjgl3Window.java:174) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.createWindow(Lwjgl3Application.java:326) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:92) at com.mbrlabs.mundus.Main.main(Main.java:40) Caused by: java.lang.IllegalStateException: Please run the JVM with -XstartOnFirstThread and make sure a window toolkit other than GLFW (e.g. AWT or JavaFX) is not initialized. at org.lwjgl.glfw.EventLoop$OnScreen.<clinit>(EventLoop.java:64) ... 5 more
The fix that worked for me was modification of the editor/build.gradle
script with extension of the task run with the following:
jvmArgs "-XstartOnFirstThread"
There is another issue with LWJGL3 and keyboard input that I will post separately.
Is there a plan to support other model formats? Like collada dae
Implement components for different types of lights
Since the world editor already exists it would be really cool to extend it into a more feature rich game engine/creator similar to unreal and unity.
I would like to contribute. Its also ok if you dont want to since I can fork the project and extend it by myself.
During the start Mundus tries to load the last project. If you have exited Mundus with "Exit" option in Exit Dialog and not the "Save and Exit" option, the following behaviour occurs:
Unf-ly, something is really wrong in the latest version -- projects loads suc-ly, but the view misses objects and terrain:
Please check the log of start:
And see the actual view.
I've added the new terrain and closed Mundus
Please see the log of Mundus shutdown:
As one can see, Mundus still has all the assets it has loaded during the start. But nothing was visual, and tree was empty. :(
Hi All,
Want to use this issue as disc-n for the titled topic.
IMHO, bulk operations are really important for any world editor:
The multiple selection should be possible from the tree navigator and with ribbon lasso in the world's view, e.g.:
What do you think guys?
Make ModelImportDialog UI more intuative.
Also inform user about fbx-conv if not set in the settings dialog.
Currently the editor crashes when trying to import a fbx model and the binary path to fbx-conv is not set correctly.
Ok, so the latest version has complitely redesigned assets manager. Which comes with lots of issues.
Please see the image attached.
In short:
That's not really a bug, but confusing, since the translation handles of the tool are world axis aligned.
Make it so, that one can switch between local & global space.
Render model to offscreen framebuffer, fetch pixel data and save image thumbnail.
This feature can be developed independently as util class. This will be useful for #43
Could you add some user documentation to the wiki? I built Mundus from the Git repo, downloaded the MundusDemo project from the other Github project, but all I could figure out how to do was move the camera XYZ with the QWEASD keys. I installed (and tested) fbx-conv and pointed to it in Mundus settings, but still all OBJ imports failed, advising to pick the right file and set the right fbx-conv. Clicking Add Component didn't seem to add a component, etc. How to exercise these features (and whatever else, like procedural terrain generation, etc)?
Hi All, just bringing new idea. :)
I think, we need Minimap functionality with support for navigation by click.
Minimap should show heights of terrain( probably by using some pallette to distinguish different heights). Also, it should show all the gameobjects as dots\circles\etc.
By clicking on some region of minimap, camera will be immediately relocated to the corresponding position on the corresponding terrain.
Add materials to everything, that can be rendered. This consists of 3 parts:
When I try to set Fog params, selection of the color for Fog results in
[23:19][Fatal][Log] java.lang.NullPointerException
at com.mbrlabs.mundus.ui.modules.dialogs.FogDialog$4.selected(FogDialog.
java:124)
at com.mbrlabs.mundus.ui.widgets.ColorPickerField$1.finished(ColorPicker
Field.java:97)
at com.kotcrab.vis.ui.widget.color.ColorPicker$2.changed(ColorPicker.jav
a:118)
at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeLis
tener.java:28)
Note, if you save project -- next time it works ok. If you see some values in the Fog dialog -- it will work.
According to code, either getFog(), either getFog().color is null.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.