The forgotten Keyframes

- Added Keyframes to scenes created before the feature existed
This commit is contained in:
simibubi 2021-06-18 22:13:34 +02:00
parent 91bc678ab4
commit bc2b5169c8
9 changed files with 84 additions and 1 deletions

View file

@ -46,6 +46,7 @@ public class BearingScenes {
scene.overlay.showSelectionWithText(util.select.position(anchorPos), 60) scene.overlay.showSelectionWithText(util.select.position(anchorPos), 60)
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.pointAt(util.vector.blockSurface(windmill, Direction.WEST)) .pointAt(util.vector.blockSurface(windmill, Direction.WEST))
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.text("Windmill Bearings attach to the block in front of them"); .text("Windmill Bearings attach to the block in front of them");
scene.idle(50); scene.idle(50);
@ -88,6 +89,7 @@ public class BearingScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(util.vector.blockSurface(anchorPos, Direction.NORTH)) .pointAt(util.vector.blockSurface(anchorPos, Direction.NORTH))
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.text("If enough Sail-like blocks are attached to the block, it can act as a Windmill"); .text("If enough Sail-like blocks are attached to the block, it can act as a Windmill");
scene.idle(70); scene.idle(70);
@ -109,6 +111,7 @@ public class BearingScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(util.vector.topOf(windmill)) .pointAt(util.vector.topOf(windmill))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Activated with Right-Click, the Windmill Bearing will start providing Rotational Force"); .text("Activated with Right-Click, the Windmill Bearing will start providing Rotational Force");
scene.idle(70); scene.idle(70);
@ -125,6 +128,7 @@ public class BearingScenes {
scene.overlay.showCenteredScrollInput(windmill, Direction.WEST, 50); scene.overlay.showCenteredScrollInput(windmill, Direction.WEST, 50);
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(surface) .pointAt(surface)
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.text("Use a Wrench to configure its rotation direction"); .text("Use a Wrench to configure its rotation direction");
scene.idle(36); scene.idle(36);
@ -184,6 +188,7 @@ public class BearingScenes {
scene.overlay.showOutline(PonderPalette.BLUE, bearingPos, util.select.fromTo(3, 2, 1, 3, 3, 2), 80); scene.overlay.showOutline(PonderPalette.BLUE, bearingPos, util.select.fromTo(3, 2, 1, 3, 3, 2), 80);
scene.overlay.showSelectionWithText(util.select.fromTo(3, 2, 4, 3, 3, 5), 80) scene.overlay.showSelectionWithText(util.select.fromTo(3, 2, 4, 3, 3, 5), 80)
.colored(PonderPalette.BLUE) .colored(PonderPalette.BLUE)
.attachKeyFrame()
.text("Any Structure can count as a valid Windmill, as long as it contains at least 8 sail-like Blocks."); .text("Any Structure can count as a valid Windmill, as long as it contains at least 8 sail-like Blocks.");
scene.idle(90); scene.idle(90);
@ -225,6 +230,7 @@ public class BearingScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.pointAt(util.vector.blockSurface(bearingPos, Direction.WEST)) .pointAt(util.vector.blockSurface(bearingPos, Direction.WEST))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Mechanical Bearings attach to the block in front of them"); .text("Mechanical Bearings attach to the block in front of them");
scene.idle(50); scene.idle(50);
@ -245,6 +251,7 @@ public class BearingScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.pointAt(util.vector.topOf(bearingPos.up())) .pointAt(util.vector.topOf(bearingPos.up()))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Upon receiving Rotational Force, it will assemble it into a Rotating Contraption"); .text("Upon receiving Rotational Force, it will assemble it into a Rotating Contraption");
scene.idle(37 * 2); scene.idle(37 * 2);
scene.world.setKineticSpeed(all, 0); scene.world.setKineticSpeed(all, 0);
@ -273,6 +280,7 @@ public class BearingScenes {
scene.overlay.showText(120) scene.overlay.showText(120)
.pointAt(util.vector.topOf(bearingPos.up())) .pointAt(util.vector.topOf(bearingPos.up()))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.sharedText("movement_anchors"); .sharedText("movement_anchors");
scene.idle(37 * 4); scene.idle(37 * 4);
@ -331,6 +339,7 @@ public class BearingScenes {
.pointAt(util.vector.blockSurface(bearingPos, Direction.WEST)) .pointAt(util.vector.blockSurface(bearingPos, Direction.WEST))
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.attachKeyFrame()
.text("When Stopped, the Bearing will place the structure at the nearest grid-aligned Angle"); .text("When Stopped, the Bearing will place the structure at the nearest grid-aligned Angle");
scene.idle(110); scene.idle(110);
@ -343,6 +352,7 @@ public class BearingScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(util.vector.blockSurface(bearingPos, Direction.WEST)) .pointAt(util.vector.blockSurface(bearingPos, Direction.WEST))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.sharedText("behaviour_modify_wrench"); .sharedText("behaviour_modify_wrench");
scene.idle(70); scene.idle(70);
@ -389,6 +399,7 @@ public class BearingScenes {
scene.overlay.showSelectionWithText(util.select.position(bearingPos), 60) scene.overlay.showSelectionWithText(util.select.position(bearingPos), 60)
.text("Whenever Mechanical Bearings are themselves part of a moving Structure..") .text("Whenever Mechanical Bearings are themselves part of a moving Structure..")
.attachKeyFrame()
.placeNearTarget(); .placeNearTarget();
scene.idle(70); scene.idle(70);
@ -410,6 +421,7 @@ public class BearingScenes {
scene.overlay.showSelectionWithText(util.select.position(bearingPos.north()), 60) scene.overlay.showSelectionWithText(util.select.position(bearingPos.north()), 60)
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.text("Once again, the bearing will attach to the block in front of it") .text("Once again, the bearing will attach to the block in front of it")
.attachKeyFrame()
.placeNearTarget(); .placeNearTarget();
scene.idle(70); scene.idle(70);
@ -455,6 +467,7 @@ public class BearingScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.pointAt(util.vector.blockSurface(bearingPos, Direction.WEST)) .pointAt(util.vector.blockSurface(bearingPos, Direction.WEST))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Clockwork Bearings attach to blocks in front of them"); .text("Clockwork Bearings attach to blocks in front of them");
scene.idle(50); scene.idle(50);
@ -472,6 +485,7 @@ public class BearingScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.pointAt(util.vector.blockSurface(bearingPos.north(), Direction.NORTH)) .pointAt(util.vector.blockSurface(bearingPos.north(), Direction.NORTH))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Upon receiving Rotational Force, the structure will be rotated according to the hour of the day"); .text("Upon receiving Rotational Force, the structure will be rotated according to the hour of the day");
scene.idle(90); scene.idle(90);
@ -501,6 +515,7 @@ public class BearingScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(util.vector.blockSurface(bearingPos, Direction.WEST)) .pointAt(util.vector.blockSurface(bearingPos, Direction.WEST))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Right-Click the bearing to start or stop animating the structure"); .text("Right-Click the bearing to start or stop animating the structure");
scene.idle(70); scene.idle(70);
@ -513,6 +528,7 @@ public class BearingScenes {
scene.idle(15); scene.idle(15);
scene.overlay.showSelectionWithText(util.select.fromTo(3, 3, 1, 3, 4, 2), 80) scene.overlay.showSelectionWithText(util.select.fromTo(3, 3, 1, 3, 4, 2), 80)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.sharedText("movement_anchors"); .sharedText("movement_anchors");
scene.idle(90); scene.idle(90);
@ -525,6 +541,7 @@ public class BearingScenes {
scene.overlay.showSelectionWithText(util.select.position(bearingPos.north(3)), 80) scene.overlay.showSelectionWithText(util.select.position(bearingPos.north(3)), 80)
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.BLUE) .colored(PonderPalette.BLUE)
.attachKeyFrame()
.text("In front of the Hour Hand, a second structure can be added"); .text("In front of the Hour Hand, a second structure can be added");
scene.idle(90); scene.idle(90);
scene.overlay.showControls(clickTheBearingSide.rightClick(), 20); scene.overlay.showControls(clickTheBearingSide.rightClick(), 20);

View file

@ -87,6 +87,7 @@ public class BeltScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Right-Clicking two shafts with a belt item will connect them together") .text("Right-Clicking two shafts with a belt item will connect them together")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.topOf(2, 1, 2)); .pointAt(util.vector.topOf(2, 1, 2));
scene.idle(90); scene.idle(90);
@ -100,6 +101,7 @@ public class BeltScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.text("Accidental selections can be canceled with Right-Click while Sneaking") .text("Accidental selections can be canceled with Right-Click while Sneaking")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.centerOf(backEnd.south(1))); .pointAt(util.vector.centerOf(backEnd.south(1)));
scene.idle(43); scene.idle(43);
@ -118,6 +120,7 @@ public class BeltScenes {
scene.overlay.showText(43) scene.overlay.showText(43)
.text("Additional Shafts can be added throughout the Belt") .text("Additional Shafts can be added throughout the Belt")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(shaftLocation, Direction.NORTH)); .pointAt(util.vector.blockSurface(shaftLocation, Direction.NORTH));
scene.idle(50); scene.idle(50);
@ -146,6 +149,7 @@ public class BeltScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showText(50) scene.overlay.showText(50)
.text("Added shafts can be removed using the wrench") .text("Added shafts can be removed using the wrench")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(shaftLocation, Direction.NORTH)); .pointAt(util.vector.blockSurface(shaftLocation, Direction.NORTH));
scene.idle(70); scene.idle(70);
@ -212,6 +216,7 @@ public class BeltScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.placeNearTarget() .placeNearTarget()
.pointAt(to) .pointAt(to)
.attachKeyFrame()
.text("1. They can connect horizontally"); .text("1. They can connect horizontally");
scene.idle(20); scene.idle(20);
@ -236,6 +241,7 @@ public class BeltScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.placeNearTarget() .placeNearTarget()
.pointAt(to) .pointAt(to)
.attachKeyFrame()
.text("2. They can connect diagonally"); .text("2. They can connect diagonally");
scene.idle(20); scene.idle(20);
@ -258,6 +264,7 @@ public class BeltScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.placeNearTarget() .placeNearTarget()
.pointAt(to) .pointAt(to)
.attachKeyFrame()
.text("3. They can connect vertically"); .text("3. They can connect vertically");
scene.idle(20); scene.idle(20);
@ -282,6 +289,7 @@ public class BeltScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.placeNearTarget() .placeNearTarget()
.pointAt(to) .pointAt(to)
.attachKeyFrame()
.text("4. And they can connect vertical shafts horizontally"); .text("4. And they can connect vertical shafts horizontally");
scene.idle(20); scene.idle(20);
@ -375,6 +383,7 @@ public class BeltScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.placeNearTarget() .placeNearTarget()
.pointAt(topOf.subtract(0, 0.1, 0)) .pointAt(topOf.subtract(0, 0.1, 0))
.attachKeyFrame()
.text("Right-Click with an empty hand to take items off a belt"); .text("Right-Click with an empty hand to take items off a belt");
scene.idle(20); scene.idle(20);
scene.world.removeItemsFromBelt(util.grid.at(3, 2, 2)); scene.world.removeItemsFromBelt(util.grid.at(3, 2, 2));
@ -425,6 +434,7 @@ public class BeltScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Brass or Andesite Casing can be used to decorate Mechanical Belts") .text("Brass or Andesite Casing can be used to decorate Mechanical Belts")
.attachKeyFrame()
.pointAt(util.vector.centerOf(beltPos2)); .pointAt(util.vector.centerOf(beltPos2));
scene.idle(40); scene.idle(40);
@ -455,6 +465,7 @@ public class BeltScenes {
scene.world.modifyBlock(pos, s -> s.with(BeltBlock.CASING, true), true); scene.world.modifyBlock(pos, s -> s.with(BeltBlock.CASING, true), true);
} }
scene.idle(30); scene.idle(30);
scene.addKeyframe();
scene.overlay scene.overlay
.showControls(new InputWindowElement(util.vector.topOf(beltPos.south()), Pointing.DOWN).rightClick() .showControls(new InputWindowElement(util.vector.topOf(beltPos.south()), Pointing.DOWN).rightClick()

View file

@ -50,6 +50,7 @@ public class ChainDriveScenes {
scene.idle(20); scene.idle(20);
scene.overlay.showText(60) scene.overlay.showText(60)
.text("Chain Drives relay rotation to each other in a row") .text("Chain Drives relay rotation to each other in a row")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(util.grid.at(3, 1, 4), Direction.WEST)); .pointAt(util.vector.blockSurface(util.grid.at(3, 1, 4), Direction.WEST));
scene.idle(60); scene.idle(60);
@ -65,12 +66,14 @@ public class ChainDriveScenes {
scene.idle(20); scene.idle(20);
scene.overlay.showText(60) scene.overlay.showText(60)
.text("All shafts connected like this will rotate in the same direction") .text("All shafts connected like this will rotate in the same direction")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(util.grid.at(2, 1, 1), Direction.WEST)); .pointAt(util.vector.blockSurface(util.grid.at(2, 1, 1), Direction.WEST));
scene.idle(50); scene.idle(50);
scene.world.hideSection(shafts, Direction.WEST); scene.world.hideSection(shafts, Direction.WEST);
scene.idle(25); scene.idle(25);
scene.addKeyframe();
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(rotatedECD), Pointing.DOWN).rightClick() scene.overlay.showControls(new InputWindowElement(util.vector.topOf(rotatedECD), Pointing.DOWN).rightClick()
.withWrench(), 30); .withWrench(), 30);
scene.idle(7); scene.idle(7);
@ -117,6 +120,7 @@ public class ChainDriveScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.text("Unpowered Chain Gearshifts behave exactly like Chain Drives") .text("Unpowered Chain Gearshifts behave exactly like Chain Drives")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(eastDrive, Direction.NORTH)); .pointAt(util.vector.blockSurface(eastDrive, Direction.NORTH));
scene.idle(60); scene.idle(60);
@ -153,6 +157,7 @@ public class ChainDriveScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.text("When Powered, the speed transmitted to other Chain Drives in the row is doubled") .text("When Powered, the speed transmitted to other Chain Drives in the row is doubled")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.FAST) .colored(PonderPalette.FAST)
.pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST)); .pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST));
@ -197,6 +202,7 @@ public class ChainDriveScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Whenever the Powered Gearshift is not at the source, its speed will be halved instead") .text("Whenever the Powered Gearshift is not at the source, its speed will be halved instead")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.SLOW) .colored(PonderPalette.SLOW)
.pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST)); .pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST));
@ -215,6 +221,7 @@ public class ChainDriveScenes {
scene.overlay.showText(100) scene.overlay.showText(100)
.text("In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift") .text("In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST)); .pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST));
scene.idle(100); scene.idle(100);
@ -240,6 +247,7 @@ public class ChainDriveScenes {
scene.overlay.showText(100) scene.overlay.showText(100)
.text("Using analog signals, the ratio can be adjusted more precisely between 1 and 2") .text("Using analog signals, the ratio can be adjusted more precisely between 1 and 2")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST)); .pointAt(util.vector.blockSurface(eastDrive.west(2), Direction.WEST));
scene.idle(40); scene.idle(40);

View file

@ -53,6 +53,7 @@ public class FanScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Encased Fans use Rotational Force to create an Air Current") .text("Encased Fans use Rotational Force to create an Air Current")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.topOf(fanPos)); .pointAt(util.vector.topOf(fanPos));
scene.idle(90); scene.idle(90);
@ -61,6 +62,7 @@ public class FanScenes {
Selection reverse = util.select.fromTo(3, 1, 5, 1, 1, 4); Selection reverse = util.select.fromTo(3, 1, 5, 1, 1, 4);
scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down()));
scene.effects.indicateRedstone(leverPos); scene.effects.indicateRedstone(leverPos);
scene.addKeyframe();
scene.world.modifyKineticSpeed(reverse, f -> -f); scene.world.modifyKineticSpeed(reverse, f -> -f);
scene.effects.rotationDirectionIndicator(fanPos.south()); scene.effects.rotationDirectionIndicator(fanPos.south());
scene.special.rotateParrot(flappyBirb, 0, 215 * 2, 0, 30); scene.special.rotateParrot(flappyBirb, 0, 215 * 2, 0, 30);
@ -127,6 +129,7 @@ public class FanScenes {
.colored(PonderPalette.WHITE) .colored(PonderPalette.WHITE)
.pointAt(itemVec) .pointAt(itemVec)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Items caught in the area will be smelted"); .text("Items caught in the area will be smelted");
scene.idle(60); scene.idle(60);
@ -157,6 +160,7 @@ public class FanScenes {
scene.overlay.showSelectionWithText(util.select.fromTo(blockPos, blockPos.west(2)), 60) scene.overlay.showSelectionWithText(util.select.fromTo(blockPos, blockPos.west(2)), 60)
.colored(PonderPalette.BLACK) .colored(PonderPalette.BLACK)
.attachKeyFrame()
.text("Instead, a setup for Smoking using Fire should be used for them"); .text("Instead, a setup for Smoking using Fire should be used for them");
scene.idle(80); scene.idle(80);
@ -173,6 +177,7 @@ public class FanScenes {
scene.overlay.showSelectionWithText(util.select.fromTo(blockPos, blockPos.west(2)), 60) scene.overlay.showSelectionWithText(util.select.fromTo(blockPos, blockPos.west(2)), 60)
.colored(PonderPalette.MEDIUM) .colored(PonderPalette.MEDIUM)
.attachKeyFrame()
.text("Air Flows passing through water create a Washing Setup"); .text("Air Flows passing through water create a Washing Setup");
scene.idle(70); scene.idle(70);
@ -204,6 +209,7 @@ public class FanScenes {
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.pointAt(util.vector.topOf(blockPos.east())) .pointAt(util.vector.topOf(blockPos.east()))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("The Speed of the Fan does NOT affect the processing speed, only its range"); .text("The Speed of the Fan does NOT affect the processing speed, only its range");
scene.world.destroyBlock(util.grid.at(1, 1, 2)); scene.world.destroyBlock(util.grid.at(1, 1, 2));
scene.idle(110); scene.idle(110);
@ -237,6 +243,7 @@ public class FanScenes {
scene.effects.emitParticles(depotTop, Emitter.simple(ParticleTypes.SPIT, Vector3d.ZERO), .5f, 30); scene.effects.emitParticles(depotTop, Emitter.simple(ParticleTypes.SPIT, Vector3d.ZERO), .5f, 30);
scene.overlay.showText(90) scene.overlay.showText(90)
.pointAt(depotTop) .pointAt(depotTop)
.attachKeyFrame()
.text("Fan Processing can also be applied to Items on Depots and Belts"); .text("Fan Processing can also be applied to Items on Depots and Belts");
scene.idle(100); scene.idle(100);
@ -272,11 +279,12 @@ public class FanScenes {
scene.world.showSection(util.select.layersFrom(2), Direction.DOWN); scene.world.showSection(util.select.layersFrom(2), Direction.DOWN);
scene.idle(10); scene.idle(10);
BlockPos rightFan = util.grid.at(1, 2, 2); BlockPos rightFan = util.grid.at(1, 2, 2);
scene.overlay.showText(80) scene.overlay.showText(70)
.text("Fans facing down into a source of heat can provide Rotational Force") .text("Fans facing down into a source of heat can provide Rotational Force")
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(rightFan, Direction.WEST)); .pointAt(util.vector.blockSurface(rightFan, Direction.WEST));
scene.idle(80); scene.idle(80);
scene.addKeyframe();
for (BlockPos pos : new BlockPos[] { rightFan, util.grid.at(3, 2, 2) }) { for (BlockPos pos : new BlockPos[] { rightFan, util.grid.at(3, 2, 2) }) {
scene.idle(10); scene.idle(10);

View file

@ -130,6 +130,7 @@ public class FunnelScenes {
scene.world.showSection(topFunnelSelection, Direction.DOWN); scene.world.showSection(topFunnelSelection, Direction.DOWN);
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Placed normally, it pulls items from the inventory.") .text("Placed normally, it pulls items from the inventory.")
.attachKeyFrame()
.pointAt(topCenter) .pointAt(topCenter)
.placeNearTarget(); .placeNearTarget();
scene.idle(45); scene.idle(45);
@ -150,6 +151,7 @@ public class FunnelScenes {
scene.overlay.showControls(controlsSneak, 35); scene.overlay.showControls(controlsSneak, 35);
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Placed while sneaking, it puts items into the inventory.") .text("Placed while sneaking, it puts items into the inventory.")
.attachKeyFrame()
.pointAt(topCenter) .pointAt(topCenter)
.placeNearTarget(); .placeNearTarget();
scene.idle(45); scene.idle(45);
@ -169,6 +171,7 @@ public class FunnelScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Using a wrench, the funnel can be flipped after placement.") .text("Using a wrench, the funnel can be flipped after placement.")
.attachKeyFrame()
.pointAt(topCenter) .pointAt(topCenter)
.placeNearTarget(); .placeNearTarget();
@ -216,6 +219,7 @@ public class FunnelScenes {
scene.world.showSection(beltFunnelSetup, Direction.DOWN); scene.world.showSection(beltFunnelSetup, Direction.DOWN);
scene.overlay.showText(140) scene.overlay.showText(140)
.text("Funnels on belts will extract/insert depending on its movement direction.") .text("Funnels on belts will extract/insert depending on its movement direction.")
.attachKeyFrame()
.pointAt(topOfBeltFunnel); .pointAt(topOfBeltFunnel);
scene.idle(15); scene.idle(15);
@ -263,6 +267,7 @@ public class FunnelScenes {
scene.idle(8); scene.idle(8);
scene.overlay.showText(360) scene.overlay.showText(360)
.text("Funnels should also interact nicely with a handful of other components.") .text("Funnels should also interact nicely with a handful of other components.")
.attachKeyFrame()
.independent(0); .independent(0);
scene.idle(40); scene.idle(40);
@ -368,6 +373,7 @@ public class FunnelScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.text("Andesite Funnels can only ever extract single items.") .text("Andesite Funnels can only ever extract single items.")
.attachKeyFrame()
.pointAt(util.vector.topOf(andesiteFunnel)) .pointAt(util.vector.topOf(andesiteFunnel))
.placeNearTarget(); .placeNearTarget();
scene.idle(10); scene.idle(10);
@ -378,6 +384,7 @@ public class FunnelScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.text("Brass Funnels can extract up to a full stack.") .text("Brass Funnels can extract up to a full stack.")
.attachKeyFrame()
.pointAt(util.vector.topOf(brassFunnel)) .pointAt(util.vector.topOf(brassFunnel))
.placeNearTarget(); .placeNearTarget();
scene.idle(10); scene.idle(10);
@ -393,6 +400,7 @@ public class FunnelScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Scrolling on the filter slot allows for precise control over the extracted stack size.") .text("Scrolling on the filter slot allows for precise control over the extracted stack size.")
.attachKeyFrame()
.pointAt(filterSlot.getCenter()) .pointAt(filterSlot.getCenter())
.placeNearTarget(); .placeNearTarget();
scene.idle(90); scene.idle(90);
@ -436,6 +444,7 @@ public class FunnelScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Using items on the filter slot will restrict the funnel to only transfer matching stacks.") .text("Using items on the filter slot will restrict the funnel to only transfer matching stacks.")
.attachKeyFrame()
.pointAt(filterSlot.getCenter()) .pointAt(filterSlot.getCenter())
.placeNearTarget(); .placeNearTarget();
scene.world.setFilterData(util.select.position(brassFunnel), FunnelTileEntity.class, emerald); scene.world.setFilterData(util.select.position(brassFunnel), FunnelTileEntity.class, emerald);
@ -470,6 +479,7 @@ public class FunnelScenes {
scene.overlay.showSelectionWithText(funnelSelect, 40) scene.overlay.showSelectionWithText(funnelSelect, 40)
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.text("Funnels cannot ever transfer between closed inventories directly.") .text("Funnels cannot ever transfer between closed inventories directly.")
.attachKeyFrame()
.placeNearTarget(); .placeNearTarget();
scene.idle(50); scene.idle(50);
@ -483,6 +493,7 @@ public class FunnelScenes {
scene.overlay.showText(40) scene.overlay.showText(40)
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.text("Chutes or Smart chutes might be more suitable for such purposes.") .text("Chutes or Smart chutes might be more suitable for such purposes.")
.attachKeyFrame()
.pointAt(util.vector.centerOf(funnelPos)) .pointAt(util.vector.centerOf(funnelPos))
.placeNearTarget(); .placeNearTarget();
scene.idle(50); scene.idle(50);

View file

@ -231,6 +231,7 @@ public class KineticsScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.text("Shifting from large to small cogs, the conveyed speed will be doubled") .text("Shifting from large to small cogs, the conveyed speed will be doubled")
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(util.grid.at(1, 2, 3), Direction.NORTH)); .pointAt(util.vector.blockSurface(util.grid.at(1, 2, 3), Direction.NORTH));
scene.idle(10); scene.idle(10);
@ -269,6 +270,7 @@ public class KineticsScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.text("Shifting the opposite way, the conveyed speed will be halved") .text("Shifting the opposite way, the conveyed speed will be halved")
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.blockSurface(util.grid.at(1, 2, 3), Direction.NORTH)); .pointAt(util.vector.blockSurface(util.grid.at(1, 2, 3), Direction.NORTH));
scene.idle(10); scene.idle(10);
@ -339,6 +341,7 @@ public class KineticsScenes {
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.pointAt(util.vector.topOf(3, 2, 3)) .pointAt(util.vector.topOf(3, 2, 3))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("A gearbox is the more compact equivalent of this setup"); .text("A gearbox is the more compact equivalent of this setup");
scene.idle(90); scene.idle(90);
@ -411,6 +414,7 @@ public class KineticsScenes {
scene.overlay.showText(50) scene.overlay.showText(50)
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.text("When powered by Redstone, it breaks the connection") .text("When powered by Redstone, it breaks the connection")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.topOf(clutch)); .pointAt(util.vector.topOf(clutch));
@ -456,6 +460,7 @@ public class KineticsScenes {
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.placeNearTarget() .placeNearTarget()
.text("When powered by Redstone, it reverses the transmission") .text("When powered by Redstone, it reverses the transmission")
.attachKeyFrame()
.pointAt(util.vector.topOf(gearshift)); .pointAt(util.vector.topOf(gearshift));
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
@ -503,6 +508,7 @@ public class KineticsScenes {
scene.overlay.showText(50) scene.overlay.showText(50)
.text("Scrolling on the back panel changes the RPM of the motors' rotational output") .text("Scrolling on the back panel changes the RPM of the motors' rotational output")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(blockSurface); .pointAt(blockSurface);
scene.idle(10); scene.idle(10);
@ -574,6 +580,7 @@ public class KineticsScenes {
scene.rotateCameraY(-30); scene.rotateCameraY(-30);
scene.overlay.showText(70) scene.overlay.showText(70)
.text("The Wheels' blades should be oriented against the flow") .text("The Wheels' blades should be oriented against the flow")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.topOf(wheel)); .pointAt(util.vector.topOf(wheel));
scene.idle(80); scene.idle(80);
@ -599,6 +606,7 @@ public class KineticsScenes {
scene.overlay.showText(70) scene.overlay.showText(70)
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.text("Facing the opposite way, they will not be as effective") .text("Facing the opposite way, they will not be as effective")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.topOf(wheel)); .pointAt(util.vector.topOf(wheel));
scene.idle(80); scene.idle(80);
@ -674,6 +682,7 @@ public class KineticsScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showText(50) scene.overlay.showText(50)
.text("Hold Right-Click to rotate it Counter-Clockwise") .text("Hold Right-Click to rotate it Counter-Clockwise")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(centerOf); .pointAt(centerOf);
scene.idle(70); scene.idle(70);
@ -697,6 +706,7 @@ public class KineticsScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showText(90) scene.overlay.showText(90)
.text("Sneak and Hold Right-Click to rotate it Clockwise") .text("Sneak and Hold Right-Click to rotate it Clockwise")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.pointAt(centerOf); .pointAt(centerOf);
scene.idle(90); scene.idle(90);

View file

@ -49,6 +49,7 @@ public class MovementActorScenes {
.pointAt(util.vector.topOf(bearing.up(2))) .pointAt(util.vector.topOf(bearing.up(2)))
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Inventories on moving contraptions cannot be accessed by players."); .text("Inventories on moving contraptions cannot be accessed by players.");
scene.idle(70); scene.idle(70);
@ -61,6 +62,7 @@ public class MovementActorScenes {
.pointAt(util.vector.topOf(psi)) .pointAt(util.vector.topOf(psi))
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("This component can interact with storage without the need to stop the contraption."); .text("This component can interact with storage without the need to stop the contraption.");
scene.idle(90); scene.idle(90);
@ -69,6 +71,7 @@ public class MovementActorScenes {
scene.overlay.showSelectionWithText(util.select.position(psi.west()), 50) scene.overlay.showSelectionWithText(util.select.position(psi.west()), 50)
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Place a second one with a gap of 1 or 2 blocks inbetween"); .text("Place a second one with a gap of 1 or 2 blocks inbetween");
scene.idle(55); scene.idle(55);
@ -97,6 +100,7 @@ public class MovementActorScenes {
scene.overlay.showSelectionWithText(util.select.position(psi2), 70) scene.overlay.showSelectionWithText(util.select.position(psi2), 70)
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.attachKeyFrame()
.text("While engaged, the stationary interface will represent ALL inventories on the contraption"); .text("While engaged, the stationary interface will represent ALL inventories on the contraption");
scene.idle(80); scene.idle(80);
@ -106,6 +110,7 @@ public class MovementActorScenes {
scene.overlay.showText(70) scene.overlay.showText(70)
.placeNearTarget() .placeNearTarget()
.pointAt(util.vector.topOf(hopper)) .pointAt(util.vector.topOf(hopper))
.attachKeyFrame()
.text("Items can now be inserted..."); .text("Items can now be inserted...");
ItemStack itemStack = AllItems.COPPER_INGOT.asStack(); ItemStack itemStack = AllItems.COPPER_INGOT.asStack();

View file

@ -58,6 +58,7 @@ public class PistonScenes {
scene.overlay.showText(55) scene.overlay.showText(55)
.pointAt(util.vector.topOf(piston)) .pointAt(util.vector.topOf(piston))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Mechanical Pistons can move blocks in front of them"); .text("Mechanical Pistons can move blocks in front of them");
scene.idle(65); scene.idle(65);
@ -93,6 +94,7 @@ public class PistonScenes {
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(util.vector.topOf(piston)) .pointAt(util.vector.topOf(piston))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Sticky Mechanical Pistons can pull the attached blocks back"); .text("Sticky Mechanical Pistons can pull the attached blocks back");
scene.idle(20); scene.idle(20);
scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.OAK_PLANKS.getDefaultState(), false); scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.OAK_PLANKS.getDefaultState(), false);
@ -108,6 +110,7 @@ public class PistonScenes {
ElementLink<WorldSectionElement> chassis = ElementLink<WorldSectionElement> chassis =
scene.world.showIndependentSection(util.select.fromTo(2, 2, 0, 2, 3, 2), Direction.DOWN); scene.world.showIndependentSection(util.select.fromTo(2, 2, 0, 2, 3, 2), Direction.DOWN);
scene.world.moveSection(chassis, util.vector.of(0, -1, 1), 0); scene.world.moveSection(chassis, util.vector.of(0, -1, 1), 0);
scene.addKeyframe();
scene.idle(5); scene.idle(5);
scene.world.showSectionAndMerge(util.select.position(1, 2, 0), Direction.EAST, chassis); scene.world.showSectionAndMerge(util.select.position(1, 2, 0), Direction.EAST, chassis);
scene.idle(15); scene.idle(15);
@ -154,6 +157,7 @@ public class PistonScenes {
scene.overlay.showSelectionWithText(util.select.position(piston), 50) scene.overlay.showSelectionWithText(util.select.position(piston), 50)
.colored(PonderPalette.RED) .colored(PonderPalette.RED)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Without attached Poles, a Mechanical Piston cannot move"); .text("Without attached Poles, a Mechanical Piston cannot move");
scene.idle(60); scene.idle(60);
@ -172,6 +176,7 @@ public class PistonScenes {
100); 100);
scene.overlay.showSelectionWithText(util.select.fromTo(piston.west(), piston.west(2)), 100) scene.overlay.showSelectionWithText(util.select.fromTo(piston.west(), piston.west(2)), 100)
.text("The Length of pole added at its back determines the Extension Range") .text("The Length of pole added at its back determines the Extension Range")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.GREEN); .colored(PonderPalette.GREEN);
scene.idle(110); scene.idle(110);
@ -238,6 +243,7 @@ public class PistonScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showSelectionWithText(rose, 70) scene.overlay.showSelectionWithText(rose, 70)
.text("Whenever Pistons stop moving, the moved structure reverts to blocks") .text("Whenever Pistons stop moving, the moved structure reverts to blocks")
.attachKeyFrame()
.colored(PonderPalette.RED); .colored(PonderPalette.RED);
scene.idle(80); scene.idle(80);
@ -259,6 +265,7 @@ public class PistonScenes {
scene.overlay.showText(70) scene.overlay.showText(70)
.pointAt(util.vector.topOf(piston)) .pointAt(util.vector.topOf(piston))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.sharedText("behaviour_modify_wrench"); .sharedText("behaviour_modify_wrench");
scene.idle(80); scene.idle(80);

View file

@ -44,6 +44,7 @@ public class PulleyScenes {
scene.idle(45); scene.idle(45);
scene.overlay.showText(60) scene.overlay.showText(60)
.pointAt(util.vector.blockSurface(pulleyPos, Direction.WEST)) .pointAt(util.vector.blockSurface(pulleyPos, Direction.WEST))
.attachKeyFrame()
.text("Rope Pulleys can move blocks vertically when given Rotational Force") .text("Rope Pulleys can move blocks vertically when given Rotational Force")
.placeNearTarget(); .placeNearTarget();
scene.idle(70); scene.idle(70);
@ -81,6 +82,7 @@ public class PulleyScenes {
scene.overlay.showText(80) scene.overlay.showText(80)
.pointAt(util.vector.blockSurface(util.grid.at(1, 2, 2), Direction.NORTH)) .pointAt(util.vector.blockSurface(util.grid.at(1, 2, 2), Direction.NORTH))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.sharedText("movement_anchors"); .sharedText("movement_anchors");
scene.idle(90); scene.idle(90);
@ -136,6 +138,7 @@ public class PulleyScenes {
scene.idle(10); scene.idle(10);
scene.overlay.showSelectionWithText(util.select.position(flowerPos), 70) scene.overlay.showSelectionWithText(util.select.position(flowerPos), 70)
.text("Whenever Pulleys stop moving, the moved structure reverts to blocks") .text("Whenever Pulleys stop moving, the moved structure reverts to blocks")
.attachKeyFrame()
.placeNearTarget() .placeNearTarget()
.colored(PonderPalette.RED); .colored(PonderPalette.RED);
scene.idle(80); scene.idle(80);
@ -157,6 +160,7 @@ public class PulleyScenes {
scene.overlay.showText(70) scene.overlay.showText(70)
.pointAt(util.vector.topOf(pulleyPos)) .pointAt(util.vector.topOf(pulleyPos))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.sharedText("behaviour_modify_wrench"); .sharedText("behaviour_modify_wrench");
scene.idle(80); scene.idle(80);
@ -202,6 +206,7 @@ public class PulleyScenes {
scene.overlay.showText(50) scene.overlay.showText(50)
.pointAt(util.vector.blockSurface(pulleyPos, Direction.WEST)) .pointAt(util.vector.blockSurface(pulleyPos, Direction.WEST))
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("Whenever Pulleys are themselves being moved by a Contraption..."); .text("Whenever Pulleys are themselves being moved by a Contraption...");
scene.idle(60); scene.idle(60);
@ -215,6 +220,7 @@ public class PulleyScenes {
scene.overlay.showSelectionWithText(util.select.fromTo(1, 1, 1, 1, 1, 2), 50) scene.overlay.showSelectionWithText(util.select.fromTo(1, 1, 1, 1, 1, 2), 50)
.colored(PonderPalette.GREEN) .colored(PonderPalette.GREEN)
.placeNearTarget() .placeNearTarget()
.attachKeyFrame()
.text("...its attached structure will be dragged with it"); .text("...its attached structure will be dragged with it");
scene.idle(60); scene.idle(60);
scene.overlay.showText(80) scene.overlay.showText(80)