mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-12-29 08:26:37 +01:00
UI and tag enhancements
- Fixed partial ticks on transitions - Transitions center on clicked components - Added auto-lang for tags - Moved some other ui stuff around
This commit is contained in:
parent
d590b23aa7
commit
e2c50663a5
30 changed files with 708 additions and 315 deletions
|
@ -401,19 +401,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
|||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
2384c6457ecf24c7b38358179b8fa6eb93b9627a assets/create/lang/en_ud.json
|
||||
569b3aaadf1e5c5849692c4e918dc762edd9a316 assets/create/lang/en_us.json
|
||||
70a747f3639180da9cba1b8747fb19dacb1e9619 assets/create/lang/unfinished/de_de.json
|
||||
610b1e766bc338d38906a160908cdb79e0d3bc54 assets/create/lang/unfinished/es_es.json
|
||||
8eff0c23695d3e8c26d1265a82324242a9762226 assets/create/lang/unfinished/es_mx.json
|
||||
fb150f105517632023265602cfc3c948be932917 assets/create/lang/unfinished/fr_fr.json
|
||||
09111dedc02d6803134a8276ec481abcaa0e00c7 assets/create/lang/unfinished/it_it.json
|
||||
c1f6faed7efb6f224aec7563b0ac6b891bc780d4 assets/create/lang/unfinished/ja_jp.json
|
||||
c6139e7280236adcd136d40a94cd1cb708d402c6 assets/create/lang/unfinished/ko_kr.json
|
||||
bb3fda881575df3ae26921edc3f4a3e2ecbc6ccd assets/create/lang/unfinished/nl_nl.json
|
||||
8915f0902e59c1bbfb2c16e43e2ce62b3d616e0d assets/create/lang/unfinished/pt_br.json
|
||||
ad8d2b7c8c7f3ac584218c33f86ba67c1873b7fc assets/create/lang/unfinished/ru_ru.json
|
||||
e549baab96828524fc4694355546c685859956d6 assets/create/lang/unfinished/zh_cn.json
|
||||
2506abb1c796aad920e803a8e1427908c5b115c1 assets/create/lang/unfinished/zh_tw.json
|
||||
52fd28525a66b08652bac2d1a4a5543956b47091 assets/create/lang/en_us.json
|
||||
00751ce98f978b4568723ebeaa0350d77a380cd8 assets/create/lang/unfinished/de_de.json
|
||||
2d8c801b475cabc33c7d0f8f318ef9068a4b8cea assets/create/lang/unfinished/es_es.json
|
||||
1b18ac809eda5655000a56190bd8be467062beab assets/create/lang/unfinished/es_mx.json
|
||||
93340db6d63864fa23bf663954221b68d345a37f assets/create/lang/unfinished/fr_fr.json
|
||||
299731bb461adb0c55393fa9c1d814861b002ebd assets/create/lang/unfinished/it_it.json
|
||||
947363f4bcec709f398904ece57a5d66294dd6f8 assets/create/lang/unfinished/ja_jp.json
|
||||
11798cdf3c66152fc736cdba465b795c0abac0b4 assets/create/lang/unfinished/ko_kr.json
|
||||
b30301ea195e3c08dc8d1fecfd9a546255ac75b8 assets/create/lang/unfinished/nl_nl.json
|
||||
feb0ab7a4c616447dd74e4cf808a003447cfdfe1 assets/create/lang/unfinished/pt_br.json
|
||||
d12dde0c45bbf29613ade488619b57949ee7068c assets/create/lang/unfinished/ru_ru.json
|
||||
b904d41c0cda0d56b1aa519a45a35800589445d5 assets/create/lang/unfinished/zh_cn.json
|
||||
47e89b425362abb4241b4ffe73bfaa22fef0b6f0 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
|
||||
|
|
|
@ -1807,9 +1807,14 @@
|
|||
"create.ponder.subject": "Subject of this scene",
|
||||
"create.ponder.pondering": "Pondering about...",
|
||||
"create.ponder.identify_mode": "Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "Ctrl +",
|
||||
"create.ponder.tag.arm_access": "Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1866,6 +1871,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1059",
|
||||
"_": "Missing Localizations: 1066",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 102",
|
||||
"_": "Missing Localizations: 109",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 989",
|
||||
"_": "Missing Localizations: 996",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 771",
|
||||
"_": "Missing Localizations: 778",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 107",
|
||||
"_": "Missing Localizations: 114",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 114",
|
||||
"_": "Missing Localizations: 121",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 160",
|
||||
"_": "Missing Localizations: 167",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1258",
|
||||
"_": "Missing Localizations: 1265",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1324",
|
||||
"_": "Missing Localizations: 1331",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 110",
|
||||
"_": "Missing Localizations: 117",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 108",
|
||||
"_": "Missing Localizations: 115",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 113",
|
||||
"_": "Missing Localizations: 120",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,9 +1808,14 @@
|
|||
"create.ponder.subject": "UNLOCALIZED: Subject of this scene",
|
||||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]",
|
||||
"create.ponder.associated": "UNLOCALIZED: Associated Entries",
|
||||
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
|
||||
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
|
||||
|
||||
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
|
||||
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
|
||||
|
@ -1867,6 +1872,10 @@
|
|||
"create.ponder.shaft.scene_1.header": "UNLOCALIZED: Encasing Shafts",
|
||||
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
|
||||
|
||||
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
|
||||
|
||||
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
package com.simibubi.create.foundation.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
import org.apache.commons.lang3.mutable.MutableInt;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.foundation.gui.widgets.AbstractSimiWidget;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
|
||||
import net.minecraft.client.MainWindow;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
|
@ -10,26 +19,25 @@ import net.minecraft.client.gui.widget.Widget;
|
|||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
import org.apache.commons.lang3.mutable.MutableInt;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public abstract class AbstractSimiScreen extends Screen {
|
||||
|
||||
protected int sWidth, sHeight;
|
||||
protected int guiLeft, guiTop;
|
||||
protected int depthPointX, depthPointY;
|
||||
protected List<Widget> widgets;
|
||||
public final LerpedFloat transition = LerpedFloat.linear().startWithValue(0).chase(0, .1f, LerpedFloat.Chaser.LINEAR);
|
||||
public final LerpedFloat transition = LerpedFloat.linear()
|
||||
.startWithValue(0)
|
||||
.chase(0, .1f, LerpedFloat.Chaser.LINEAR);
|
||||
|
||||
protected AbstractSimiScreen() {
|
||||
super(new StringTextComponent(""));
|
||||
widgets = new ArrayList<>();
|
||||
MainWindow window = Minecraft.getInstance()
|
||||
.getWindow();
|
||||
depthPointX = window.getScaledWidth() / 2;
|
||||
depthPointY = window.getScaledHeight() / 2;
|
||||
}
|
||||
|
||||
protected void setWindowSize(int width, int height) {
|
||||
|
@ -42,104 +50,102 @@ public abstract class AbstractSimiScreen extends Screen {
|
|||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
transition.tickChaser();
|
||||
|
||||
if (transition.getValue() < -0.9995f) {
|
||||
transition.updateChaseTarget(0);
|
||||
transition.setValue(0);
|
||||
ScreenOpener.openLastScreen();
|
||||
} else if (transition.getValue() > 0.9995f) {
|
||||
transition.updateChaseTarget(0);
|
||||
transition.setValue(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(int mouseX, int mouseY, float partialTicks) {
|
||||
partialTicks = partialTicks == 10 ? 0
|
||||
: Minecraft.getInstance()
|
||||
.getRenderPartialTicks();
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
|
||||
renderTransition(mouseX, mouseY, partialTicks);
|
||||
|
||||
partialTicks = Minecraft.getInstance()
|
||||
.getRenderPartialTicks();
|
||||
renderBackground();
|
||||
renderWindow(mouseX, mouseY, partialTicks);
|
||||
for (Widget widget : widgets)
|
||||
widget.render(mouseX, mouseY, partialTicks);
|
||||
|
||||
renderBreadcrumbs(mouseX, mouseY, partialTicks);
|
||||
|
||||
renderWindowForeground(mouseX, mouseY, partialTicks);
|
||||
for (Widget widget : widgets)
|
||||
widget.renderToolTip(mouseX, mouseY);
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
renderBreadcrumbs(mouseX, mouseY, partialTicks);
|
||||
}
|
||||
|
||||
private void renderTransition(int mouseX, int mouseY, float partialTicks) {
|
||||
if (transition.getChaseTarget() != 0) {
|
||||
if (ScreenOpener.getLastScreen() == null) {
|
||||
return;
|
||||
} else if (ScreenOpener.getLastScreen() == this) {
|
||||
LogManager.getLogger().warn("Tired to render last screen recursively during transition");
|
||||
return;
|
||||
}
|
||||
//draw last screen into buffer
|
||||
RenderSystem.pushMatrix();//1
|
||||
if (transition.getChaseTarget() == 0) {
|
||||
renderBackground();
|
||||
return;
|
||||
}
|
||||
|
||||
renderBackground();
|
||||
|
||||
Screen lastScreen = ScreenOpener.getPreviouslyRenderedScreen();
|
||||
float transitionValue = transition.getValue(partialTicks);
|
||||
double scale = 1 + 0.5 * transitionValue;
|
||||
|
||||
// draw last screen into buffer
|
||||
if (lastScreen != null && lastScreen != this) {
|
||||
RenderSystem.pushMatrix();// 1
|
||||
UIRenderHelper.framebuffer.framebufferClear(Minecraft.IS_RUNNING_ON_MAC);
|
||||
UIRenderHelper.prepFramebufferSize();
|
||||
RenderSystem.pushMatrix();//2
|
||||
RenderSystem.pushMatrix();// 2
|
||||
RenderSystem.translated(0, 0, -1000);
|
||||
UIRenderHelper.framebuffer.bindFramebuffer(true);
|
||||
ScreenOpener.getLastScreen().render(mouseX, mouseY, partialTicks);
|
||||
RenderSystem.popMatrix();//2
|
||||
Minecraft.getInstance().getFramebuffer().bindFramebuffer(true);
|
||||
lastScreen.render(mouseX, mouseY, 10);
|
||||
RenderSystem.popMatrix();// 2
|
||||
|
||||
//use the buffer texture
|
||||
float transitionValue = transition.getValue(partialTicks);
|
||||
if (transition.getChaseTarget() < 0)
|
||||
transitionValue += 1;
|
||||
//transitionV is ~1 when the older screen is hidden
|
||||
//transitionV is ~0 when the older screen is still fully visible
|
||||
double scale = 1 - 0.25 * transitionValue;
|
||||
MainWindow window = Minecraft.getInstance().getWindow();
|
||||
int sw = window.getScaledWidth();
|
||||
int sh = window.getScaledHeight();
|
||||
RenderSystem.translated(sw * 0.5, sh * 0.5, -10);
|
||||
// use the buffer texture
|
||||
Minecraft.getInstance()
|
||||
.getFramebuffer()
|
||||
.bindFramebuffer(true);
|
||||
|
||||
MainWindow window = Minecraft.getInstance()
|
||||
.getWindow();
|
||||
int dpx = window.getScaledWidth() / 2;
|
||||
int dpy = window.getScaledHeight() / 2;
|
||||
if (lastScreen instanceof AbstractSimiScreen) {
|
||||
dpx = ((AbstractSimiScreen) lastScreen).depthPointX;
|
||||
dpy = ((AbstractSimiScreen) lastScreen).depthPointY;
|
||||
}
|
||||
|
||||
// transitionV is 1/-1 when the older screen is hidden
|
||||
// transitionV is 0 when the older screen is still fully visible
|
||||
RenderSystem.translated(dpx, dpy, 0);
|
||||
RenderSystem.scaled(scale, scale, 1);
|
||||
RenderSystem.translated(sw * -0.5, sh * -0.5, 0);
|
||||
|
||||
UIRenderHelper.drawFramebuffer(sw, sh, 1f - transitionValue);
|
||||
RenderSystem.popMatrix();//1
|
||||
|
||||
//modify current screen as well
|
||||
scale = 1 + 0.02 * (1 - transitionValue);
|
||||
RenderSystem.translated(sw * 0.5, sh * 0.5, 0);
|
||||
RenderSystem.scaled(scale, scale, 1);
|
||||
RenderSystem.translated(sw * -0.5, sh * -0.5, 0);
|
||||
RenderSystem.translated(-dpx, -dpy, 0);
|
||||
UIRenderHelper.drawFramebuffer(1f - Math.abs(transitionValue));
|
||||
RenderSystem.popMatrix();// 1
|
||||
}
|
||||
|
||||
// modify current screen as well
|
||||
scale = transitionValue > 0 ? 1 - 0.5 * (1 - transitionValue) : 1 + .5 * (1 + transitionValue);
|
||||
RenderSystem.translated(depthPointX, depthPointY, 0);
|
||||
RenderSystem.scaled(scale, scale, 1);
|
||||
RenderSystem.translated(-depthPointX, -depthPointY, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double x, double y, int button) {
|
||||
boolean result = false;
|
||||
for (Widget widget : widgets) {
|
||||
for (Widget widget : widgets)
|
||||
if (widget.mouseClicked(x, y, button))
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(int code, int p_keyPressed_2_, int p_keyPressed_3_) {
|
||||
for (Widget widget : widgets) {
|
||||
for (Widget widget : widgets)
|
||||
if (widget.keyPressed(code, p_keyPressed_2_, p_keyPressed_3_))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (code == GLFW.GLFW_KEY_BACKSPACE) {
|
||||
ScreenOpener.transitionToLast();
|
||||
ScreenOpener.openPreviousScreen(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -202,15 +208,13 @@ public abstract class AbstractSimiScreen extends Screen {
|
|||
history.add(0, Minecraft.getInstance().currentScreen);
|
||||
int spacing = 20;
|
||||
|
||||
List<String> names = history
|
||||
.stream()
|
||||
.map(AbstractSimiScreen::screenTitle)
|
||||
.collect(Collectors.toList());
|
||||
List<String> names = history.stream()
|
||||
.map(AbstractSimiScreen::screenTitle)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
int bWidth = names
|
||||
.stream()
|
||||
.mapToInt(s -> font.getStringWidth(s) + spacing)
|
||||
.sum();
|
||||
int bWidth = names.stream()
|
||||
.mapToInt(s -> font.getStringWidth(s) + spacing)
|
||||
.sum();
|
||||
|
||||
MutableInt x = new MutableInt(width - bWidth);
|
||||
MutableInt y = new MutableInt(height - 18);
|
||||
|
@ -219,26 +223,33 @@ public abstract class AbstractSimiScreen extends Screen {
|
|||
if (x.getValue() < 25)
|
||||
x.setValue(25);
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(0, 0, 600);
|
||||
names.forEach(s -> {
|
||||
int sWidth = font.getStringWidth(s);
|
||||
//UIRenderHelper.breadcrumbArrow(x.getValue(), y.getValue(), sWidth + spacing, 14, spacing/2, 0xbbababab, 0x22ababab);
|
||||
UIRenderHelper.breadcrumbArrow(x.getValue(), y.getValue(), sWidth + spacing, 14, spacing/2, 0xdd101010, 0x44101010);
|
||||
// UIRenderHelper.breadcrumbArrow(x.getValue(), y.getValue(), sWidth + spacing,
|
||||
// 14, spacing/2, 0xbbababab, 0x22ababab);
|
||||
UIRenderHelper.breadcrumbArrow(x.getValue(), y.getValue(), sWidth + spacing, 14, spacing / 2, 0xdd101010,
|
||||
0x44101010);
|
||||
drawString(font, s, x.getValue() + 5, y.getValue() + 3, first.getValue() ? 0xffeeffee : 0xffddeeff);
|
||||
first.setFalse();
|
||||
|
||||
x.add(sWidth + spacing);
|
||||
});
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
private static String screenTitle(Screen screen) {
|
||||
if (screen instanceof AbstractSimiScreen)
|
||||
return ((AbstractSimiScreen) screen).getBreadcrumbTitle();
|
||||
|
||||
return screen.getClass().getSimpleName();
|
||||
return screen.getClass()
|
||||
.getSimpleName();
|
||||
}
|
||||
|
||||
protected String getBreadcrumbTitle() {
|
||||
return this.getClass().getSimpleName();
|
||||
return this.getClass()
|
||||
.getSimpleName();
|
||||
}
|
||||
|
||||
protected void renderWindowForeground(int mouseX, int mouseY, float partialTicks) {
|
||||
|
@ -253,4 +264,16 @@ public abstract class AbstractSimiScreen extends Screen {
|
|||
}
|
||||
}
|
||||
|
||||
public void centerScalingOn(int x, int y) {
|
||||
depthPointX = x;
|
||||
depthPointY = y;
|
||||
}
|
||||
|
||||
public void centerScalingOnMouse() {
|
||||
MainWindow w = minecraft.getWindow();
|
||||
double mouseX = minecraft.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth();
|
||||
double mouseY = minecraft.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight();
|
||||
centerScalingOn((int) mouseX, (int) mouseY);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,25 +1,31 @@
|
|||
package com.simibubi.create.foundation.gui;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Deque;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderUI;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
|
||||
public class ScreenOpener {
|
||||
|
||||
private static final Deque<Screen> backStack = new ArrayDeque<>();
|
||||
private static Screen backSteppedFrom = null;
|
||||
|
||||
public static void open(Screen screen) {
|
||||
open(Minecraft.getInstance().currentScreen, screen);
|
||||
}
|
||||
|
||||
public static void open(@Nullable Screen current, Screen toOpen) {
|
||||
backSteppedFrom = null;
|
||||
if (current != null) {
|
||||
if (backStack.size() >= 15) //don't go deeper than 15 steps
|
||||
if (backStack.size() >= 15) // don't go deeper than 15 steps
|
||||
backStack.pollLast();
|
||||
|
||||
backStack.push(current);
|
||||
|
@ -29,30 +35,38 @@ public class ScreenOpener {
|
|||
openScreen(toOpen);
|
||||
}
|
||||
|
||||
public static void openLastScreen() {
|
||||
public static void openPreviousScreen(Screen current) {
|
||||
if (backStack.isEmpty())
|
||||
return;
|
||||
|
||||
openScreen(backStack.pop());
|
||||
backSteppedFrom = current;
|
||||
Screen previousScreen = backStack.pop();
|
||||
if (previousScreen instanceof AbstractSimiScreen)
|
||||
((AbstractSimiScreen) previousScreen).transition.startWithValue(-0.1)
|
||||
.chase(-1, .4f, LerpedFloat.Chaser.EXP);
|
||||
openScreen(previousScreen);
|
||||
}
|
||||
|
||||
//transitions are only supported in simiScreens atm. they take care of all the rendering for it
|
||||
// transitions are only supported in simiScreens atm. they take care of all the
|
||||
// rendering for it
|
||||
public static void transitionTo(AbstractSimiScreen screen) {
|
||||
screen.transition.updateChaseTarget(1);
|
||||
|
||||
List<Screen> screenHistory = getScreenHistory();
|
||||
if (!screenHistory.isEmpty()) {
|
||||
Screen previouslyRenderedScreen = screenHistory.get(0);
|
||||
if (screen instanceof PonderUI && previouslyRenderedScreen instanceof PonderUI) {
|
||||
if (((PonderUI) screen).getSubject()
|
||||
.isItemEqual(((PonderUI) previouslyRenderedScreen).getSubject())) {
|
||||
openPreviousScreen(Minecraft.getInstance().currentScreen);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
screen.transition.startWithValue(0.1)
|
||||
.chase(1, .4f, LerpedFloat.Chaser.EXP);
|
||||
open(screen);
|
||||
}
|
||||
|
||||
public static void transitionToLast() {
|
||||
if (backStack.isEmpty())
|
||||
return;
|
||||
|
||||
Screen currentScreen = Minecraft.getInstance().currentScreen;
|
||||
if (currentScreen instanceof AbstractSimiScreen)
|
||||
((AbstractSimiScreen) currentScreen).transition.updateChaseTarget(-1);
|
||||
else
|
||||
openLastScreen();
|
||||
}
|
||||
|
||||
public static void clearStack() {
|
||||
backStack.clear();
|
||||
}
|
||||
|
@ -62,12 +76,14 @@ public class ScreenOpener {
|
|||
}
|
||||
|
||||
@Nullable
|
||||
public static Screen getLastScreen() {
|
||||
return backStack.peek();
|
||||
public static Screen getPreviouslyRenderedScreen() {
|
||||
return backSteppedFrom != null ? backSteppedFrom : backStack.peek();
|
||||
}
|
||||
|
||||
private static void openScreen(Screen screen) {
|
||||
Minecraft.getInstance().enqueue(() -> Minecraft.getInstance().displayGuiScreen(screen));
|
||||
Minecraft.getInstance()
|
||||
.enqueue(() -> Minecraft.getInstance()
|
||||
.displayGuiScreen(screen));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package com.simibubi.create.foundation.gui;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
|
||||
import net.minecraft.client.MainWindow;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
|
@ -9,7 +12,6 @@ import net.minecraft.client.renderer.Tessellator;
|
|||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.client.shader.Framebuffer;
|
||||
import net.minecraftforge.fml.client.gui.GuiUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class UIRenderHelper {
|
||||
|
||||
|
@ -30,13 +32,15 @@ public class UIRenderHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public static void drawFramebuffer(int width, int height, float alpha) {
|
||||
float vx = (float) width;
|
||||
float vy = (float) height;
|
||||
public static void drawFramebuffer(float alpha) {
|
||||
MainWindow window = Minecraft.getInstance()
|
||||
.getWindow();
|
||||
|
||||
float vx = (float) window.getScaledWidth();
|
||||
float vy = (float) window.getScaledHeight();
|
||||
float tx = (float) framebuffer.framebufferWidth / (float) framebuffer.framebufferTextureWidth;
|
||||
float ty = (float) framebuffer.framebufferHeight / (float) framebuffer.framebufferTextureHeight;
|
||||
|
||||
|
||||
RenderSystem.enableTexture();
|
||||
RenderSystem.enableBlend();
|
||||
RenderSystem.disableLighting();
|
||||
|
|
|
@ -7,6 +7,8 @@ import com.google.gson.JsonElement;
|
|||
import com.google.gson.JsonObject;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderTagScreen;
|
||||
import com.simibubi.create.foundation.utility.Couple;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
@ -14,10 +16,15 @@ import net.minecraft.util.ResourceLocation;
|
|||
public class PonderLocalization {
|
||||
|
||||
static Map<String, String> shared = new HashMap<>();
|
||||
static Map<String, Couple<String>> tag = new HashMap<>();
|
||||
static Map<ResourceLocation, Map<Integer, Map<String, String>>> specific = new HashMap<>();
|
||||
|
||||
//
|
||||
|
||||
public static void registerTag(String key, String enUS, String description) {
|
||||
tag.put(key, Couple.create(enUS, description));
|
||||
}
|
||||
|
||||
public static void registerShared(String key, String enUS) {
|
||||
shared.put(key, enUS);
|
||||
}
|
||||
|
@ -44,9 +51,23 @@ public class PonderLocalization {
|
|||
return Lang.translate(langKeyForSpecific(component.getPath(), scene, k));
|
||||
}
|
||||
|
||||
public static String getTag(String key) {
|
||||
if (PonderIndex.EDITOR_MODE)
|
||||
return tag.containsKey(key) ? tag.get(key)
|
||||
.getFirst() : ("unregistered tag entry:" + key);
|
||||
return Lang.translate(langKeyForTag(key));
|
||||
}
|
||||
|
||||
public static String getTagDescription(String key) {
|
||||
if (PonderIndex.EDITOR_MODE)
|
||||
return tag.containsKey(key) ? tag.get(key)
|
||||
.getSecond() : ("unregistered tag entry:" + key);
|
||||
return Lang.translate(langKeyForTagDescription(key));
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
static final String LANG_PREFIX = "ponder.";
|
||||
public static final String LANG_PREFIX = "ponder.";
|
||||
|
||||
public static JsonElement record() {
|
||||
JsonObject object = new JsonObject();
|
||||
|
@ -55,8 +76,14 @@ public class PonderLocalization {
|
|||
addGeneral(object, PonderTooltipHandler.SUBJECT, "Subject of this scene");
|
||||
addGeneral(object, PonderUI.PONDERING, "Pondering about...");
|
||||
addGeneral(object, PonderUI.IDENTIFY_MODE, "Identify mode active.\nUnpause with [%1$s]");
|
||||
addGeneral(object, PonderTagScreen.ASSOCIATED, "Associated Entries");
|
||||
|
||||
shared.forEach((k, v) -> object.addProperty(Create.ID + "." + langKeyForShared(k), v));
|
||||
tag.forEach((k, v) -> {
|
||||
object.addProperty(Create.ID + "." + langKeyForTag(k), v.getFirst());
|
||||
object.addProperty(Create.ID + "." + langKeyForTagDescription(k), v.getSecond());
|
||||
});
|
||||
|
||||
specific.forEach((rl, map) -> {
|
||||
String component = rl.getPath();
|
||||
for (int i = 0; i < map.size(); i++) {
|
||||
|
@ -84,4 +111,12 @@ public class PonderLocalization {
|
|||
return LANG_PREFIX + "shared." + k;
|
||||
}
|
||||
|
||||
protected static String langKeyForTag(String k) {
|
||||
return LANG_PREFIX + "tag." + k;
|
||||
}
|
||||
|
||||
protected static String langKeyForTagDescription(String k) {
|
||||
return LANG_PREFIX + "tag." + k + ".description";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -107,6 +107,7 @@ public class PonderRegistry {
|
|||
|
||||
public static JsonElement provideLangEntries() {
|
||||
PonderIndex.register();
|
||||
PonderTag.register();
|
||||
SharedText.gatherText();
|
||||
all.forEach((id, list) -> {
|
||||
for (int i = 0; i < list.size(); i++)
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.simibubi.create.foundation.gui.AbstractSimiScreen;
|
||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderIndexScreen;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderTagScreen;
|
||||
|
@ -8,6 +11,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
|||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
|
@ -21,8 +25,6 @@ import net.minecraft.util.text.StringTextComponent;
|
|||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraftforge.client.event.RenderTooltipEvent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PonderTooltipHandler {
|
||||
|
||||
static LerpedFloat holdWProgress = LerpedFloat.linear()
|
||||
|
@ -78,6 +80,9 @@ public class PonderTooltipHandler {
|
|||
|
||||
if (!subject && InputMappings.isKeyDown(window, keyCode)) {
|
||||
if (value >= 1) {
|
||||
if (currentScreen instanceof AbstractSimiScreen)
|
||||
((AbstractSimiScreen) currentScreen).centerScalingOnMouse();
|
||||
|
||||
ScreenOpener.transitionTo(PonderUI.of(stack));
|
||||
holdWProgress.startWithValue(0);
|
||||
return;
|
||||
|
|
|
@ -1,14 +1,38 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.foundation.gui.*;
|
||||
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.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneTransform;
|
||||
import com.simibubi.create.foundation.ponder.content.*;
|
||||
import com.simibubi.create.foundation.ponder.content.DebugScenes;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderChapter;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderTag;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderTagScreen;
|
||||
import com.simibubi.create.foundation.ponder.ui.PonderButton;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.*;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
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.Pair;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
|
||||
import net.minecraft.client.ClipboardHelper;
|
||||
import net.minecraft.client.GameSettings;
|
||||
import net.minecraft.client.MainWindow;
|
||||
|
@ -28,13 +52,6 @@ import net.minecraft.world.gen.feature.template.PlacementSettings;
|
|||
import net.minecraft.world.gen.feature.template.Template;
|
||||
import net.minecraftforge.fml.client.gui.GuiUtils;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class PonderUI extends AbstractSimiScreen {
|
||||
|
||||
|
@ -61,10 +78,11 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
private LerpedFloat lazyIndex;
|
||||
private int index = 0;
|
||||
|
||||
private PonderButton left, right, icon, scan, chap;
|
||||
private PonderButton left, right, scan, chap;
|
||||
|
||||
public static PonderUI of(ItemStack item) {
|
||||
return new PonderUI(PonderRegistry.compile(item.getItem().getRegistryName()));
|
||||
return new PonderUI(PonderRegistry.compile(item.getItem()
|
||||
.getRegistryName()));
|
||||
}
|
||||
|
||||
public static PonderUI of(PonderChapter chapter) {
|
||||
|
@ -74,9 +92,17 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
}
|
||||
|
||||
public PonderUI(List<PonderScene> scenes) {
|
||||
ResourceLocation component = scenes.get(0).component;
|
||||
if (ForgeRegistries.ITEMS.containsKey(component))
|
||||
stack = new ItemStack(ForgeRegistries.ITEMS.getValue(component));
|
||||
else
|
||||
stack = new ItemStack(ForgeRegistries.BLOCKS.getValue(component));
|
||||
|
||||
tags = new ArrayList<>(PonderRegistry.tags.getTags(component));
|
||||
this.scenes = scenes;
|
||||
if (scenes.isEmpty()) {
|
||||
List<PonderStoryBoardEntry> l = Collections.singletonList(new PonderStoryBoardEntry(DebugScenes::empty, "debug/scene_1", new ResourceLocation("minecraft", "stick")));
|
||||
List<PonderStoryBoardEntry> l = Collections.singletonList(new PonderStoryBoardEntry(DebugScenes::empty,
|
||||
"debug/scene_1", new ResourceLocation("minecraft", "stick")));
|
||||
scenes.addAll(PonderRegistry.compile(l));
|
||||
}
|
||||
lazyIndex = LerpedFloat.linear()
|
||||
|
@ -94,43 +120,31 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
super.init();
|
||||
widgets.clear();
|
||||
|
||||
ResourceLocation component = scenes.get(0).component;
|
||||
if (ForgeRegistries.ITEMS.containsKey(component))
|
||||
stack = new ItemStack(ForgeRegistries.ITEMS.getValue(component));
|
||||
else
|
||||
stack = new ItemStack(ForgeRegistries.BLOCKS.getValue(component));
|
||||
|
||||
tags = new ArrayList<>(PonderRegistry.tags.getTags(component));
|
||||
tagButtons = new ArrayList<>();
|
||||
tagFades = new ArrayList<>();
|
||||
|
||||
|
||||
tags.forEach(t -> {
|
||||
int i = tagButtons.size();
|
||||
int x = 31;
|
||||
int y = 91 + i * 40;
|
||||
PonderButton b = new PonderButton(x, y, () -> {
|
||||
int y = 71 + i * 30;
|
||||
PonderButton b = new PonderButton(x, y, (mouseX, mouseY) -> {
|
||||
centerScalingOn(mouseX, mouseY);
|
||||
ScreenOpener.transitionTo(new PonderTagScreen(t));
|
||||
})
|
||||
.showing(t)
|
||||
.fade(0, -1);
|
||||
}).showing(t);
|
||||
|
||||
widgets.add(b);
|
||||
tagButtons.add(b);
|
||||
|
||||
LerpedFloat chase = LerpedFloat.linear()
|
||||
.startWithValue(0)
|
||||
.chase(0, .05f, Chaser.exp(.1));
|
||||
.startWithValue(0)
|
||||
.chase(0, .05f, Chaser.exp(.1));
|
||||
tagFades.add(chase);
|
||||
|
||||
});
|
||||
|
||||
widgets.add(icon = new PonderButton(31, 31, () -> {
|
||||
}).showing(stack).fade(0, -1));
|
||||
|
||||
if (chapter != null) {
|
||||
widgets.add(chap = new PonderButton(width - 31 - 24, 31, () -> {
|
||||
}).showing(chapter).fade(0, -1));
|
||||
}).showing(chapter));
|
||||
}
|
||||
|
||||
GameSettings bindings = minecraft.gameSettings;
|
||||
|
@ -350,19 +364,30 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
// Chapter title
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(0, 0, 800);
|
||||
int x = icon.x + icon.getWidth() + 8;
|
||||
int y = icon.y;
|
||||
int x = 31 + 20 + 8;
|
||||
int y = 31;
|
||||
|
||||
UIRenderHelper.streak(0, x - 4, y + 10, 26, (int) (150 * fade), 0x101010);
|
||||
String title = activeScene.getTitle();
|
||||
int wordWrappedHeight = font.getWordWrappedHeight(title, left.x);
|
||||
|
||||
drawString(font, Lang.translate(PONDERING), x, y, 0xffa3a3a3);
|
||||
y += 12;
|
||||
int streakHeight = 35 - 9 + wordWrappedHeight;
|
||||
UIRenderHelper.streak(0, x - 4, y - 12 + streakHeight / 2, streakHeight, (int) (150 * fade), 0x101010);
|
||||
UIRenderHelper.streak(180, x - 4, y - 12 + streakHeight / 2, streakHeight, (int) (30 * fade), 0x101010);
|
||||
renderBox(21, 21, 30, 30, false);
|
||||
|
||||
GuiGameElement.of(stack)
|
||||
.at(x - 39, y - 11)
|
||||
.scale(2)
|
||||
.render();
|
||||
|
||||
drawString(font, Lang.translate(PONDERING), x, y - 6, 0xffa3a3a3);
|
||||
y += 8;
|
||||
x += 0;
|
||||
//RenderSystem.translated(0, 3 * (indexDiff), 0);
|
||||
// RenderSystem.translated(0, 3 * (indexDiff), 0);
|
||||
RenderSystem.translated(x, y, 0);
|
||||
RenderSystem.rotatef(indexDiff * -75, 1, 0, 0);
|
||||
RenderSystem.translated(0, 0, 5);
|
||||
font.drawSplitString(activeScene.getTitle(), 0, 0, left.x, ColorHelper.applyAlpha(textColor, 1 - indexDiff));
|
||||
font.drawSplitString(title, 0, 0, left.x, ColorHelper.applyAlpha(textColor, 1 - indexDiff));
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
if (chapter != null) {
|
||||
|
@ -372,7 +397,8 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
UIRenderHelper.streak(180, 4, 10, 26, (int) (150 * fade), 0x101010);
|
||||
|
||||
drawRightAlignedString(font, Lang.translate(IN_CHAPTER), 0, 0, 0xffa3a3a3);
|
||||
drawRightAlignedString(font, Lang.translate(PonderLocalization.LANG_PREFIX + "chapter." + chapter.getId()), 0, 12, 0xffeeeeee);
|
||||
drawRightAlignedString(font,
|
||||
Lang.translate(PonderLocalization.LANG_PREFIX + "chapter." + chapter.getId()), 0, 12, 0xffeeeeee);
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
@ -448,43 +474,47 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
//Tags
|
||||
// Tags
|
||||
List<PonderTag> sceneTags = activeScene.tags;
|
||||
boolean highlightAll = sceneTags.contains(PonderTag.Highlight.ALL);
|
||||
double s = Minecraft.getInstance().getWindow().getGuiScaleFactor();
|
||||
IntStream.range(0, tagButtons.size()).forEach(i -> {
|
||||
RenderSystem.pushMatrix();
|
||||
LerpedFloat chase = tagFades.get(i);
|
||||
PonderButton button = tagButtons.get(i);
|
||||
if (button.isMouseOver(mouseX, mouseY)) {
|
||||
chase.updateChaseTarget(1);
|
||||
} else
|
||||
chase.updateChaseTarget(0);
|
||||
double s = Minecraft.getInstance()
|
||||
.getWindow()
|
||||
.getGuiScaleFactor();
|
||||
IntStream.range(0, tagButtons.size())
|
||||
.forEach(i -> {
|
||||
RenderSystem.pushMatrix();
|
||||
LerpedFloat chase = tagFades.get(i);
|
||||
PonderButton button = tagButtons.get(i);
|
||||
if (button.isMouseOver(mouseX, mouseY)) {
|
||||
chase.updateChaseTarget(1);
|
||||
} else
|
||||
chase.updateChaseTarget(0);
|
||||
|
||||
chase.tickChaser();
|
||||
chase.tickChaser();
|
||||
|
||||
if (highlightAll || sceneTags.contains(this.tags.get(i)))
|
||||
button.flash();
|
||||
else
|
||||
button.dim();
|
||||
if (highlightAll || sceneTags.contains(this.tags.get(i)))
|
||||
button.flash();
|
||||
else
|
||||
button.dim();
|
||||
|
||||
int x = button.x + button.getWidth() + 4;
|
||||
int y = button.y - 2;
|
||||
RenderSystem.translated(x, y + 5 * (1 - fade), 0);
|
||||
int x = button.x + button.getWidth() + 4;
|
||||
int y = button.y - 2;
|
||||
RenderSystem.translated(x, y + 5 * (1 - fade), 800);
|
||||
|
||||
float fadedWidth = 200 * chase.getValue(partialTicks);
|
||||
UIRenderHelper.streak(0, 0, 12, 26, (int) fadedWidth, 0x101010);
|
||||
float fadedWidth = 200 * chase.getValue(partialTicks);
|
||||
UIRenderHelper.streak(0, 0, 12, 26, (int) fadedWidth, 0x101010);
|
||||
|
||||
GL11.glScissor((int) (x * s), 0, (int) (fadedWidth * s), (int) (height * s));
|
||||
GL11.glEnable(GL11.GL_SCISSOR_TEST);
|
||||
GL11.glScissor((int) (x * s), 0, (int) (fadedWidth * s), (int) (height * s));
|
||||
GL11.glEnable(GL11.GL_SCISSOR_TEST);
|
||||
|
||||
String tagName = Lang.translate("ponder.tag." + this.tags.get(i).getId());
|
||||
drawString(tagName, 3, 8, 0xffeedd);
|
||||
String tagName = this.tags.get(i)
|
||||
.getTitle();
|
||||
drawString(tagName, 3, 8, 0xffeedd);
|
||||
|
||||
GL11.glDisable(GL11.GL_SCISSOR_TEST);
|
||||
GL11.glDisable(GL11.GL_SCISSOR_TEST);
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
});
|
||||
RenderSystem.popMatrix();
|
||||
});
|
||||
}
|
||||
|
||||
protected void lowerButtonGroup(int index, int mouseX, int mouseY, float fade, AllIcons icon, KeyBinding key) {
|
||||
|
@ -523,7 +553,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
return;
|
||||
if (w instanceof PonderButton) {
|
||||
PonderButton mtdButton = (PonderButton) w;
|
||||
mtdButton.runCallback();
|
||||
mtdButton.runCallback(x, y);
|
||||
handled.setTrue();
|
||||
return;
|
||||
}
|
||||
|
@ -587,7 +617,9 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
if (chapter != null)
|
||||
return Lang.translate(PonderLocalization.LANG_PREFIX + "chapter." + chapter.getId());
|
||||
|
||||
return stack.getItem().getName().getFormattedText();
|
||||
return stack.getItem()
|
||||
.getName()
|
||||
.getFormattedText();
|
||||
}
|
||||
|
||||
public FontRenderer getFontRenderer() {
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
|
||||
public class MovementActorScenes {
|
||||
|
||||
public static void psiTransfer(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Contraption Storage Exchange");
|
||||
scene.configureBasePlate(0, 0, 6);
|
||||
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||
scene.idle(5);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
|
||||
}
|
||||
|
||||
public static void psiRedstone(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Redstone Control");
|
||||
scene.configureBasePlate(0, 0, 6);
|
||||
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||
scene.idle(5);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
}
|
||||
|
||||
}
|
|
@ -3,6 +3,7 @@ package com.simibubi.create.foundation.ponder.content;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.foundation.ponder.PonderRegistry;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.item.Items;
|
||||
|
||||
|
@ -16,8 +17,10 @@ public class PonderIndex {
|
|||
// (!) Modifications inside storyboard methods only require re-opening the ui
|
||||
|
||||
PonderRegistry.forComponents(AllBlocks.SHAFT)
|
||||
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay, b -> b.highlightAllTags().chapter(PonderChapter.of("basic_kinetics")))
|
||||
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased, b -> b.chapter(PonderChapter.of("encasing")));
|
||||
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay, b -> b.highlightAllTags()
|
||||
.chapter(PonderChapter.of("basic_kinetics")))
|
||||
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased,
|
||||
b -> b.chapter(PonderChapter.of("encasing")));
|
||||
|
||||
// Funnels
|
||||
PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass);
|
||||
|
@ -28,7 +31,7 @@ public class PonderIndex {
|
|||
.addStoryBoard("funnels/redstone", FunnelScenes::redstone)
|
||||
.addStoryBoard("funnels/transposer", FunnelScenes::transposer);
|
||||
PonderRegistry.addStoryBoard(AllBlocks.ANDESITE_FUNNEL, "funnels/brass", FunnelScenes::brass);
|
||||
|
||||
|
||||
// Gantries
|
||||
PonderRegistry.addStoryBoard(AllBlocks.GANTRY_SHAFT, "gantry/intro", GantryScenes::introForShaft);
|
||||
PonderRegistry.addStoryBoard(AllBlocks.GANTRY_CARRIAGE, "gantry/intro", GantryScenes::introForPinion);
|
||||
|
@ -37,6 +40,11 @@ public class PonderIndex {
|
|||
.addStoryBoard("gantry/direction", GantryScenes::direction)
|
||||
.addStoryBoard("gantry/subgantry", GantryScenes::subgantry);
|
||||
|
||||
// Movement Actors
|
||||
PonderRegistry.forComponents(AllBlocks.PORTABLE_STORAGE_INTERFACE)
|
||||
.addStoryBoard("portable_interface/transfer", MovementActorScenes::psiTransfer)
|
||||
.addStoryBoard("portable_interface/redstone", MovementActorScenes::psiRedstone);
|
||||
|
||||
// Debug scenes, can be found in game via the Brass Hand
|
||||
if (EDITOR_MODE)
|
||||
DebugScenes.registerAll();
|
||||
|
@ -45,26 +53,22 @@ public class PonderIndex {
|
|||
public static void registerTags() {
|
||||
|
||||
PonderRegistry.tags.forItems(AllBlocks.SHAFT.getId())
|
||||
.add(PonderTag.Create.KINETICS);
|
||||
.add(PonderTag.KINETICS);
|
||||
|
||||
PonderRegistry.tags.forItems(AllBlocks.ANDESITE_FUNNEL.getId(), AllBlocks.BRASS_FUNNEL.getId())
|
||||
.add(PonderTag.Create.ARM_ACCESS)
|
||||
.add(PonderTag.Vanilla.ITEM_TRANSFER)
|
||||
.add(PonderTag.Vanilla.REDSTONE_CONTROL);
|
||||
.add(PonderTag.ARM_ACCESS)
|
||||
.add(PonderTag.ITEM_TRANSFER)
|
||||
.add(PonderTag.REDSTONE_CONTROL);
|
||||
|
||||
PonderRegistry.tags.forTag(PonderTag.Vanilla.REDSTONE_CONTROL)
|
||||
.add(Items.REDSTONE.getRegistryName())
|
||||
.add(Blocks.LEVER.getRegistryName());
|
||||
PonderRegistry.tags.forTag(PonderTag.REDSTONE_CONTROL)
|
||||
.add(Items.REDSTONE.getRegistryName())
|
||||
.add(Blocks.LEVER.getRegistryName());
|
||||
|
||||
PonderRegistry.tags.forTag(PonderTag.Create.KINETICS)
|
||||
.add(AllBlocks.COGWHEEL.getId())
|
||||
.add(AllBlocks.LARGE_COGWHEEL.getId())
|
||||
.add(AllItems.BELT_CONNECTOR.getId())
|
||||
.add(AllBlocks.ENCASED_CHAIN_DRIVE.getId());
|
||||
|
||||
PonderChapter.of("basic_kinetics").addTagsToChapter(
|
||||
PonderTag.Create.KINETICS
|
||||
);
|
||||
PonderRegistry.tags.forTag(PonderTag.KINETICS)
|
||||
.add(AllBlocks.COGWHEEL.getId())
|
||||
.add(AllBlocks.LARGE_COGWHEEL.getId())
|
||||
.add(AllItems.BELT_CONNECTOR.getId())
|
||||
.add(AllBlocks.ENCASED_CHAIN_DRIVE.getId());
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -63,9 +63,11 @@ public class PonderIndexScreen extends AbstractSimiScreen {
|
|||
|
||||
//todo at some point pagination or horizontal scrolling may be needed for chapters/items
|
||||
for (PonderChapter chapter : chapters) {
|
||||
ChapterLabel label = new ChapterLabel(chapter, chapterCenterX + layout.getX(), chapterCenterY + layout.getY(), () -> {
|
||||
ScreenOpener.transitionTo(PonderUI.of(chapter));
|
||||
});
|
||||
ChapterLabel label = new ChapterLabel(chapter, chapterCenterX + layout.getX(),
|
||||
chapterCenterY + layout.getY(), (mouseX, mouseY) -> {
|
||||
centerScalingOn(mouseX, mouseY);
|
||||
ScreenOpener.transitionTo(PonderUI.of(chapter));
|
||||
});
|
||||
|
||||
widgets.add(label);
|
||||
layout.next();
|
||||
|
@ -98,7 +100,7 @@ public class PonderIndexScreen extends AbstractSimiScreen {
|
|||
int itemCenterY = (int) (height * itemYmult);
|
||||
|
||||
for (Item item : items) {
|
||||
PonderButton button = new PonderButton(itemCenterX + layout.getX() + 4, itemCenterY + layout.getY() + 4, () -> {})
|
||||
PonderButton button = new PonderButton(itemCenterX + layout.getX() + 4, itemCenterY + layout.getY() + 4, (x, y) -> {})
|
||||
.showing(new ItemStack(item));
|
||||
|
||||
button.fade(1);
|
||||
|
|
|
@ -4,6 +4,8 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.gui.IScreenRenderable;
|
||||
import com.simibubi.create.foundation.ponder.PonderLocalization;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.AbstractGui;
|
||||
import net.minecraft.item.Item;
|
||||
|
@ -15,11 +17,44 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
|||
|
||||
public class PonderTag implements IScreenRenderable {
|
||||
|
||||
//
|
||||
|
||||
public static final PonderTag
|
||||
|
||||
KINETICS = new PonderTag("kinetics").item(AllBlocks.COGWHEEL.get()
|
||||
.asItem(), true, false)
|
||||
.defaultLang("Kinetic Blocks", "Components which help generating, relaying and making use of Rotational Force"),
|
||||
FLUID_TRANSFER = new PonderTag("fluid_transfer").idAsIcon(),
|
||||
OPEN_INVENTORY = new PonderTag("open_inventory").item(AllBlocks.BASIN.get()
|
||||
.asItem()),
|
||||
ARM_ACCESS = new PonderTag("arm_access").item(AllBlocks.MECHANICAL_ARM.get()
|
||||
.asItem())
|
||||
.defaultLang("Targets for Mechanical Arms",
|
||||
"Components which can be selected as inputs or outputs to the Mechanical Arm"),
|
||||
REDSTONE_CONTROL = new PonderTag("redstone_control").item(Items.REDSTONE, true, false),
|
||||
ITEM_TRANSFER = new PonderTag("item_transfer").idAsIcon();
|
||||
|
||||
public static class Highlight {
|
||||
public static final PonderTag ALL = new PonderTag("_all");
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
private final String id;
|
||||
private ResourceLocation icon;
|
||||
private ItemStack itemIcon = ItemStack.EMPTY;
|
||||
private ItemStack mainItem = ItemStack.EMPTY;
|
||||
|
||||
public String getTitle() {
|
||||
return PonderLocalization.getTag(id);
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return PonderLocalization.getTagDescription(id);
|
||||
}
|
||||
|
||||
// Builder
|
||||
|
||||
public PonderTag(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
@ -28,6 +63,11 @@ public class PonderTag implements IScreenRenderable {
|
|||
return id;
|
||||
}
|
||||
|
||||
public PonderTag defaultLang(String title, String description) {
|
||||
PonderLocalization.registerTag(id, title, description);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemStack getMainItem() {
|
||||
return mainItem;
|
||||
}
|
||||
|
@ -46,8 +86,10 @@ public class PonderTag implements IScreenRenderable {
|
|||
}
|
||||
|
||||
public PonderTag item(Item item, boolean useAsIcon, boolean useAsMainItem) {
|
||||
if (useAsIcon) this.itemIcon = new ItemStack(item);
|
||||
if (useAsMainItem) this.mainItem = new ItemStack(item);
|
||||
if (useAsIcon)
|
||||
this.itemIcon = new ItemStack(item);
|
||||
if (useAsMainItem)
|
||||
this.mainItem = new ItemStack(item);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -57,32 +99,23 @@ public class PonderTag implements IScreenRenderable {
|
|||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(x, y, 0);
|
||||
if (icon != null) {
|
||||
Minecraft.getInstance().getTextureManager().bindTexture(icon);
|
||||
Minecraft.getInstance()
|
||||
.getTextureManager()
|
||||
.bindTexture(icon);
|
||||
RenderSystem.scaled(0.25, 0.25, 1);
|
||||
//x and y offset, blit z offset, tex x and y, tex width and height, entire tex sheet width and height
|
||||
// x and y offset, blit z offset, tex x and y, tex width and height, entire tex
|
||||
// sheet width and height
|
||||
AbstractGui.blit(0, 0, 0, 0, 0, 64, 64, 64, 64);
|
||||
} else if (!itemIcon.isEmpty()) {
|
||||
RenderSystem.translated(-4, -4, 0);
|
||||
RenderSystem.scaled(1.5, 1.5, 1);
|
||||
GuiGameElement.of(itemIcon).render();
|
||||
RenderSystem.scaled(1.5, 1.5, 1.5);
|
||||
GuiGameElement.of(itemIcon)
|
||||
.render();
|
||||
}
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
public static class Create {
|
||||
public static final PonderTag KINETICS = new PonderTag("kinetics").item(AllBlocks.COGWHEEL.get().asItem(), true, false);
|
||||
public static final PonderTag FLUID_TRANSFER = new PonderTag("fluid_transfer").idAsIcon();
|
||||
// Load class
|
||||
public static void register() {}
|
||||
|
||||
public static final PonderTag OPEN_INVENTORY = new PonderTag("open_inventory").item(AllBlocks.BASIN.get().asItem());
|
||||
public static final PonderTag ARM_ACCESS = new PonderTag("arm_access").item(AllBlocks.MECHANICAL_ARM.get().asItem());
|
||||
}
|
||||
|
||||
public static class Vanilla {
|
||||
public static final PonderTag REDSTONE_CONTROL = new PonderTag("redstone_control").item(Items.REDSTONE, true, false);
|
||||
public static final PonderTag ITEM_TRANSFER = new PonderTag("item_transfer").idAsIcon();
|
||||
}
|
||||
|
||||
public static class Highlight {
|
||||
public static final PonderTag ALL = new PonderTag("_all");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,23 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.foundation.gui.AbstractSimiScreen;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||
import com.simibubi.create.foundation.ponder.PonderLocalization;
|
||||
import com.simibubi.create.foundation.ponder.PonderRegistry;
|
||||
import com.simibubi.create.foundation.ponder.PonderUI;
|
||||
import com.simibubi.create.foundation.ponder.ui.ChapterLabel;
|
||||
import com.simibubi.create.foundation.ponder.ui.LayoutHelper;
|
||||
import com.simibubi.create.foundation.ponder.ui.PonderButton;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.MainWindow;
|
||||
import net.minecraft.client.gui.widget.Widget;
|
||||
|
@ -20,12 +27,10 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class PonderTagScreen extends AbstractSimiScreen {
|
||||
|
||||
public static final String ASSOCIATED = PonderLocalization.LANG_PREFIX + "associated";
|
||||
|
||||
protected final PonderTag tag;
|
||||
protected final List<Item> items;
|
||||
private final double itemXmult = 0.5;
|
||||
|
@ -35,12 +40,11 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
private final double chapterXmult = 0.5;
|
||||
private final double chapterYmult = 0.75;
|
||||
protected Rectangle2d chapterArea;
|
||||
private final double mainXmult = 0.5;
|
||||
// private final double mainXmult = 0.5;
|
||||
private final double mainYmult = 0.15;
|
||||
|
||||
private ItemStack hoveredItem = ItemStack.EMPTY;
|
||||
|
||||
|
||||
public PonderTagScreen(PonderTag tag) {
|
||||
this.tag = tag;
|
||||
items = new ArrayList<>();
|
||||
|
@ -52,21 +56,21 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
super.init();
|
||||
widgets.clear();
|
||||
|
||||
//items
|
||||
// items
|
||||
items.clear();
|
||||
PonderRegistry.tags.getItems(tag)
|
||||
.stream()
|
||||
.map(key -> {
|
||||
Item item = ForgeRegistries.ITEMS.getValue(key);
|
||||
if (item == null) {
|
||||
Block b = ForgeRegistries.BLOCKS.getValue(key);
|
||||
if (b != null)
|
||||
item = b.asItem();
|
||||
}
|
||||
return item;
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(items::add);
|
||||
.stream()
|
||||
.map(key -> {
|
||||
Item item = ForgeRegistries.ITEMS.getValue(key);
|
||||
if (item == null) {
|
||||
Block b = ForgeRegistries.BLOCKS.getValue(key);
|
||||
if (b != null)
|
||||
item = b.asItem();
|
||||
}
|
||||
return item;
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(items::add);
|
||||
|
||||
int rowCount = MathHelper.clamp((int) Math.ceil(items.size() / 11d), 1, 3);
|
||||
LayoutHelper layout = LayoutHelper.centeredHorizontal(items.size(), rowCount, 28, 28, 8);
|
||||
|
@ -75,15 +79,20 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
int itemCenterY = (int) (height * itemYmult);
|
||||
|
||||
for (Item i : items) {
|
||||
PonderButton button = new PonderButton(itemCenterX + layout.getX() + 4, itemCenterY + layout.getY() + 4, () -> {})
|
||||
.showing(new ItemStack(i));
|
||||
PonderButton button =
|
||||
new PonderButton(itemCenterX + layout.getX() + 4, itemCenterY + layout.getY() + 4, (mouseX, mouseY) -> {
|
||||
if (!PonderRegistry.all.containsKey(i.getRegistryName()))
|
||||
return;
|
||||
centerScalingOn(mouseX, mouseY);
|
||||
ScreenOpener.transitionTo(PonderUI.of(new ItemStack(i)));
|
||||
}).showing(new ItemStack(i));
|
||||
|
||||
button.fade(1);
|
||||
widgets.add(button);
|
||||
layout.next();
|
||||
}
|
||||
|
||||
//chapters
|
||||
// chapters
|
||||
chapters.clear();
|
||||
chapters.addAll(PonderRegistry.tags.getChapters(tag));
|
||||
|
||||
|
@ -94,9 +103,11 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
int chapterCenterY = (int) (height * chapterYmult);
|
||||
|
||||
for (PonderChapter chapter : chapters) {
|
||||
ChapterLabel label = new ChapterLabel(chapter, chapterCenterX + layout.getX(), chapterCenterY + layout.getY(), () -> {
|
||||
ScreenOpener.transitionTo(PonderUI.of(chapter));
|
||||
});
|
||||
ChapterLabel label = new ChapterLabel(chapter, chapterCenterX + layout.getX(),
|
||||
chapterCenterY + layout.getY(), (mouseX, mouseY) -> {
|
||||
centerScalingOn(mouseX, mouseY);
|
||||
ScreenOpener.transitionTo(PonderUI.of(chapter));
|
||||
});
|
||||
|
||||
widgets.add(label);
|
||||
layout.next();
|
||||
|
@ -127,45 +138,89 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
renderChapters(mouseX, mouseY, partialTicks);
|
||||
|
||||
//
|
||||
int x = (int) (width * mainXmult);
|
||||
int y = (int) (height * mainYmult);
|
||||
// int x = (int) (width * mainXmult);
|
||||
// int y = (int) (height * mainYmult);
|
||||
//
|
||||
// RenderSystem.pushMatrix();
|
||||
// RenderSystem.translated(x, y, 0);
|
||||
// RenderSystem.translated(-150, 0, 0);
|
||||
//
|
||||
// if (!tag.getMainItem()
|
||||
// .isEmpty()) {
|
||||
// RenderSystem.translated(-25, 0, 0);
|
||||
// PonderUI.renderBox(0, -10, 20, 20, false);
|
||||
// RenderSystem.pushMatrix();
|
||||
// RenderSystem.translated(-2, -12, 0);
|
||||
// RenderSystem.scaled(1.5, 1.5, 1);
|
||||
// GuiGameElement.of(tag.getMainItem())
|
||||
// .render();
|
||||
//
|
||||
// RenderSystem.popMatrix();
|
||||
//
|
||||
// RenderSystem.translated(75, 0, 0);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// RenderSystem.pushMatrix();
|
||||
//// RenderSystem.scaled(1.5, 1.5, 1);
|
||||
//
|
||||
// // render icon & box
|
||||
// PonderUI.renderBox(-8, -20, 40, 40, false);
|
||||
// RenderSystem.translated(0, -10, 100);
|
||||
// RenderSystem.scaled(1.5, 1.5, 1);
|
||||
// tag.draw(this, 0, 0);
|
||||
//
|
||||
// RenderSystem.popMatrix();
|
||||
//
|
||||
// // tag name & description
|
||||
// UIRenderHelper.streak(0, 36, 0, 39, 350, 0x101010);
|
||||
// drawString(font, Lang.translate("ponder.tag." + tag.getId()), 41, -16, 0xffff_ffff);
|
||||
// drawString(font, Lang.translate("ponder.tag." + tag.getId() + ".desc"), 41, -4, 0xffff_ffff);
|
||||
//
|
||||
// RenderSystem.popMatrix();
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(width / 2 - 120, height * mainYmult - 40, 0);
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(0, 0, 800);
|
||||
int x = 31 + 20 + 8;
|
||||
int y = 31;
|
||||
|
||||
String title = tag.getTitle();
|
||||
|
||||
int streakHeight = 35;
|
||||
UIRenderHelper.streak(0, x - 4, y - 12 + streakHeight / 2, streakHeight, (int) (240), 0x101010);
|
||||
PonderUI.renderBox(21, 21, 30, 30, false);
|
||||
|
||||
drawString(font, Lang.translate(PonderUI.PONDERING), x, y - 6, 0xffa3a3a3);
|
||||
y += 8;
|
||||
x += 0;
|
||||
// RenderSystem.translated(0, 3 * (indexDiff), 0);
|
||||
RenderSystem.translated(x, y, 0);
|
||||
RenderSystem.translated(-150, 0, 0);
|
||||
|
||||
if (!tag.getMainItem().isEmpty()) {
|
||||
RenderSystem.translated(-25, 0, 0);
|
||||
PonderUI.renderBox(0, -10, 20, 20, false);
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(-2, -12, 0);
|
||||
RenderSystem.scaled(1.5, 1.5, 1);
|
||||
GuiGameElement.of(tag.getMainItem()).render();
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
RenderSystem.translated(75, 0, 0);
|
||||
|
||||
}
|
||||
RenderSystem.translated(0, 0, 5);
|
||||
font.drawString(title, 0, 0, 0xeeeeee);
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.scaled(1.5, 1.5, 1);
|
||||
|
||||
|
||||
//render icon & box
|
||||
PonderUI.renderBox(0, -10, 20, 20, true);
|
||||
RenderSystem.translated(2, 2 - 10, 100);
|
||||
RenderSystem.translated(23, 23, 0);
|
||||
RenderSystem.scaled(1.66, 1.66, 1.66);
|
||||
tag.draw(this, 0, 0);
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
//tag name & description
|
||||
UIRenderHelper.streak(0, 36, 0, 39, 350, 0x101010);
|
||||
drawString(font, Lang.translate("ponder.tag." + tag.getId()), 41, -16, 0xffff_ffff);
|
||||
drawString(font, Lang.translate("ponder.tag." + tag.getId() + ".desc"), 41, -4, 0xffff_ffff);
|
||||
RenderSystem.pushMatrix();
|
||||
int w = (int) (width * .45);
|
||||
x = (width - w) / 2;
|
||||
y = (int) (height * itemYmult + itemArea.getHeight() + 20);
|
||||
|
||||
String desc = tag.getDescription();
|
||||
int h = font.getWordWrappedHeight(desc, w);
|
||||
|
||||
PonderUI.renderBox(x - 3, y - 3, w + 6, h + 6, false);
|
||||
RenderSystem.translated(0, 0, 100);
|
||||
font.drawSplitString(desc, x, y, w, 0xeeeeee);
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
}
|
||||
|
||||
protected void renderItems(int mouseX, int mouseY, float partialTicks) {
|
||||
|
@ -175,14 +230,19 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
int x = (int) (width * itemXmult);
|
||||
int y = (int) (height * itemYmult);
|
||||
|
||||
String relatedTitle = Lang.translate(ASSOCIATED);
|
||||
int stringWidth = font.getStringWidth(relatedTitle);
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(x, y, 0);
|
||||
PonderUI.renderBox((sWidth - stringWidth) / 2 - 5, itemArea.getY() - 21, stringWidth + 10, 10, false);
|
||||
RenderSystem.translated(0, 0, 200);
|
||||
|
||||
UIRenderHelper.streak(0, itemArea.getX() - 10, itemArea.getY() - 20, 20, 180, 0x101010);
|
||||
drawString(font, "Related Items", itemArea.getX() - 5, itemArea.getY() - 25, 0xffddeeff);
|
||||
// UIRenderHelper.streak(0, itemArea.getX() - 10, itemArea.getY() - 20, 20, 180, 0x101010);
|
||||
drawCenteredString(font, relatedTitle, sWidth / 2, itemArea.getY() - 20, 0xeeeeee);
|
||||
|
||||
UIRenderHelper.streak(0, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth()/2 + 75, 0x101010);
|
||||
UIRenderHelper.streak(180, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth()/2 + 75, 0x101010);
|
||||
UIRenderHelper.streak(0, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth() / 2 + 75, 0x101010);
|
||||
UIRenderHelper.streak(180, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth() / 2 + 75, 0x101010);
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
|
@ -221,11 +281,32 @@ public class PonderTagScreen extends AbstractSimiScreen {
|
|||
|
||||
@Override
|
||||
protected String getBreadcrumbTitle() {
|
||||
return Lang.translate("ponder.tag." + tag.getId());
|
||||
return tag.getTitle();
|
||||
}
|
||||
|
||||
public ItemStack getHoveredTooltipItem() {
|
||||
return hoveredItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double x, double y, int button) {
|
||||
MutableBoolean handled = new MutableBoolean(false);
|
||||
widgets.forEach(w -> {
|
||||
if (handled.booleanValue())
|
||||
return;
|
||||
if (!w.isMouseOver(x, y))
|
||||
return;
|
||||
if (w instanceof PonderButton) {
|
||||
PonderButton mtdButton = (PonderButton) w;
|
||||
mtdButton.runCallback(x, y);
|
||||
handled.setTrue();
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
if (handled.booleanValue())
|
||||
return true;
|
||||
return super.mouseClicked(x, y, button);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
package com.simibubi.create.foundation.ponder.ui;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||
import com.simibubi.create.foundation.gui.widgets.AbstractSimiWidget;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderChapter;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
public class ChapterLabel extends AbstractSimiWidget {
|
||||
|
@ -11,7 +15,7 @@ public class ChapterLabel extends AbstractSimiWidget {
|
|||
private final PonderChapter chapter;
|
||||
private final PonderButton button;
|
||||
|
||||
public ChapterLabel(PonderChapter chapter, int x, int y, Runnable onClick) {
|
||||
public ChapterLabel(PonderChapter chapter, int x, int y, BiConsumer<Integer, Integer> onClick) {
|
||||
super(x, y, 175, 38);
|
||||
|
||||
this.button = new PonderButton(x + 4, y + 4, onClick, 30, 30).showing(chapter);
|
||||
|
@ -22,8 +26,9 @@ public class ChapterLabel extends AbstractSimiWidget {
|
|||
|
||||
@Override
|
||||
public void render(int mouseX, int mouseY, float partialTicks) {
|
||||
UIRenderHelper.streak(0, x, y + height/2, height - 2, width, 0x101010);
|
||||
drawString(Minecraft.getInstance().fontRenderer, Lang.translate("ponder.chapter." + chapter.getId()), x + 50, y + 20, 0xffddeeff);
|
||||
UIRenderHelper.streak(0, x, y + height / 2, height - 2, width, 0x101010);
|
||||
drawString(Minecraft.getInstance().fontRenderer, Lang.translate("ponder.chapter." + chapter.getId()), x + 50,
|
||||
y + 20, 0xffddeeff);
|
||||
|
||||
button.renderButton(mouseX, mouseY, partialTicks);
|
||||
super.render(mouseX, mouseY, partialTicks);
|
||||
|
@ -34,6 +39,6 @@ public class ChapterLabel extends AbstractSimiWidget {
|
|||
if (!button.isMouseOver(x, y))
|
||||
return;
|
||||
|
||||
button.runCallback();
|
||||
button.runCallback(x, y);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.simibubi.create.foundation.ponder.ui;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.gui.IScreenRenderable;
|
||||
|
@ -8,6 +10,7 @@ import com.simibubi.create.foundation.ponder.PonderUI;
|
|||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -17,7 +20,7 @@ public class PonderButton extends AbstractSimiWidget {
|
|||
private IScreenRenderable icon;
|
||||
private ItemStack item;
|
||||
protected boolean pressed;
|
||||
private Runnable onClick;
|
||||
private BiConsumer<Integer, Integer> onClick;
|
||||
private int xFadeModifier;
|
||||
private int yFadeModifier;
|
||||
private float fade;
|
||||
|
@ -26,14 +29,19 @@ public class PonderButton extends AbstractSimiWidget {
|
|||
|
||||
public static final int SIZE = 20;
|
||||
|
||||
public PonderButton(int x, int y, Runnable onClick, int width, int height) {
|
||||
public PonderButton(int x, int y, BiConsumer<Integer, Integer> onClick, int width, int height) {
|
||||
super(x, y, width, height);
|
||||
this.onClick = onClick;
|
||||
flash = LerpedFloat.linear().startWithValue(0);
|
||||
flash = LerpedFloat.linear()
|
||||
.startWithValue(0);
|
||||
}
|
||||
|
||||
public PonderButton(int x, int y, BiConsumer<Integer, Integer> onClick) {
|
||||
this(x, y, onClick, SIZE, SIZE);
|
||||
}
|
||||
|
||||
public PonderButton(int x, int y, Runnable onClick) {
|
||||
this(x, y, onClick, SIZE, SIZE);
|
||||
this(x, y, ($, $$) -> onClick.run());
|
||||
}
|
||||
|
||||
public PonderButton showing(IScreenRenderable icon) {
|
||||
|
@ -121,8 +129,8 @@ public class PonderButton extends AbstractSimiWidget {
|
|||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
public void runCallback() {
|
||||
onClick.run();
|
||||
public void runCallback(double mouseX, double mouseY) {
|
||||
onClick.accept((int) mouseX, (int) mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
BIN
src/main/resources/ponder/portable_interface/redstone.nbt
Normal file
BIN
src/main/resources/ponder/portable_interface/redstone.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/portable_interface/transfer.nbt
Normal file
BIN
src/main/resources/ponder/portable_interface/transfer.nbt
Normal file
Binary file not shown.
Loading…
Reference in a new issue