- Reduce usage of rotated partial models
- Instead use per-instance rotation to reduce draw calls and memory
usage
- Migrate to RotatingInstance.setup where possible
- Remove SingleRotatingVisual and many hyper-specialized subclasses
- Add OrientedRotatingVisual and SingleAxisRotatingVisual, which accept
a model in the constructor as well as orientation information
- Inline the remnants of SingleRotatingVisual into saw visual because it
has the most complicated orientation rules
- Separate large cogwheel visual from small cog and shaft
- Add partial models for every possible gantry shaft blockstate
- Move RotatingInstance "setup" logic into RotatingInstance itself
- Begin work moving fully to partial models
- Add rotateToFace and rotateTo methods to RotatingInstance
- Port:
- ShaftVisual (pulleys, chain drives, press, etc.)
- Saw
- Hand crank
- Valve handle (now a separate visual)
- Rope pulley
- Flywheel
- Where possible in the above visuals, combine the models from different
axes/facings
- Combine rotating/actor instance types
- Preference towards actor, but the arbitrary pivot was never used
- Inline KineticInstance
- Remove magic 3/10 constant in rotating shader, instead use
renderSeconds and multiply by 6 ahead of time
- Now the rotational speed is in degrees per second
- Fix the package/rigging initially appearing inside the frog's mouth
when it's retrieving a package
- Lazily update the body/head/tongue so we don't have to upload it every
frame when not animating
- Replace SmartBlockEntity#behaviours with a Reference2ObjectArrayMap
for faster iteration and because BehaviorTypes are unique by reference
- SmartBlockEntityTicker#tick improvements
- Client: 9% of all -> 7% of all
- Server: 12% of all -> 10% of all
- Added train schedule instructions for delivering or retrieving packages
- Moved schedule instruction logic into their respective subclasses
- Fixed schedule screen no longer showing tooltips in the entry editor