mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Unite them
- Reduce usage of rotated partial models - Instead use per-instance rotation to reduce draw calls and memory usage - Migrate to RotatingInstance.setup where possible
This commit is contained in:
parent
6ac654d722
commit
24acef316d
5 changed files with 47 additions and 32 deletions
|
@ -48,7 +48,7 @@ public class StabilizedBearingVisual extends ActorVisual {
|
|||
.light(blockLight, 0)
|
||||
.setChanged();
|
||||
|
||||
shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite()))
|
||||
shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF))
|
||||
.createInstance();
|
||||
|
||||
// not rotating so no need to set speed.
|
||||
|
@ -56,6 +56,7 @@ public class StabilizedBearingVisual extends ActorVisual {
|
|||
shaft.setRotationAxis(axis)
|
||||
.setRotationOffset(KineticBlockEntityVisual.rotationOffset(blockState, axis, movementContext.localPos))
|
||||
.setPosition(movementContext.localPos)
|
||||
.rotateToFace(Direction.SOUTH, blockState.getValue(BlockStateProperties.FACING).getOpposite())
|
||||
.light(blockLight, 0)
|
||||
.setChanged();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package com.simibubi.create.content.kinetics.base;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel;
|
||||
import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
|
||||
import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual;
|
||||
|
|
|
@ -29,12 +29,20 @@ public class FanVisual extends KineticBlockEntityVisual<EncasedFanBlockEntity> {
|
|||
direction = blockState.getValue(FACING);
|
||||
|
||||
opposite = direction.getOpposite();
|
||||
shaft = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, opposite)).createInstance();
|
||||
fan = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER, opposite))
|
||||
shaft = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF))
|
||||
.createInstance();
|
||||
fan = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER))
|
||||
.createInstance();
|
||||
|
||||
setup(shaft);
|
||||
setup(fan, getFanSpeed());
|
||||
shaft.setup(blockEntity)
|
||||
.setPosition(getVisualPosition())
|
||||
.rotateToFace(Direction.SOUTH, opposite)
|
||||
.setChanged();
|
||||
|
||||
fan.setup(blockEntity, getFanSpeed())
|
||||
.setPosition(getVisualPosition())
|
||||
.rotateToFace(Direction.SOUTH, opposite)
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
private float getFanSpeed() {
|
||||
|
@ -48,8 +56,10 @@ public class FanVisual extends KineticBlockEntityVisual<EncasedFanBlockEntity> {
|
|||
|
||||
@Override
|
||||
public void update(float pt) {
|
||||
updateRotation(shaft);
|
||||
updateRotation(fan, getFanSpeed());
|
||||
shaft.setup(blockEntity)
|
||||
.setChanged();
|
||||
fan.setup(blockEntity, getFanSpeed())
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.simibubi.create.content.kinetics.base.RotatingInstance;
|
|||
import com.simibubi.create.foundation.render.AllInstanceTypes;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.Instance;
|
||||
import dev.engine_room.flywheel.api.instance.Instancer;
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
|
||||
import dev.engine_room.flywheel.lib.instance.AbstractInstance;
|
||||
import dev.engine_room.flywheel.lib.instance.FlatLit;
|
||||
|
@ -22,36 +23,32 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
|
||||
public class GearboxVisual extends KineticBlockEntityVisual<GearboxBlockEntity> {
|
||||
|
||||
protected final EnumMap<Direction, RotatingInstance> keys;
|
||||
protected final EnumMap<Direction, RotatingInstance> keys = new EnumMap<>(Direction.class);
|
||||
protected Direction sourceFacing;
|
||||
|
||||
public GearboxVisual(VisualizationContext context, GearboxBlockEntity blockEntity, float partialTick) {
|
||||
super(context, blockEntity, partialTick);
|
||||
|
||||
keys = new EnumMap<>(Direction.class);
|
||||
|
||||
final Direction.Axis boxAxis = blockState.getValue(BlockStateProperties.AXIS);
|
||||
|
||||
int blockLight = level.getBrightness(LightLayer.BLOCK, pos);
|
||||
int skyLight = level.getBrightness(LightLayer.SKY, pos);
|
||||
updateSourceFacing();
|
||||
|
||||
var instancer = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF));
|
||||
|
||||
for (Direction direction : Iterate.directions) {
|
||||
final Direction.Axis axis = direction.getAxis();
|
||||
if (boxAxis == axis)
|
||||
if (boxAxis == axis) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RotatingInstance key = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, direction))
|
||||
.createInstance();
|
||||
RotatingInstance instance = instancer.createInstance();
|
||||
|
||||
key.setRotationAxis(axis)
|
||||
.setRotationalSpeed(getSpeed(direction) * RotatingInstance.SPEED_MULTIPLIER)
|
||||
.setRotationOffset(getRotationOffset(axis)).setColor(blockEntity)
|
||||
instance.setup(blockEntity, axis, getSpeed(direction))
|
||||
.setPosition(getVisualPosition())
|
||||
.light(blockLight, skyLight)
|
||||
.rotateToFace(Direction.SOUTH, direction)
|
||||
.setChanged();
|
||||
|
||||
keys.put(direction, key);
|
||||
keys.put(direction, instance);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,7 +80,9 @@ public class GearboxVisual extends KineticBlockEntityVisual<GearboxBlockEntity>
|
|||
Direction direction = key.getKey();
|
||||
Direction.Axis axis = direction.getAxis();
|
||||
|
||||
updateRotation(key.getValue(), axis, getSpeed(direction));
|
||||
key.getValue()
|
||||
.setup(blockEntity, axis, getSpeed(direction))
|
||||
.setChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,10 +33,15 @@ public class SplitShaftVisual extends KineticBlockEntityVisual<SplitShaftBlockEn
|
|||
|
||||
float splitSpeed = speed * blockEntity.getRotationSpeedModifier(dir);
|
||||
|
||||
var instance = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, dir))
|
||||
var instance = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF))
|
||||
.createInstance();
|
||||
|
||||
keys.add(setup(instance, splitSpeed));
|
||||
instance.setup(blockEntity, splitSpeed)
|
||||
.setPosition(getVisualPosition())
|
||||
.rotateToFace(Direction.SOUTH, dir)
|
||||
.setChanged();
|
||||
|
||||
keys.add(instance);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,7 +53,9 @@ public class SplitShaftVisual extends KineticBlockEntityVisual<SplitShaftBlockEn
|
|||
Direction[] directions = Iterate.directionsInAxis(boxAxis);
|
||||
|
||||
for (int i : Iterate.zeroAndOne) {
|
||||
updateRotation(keys.get(i), blockEntity.getSpeed() * blockEntity.getRotationSpeedModifier(directions[i]));
|
||||
keys.get(i)
|
||||
.setup(blockEntity, blockEntity.getSpeed() * blockEntity.getRotationSpeedModifier(directions[i]))
|
||||
.setChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue