From 203ca6f849110bac7dd683f7c2b2c0efc51b8ad3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 18 Feb 2021 15:44:18 +0100 Subject: [PATCH] Birbs and Click input --- src/generated/resources/.cache/cache | 24 ++-- .../resources/assets/create/lang/en_us.json | 17 ++- .../assets/create/lang/unfinished/de_de.json | 19 ++- .../assets/create/lang/unfinished/es_mx.json | 25 ++-- .../assets/create/lang/unfinished/fr_fr.json | 25 ++-- .../assets/create/lang/unfinished/it_it.json | 25 ++-- .../assets/create/lang/unfinished/ja_jp.json | 25 ++-- .../assets/create/lang/unfinished/ko_kr.json | 25 ++-- .../assets/create/lang/unfinished/nl_nl.json | 25 ++-- .../assets/create/lang/unfinished/pt_br.json | 25 ++-- .../assets/create/lang/unfinished/ru_ru.json | 25 ++-- .../assets/create/lang/unfinished/zh_cn.json | 25 ++-- .../assets/create/lang/unfinished/zh_tw.json | 25 ++-- .../relays/gauge/SpeedGaugeTileEntity.java | 44 +++--- .../create/foundation/gui/AllGuiTextures.java | 3 + .../create/foundation/gui/AllIcons.java | 5 +- .../foundation/ponder/PonderRegistry.java | 1 - .../create/foundation/ponder/PonderScene.java | 60 +++++--- .../create/foundation/ponder/PonderUI.java | 93 ++++++++++-- .../create/foundation/ponder/PonderWorld.java | 3 + .../ponder/content/CogwheelStory.java | 42 ------ .../ponder/content/DebugScenes.java | 124 ++++++++++++++-- .../ponder/content/PonderIndex.java | 4 - .../ponder/content/ShaftAsRelay.java | 33 +++-- .../ponder/content/ShaftsCanBeEncased.java | 19 ++- .../foundation/ponder/content/SharedText.java | 4 +- .../ponder/elements/InputWindowElement.java | 135 ++++++++++++++++++ .../ponder/elements/ParrotElement.java | 44 +++++- .../EmitParticlesInstruction.java | 6 + .../instructions/FadeInOutInstruction.java | 49 +++++++ .../instructions/ShowInputInstruction.java | 31 ++++ .../ponder/instructions/TextInstruction.java | 41 ++---- .../create/foundation/utility/VecHelper.java | 2 +- .../assets/create/textures/gui/icons.png | Bin 2598 -> 2719 bytes .../assets/create/textures/gui/widgets.png | Bin 1895 -> 1972 bytes src/main/resources/ponder/cogwheel/first.nbt | Bin 679 -> 0 bytes src/main/resources/ponder/debug/scene_6.nbt | Bin 0 -> 436 bytes src/main/resources/ponder/debug/scene_7.nbt | Bin 0 -> 578 bytes src/main/resources/ponder/shaft/shaft.nbt | Bin 541 -> 563 bytes 39 files changed, 757 insertions(+), 296 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/ponder/content/CogwheelStory.java create mode 100644 src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java create mode 100644 src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeInOutInstruction.java create mode 100644 src/main/java/com/simibubi/create/foundation/ponder/instructions/ShowInputInstruction.java delete mode 100644 src/main/resources/ponder/cogwheel/first.nbt create mode 100644 src/main/resources/ponder/debug/scene_6.nbt create mode 100644 src/main/resources/ponder/debug/scene_7.nbt diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 588bd62e9..e0d2e9685 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -401,18 +401,18 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e3f618c5b622d21880de858678d1802cbf65e615 assets/create/lang/en_ud.json -694cfe3d8fe9793b7ac0fbc7bbd3cf6bf455bf92 assets/create/lang/en_us.json -499d461cf16f5a94049fbbe9eb758e0eaa19fa83 assets/create/lang/unfinished/de_de.json -8e486714ce38b6702fc614f4ba7cd34e003800aa assets/create/lang/unfinished/es_mx.json -53f2918966bd9c045314a02ff0f5439720969087 assets/create/lang/unfinished/fr_fr.json -073ead0ceacdcf666fece6a78071a36fa9c3d356 assets/create/lang/unfinished/it_it.json -0967bfc8888598329563ff6ee419038aef03df0a assets/create/lang/unfinished/ja_jp.json -50e210e32d4a55561ffed5a62ac10802107b719e assets/create/lang/unfinished/ko_kr.json -40784b923f0defdecbd35f73c7d7ead9c3fe9d8a assets/create/lang/unfinished/nl_nl.json -ad719b1559c58c9e7c1b22023c5e686d4fa1ca19 assets/create/lang/unfinished/pt_br.json -1190f9152de89c7e0b7561c3cdddae6fe2f1aa19 assets/create/lang/unfinished/ru_ru.json -bbcd8d37a18c779dfcca9aeaeb2b2d101a4b4fe2 assets/create/lang/unfinished/zh_cn.json -be270f1d2bc61ebd4a9f1be5b00daa56947de2d7 assets/create/lang/unfinished/zh_tw.json +1c2c42b885b5d2b23f452d1550fb6c3a3a7ab952 assets/create/lang/en_us.json +90fb5c8d2b384d93c3bbc2693103be18a0ff3dc7 assets/create/lang/unfinished/de_de.json +3789e356240833be498849723cde53f12553c889 assets/create/lang/unfinished/es_mx.json +89aa38cb8250cd56dff4ae00d1491aea7e8aea36 assets/create/lang/unfinished/fr_fr.json +61e46061b0e9487f381c32a6c1004aacdb0be2b1 assets/create/lang/unfinished/it_it.json +70d3beec87b4e461b02b38feec572fcf92ffad35 assets/create/lang/unfinished/ja_jp.json +d77cefebb91bce27fc098d4e5a81a39c5b3f10de assets/create/lang/unfinished/ko_kr.json +6f7f629f4e8597c39f1cb259359e451255b31864 assets/create/lang/unfinished/nl_nl.json +0fd66b2ff7124cff646f32cebcd679d5e16ed805 assets/create/lang/unfinished/pt_br.json +5cf5aae29b48a7066c98dfbb130f58dcca7be5f6 assets/create/lang/unfinished/ru_ru.json +d1afca478f7ceaa739220873cfdff4f2caa3b3fd assets/create/lang/unfinished/zh_cn.json +ee8599a8bf1c4fac02dc9501de5d08f58b19f395 assets/create/lang/unfinished/zh_tw.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 32a7025d9..9ea4a76c2 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1797,14 +1797,11 @@ "create.ponder.hold_to_ponder": "Hold [%1$s] to Ponder", "create.ponder.pondering": "Pondering about...", - "create.ponder.shared.more_shared": "This is Shared stuff", - "create.ponder.shared.when_wrenched": "When Wrenched", - "create.ponder.cogwheel.scene_0.title": "My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "Sneak +", + "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "Das X axis", "create.ponder.brass_hand.scene_0.y": "Das Y axis", @@ -1814,11 +1811,13 @@ "create.ponder.brass_hand.scene_1.title": "Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "Incoming...", "create.ponder.brass_hand.scene_4.title": "Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index a51776d21..845da707f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1119", + "_": "Missing Localizations: 1124", "_": "->------------------------] Game Elements [------------------------<-", @@ -1798,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1815,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 440b56c5b..9946947f4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 910", + "_": "Missing Localizations: 915", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:", "create.gui.goggles.at_current_speed": "UNLOCALIZED: at current speed", "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "UNLOCALIZED: Gauge Information:", "create.gui.speedometer.title": "UNLOCALIZED: Rotation Speed", "create.gui.stressometer.title": "UNLOCALIZED: Network Stress", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 9afcc1138..cdeab2100 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 690", + "_": "Missing Localizations: 695", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "Statistiques cinétiques:", "create.gui.goggles.at_current_speed": "À la vitesse actuelle", "create.gui.goggles.pole_length": "Longueur de la barre", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "Informations sur la jauge:", "create.gui.speedometer.title": "Vitesse de rotation", "create.gui.stressometer.title": "Stress du réseau", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 3d2f316b5..5169c7260 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 27", + "_": "Missing Localizations: 32", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "Statistiche cinetiche:", "create.gui.goggles.at_current_speed": "Alla velocità attuale", "create.gui.goggles.pole_length": "Lunghezza palo:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "Informazioni sul calibro:", "create.gui.speedometer.title": "Velocità di rotazione", "create.gui.stressometer.title": "Stress della rete", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 004d882f2..0d1de356a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 36", + "_": "Missing Localizations: 41", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "動力の統計:", "create.gui.goggles.at_current_speed": "現在の速度", "create.gui.goggles.pole_length": "ポールの長さ:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "計器の情報:", "create.gui.speedometer.title": "回転速度", "create.gui.stressometer.title": "ネットワークの応力", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 51612fa21..33c304adf 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 79", + "_": "Missing Localizations: 84", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "가동 상태:", "create.gui.goggles.at_current_speed": "현재 에너지량", "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "게이지 정보:", "create.gui.speedometer.title": "회전 속도", "create.gui.stressometer.title": "네트워크 부하", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 2fb0077c9..f09b09a1d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1179", + "_": "Missing Localizations: 1184", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:", "create.gui.goggles.at_current_speed": "UNLOCALIZED: at current speed", "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "UNLOCALIZED: Gauge Information:", "create.gui.speedometer.title": "UNLOCALIZED: Rotation Speed", "create.gui.stressometer.title": "UNLOCALIZED: Network Stress", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index be5288f9b..5e937709f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1245", + "_": "Missing Localizations: 1250", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:", "create.gui.goggles.at_current_speed": "UNLOCALIZED: at current speed", "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "UNLOCALIZED: Gauge Information:", "create.gui.speedometer.title": "UNLOCALIZED: Rotation Speed", "create.gui.stressometer.title": "UNLOCALIZED: Network Stress", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 261a60115..82bb3ce9f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 29", + "_": "Missing Localizations: 34", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "Кинетическая статистика:", "create.gui.goggles.at_current_speed": "На текущей скорости", "create.gui.goggles.pole_length": "Длина поршня", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "Калибровочная информация:", "create.gui.speedometer.title": "Скорость вращения", "create.gui.stressometer.title": "Сетевой момент", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 135caaf45..3ea36f056 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 27", + "_": "Missing Localizations: 32", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "动力学状态:", "create.gui.goggles.at_current_speed": "当前速度应力值", "create.gui.goggles.pole_length": "活塞杆长度:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "仪表信息:", "create.gui.speedometer.title": "旋转速度", "create.gui.stressometer.title": "网络应力", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index c300d3e80..03543e9a6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 32", + "_": "Missing Localizations: 37", "_": "->------------------------] Game Elements [------------------------<-", @@ -823,6 +823,12 @@ "create.gui.goggles.kinetic_stats": "機械學狀態:", "create.gui.goggles.at_current_speed": "現在速度動能值", "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", + "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", + "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s %2$s %3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s %2$s %3$s] was not in a loaded chunk", + "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", + "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", "create.gui.gauge.info_header": "儀表訊息:", "create.gui.speedometer.title": "旋轉速度", "create.gui.stressometer.title": "網路動能", @@ -1792,14 +1798,11 @@ "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.shared.more_shared": "UNLOCALIZED: This is Shared stuff", - "create.ponder.shared.when_wrenched": "UNLOCALIZED: When Wrenched", - "create.ponder.cogwheel.scene_0.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_1.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.cogwheel.scene_2.title": "UNLOCALIZED: My First Ponder Story, Parrots", - "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts seem to relay rotation in a straight line.", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", + "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.", "create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: I could use Brass or Andesite Casing to hide them.", + "create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.title": "UNLOCALIZED: Encasing Shafts", "create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis", "create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis", @@ -1809,11 +1812,13 @@ "create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks", "create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids", "create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.", - "create.ponder.brass_hand.scene_3.outofbounds2": "UNLOCALIZED: Blocks outside of the base plate \n\nIgnored by scaling, thanks to configureBasePlate()", - "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate", + "create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling", + "create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.", "create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate", "create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...", "create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles", + "create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction", + "create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs", "_": "Thank you for translating Create!" diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java index 373387ab7..9d64fbe32 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java @@ -13,7 +13,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.TextFormatting; -public class SpeedGaugeTileEntity extends GaugeTileEntity{ +public class SpeedGaugeTileEntity extends GaugeTileEntity { public SpeedGaugeTileEntity(TileEntityType type) { super(type); @@ -23,28 +23,36 @@ public class SpeedGaugeTileEntity extends GaugeTileEntity{ public void onSpeedChanged(float prevSpeed) { super.onSpeedChanged(prevSpeed); float speed = Math.abs(getSpeed()); - float medium = AllConfigs.SERVER.kinetics.mediumSpeed.get().floatValue(); - float fast = AllConfigs.SERVER.kinetics.fastSpeed.get().floatValue(); - float max = AllConfigs.SERVER.kinetics.maxRotationSpeed.get().floatValue(); - color = ColorHelper.mixColors(SpeedLevel.of(speed).getColor(), 0xffffff, .25f); + color = speed == 0 ? 0x333333 + : ColorHelper.mixColors(SpeedLevel.of(speed) + .getColor(), 0xffffff, .25f); if (speed == 69) - AllTriggers.triggerForNearbyPlayers(AllTriggers.SPEED_READ, world, pos, 6, - GogglesItem::canSeeParticles); - if (speed == 0) { - dialTarget = 0; - color = 0x333333; - } else if (speed < medium) { - dialTarget = MathHelper.lerp(speed / medium, 0, .45f); - } else if (speed < fast) { - dialTarget = MathHelper.lerp((speed - medium) / (fast - medium), .45f, .75f); - } else { - dialTarget = MathHelper.lerp((speed - fast) / (max - fast), .75f, 1.125f); - } - + AllTriggers.triggerForNearbyPlayers(AllTriggers.SPEED_READ, world, pos, 6, GogglesItem::canSeeParticles); + + dialTarget = getDialTarget(speed); markDirty(); } + public static float getDialTarget(float speed) { + float medium = AllConfigs.SERVER.kinetics.mediumSpeed.get() + .floatValue(); + float fast = AllConfigs.SERVER.kinetics.fastSpeed.get() + .floatValue(); + float max = AllConfigs.SERVER.kinetics.maxRotationSpeed.get() + .floatValue(); + float target = 0; + if (speed == 0) + target = 0; + else if (speed < medium) + target = MathHelper.lerp(speed / medium, 0, .45f); + else if (speed < fast) + target = MathHelper.lerp((speed - medium) / (fast - medium), .45f, .75f); + else + target = MathHelper.lerp((speed - fast) / (max - fast), .75f, 1.125f); + return target; + } + @Override public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { super.addToGoggleTooltip(tooltip, isPlayerSneaking); diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java index 5528f791b..bb7c03018 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java @@ -78,6 +78,9 @@ public enum AllGuiTextures { INDICATOR_GREEN("widgets.png", 36, 18, 18, 6), INDICATOR_YELLOW("widgets.png", 54, 18, 18, 6), INDICATOR_RED("widgets.png", 72, 18, 18, 6), + + SPEECH_TOOLTIP("widgets.png", 0, 24, 8, 8), + SPEECH_TOOLTIP_HIGHLIGHT("widgets.png", 8, 24, 8, 8), ; diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java index 51e0c0764..faa7d9af7 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java @@ -70,7 +70,10 @@ public class AllIcons { I_REPLACE = next(), I_CLEAR = next(), I_OVERLAY = next(), - I_FLATTEN = next(); + I_FLATTEN = next(), + I_LMB = next(), + I_SCROLL = next(), + I_RMB = next(); public static final AllIcons I_TOOL_DEPLOY = newRow(), diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java index fcc7945d1..3f8b855ea 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java @@ -23,7 +23,6 @@ import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTSizeTracker; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; import net.minecraft.world.gen.feature.template.PlacementSettings; import net.minecraft.world.gen.feature.template.Template; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 84fd7d8f5..7157d1891 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -14,6 +14,7 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.foundation.ponder.content.PonderPalette; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; import com.simibubi.create.foundation.ponder.elements.ParrotElement; import com.simibubi.create.foundation.ponder.elements.PonderOverlayElement; import com.simibubi.create.foundation.ponder.elements.PonderSceneElement; @@ -21,12 +22,15 @@ import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction; import com.simibubi.create.foundation.ponder.instructions.DelayInstruction; import com.simibubi.create.foundation.ponder.instructions.DisplayWorldSectionInstruction; +import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction; +import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter; import com.simibubi.create.foundation.ponder.instructions.HideAllInstruction; import com.simibubi.create.foundation.ponder.instructions.MarkAsFinishedInstruction; import com.simibubi.create.foundation.ponder.instructions.MovePoiInstruction; import com.simibubi.create.foundation.ponder.instructions.ReplaceBlocksInstruction; import com.simibubi.create.foundation.ponder.instructions.RotateSceneInstruction; import com.simibubi.create.foundation.ponder.instructions.ShowCompleteSchematicInstruction; +import com.simibubi.create.foundation.ponder.instructions.ShowInputInstruction; import com.simibubi.create.foundation.ponder.instructions.TextInstruction; import com.simibubi.create.foundation.ponder.instructions.TileEntityDataInstruction; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; @@ -41,6 +45,7 @@ import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Vector4f; +import net.minecraft.particles.RedstoneParticleData; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; @@ -360,7 +365,7 @@ public class PonderScene { } public SceneBuilder replaceBlocks(Select selection, BlockState state) { - return addInstruction(new ReplaceBlocksInstruction(selection, state, false)); + return addInstruction(new ReplaceBlocksInstruction(selection, state, true)); } public SceneBuilder setKineticSpeed(Select selection, float speed) { @@ -373,17 +378,11 @@ public class PonderScene { public SceneBuilder modifyKineticSpeed(Select selection, UnaryOperator speedFunc) { addInstruction(new TileEntityDataInstruction(selection, SpeedGaugeTileEntity.class, nbt -> { - if (!nbt.contains("Speed")) - return nbt; float newSpeed = speedFunc.apply(nbt.getFloat("Speed")); - // TODO speed gauge consistency - nbt.putFloat("Value", Math.abs(newSpeed) / 256f); + nbt.putFloat("Value", SpeedGaugeTileEntity.getDialTarget(newSpeed)); return nbt; }, false)); - return addInstruction(new TileEntityDataInstruction(selection, KineticTileEntity.class, nbt -> { - if (!nbt.contains("Speed")) - return nbt; nbt.putFloat("Speed", speedFunc.apply(nbt.getFloat("Speed"))); return nbt; }, false)); @@ -396,19 +395,42 @@ public class PonderScene { }, false)); } - public SceneBuilder createParrotSpinningOn(BlockPos pos, Direction fadeInDirection) { - return addInstruction(new CreateParrotInstruction(15, fadeInDirection, - ParrotElement.spinOnComponent(new Vec3d(pos).add(.5, 0, .5), pos.down()))); - } - - public SceneBuilder createParrotLookingAtPOI(Vec3d location, Direction fadeInDirection) { - return addInstruction(new CreateParrotInstruction(15, fadeInDirection, ParrotElement.lookAtPOI(location))); - } - public SceneBuilder movePOI(Vec3d location) { return addInstruction(new MovePoiInstruction(location)); } + public SceneBuilder showControls(InputWindowElement element, int duration) { + return addInstruction(new ShowInputInstruction(element, duration)); + } + + public SceneBuilder emitParticles(Vec3d location, Emitter emitter, float amountPerCycle, int cycles) { + return addInstruction(new EmitParticlesInstruction(location, emitter, amountPerCycle, cycles)); + } + + public SceneBuilder indicateSuccess(BlockPos pos) { + return addInstruction(new EmitParticlesInstruction(VecHelper.getCenterOf(pos), + Emitter.withinBlockSpace(new RedstoneParticleData(.5f, 1, .7f, 1), new Vec3d(0, 0, 0)), 20, 2)); + } + + public SceneBuilder birbOnTurntable(BlockPos pos) { + return addInstruction(new CreateParrotInstruction(10, Direction.DOWN, + ParrotElement.spinOnComponent(VecHelper.getCenterOf(pos), pos))); + } + + public SceneBuilder birbOnSpinnyShaft(BlockPos pos) { + return addInstruction( + new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.spinOnComponent(VecHelper.getCenterOf(pos) + .add(0, 0.5, 0), pos))); + } + + public SceneBuilder birbLookingAtPOI(Vec3d location) { + return addInstruction(new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.lookAtPOI(location))); + } + + public SceneBuilder birbPartying(Vec3d location) { + return addInstruction(new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.dance(location))); + } + public SceneBuilder addInstruction(PonderInstruction instruction) { schedule.add(instruction); return this; @@ -420,6 +442,10 @@ public class PonderScene { return VecHelper.getCenterOf(new BlockPos(x, y, z)); } + public Vec3d topOf(int x, int y, int z) { + return new Vec3d(x + .5, y + 1, z + .5); + } + public Vec3d vector(double x, double y, double z) { return new Vec3d(x, y, z); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java index 04c3b7935..acaf4089b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java @@ -7,6 +7,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.foundation.gui.AbstractSimiScreen; +import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.ponder.content.PonderIndex; import com.simibubi.create.foundation.ponder.ui.PonderButton; @@ -15,6 +16,7 @@ import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.LerpedFloat; import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; +import com.simibubi.create.foundation.utility.Pointing; import net.minecraft.client.GameSettings; import net.minecraft.client.Minecraft; @@ -141,43 +143,44 @@ public class PonderUI extends AbstractSimiScreen { RenderSystem.enableAlphaTest(); RenderSystem.enableBlend(); RenderSystem.enableDepthTest(); - + ms.push(); story.transform.updateScreenParams(width, height, slide); story.transform.apply(ms); story.renderScene(buffer, ms); buffer.draw(); - + // coords for debug if (PonderIndex.EDITOR_MODE) { MutableBoundingBox bounds = story.getBounds(); - + RenderSystem.pushMatrix(); - RenderSystem.multMatrix(ms.peek().getModel()); - RenderSystem.scaled(-1/16d, -1/16d, 1/16d); - RenderSystem.translated(1, -8, -1/64f); - + RenderSystem.multMatrix(ms.peek() + .getModel()); + RenderSystem.scaled(-1 / 16d, -1 / 16d, 1 / 16d); + RenderSystem.translated(1, -8, -1 / 64f); + RenderSystem.pushMatrix(); for (int x = 0; x <= bounds.getXSize(); x++) { RenderSystem.translated(-16, 0, 0); font.drawString(x == bounds.getXSize() ? "x" : "" + x, 0, 0, 0xFFFFFFFF); } RenderSystem.popMatrix(); - + RenderSystem.pushMatrix(); RenderSystem.scaled(-1, 1, 1); RenderSystem.rotatef(-90, 0, 1, 0); - RenderSystem.translated(-8, -2, 2/64f); + RenderSystem.translated(-8, -2, 2 / 64f); for (int z = 0; z <= bounds.getZSize(); z++) { RenderSystem.translated(16, 0, 0); font.drawString(z == bounds.getZSize() ? "z" : "" + z, 0, 0, 0xFFFFFFFF); } RenderSystem.popMatrix(); - + buffer.draw(); RenderSystem.popMatrix(); } - + ms.pop(); } @@ -229,6 +232,7 @@ public class PonderUI extends AbstractSimiScreen { right.flash(); else right.dim(); + } protected void lowerButtonGroup(int index, int mouseX, int mouseY, float fade, AllIcons icon, KeyBinding key) { @@ -320,7 +324,72 @@ public class PonderUI extends AbstractSimiScreen { } public static void renderBox(int x, int y, int w, int h, boolean highlighted) { - renderBox(x, y, w, h, 0xdd000000, highlighted ? 0x70ffffff : 0x30eebb00, highlighted ? 0x30ffffff : 0x10eebb00); + renderBox(x, y, w, h, 0xff000000, highlighted ? 0xf0ffeedd : 0x40ffeedd, highlighted ? 0x60ffeedd : 0x20ffeedd); + } + + public static void renderSpeechBox(int x, int y, int w, int h, boolean highlighted, Pointing pointing, + boolean returnWithLocalTransform) { + if (!returnWithLocalTransform) + RenderSystem.pushMatrix(); + + int boxX = x; + int boxY = y; + int divotX = x; + int divotY = y; + int divotRotation = 0; + int divotSize = 8; + int distance = 1; + int divotRadius = divotSize / 2; + + switch (pointing) { + default: + case DOWN: + divotRotation = 0; + boxX -= w / 2; + boxY -= h + divotSize + 1 + distance; + divotX -= divotRadius; + divotY -= divotSize + distance; + break; + case LEFT: + divotRotation = 90; + boxX += divotSize + 1 + distance; + boxY -= h / 2; + divotX += distance; + divotY -= divotRadius; + break; + case RIGHT: + divotRotation = 270; + boxX -= w + divotSize + 1 + distance; + boxY -= h / 2; + divotX -= divotSize + distance; + divotY -= divotRadius; + break; + case UP: + divotRotation = 180; + boxX -= w / 2; + boxY += divotSize + 1 + distance; + divotX -= divotRadius; + divotY += distance; + break; + } + + renderBox(boxX, boxY, w, h, highlighted); + + RenderSystem.pushMatrix(); + AllGuiTextures toRender = highlighted ? AllGuiTextures.SPEECH_TOOLTIP_HIGHLIGHT : AllGuiTextures.SPEECH_TOOLTIP; + RenderSystem.translated(divotX + divotRadius, divotY + divotRadius, 10); + RenderSystem.rotatef(divotRotation, 0, 0, 1); + RenderSystem.translated(-divotRadius, -divotRadius, 0); + toRender.draw(0, 0); + RenderSystem.popMatrix(); + + if (returnWithLocalTransform) { + RenderSystem.translated(boxX, boxY, 0); + return; + } + + RenderSystem.popMatrix(); + } public static void renderBox(int x, int y, int w, int h, int backgroundColor, int borderColorStart, diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java index 0c67d647a..b478ec6d4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -131,6 +131,9 @@ public class PonderWorld extends SchematicWorld { public void addBlockDestroyEffects(BlockPos pos, BlockState state) { VoxelShape voxelshape = state.getShape(this, pos); + if (voxelshape.isEmpty()) + return; + AxisAlignedBB bb = voxelshape.getBoundingBox(); double d1 = Math.min(1.0D, bb.maxX - bb.minX); double d2 = Math.min(1.0D, bb.maxY - bb.minY); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/CogwheelStory.java b/src/main/java/com/simibubi/create/foundation/ponder/content/CogwheelStory.java deleted file mode 100644 index 921db2309..000000000 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/CogwheelStory.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.simibubi.create.foundation.ponder.content; - -import com.simibubi.create.foundation.ponder.PonderStoryBoard; -import com.simibubi.create.foundation.ponder.Select; -import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder; -import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil; - -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; - -public class CogwheelStory extends PonderStoryBoard { - - public CogwheelStory() { - } - - @Override - public String getSchematicName() { - return "cogwheel/first"; - } - - @Override - public String getStoryTitle() { - return "My First Ponder Story, Parrots"; - } - - @Override - public void program(SceneBuilder scene, SceneBuildingUtil util) { - - scene.movePOI(new Vec3d(3.5, 4, 4.5)); - scene.showBasePlate(); - scene.idle(10); - - scene.createParrotSpinningOn(new BlockPos(1, 4, 2), Direction.DOWN); - scene.showSection(util.layersFrom(1), Direction.DOWN); - - scene.idle(10); - scene.rotateCameraY(180); - - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java index 2d3327ba5..1d93364d7 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java @@ -11,14 +11,18 @@ import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder; import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil; import com.simibubi.create.foundation.ponder.PonderStoryBoard; import com.simibubi.create.foundation.ponder.Select; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction; import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter; +import com.simibubi.create.foundation.utility.Pointing; import com.tterrag.registrate.util.entry.ItemEntry; import net.minecraft.block.Blocks; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.particles.ParticleTypes; import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; public abstract class DebugScenes extends PonderStoryBoard { @@ -33,6 +37,8 @@ public abstract class DebugScenes extends PonderStoryBoard { PonderRegistry.addStoryBoard(item, new FluidsScene(++i)); PonderRegistry.addStoryBoard(item, new OffScreenScene(++i)); PonderRegistry.addStoryBoard(item, new ParticlesScene(++i)); + PonderRegistry.addStoryBoard(item, new ControlsScene(++i)); + PonderRegistry.addStoryBoard(item, new BirbScene(++i)); } public DebugScenes(int index) { @@ -64,7 +70,6 @@ public abstract class DebugScenes extends PonderStoryBoard { scene.showBasePlate(); scene.idle(10); scene.showSection(util.layersFrom(1), Direction.DOWN); -// scene.showTargetedText(WHITE, new Vec3d(1.5, 1.5, 1.5), "coordinate", "Schematic orientation: ", 40); scene.idle(10); scene.showSelectionWithText(PonderPalette.RED, Select.fromTo(2, 1, 1, 4, 1, 1), "x", "Das X axis", 20); @@ -96,9 +101,10 @@ public abstract class DebugScenes extends PonderStoryBoard { scene.idle(10); scene.showText(WHITE, 10, "change_blocks", "Blocks can be modified", 1000); scene.idle(20); - scene.replaceBlocks(Select.fromTo(1, 1, 2, 2, 2, 4), AllBlocks.REFINED_RADIANCE_CASING.getDefaultState()); + scene.replaceBlocks(Select.fromTo(1, 1, 3, 2, 2, 4), AllBlocks.REFINED_RADIANCE_CASING.getDefaultState()); scene.idle(10); scene.replaceBlocks(Select.pos(3, 1, 1), Blocks.GOLD_BLOCK.getDefaultState()); + scene.rotateCameraY(180); scene.markAsFinished(); } @@ -131,6 +137,36 @@ public abstract class DebugScenes extends PonderStoryBoard { } + static class OffScreenScene extends DebugScenes { + + public OffScreenScene(int index) { + super(index); + } + + @Override + public void program(SceneBuilder scene, SceneBuildingUtil util) { + scene.configureBasePlate(1, 0, 6); + scene.showBasePlate(); + Select out1 = Select.fromTo(7, 0, 0, 8, 0, 5); + Select out2 = Select.fromTo(0, 0, 0, 0, 0, 5); + scene.idle(10); + scene.showSection(Select.compound(util.layersFrom(1), out1, out2), Direction.DOWN); + scene.idle(10); + + scene.showSelectionWithText(PonderPalette.BLACK, out1, "outofbounds", + "Blocks outside of the base plate do not affect scaling", 100); + scene.showSelectionWithText(PonderPalette.BLACK, out2, "thanks_to_configureBasePlate", + "configureBasePlate() makes sure of that.", 100); + scene.markAsFinished(); + } + + @Override + protected String getTitle() { + return "Out of bounds / configureBasePlate"; + } + + } + static class ParticlesScene extends DebugScenes { public ParticlesScene(int index) { @@ -165,34 +201,94 @@ public abstract class DebugScenes extends PonderStoryBoard { } - static class OffScreenScene extends DebugScenes { + static class ControlsScene extends DebugScenes { - public OffScreenScene(int index) { + public ControlsScene(int index) { super(index); } @Override public void program(SceneBuilder scene, SceneBuildingUtil util) { - scene.configureBasePlate(1, 0, 6); scene.showBasePlate(); - Select out1 = Select.fromTo(7, 0, 0, 8, 0, 5); - Select out2 = Select.fromTo(0, 0, 0, 0, 0, 5); scene.idle(10); - scene.showSection(Select.compound(util.layersFrom(1), out1, out2), Direction.DOWN); + scene.showSection(util.layer(1), Direction.DOWN); + scene.idle(4); + scene.showSection(util.layer(2), Direction.DOWN); + scene.idle(4); + scene.showSection(util.layer(3), Direction.DOWN); scene.idle(10); - scene.showSelectionWithText(PonderPalette.BLACK, out1, "outofbounds", - "Blocks outside of the base plate do not affect scaling", 100); - scene.showSelectionWithText(PonderPalette.BLACK, out2, "thanks_to_configureBasePlate", - "configureBasePlate() makes sure of that.", 100); - scene.markAsFinished(); + scene.showControls(new InputWindowElement(util.topOf(3, 1, 1), Pointing.DOWN).rightClick() + .whileSneaking() + .withWrench(), 40); + scene.idle(8); + scene.replaceBlocks(Select.pos(3, 1, 1), AllBlocks.SHAFT.getDefaultState()); + scene.idle(20); + + scene.showControls(new InputWindowElement(new Vec3d(1, 4.5, 3.5), Pointing.LEFT).rightClick() + .withItem(new ItemStack(Blocks.POLISHED_ANDESITE)), 20); + scene.idle(4); + scene.showSection(util.layer(4), Direction.DOWN); + scene.idle(8); + + scene.showControls(new InputWindowElement(new Vec3d(2.5, 1.5, 3), Pointing.UP).whileCTRL() + .scroll() + .withWrench(), 40); } @Override protected String getTitle() { - return "Out of bounds / configureBasePlate"; + return "Basic player interaction"; } } + static class BirbScene extends DebugScenes { + + public BirbScene(int index) { + super(index); + } + + @Override + public void program(SceneBuilder scene, SceneBuildingUtil util) { + scene.showBasePlate(); + scene.idle(10); + scene.showSection(util.layersFrom(1), Direction.DOWN); + scene.idle(10); + BlockPos pos = new BlockPos(1, 2, 3); + scene.birbOnSpinnyShaft(pos); + scene.showTargetedText(PonderPalette.GREEN, util.topOf(1, 2, 3), "birbs_interesting", + "More birbs = More interesting", 100); + scene.idle(10); + scene.birbPartying(util.topOf(0, 1, 2)); + scene.idle(10); + + scene.movePOI(Vec3d.ZERO); + scene.birbLookingAtPOI(util.centerOf(3, 1, 3) + .add(0, 0.25f, 0)); + scene.idle(20); + + scene.replaceBlocks(Select.pos(4, 1, 0), Blocks.GOLD_BLOCK.getDefaultState()); + scene.movePOI(util.centerOf(4, 1, 0)); + scene.idle(20); + + scene.replaceBlocks(Select.pos(0, 1, 4), Blocks.GOLD_BLOCK.getDefaultState()); + scene.movePOI(util.centerOf(0, 1, 4)); + scene.showTargetedText(PonderPalette.FAST, util.centerOf(0, 1, 4), "poi", "Point of Interest", 20); + scene.idle(20); + + scene.replaceBlocks(Select.pos(4, 1, 0), Blocks.AIR.getDefaultState()); + scene.movePOI(util.centerOf(4, 1, 0)); + scene.idle(20); + + scene.replaceBlocks(Select.pos(0, 1, 4), Blocks.AIR.getDefaultState()); + scene.movePOI(util.centerOf(0, 1, 4)); + } + + @Override + protected String getTitle() { + return "Birbs"; + } + + } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index 4a560622f..7ff108e90 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -14,10 +14,6 @@ public class PonderIndex { public static void register() { // Register storyboards here (Requires re-launch) - PonderRegistry.addStoryBoard(AllBlocks.COGWHEEL, new CogwheelStory()); - PonderRegistry.addStoryBoard(AllBlocks.COGWHEEL, new CogwheelStory()); - PonderRegistry.addStoryBoard(AllBlocks.COGWHEEL, new CogwheelStory()); - PonderRegistry.addStoryBoard(AllBlocks.SHAFT, new ShaftAsRelay()); PonderRegistry.addStoryBoard(AllBlocks.SHAFT, new ShaftsCanBeEncased()); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftAsRelay.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftAsRelay.java index 90f5fa097..627e014ed 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftAsRelay.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftAsRelay.java @@ -10,7 +10,6 @@ import com.simibubi.create.foundation.ponder.Select; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; class ShaftAsRelay extends PonderStoryBoard { @@ -26,26 +25,30 @@ class ShaftAsRelay extends PonderStoryBoard { @Override public void program(SceneBuilder scene, SceneBuildingUtil util) { - scene.showBasePlate(); + scene.configureBasePlate(0, 0, 5); + scene.showSection(util.layer(0), Direction.UP); - Select encased = util.column(4, 2); - Select gauge = util.column(0, 2); - Select shafts = Select.cuboid(new BlockPos(1, 1, 2), new Vec3i(2, 0, 0)); - - scene.idle(10); - scene.showSection(encased, Direction.DOWN); - scene.idle(10); - scene.showSection(gauge, Direction.DOWN); + Select gauge = Select.pos(0, 1, 2); + scene.showSection(gauge, Direction.UP); scene.setKineticSpeed(gauge, 0); - scene.idle(20); - scene.showSection(shafts, Direction.DOWN); - scene.setKineticSpeed(gauge, -112); + scene.idle(5); + scene.showSection(Select.pos(5, 1, 2), Direction.DOWN); + scene.idle(10); + for (int i = 4; i >= 1; i--) { + if (i == 2) + scene.rotateCameraY(70); + scene.idle(5); + scene.showSection(Select.pos(i, 1, 2), Direction.DOWN); + } + + scene.setKineticSpeed(gauge, 64); + scene.indicateSuccess(new BlockPos(0, 1, 2)); scene.idle(10); scene.showTargetedText(WHITE, new Vec3d(3, 1.5, 2.5), "shaft_relay", - "Shafts seem to relay rotation in a straight line.", 1000); - + "Shafts will relay rotation in a straight line.", 1000); + scene.idle(20); scene.markAsFinished(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftsCanBeEncased.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftsCanBeEncased.java index a93b98143..2ddf32ba9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftsCanBeEncased.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ShaftsCanBeEncased.java @@ -8,6 +8,9 @@ import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder; import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil; import com.simibubi.create.foundation.ponder.PonderStoryBoard; import com.simibubi.create.foundation.ponder.Select; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; +import com.simibubi.create.foundation.utility.Pointing; +import com.tterrag.registrate.util.entry.BlockEntry; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; @@ -38,18 +41,26 @@ class ShaftsCanBeEncased extends PonderStoryBoard { scene.showSection(shaft, Direction.DOWN); scene.idle(20); - scene.setBlocks(andesite, AllBlocks.ANDESITE_ENCASED_SHAFT.getDefaultState() + BlockEntry andesiteEncased = AllBlocks.ANDESITE_ENCASED_SHAFT; + scene.showControls(new InputWindowElement(util.topOf(3, 1, 2), Pointing.DOWN).rightClick() + .withItem(AllBlocks.ANDESITE_CASING.asStack()), 60); + scene.idle(7); + scene.setBlocks(andesite, andesiteEncased.getDefaultState() .with(EncasedShaftBlock.AXIS, Axis.X)); scene.setKineticSpeed(shaft, -112); scene.idle(10); - - scene.setBlocks(brass, AllBlocks.BRASS_ENCASED_SHAFT.getDefaultState() + + BlockEntry brassEncased = AllBlocks.BRASS_ENCASED_SHAFT; + scene.showControls(new InputWindowElement(util.topOf(1, 0, 2), Pointing.UP).rightClick() + .withItem(AllBlocks.BRASS_CASING.asStack()), 60); + scene.idle(7); + scene.setBlocks(brass, brassEncased.getDefaultState() .with(EncasedShaftBlock.AXIS, Axis.X)); scene.setKineticSpeed(shaft, -112); scene.idle(10); scene.showTargetedText(WHITE, new Vec3d(1.5, 2, 2.5), "shaft_can_be_encased", - "I could use Brass or Andesite Casing to hide them.", 1000); + "Andesite or Brass Casing can be used to encase them.", 1000); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java b/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java index c0c449599..84b615ad1 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java @@ -7,8 +7,8 @@ public class SharedText { public static void gatherText() { // Add entries used across several ponder scenes (Safe for hotswap) - add("when_wrenched", "When Wrenched"); - add("more_shared", "This is Shared stuff"); + add("sneak_and", "Sneak +"); + add("ctrl_and", "Ctrl +"); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java new file mode 100644 index 000000000..ae9ed8a89 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java @@ -0,0 +1,135 @@ +package com.simibubi.create.foundation.ponder.elements; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.gui.AllIcons; +import com.simibubi.create.foundation.gui.GuiGameElement; +import com.simibubi.create.foundation.ponder.PonderLocalization; +import com.simibubi.create.foundation.ponder.PonderScene; +import com.simibubi.create.foundation.ponder.PonderUI; +import com.simibubi.create.foundation.ponder.content.PonderPalette; +import com.simibubi.create.foundation.utility.ColorHelper; +import com.simibubi.create.foundation.utility.Pointing; + +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Vec2f; +import net.minecraft.util.math.Vec3d; + +public class InputWindowElement extends AnimatedOverlayElement { + + private Pointing direction; + + String key; + AllIcons icon; + ItemStack item = ItemStack.EMPTY; + + private Vec3d sceneSpace; + + public InputWindowElement(Vec3d sceneSpace, Pointing direction) { + this.sceneSpace = sceneSpace; + this.direction = direction; + } + + public InputWindowElement withItem(ItemStack stack) { + item = stack; + return this; + } + + public InputWindowElement withWrench() { + item = AllItems.WRENCH.asStack(); + return this; + } + + public InputWindowElement scroll() { + icon = AllIcons.I_SCROLL; + return this; + } + + public InputWindowElement rightClick() { + icon = AllIcons.I_RMB; + return this; + } + + public InputWindowElement leftClick() { + icon = AllIcons.I_LMB; + return this; + } + + public InputWindowElement whileSneaking() { + key = "sneak_and"; + return this; + } + + public InputWindowElement whileCTRL() { + key = "ctrl_and"; + return this; + } + + @Override + protected void render(PonderScene scene, PonderUI screen, MatrixStack ms, float partialTicks, float fade) { + FontRenderer font = screen.getFontRenderer(); + int width = 0; + int height = 0; + + int xFade = direction == Pointing.RIGHT ? -1 : direction == Pointing.LEFT ? 1 : 0; + int yFade = direction == Pointing.DOWN ? -1 : direction == Pointing.UP ? 1 : 0; + xFade *= 10 * (1 - fade); + yFade *= 10 * (1 - fade); + + boolean hasItem = !item.isEmpty(); + boolean hasText = key != null; + boolean hasIcon = icon != null; + int keyWidth = 0; + String text = hasText ? PonderLocalization.getShared(key) : ""; + + if (fade < 1 / 16f) + return; + Vec2f sceneToScreen = scene.getTransform() + .sceneToScreen(sceneSpace); + + if (hasIcon) { + width += 24; + height = 24; + } + + if (hasText) { + keyWidth = font.getStringWidth(text); + width += keyWidth; + } + + if (hasItem) { + width += 24; + height = 24; + } + + RenderSystem.pushMatrix(); + RenderSystem.translated(sceneToScreen.x + xFade, sceneToScreen.y + yFade, 400); + + PonderUI.renderSpeechBox(0, 0, width, height, false, direction, true); + + if (hasText) + font.drawString(text, 2, (height - font.FONT_HEIGHT) / 2 + 2, + ColorHelper.applyAlpha(PonderPalette.WHITE.getColor(), fade)); + + if (hasIcon) { + RenderSystem.pushMatrix(); + RenderSystem.translated(keyWidth, 0, 0); + RenderSystem.scaled(1.5, 1.5, 1.5); + icon.draw(0, 0); + RenderSystem.popMatrix(); + } + + if (hasItem) { + GuiGameElement.of(item) + .at(keyWidth + 24, 0) + .scale(1.5) + .render(); + RenderSystem.disableDepthTest(); + } + + RenderSystem.popMatrix(); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java index 428274395..1209312f2 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java @@ -5,12 +5,12 @@ import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; +import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.command.arguments.EntityAnchorArgument; import net.minecraft.entity.EntityType; import net.minecraft.entity.passive.ParrotEntity; import net.minecraft.tileentity.TileEntity; @@ -29,13 +29,19 @@ public class ParrotElement extends AnimatedSceneElement { parrotElement.pose = parrotElement.new FacePointOfInterestPose(); return parrotElement; } - + public static ParrotElement spinOnComponent(Vec3d location, BlockPos componentPos) { ParrotElement parrotElement = new ParrotElement(location); parrotElement.pose = parrotElement.new SpinOnComponentPose(componentPos); return parrotElement; } + public static ParrotElement dance(Vec3d location) { + ParrotElement parrotElement = new ParrotElement(location); + parrotElement.pose = parrotElement.new DancePose(); + return parrotElement; + } + protected ParrotElement(Vec3d location) { this.location = location; } @@ -69,7 +75,7 @@ public class ParrotElement extends AnimatedSceneElement { ms.translate(location.x, location.y, location.z); MatrixStacker.of(ms) - .rotateY(MathHelper.lerp(pt, entity.prevRotationYaw, entity.rotationYaw)); + .rotateY(AngleHelper.angleLerp(pt, entity.prevRotationYaw, entity.rotationYaw)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); ms.pop(); @@ -81,7 +87,24 @@ public class ParrotElement extends AnimatedSceneElement { void create(PonderWorld world) { entity = new ParrotEntity(EntityType.PARROT, world); - entity.setVariant(Create.random.nextInt(5)); + int nextInt = Create.random.nextInt(5); + entity.setVariant(nextInt == 1 ? 0 : nextInt); // blue parrots are kinda hard to see + } + + } + + class DancePose extends ParrotPose { + + @Override + void create(PonderWorld world) { + super.create(world); + entity.setPartying(BlockPos.ZERO, true); + } + + @Override + void tick(PonderScene scene) { + entity.prevRotationYaw = entity.rotationYaw; + entity.rotationYaw -= 2; } } @@ -111,7 +134,18 @@ public class ParrotElement extends AnimatedSceneElement { @Override void tick(PonderScene scene) { - entity.lookAt(EntityAnchorArgument.Type.EYES, scene.getPointOfInterest()); + Vec3d p_200602_2_ = scene.getPointOfInterest(); + Vec3d vec3d = location.add(entity.getEyePosition(0)); + double d0 = p_200602_2_.x - vec3d.x; + double d1 = p_200602_2_.y - vec3d.y; + double d2 = p_200602_2_.z - vec3d.z; + double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); + entity.prevRotationYaw = entity.rotationYaw; + entity.prevRotationPitch = entity.rotationPitch; + entity.rotationPitch = + MathHelper.wrapDegrees((float) -(MathHelper.atan2(d1, d3) * (double) (180F / (float) Math.PI))); + entity.rotationYaw = + MathHelper.wrapDegrees((float) -(MathHelper.atan2(d2, d0) * (double) (180F / (float) Math.PI)) + 90); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java index 7c1d0197c..eb4a85f6c 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java @@ -22,6 +22,12 @@ public class EmitParticlesInstruction extends TickingInstruction { return (w, x, y, z) -> w.addParticle(data, x, y, z, motion.x, motion.y, motion.z); } + public static Emitter withinBlockSpace(T data, Vec3d motion) { + return (w, x, y, z) -> w.addParticle(data, Math.floor(x) + Create.random.nextFloat(), + Math.floor(y) + Create.random.nextFloat(), Math.floor(z) + Create.random.nextFloat(), motion.x, + motion.y, motion.z); + } + static ParticleManager paticleManager() { return Minecraft.getInstance().particles; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeInOutInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeInOutInstruction.java new file mode 100644 index 000000000..a7f195ffe --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeInOutInstruction.java @@ -0,0 +1,49 @@ +package com.simibubi.create.foundation.ponder.instructions; + +import com.simibubi.create.foundation.ponder.PonderScene; + +public abstract class FadeInOutInstruction extends TickingInstruction { + + protected static final int fadeTime = 5; + + public FadeInOutInstruction(int duration) { + super(false, duration + 2 * fadeTime); + } + + protected abstract void show(PonderScene scene); + + protected abstract void hide(PonderScene scene); + + protected abstract void applyFade(PonderScene scene, float fade); + + @Override + protected void firstTick(PonderScene scene) { + super.firstTick(scene); + show(scene); + applyFade(scene, 0); + } + + @Override + public void tick(PonderScene scene) { + super.tick(scene); + int elapsed = totalTicks - remainingTicks; + + if (elapsed < fadeTime) { + float fade = (elapsed / (float) fadeTime); + applyFade(scene, fade * fade); + + } else if (remainingTicks < fadeTime) { + float fade = (remainingTicks / (float) fadeTime); + applyFade(scene, fade * fade); + + } else + applyFade(scene, 1); + + if (remainingTicks == 0) { + applyFade(scene, 0); + hide(scene); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/ShowInputInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/ShowInputInstruction.java new file mode 100644 index 000000000..4a1864478 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/ShowInputInstruction.java @@ -0,0 +1,31 @@ +package com.simibubi.create.foundation.ponder.instructions; + +import com.simibubi.create.foundation.ponder.PonderScene; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; + +public class ShowInputInstruction extends FadeInOutInstruction { + + private InputWindowElement element; + + public ShowInputInstruction(InputWindowElement element, int ticks) { + super(ticks); + this.element = element; + } + + @Override + protected void show(PonderScene scene) { + scene.addElement(element); + element.setVisible(true); + } + + @Override + protected void hide(PonderScene scene) { + element.setVisible(false); + } + + @Override + protected void applyFade(PonderScene scene, float fade) { + element.setFade(fade); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/TextInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/TextInstruction.java index ca81f4bb6..ab7c84761 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/TextInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/TextInstruction.java @@ -9,14 +9,13 @@ import com.simibubi.create.foundation.ponder.elements.TextWindowElement; import net.minecraft.util.math.Vec3d; -public class TextInstruction extends TickingInstruction { +public class TextInstruction extends FadeInOutInstruction { private TextWindowElement element; private OutlinerElement outline; - private static final int fadeTime = 5; protected TextInstruction(int color, Supplier text, int duration) { - super(false, duration + 2 * fadeTime); + super(duration); } public TextInstruction(int color, Supplier text, int duration, Select selection) { @@ -41,11 +40,9 @@ public class TextInstruction extends TickingInstruction { } @Override - protected void firstTick(PonderScene scene) { - super.firstTick(scene); + protected void show(PonderScene scene) { scene.addElement(element); element.setVisible(true); - element.setFade(0); if (outline != null) { scene.addElement(outline); outline.setFade(1); @@ -54,31 +51,17 @@ public class TextInstruction extends TickingInstruction { } @Override - public void tick(PonderScene scene) { - super.tick(scene); - int elapsed = totalTicks - remainingTicks; - - if (elapsed < fadeTime) { - float fade = (elapsed / (float) fadeTime); - element.setFade(fade * fade); - - } else if (remainingTicks < fadeTime) { - float fade = (remainingTicks / (float) fadeTime); - element.setFade(fade * fade); - - } else - element.setFade(1); - - if (remainingTicks == 0) { - element.setFade(0); - element.setFade(0); - element.setVisible(false); - if (outline != null) { - outline.setFade(0); - outline.setVisible(false); - } + protected void hide(PonderScene scene) { + element.setVisible(false); + if (outline != null) { + outline.setFade(0); + outline.setVisible(false); } + } + @Override + protected void applyFade(PonderScene scene, float fade) { + element.setFade(fade); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 61691caf0..300f02316 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -119,7 +119,7 @@ public class VecHelper { } public static Vec3d lerp(float p, Vec3d from, Vec3d to) { - return from.add(from.subtract(to) + return from.add(to.subtract(from) .scale(p)); } diff --git a/src/main/resources/assets/create/textures/gui/icons.png b/src/main/resources/assets/create/textures/gui/icons.png index 8bc0cb6a5651c9be3005c7c353cc406b42b56589..3276c6033f25f4f3b11ffed88de3f52b4c42e5f5 100644 GIT binary patch literal 2719 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 literal 2598 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 delta 728 zcmV;}0w?{n59bb$K>;qYLN5Xj0002hP=MF~006plQchEokpj7Y0J~`3hAc`GDLCt^X`)-cHT)y2;ygbkOuxDmx_PO&rcV-LcQHRe` zH!Ms2@JO*({Lh1b$r8@X&``J}L&LE83?u%(9J7`nc>@$Ljf4V2W-UQ-2Plp_w*YGi zk~6@lSRjH~OOTua8XLpqqas6QEkSYyXliN-mp4XgW-UQ-2DmH`E)N}QC7M`EkemUU z1F=915zShH=j*b<+$U?3p|zFm>8ZH&35& z%dNM~ynX6_9kXT!=FGkGuDkEK_r7`e&z&=W0Z+KVDRl6b&(d8gEnL*Sc*)YGOBQ!8 zT39NTCYQ_0maka3YW3<>D_1OERxX!kRVr)Nu3Nuh zzn}UOeJ diff --git a/src/main/resources/ponder/cogwheel/first.nbt b/src/main/resources/ponder/cogwheel/first.nbt deleted file mode 100644 index 3adbe8a14225d25b0f70925745bc16c4abc8d986..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 679 zcmV;Y0$BYYiwFP!000000M(YyZqq;z#>e|7bzCIi0I$KlH`*THQXy3!;1X@^ZL*4! zHS3K+d+OW3kyGzH4llsf?8aU>0l7{ll+*Xg`WT<~lRw9sX^sT~w}X@!-|9osokPfpayAqWmda2SHa5u7lh zft;u(r@IzGa43Sq5FC!+gh3GfB8YwsaVUbr5FC!+v@J#Siz50p#GwcdLvT2P69z-{ ziy`_o#GwcdLvT2P69z~0izE6q#GwcdLvVO6Cjq)Vvx%G1D?4)`UuxqnVjwDm$ElGn z^WZ#RsccfHLiULBg>FBzq=9nar-hW+*DIg%=)_%?n~B#&<}#xM_D-Z-YcuB%ABjSw z%3i#<@=$i_-t1m01M)Jfs&7^G{mU_j(Wy1Etl#Uk!Y7TwQZ0&HPUdPUtx6M@saGa- z{|?dHs;WM@^E-FXp*z2K@w{&n`eXYcrFUfx`9I7#8Zw7;>R|V`j^m*^=r8IxgnLuR z^V{kmp_Z*W_+4#QID0kmbC?vRz469PtfiayO^>$!8b&wl zK~w@{Rrm!ny;cpL*e5eo?q8+N91y-+SU{P1+) znvfcCZVx`Jgt3>C&6l)WGnYEM6rexNvd{n#N zM73`r(-#%4>(c6|71h(Fj-FlxOng)&L>Db5?6+K)shp&Gx}Hgy@5Xu%_U_DiwHqQd z;Wi<)$&F=09=GA&H5uRZj-YnkjiN@L7ZjBKQ$5=b{Um4;4C$e;e=MwcBTcEadm!U$ N_yL(2a*?JE008JoQMdpA diff --git a/src/main/resources/ponder/debug/scene_6.nbt b/src/main/resources/ponder/debug/scene_6.nbt new file mode 100644 index 0000000000000000000000000000000000000000..6a7f63510763f478e666f0882d5c687a3fa3b59f GIT binary patch literal 436 zcmV;l0ZaZLiwFP!000000Iik5O2jY_h9^y`ZAI~*Ac!}gV$YsM5WSXcJF>xUQ#z4V zAI#@7U6b8)Dcu1b2sF(<-z0z1rU1x6k@-Xk07FY-%OS(o8E24Sh#ZdQjjdj(@SWQn zWM?TRZ9+myPCE=4yBaZ~5qp}1!I2D(VsK)J362=i>~j(ZM>05y!HJPDd`=iXPjMuJ zqZpjcRxo^)44|twS2g(1@`9DNPK;IAe-&#-=!u z!BL}}0%SXPDWs1bVh!uO^LzhD>laU5?Uf>f#ME$6_2_#uY%5Jzm$c9?Ze%9Is&>CV z8LCJ)d8~TdG|#$u8wRo;?pfeg3r%Eb#3QliwfYk=`FElmCFXG4=?0y{;a8t#pzie& z;bLi8ta|U=j9R-Y*S7)0(W~v~YGE9fm2G`(kBo}zt)jDyp@rWH-PTB6?N?De^tQu( zxNm%he)p3VADiTxu#T8e{@%>J^iy)Cdi^Np);YU`^hGy>TWSVH5IEa~(M_exP^s~= e)qNR_^9J8(r=PJWV_Wa<7kmTIB;Zs%2LJ$$ThC|! literal 0 HcmV?d00001 diff --git a/src/main/resources/ponder/debug/scene_7.nbt b/src/main/resources/ponder/debug/scene_7.nbt new file mode 100644 index 0000000000000000000000000000000000000000..d0b4f88f6f857f99f811d2594febf92e29960dc3 GIT binary patch literal 578 zcmV-I0=@koiwFP!000000IgNcZrd;nrfoU3-5xfe1A6IubUE$suwJqO!G>*@K((1h zh+_$o46i%osrr1Q6Wh%k$I~GM3|bQPk^Cr12|x_Yh(8zrK>dZSjv>Or3M> zIIZ{&Jo^qjkKqIkILra3D}_TmV>ZEn%_$DYa9Uvw95RQP$8Z7%95#rPKu|o`gr;O^ zS2PR@sp%&IUu5t))kv1pWnPMGp@hN&{8Et_%VbpymB8zj$!}bQ5Y821_I_L2yqeLk z*-d;?8CiM>T+Gl`Qm;dZK61rVVV^#4YhX5~d!vS8;NNGY-+{Ni3t=+18qNOJ*vEU_ z#EV7B4Q30o;!8?yGMA-J>FV)*)YOswN&1fTFVZ)ss&ZJ};CyKW|4rjflZFu+mE&S9 z3bZ0UmB-t$JiJ~WtjS~V=&Es)p_0VY)tAz$(taqHOVlp`M=^x=7B{Bh<@oINy@cmu zi=COR=@?u75nC}_D4wIWSU*RT2-u8o5Uw}mCDnAgrlye9V)tS}yL$7oTCIe|MJfvl zk{}aEzG|sZ*Uuf9BR3YpCC?2;a9NR8oy*5Z%(}^@F}vZuJ=-Cx@BpB0O=fjjFYNkr zH|WAT?&hO-_-|prd+N5_Hd}a+p{XY=bOxtN&7zD-&i%pN+7_TSB>%{mD9Ol5`4xF}ldpKTC zOqb(3aF_#!J8;_KJLK7S$n!o9bKr0X&h}S0l@=3&`K;L9nzOf?d0WaP5UFmLt(&s)EGK($1Rx+^zm z%NIzPm0~ez#QfN;ZKSWd3Ze@{QvV99`f*y!{hXj2RjarCx<-vae3_B#JU~< z#hjEPM{BV@AB7R{u~;I!Skfq|7Bf3Cg{qRx5enM3=YQT-b7?V2RY4y~$Qa`HT9v5l z^H&7JipJ5o$}*fnFcY~!Vu(9wz`NVxTESfCtY&4^95L^*!Wm_+$iQEf5uDYGMC7W- zl9|-T0=IgFTV&71__%L7Z9#LgeH`LhgV>5O7`_u$+@Lm674)0G!*4NS%z4oY000Y{ B7zzLY literal 541 zcmV+&0^#a+|}^82#GVMGD!uY-FkYr;D2~ zL`-NCAm~58g(h_6~25u{g?q$6`Yn9X~@Whfo6#wZB8v_ zWlP#ol6Tbfkk(cO_@OYvc5g4bfvmkmjh7HF}TXI8HMVW4S~) zTT)o1r8y&~&APZdv7x>D^yl66mGW4WM$>;JWDfZoYZ|oSxX)lPBg1+QY}I6NBCnMz zWNq}km?`T#2ya)oqxS3pUEcAU1hzKwIaZL)WbKf;0~eC(9q2&|3ORKV_tej}YN;!9 f!OU+lQ*_6#q?eayoidsp$v5}`v@Fk5?Faw>26YO$