Lemur/SimTools Patch-stravaganza


Sure. You might check to see if it’s already in there somewhere.

Basically, I believe the issue is that Node returns null bounds when it has no children… which is not strictly accurate.

Edit: yep:

I believe in if not null after the loop would be sufficient.

Edit 2: to be more clear, this:

this.worldBound = resultBound;

To this:

this.worldBound = resultBound != null ? resultBound : new BoundingBox(getWorldTranslation(), 0, 0, 0):

…or something like that.


Updating my fork so can test it. Its taking its time.

Edit: When you guys gonna make Stephen Gold a core member?


Ever since M$ took over they don’t support ie11 anymore and it looks something may be going on with that. I can’t merge, compare forks or do pull request now. Just sits there. When on the issues part, cant edit posts anymore.

Checking mergeability… Don’t worry, you can still create the pull request. 


Ill just post the fix and link to here in the issue. Nothing else I can do.



…ie11… thinking thinking… oh, yeah… the Firefox downloader. :slight_smile:


I think I’m a bit late to the party, but would it be possible to add setters for the consumeDrags and consumeDrops booleans in the DragHandler cursor listener?
I now use a cloned version of this because I need to consume the drop event…

edit: If needed I can create an issue / PR on github for this, don’t know what you prefer.


Sure. That’d be the best way.


here you go:


First, a big thank you for these shiny new libs, @pspeed!

Second: I’ve got a problem with the 1.3.0 version of sim-ethereal regarding the time source. The RemoteTimeSource on the client gives me very big values for getTime(), which look roughly like the nanoTime(). The frame times I get in my SharedObjectListener look like time from server startup, though.
I used etherealClient.getTimeSource().getTime(); to interpolate the positions before (in v1.2.1), but now it isn’t working, as the time is far outside the range of my buffer, that uses the ethereal frame time.

I’ve already applied the patch you posted above for the use of SiO2 and ethereal, and I didn’t found a place where I use the nanoTime directly on the server, only the time since server startup.

Is this a bug, or did I miss something?


Sorry you are having trouble.

I have trouble believing this. If the patch above is applied then SimEthereal will produce times consistent with what SiO2 is producing.

Can you paste the code block where you’ve added this bit:

        ethereal.setTimeSource(new TimeSource() {
                public long getTime() {
                    return systems.getStepTime().getUnlockedTime(System.nanoTime());

I think maybe it wasn’t applied correctly.

Of course, this is presuming that you are using SiO2’s time in your physics object reporting.

What happens if you don’t apply the patch?


I found the issue, and you are right, the error was on my side.
I extended the GameSystemManager to implement a fixed timestep gameloop. In the new SiO2 version the TimeStep gets initialized on the first frame, and I made a mistake migrating my code to that new design, so I basically broke the TimeStep.
Thanks for your help and sorry for wasting your time.


No worries. Glad you got it working.

I always take risks when I change something fundamental like “time tracking”… but I felt it was in the end the best decision since problems related to this were actually real bugs in other code.


Been playing around with this Viewport stuff and its dam awesome. I don’t think I would of figured this out on my own.

Drag and drop and mouse events all work now. Haven’t rewrote the whole thing with FilterPostProcessor and rotations yet but what’s happening with testing things so far is sweet.

Thank you.


A small bump concerning the PR.
Do you have any idea when we can expect an update or new release of Lemur?

thanks for your awesome work!


I hadn’t really thought about it to be honest. I guess I could do this again soon. I think there is at least one thing I want to fix in Lemur before the next push, though.


Also please release a new version for LemurProps, last release was in 2015.

This is missing in latest release :


btw, @pspeed it seems you forgot to add a addDoubleField() you only added addDoubleProperty().
I made a patch for it


Just released SimMath 1.3.0.

I plan to start slow-rolling some new releases of the various packages over the next week or so. SimMath was the lowest tier dependency of a bunch of other things and I needed to do it before releasing a new SimEthereal.

Change log:

  • Added Quatd.fromAngles(double[])
  • Added Quatd.equals() and Quatd.hashCode()
  • Added Vec3d.isSimilar() and Quatd.isSimilar() that allow for
    comparison of values within some epsilon.
  • Converted a System.out.println() in Vec3Bits to a log.debug() call.
  • Added Vec3d.interpolateLocal().
  • Added Quatd.slerpLocal().
  • Added PositionTransition3f and PositionTransition3d.
  • Deprecated PositionTransition in favor of PositionTransition3f or
  • Deprecated PositionTransition.getFrameVelocity() and did not port it
    to PositionTransition3f or PositionTransition3d.


Just released SimEthereal 1.4.0

…on to Zay-ES.

Change log:

  • Fixed zone ID calculation for non-uniform grids. See PR #2.
  • Modified ZoneManager to automatically send “no-change” updates for
    objects it is managing but didn’t receive updates for. See PR #5
    (Note: this could seem like a ‘breaking change’ to any apps relying
    on objects to auto-expire in this way… just know that doing so was
    leaving extra garbage around and so not really a solution.)
  • Added a thread-safe BufferedHashSet for creating “one writer, many readers”
    fast thread safe hash sets.
  • Added a double-buffered thread safe active IDs set to the NetworkStateListener.
  • Added an error log message when updating an object with a bounds bigger than
    supported by the current grid settings.


Just released Zay-ES core 1.3.1 and Zay-ES Net 1.4.0.

Core change log:

  • Fixed MemStringIndex.getStringId(string, false) to return -1 instead of throwing
    an NPE if the string has no ID.
  • Modified DefaultEntityData.addEntityComponentListener() to throw an IllegalArgumentException
    for null listeners.

Zay-ES Net changelog:

  • Fixed HostedEntityData.getStringInfo() to send back a null if the ID doesn’t exist
    for the string rather than sending back -1. A -1 would have been cached but a
    null won’t be.
  • Added EntityDataHostedServer.getHostedEntityData() for setting up connection
    specific entity stuff from other services.
  • Added support for client-specific ComponentVisibility filters that can be used to
    limit the clients’ views of certain component values, e.g.: based on permissions,
    local object visibility, etc…
  • Added lots of additional trace logging in support of the above.
  • Fixed HostedEntityData.getEntitySet() to force the next sendUpdates() to make
    at least one pass through the entity sets. Else some components won’t be
    properly tracked.


Lemur 1.12.0 released.

Change log:

  • Fixed a bug in the new getPickRay() code where incorrect Rays were being
    created if the Gui Bucket didn’t have a spatial at z=0.
  • Modified how TextEntryComponent calculates its cursor width to avoid cases
    where cursors weren’t being drawn because of sub-pixel widths at certain
    screen locations.
  • Added a TextField.setPreferredCursorWidth() styleable attribute that can be
    used to change the default cursor width for text fields.
  • Modified DynamicInsetsComponent to treat the insets values as percentages
    instead of always making them sum to 1. (That behavior still happens if
    the total of min+max is more than 1.) This modification lets dynamic
    insets support dynamic stretching instead of just positioning.
    This is potentially a breaking change for code relying on the old
    normalization. (though that was kind of weird)
  • Fixed pick session bug caused by empty GUI nodes. (added a null check)
  • Added Button.EFFECT_ENABLE and Button.EFFECT_DISABLE constants and modified
    Button to call the appropriate effect chain during setEnabled(true/false).
  • Added Button.ButtonAction.Enabled and Button.ButtonAction.Disabled and
    modified Button to call the appropriate command chain during

Also, I released a new LemurProps that just adds double field/property support. (Version 1.1.0)