the universe is what is used by the engine to keep things running. anything in it
updated/rendered, whatever.
so there needs to be a separation so you can have a single gui, but multiple levels. persistance between levels is handled by gb
wait.
there is no reason why you can't have multiple universes and have the gbGameGui
handle it. for simple 2d only guis you can create just a single universe, for a
more complicated 3d one you would create a second universe. a note. nothing can
communicate between universes.
so a gbUniverse is where the data lives. data is gbGeom(s), gbLight(s), gbJoint(s), gbWire(s)
lights can be attached to a geom, but the light does not end up a real child of the geom. it just has a pointer to a geom and handles its transform from there. a light can otherwise be linked to another light. if a geom or pin need to link to a light, an invisible geom can be placed.
maybe lights should not have transforms at all and should be more like glyphs. a light always has a geom. if you want to link multiple lights then link it to the lights geom.
wait. if you are making invisible things like uvtAnalogStick be geoms then why can't lights be geoms too? hey, while you are at it. why not joints and wires too? maybe there should be another base type for invisible things.
gbGeom
gbJoint
gbWire
gbLight
gbEntity
so gbGeom does not get a tick only entities? is this a good separation of controller from view?
a light can have a transform, but it is relative to a parent geom (which might be null) if you want to hook a geom or joint to a light then you need put an invisible geom and hook to that.