Freeze and Identify
- Ponder scenes can now be paused and analysed, viewing tooltips for targeted blocks in the scene - During editing, identify mode can be used to move targeted positions to the clipboard - Ponder-compatible components can be pondered about in identify mode
This commit is contained in:
parent
692c6deaaf
commit
43f0ad1c78
41 changed files with 547 additions and 345 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
|
||||
e3f618c5b622d21880de858678d1802cbf65e615 assets/create/lang/en_ud.json
|
||||
187d765fed859da0aa91e67d35b18589882ae179 assets/create/lang/en_us.json
|
||||
d9dc6a731465072a69754252c9097bfc83f2e0b8 assets/create/lang/unfinished/de_de.json
|
||||
ae5554d2809e669e80f455abd0e67a764fff31da assets/create/lang/unfinished/es_es.json
|
||||
e17b3b528004939b86009e3f88679555f33fbc90 assets/create/lang/unfinished/es_mx.json
|
||||
4f385f92b948be135e268bf7f6f71e346266128d assets/create/lang/unfinished/fr_fr.json
|
||||
1662dcbf578c71c8f2c92dff276766d1b80eae8c assets/create/lang/unfinished/it_it.json
|
||||
53e51f744fd205abfd6cb69ba213d0ba867b1e95 assets/create/lang/unfinished/ja_jp.json
|
||||
75cf95c526518a104c7a1289a4ce529d2d8ffde1 assets/create/lang/unfinished/ko_kr.json
|
||||
e76bf18f466986aadd4b53991267305755ce299c assets/create/lang/unfinished/nl_nl.json
|
||||
06370d657c5967e43df0f4925b3c5b06844a9172 assets/create/lang/unfinished/pt_br.json
|
||||
586f3041725e75e02d440f233c12df3be879cecf assets/create/lang/unfinished/ru_ru.json
|
||||
bbb874798f5125d4870e31bf6636f8e9b40a40b0 assets/create/lang/unfinished/zh_cn.json
|
||||
e3aeeeaccee348630734c63fcbc3e3bea0af6663 assets/create/lang/unfinished/zh_tw.json
|
||||
07eaea807200c157af29adbbc411d2a80b9cade5 assets/create/lang/en_us.json
|
||||
3f89caaa4c6ac34222ebd1d5577139c18a9aa6b8 assets/create/lang/unfinished/de_de.json
|
||||
591db95e6cd9e9f3f106ef4dc1f9ce475edee4df assets/create/lang/unfinished/es_es.json
|
||||
ee7da78e00b92e5fde92c8ad8b25627bb7f478c7 assets/create/lang/unfinished/es_mx.json
|
||||
3b604e06a29ddac65e71e4b853e88066496b3118 assets/create/lang/unfinished/fr_fr.json
|
||||
d50db792720189290b382537f2703d08feab7f52 assets/create/lang/unfinished/it_it.json
|
||||
2969a487f270d80969d69a5f76cef7e1b41c5c9e assets/create/lang/unfinished/ja_jp.json
|
||||
5df95bcadb862b4522439ea66dc28a018771562b assets/create/lang/unfinished/ko_kr.json
|
||||
9f65db261fdda1c22691b5238a8327d7aabcb912 assets/create/lang/unfinished/nl_nl.json
|
||||
1864077ccca4c023e5bee33a3b1efe9ccdcaad28 assets/create/lang/unfinished/pt_br.json
|
||||
1559765f5d8f1361e1a78680c60dd16ac5111259 assets/create/lang/unfinished/ru_ru.json
|
||||
7b9680e0d83fdd4749418e54342fa567b4e2ea6b assets/create/lang/unfinished/zh_cn.json
|
||||
ea077d3e3141001ebe3fb2cda60276ac21647a1f 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
|
||||
|
|
|
@ -1804,15 +1804,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1845,10 +1849,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1017",
|
||||
"_": "Missing Localizations: 1023",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 59",
|
||||
"_": "Missing Localizations: 65",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 947",
|
||||
"_": "Missing Localizations: 953",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 729",
|
||||
"_": "Missing Localizations: 735",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 64",
|
||||
"_": "Missing Localizations: 70",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 71",
|
||||
"_": "Missing Localizations: 77",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 118",
|
||||
"_": "Missing Localizations: 124",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1216",
|
||||
"_": "Missing Localizations: 1222",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1282",
|
||||
"_": "Missing Localizations: 1288",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 68",
|
||||
"_": "Missing Localizations: 74",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 66",
|
||||
"_": "Missing Localizations: 72",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 71",
|
||||
"_": "Missing Localizations: 77",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1805,15 +1805,19 @@
|
|||
"_": "->------------------------] MetaDoc Text [------------------------<-",
|
||||
|
||||
"create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder",
|
||||
"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.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"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",
|
||||
|
@ -1846,10 +1850,12 @@
|
|||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
|
|
@ -67,7 +67,7 @@ public class DeployTool extends PlacementToolBase {
|
|||
.translateBack(origin);
|
||||
|
||||
AABBOutline outline = schematicHandler.getOutline();
|
||||
outline.render(ms, buffer);
|
||||
outline.render(ms, buffer, pt);
|
||||
outline.getParams()
|
||||
.clearTextures();
|
||||
ms.pop();
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.simibubi.create.content.schematics.client.tools;
|
|||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllSpecialTextures;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.outliner.AABBOutline;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
|
@ -74,7 +75,7 @@ public class FlipTool extends PlacementToolBase {
|
|||
.disableNormals()
|
||||
.colored(0xdddddd)
|
||||
.withFaceTextures(tex, tex);
|
||||
outline.render(ms, buffer);
|
||||
outline.render(ms, buffer, AnimationTickHolder.getPartialTicks());
|
||||
|
||||
super.renderOnSchematic(ms, buffer);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.content.schematics.client.tools;
|
|||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.outliner.LineOutline;
|
||||
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
|
@ -35,7 +36,7 @@ public class RotateTool extends PlacementToolBase {
|
|||
.colored(0xdddddd)
|
||||
.lineWidth(1 / 16f);
|
||||
line.set(start, end)
|
||||
.render(ms, buffer);
|
||||
.render(ms, buffer, AnimationTickHolder.getPartialTicks());
|
||||
|
||||
super.renderOnSchematic(ms, buffer);
|
||||
}
|
||||
|
|
|
@ -143,7 +143,7 @@ public abstract class SchematicToolBase implements ISchematicTool {
|
|||
.colored(0x6886c5)
|
||||
.withFaceTexture(AllSpecialTextures.CHECKERED)
|
||||
.lineWidth(1 / 16f);
|
||||
outline.render(ms, buffer);
|
||||
outline.render(ms, buffer, AnimationTickHolder.getPartialTicks());
|
||||
outline.getParams()
|
||||
.clearTextures();
|
||||
ms.pop();
|
||||
|
|
|
@ -139,6 +139,7 @@ public class ClientEvents {
|
|||
@SubscribeEvent
|
||||
public static void onRenderWorld(RenderWorldLastEvent event) {
|
||||
Vec3d cameraPos = Minecraft.getInstance().gameRenderer.getActiveRenderInfo().getProjectedView();
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
|
||||
MatrixStack ms = event.getMatrixStack();
|
||||
ms.push();
|
||||
|
@ -149,9 +150,8 @@ public class ClientEvents {
|
|||
CreateClient.schematicHandler.render(ms, buffer);
|
||||
CreateClient.ghostBlocks.renderAll(ms, buffer);
|
||||
|
||||
CreateClient.outliner.renderOutlines(ms, buffer);
|
||||
CreateClient.outliner.renderOutlines(ms, buffer, pt);
|
||||
// LightVolumeDebugger.render(ms, buffer);
|
||||
// CollisionDebugger.render(ms, buffer);
|
||||
buffer.draw();
|
||||
RenderSystem.enableCull();
|
||||
|
||||
|
|
|
@ -1,114 +0,0 @@
|
|||
package com.simibubi.create.foundation.collision;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllSpecialTextures;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.outliner.AABBOutline;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.RayTraceResult.Type;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class CollisionDebugger {
|
||||
|
||||
public static AxisAlignedBB AABB = new AxisAlignedBB(BlockPos.ZERO.up(10));
|
||||
public static OrientedBB OBB = new OrientedBB(new AxisAlignedBB(BlockPos.ZERO));
|
||||
public static Vec3d motion = Vec3d.ZERO;
|
||||
static ContinuousSeparationManifold seperation;
|
||||
static double angle = 0;
|
||||
static AABBOutline outline;
|
||||
|
||||
public static void onScroll(double delta) {
|
||||
angle += delta;
|
||||
angle = (int) angle;
|
||||
OBB.setRotation(new Matrix3d().asZRotation(AngleHelper.rad(angle)));
|
||||
}
|
||||
|
||||
public static void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
ms.push();
|
||||
outline = new AABBOutline(OBB.getAsAxisAlignedBB());
|
||||
outline.getParams()
|
||||
.withFaceTexture(seperation == null ? AllSpecialTextures.CHECKERED : null)
|
||||
.colored(0xffffff);
|
||||
if (seperation != null)
|
||||
outline.getParams()
|
||||
.lineWidth(1 / 64f)
|
||||
.colored(0xff6544);
|
||||
MatrixStacker.of(ms)
|
||||
.translate(OBB.center);
|
||||
ms.peek()
|
||||
.getModel()
|
||||
.multiply(OBB.rotation.getAsMatrix4f());
|
||||
MatrixStacker.of(ms)
|
||||
.translateBack(OBB.center);
|
||||
outline.render(ms, buffer);
|
||||
ms.pop();
|
||||
|
||||
// ms.push();
|
||||
// if (motion.length() != 0 && (seperation == null || seperation.getTimeOfImpact() != 1)) {
|
||||
// outline.getParams()
|
||||
// .colored(0x6544ff)
|
||||
// .lineWidth(1 / 32f);
|
||||
// MatrixStacker.of(ms)
|
||||
// .translate(seperation != null ? seperation.getAllowedMotion(motion) : motion)
|
||||
// .translate(OBB.center);
|
||||
// ms.peek()
|
||||
// .getModel()
|
||||
// .multiply(OBB.rotation.getAsMatrix4f());
|
||||
// MatrixStacker.of(ms)
|
||||
// .translateBack(OBB.center);
|
||||
// outline.render(ms, buffer);
|
||||
// }
|
||||
// ms.pop();
|
||||
|
||||
ms.push();
|
||||
if (seperation != null) {
|
||||
Vec3d asSeparationVec = seperation.asSeparationVec(.5f);
|
||||
if (asSeparationVec != null) {
|
||||
outline.getParams()
|
||||
.colored(0x65ff44)
|
||||
.lineWidth(1 / 32f);
|
||||
MatrixStacker.of(ms)
|
||||
.translate(asSeparationVec)
|
||||
.translate(OBB.center);
|
||||
ms.peek()
|
||||
.getModel()
|
||||
.multiply(OBB.rotation.getAsMatrix4f());
|
||||
MatrixStacker.of(ms)
|
||||
.translateBack(OBB.center);
|
||||
outline.render(ms, buffer);
|
||||
}
|
||||
}
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
public static void tick() {
|
||||
AABB = new AxisAlignedBB(BlockPos.ZERO.up(60)).offset(.5, 0, .5);
|
||||
motion = Vec3d.ZERO;
|
||||
RayTraceResult mouse = Minecraft.getInstance().objectMouseOver;
|
||||
if (mouse != null && mouse.getType() == Type.BLOCK) {
|
||||
BlockRayTraceResult hit = (BlockRayTraceResult) mouse;
|
||||
OBB.setCenter(hit.getHitVec());
|
||||
seperation = OBB.intersect(AABB, motion);
|
||||
}
|
||||
CreateClient.outliner.showAABB(AABB, AABB)
|
||||
.withFaceTexture(seperation == null ? AllSpecialTextures.CHECKERED : null);
|
||||
}
|
||||
|
||||
static void showDebugLine(Vec3d relativeStart, Vec3d relativeEnd, int color, String id, int offset) {
|
||||
Vec3d center = CollisionDebugger.AABB.getCenter()
|
||||
.add(0, 1 + offset / 16f, 0);
|
||||
CreateClient.outliner.showLine(id + OBBCollider.checkCount, center.add(relativeStart), center.add(relativeEnd))
|
||||
.colored(color)
|
||||
.lineWidth(1 / 32f);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
package com.simibubi.create.foundation.collision;
|
||||
|
||||
import static com.simibubi.create.foundation.collision.CollisionDebugger.showDebugLine;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Math.signum;
|
||||
|
||||
|
@ -60,7 +59,6 @@ public class OBBCollider {
|
|||
if (diff > 0)
|
||||
return true;
|
||||
|
||||
// boolean isBestSeperation = distance != 0 && -(diff) <= abs(bestSeparation.getValue());
|
||||
boolean isBestSeperation = checkCount == 2; // Debug specific separations
|
||||
|
||||
if (isBestSeperation) {
|
||||
|
@ -68,17 +66,6 @@ public class OBBCollider {
|
|||
double value = sTL * abs(diff);
|
||||
mf.axis = axis.normalize();
|
||||
mf.separation = value;
|
||||
|
||||
// Visualize values
|
||||
if (CollisionDebugger.AABB != null) {
|
||||
Vec3d normalizedAxis = axis.normalize();
|
||||
showDebugLine(Vec3d.ZERO, normalizedAxis.scale(TL), 0xbb00bb, "tl", 4);
|
||||
showDebugLine(Vec3d.ZERO, normalizedAxis.scale(sTL * rA), 0xff4444, "ra", 3);
|
||||
showDebugLine(normalizedAxis.scale(sTL * (distance - rB)), normalizedAxis.scale(TL), 0x4444ff, "rb", 2);
|
||||
showDebugLine(normalizedAxis.scale(sTL * (distance - rB)),
|
||||
normalizedAxis.scale(sTL * (distance - rB) + value), 0xff9966, "separation", 1);
|
||||
System.out.println("TL:" + TL + ", rA: " + rA + ", rB: " + rB);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -52,7 +52,9 @@ public class PonderLocalization {
|
|||
JsonObject object = new JsonObject();
|
||||
|
||||
addGeneral(object, PonderTooltipHandler.HOLD_TO_PONDER, "Hold [%1$s] to Ponder");
|
||||
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]");
|
||||
|
||||
shared.forEach((k, v) -> object.addProperty(Create.ID + "." + langKeyForShared(k), v));
|
||||
specific.forEach((rl, map) -> {
|
||||
|
|
|
@ -12,7 +12,11 @@ import java.util.function.Consumer;
|
|||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.lang3.mutable.MutableDouble;
|
||||
import org.apache.commons.lang3.mutable.MutableObject;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
||||
import com.simibubi.create.foundation.ponder.elements.PonderOverlayElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.PonderSceneElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
|
@ -21,20 +25,27 @@ import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
|||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
import com.simibubi.create.foundation.utility.outliner.Outliner;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
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.entity.Entity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
import net.minecraft.util.math.Vec2f;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
|
||||
public class PonderScene {
|
||||
|
||||
|
@ -84,6 +95,59 @@ public class PonderScene {
|
|||
setPointOfInterest(new Vec3d(0, 4, 0));
|
||||
}
|
||||
|
||||
public void deselect() {
|
||||
forEach(WorldSectionElement.class, WorldSectionElement::resetSelectedBlock);
|
||||
}
|
||||
|
||||
public Pair<ItemStack, BlockPos> rayTraceScene(Vec3d from, Vec3d to) {
|
||||
MutableObject<Pair<WorldSectionElement, BlockPos>> nearestHit = new MutableObject<>();
|
||||
MutableDouble bestDistance = new MutableDouble(0);
|
||||
|
||||
forEach(WorldSectionElement.class, wse -> {
|
||||
wse.resetSelectedBlock();
|
||||
if (!wse.isVisible())
|
||||
return;
|
||||
Pair<Vec3d, BlockPos> rayTrace = wse.rayTrace(world, from, to);
|
||||
if (rayTrace == null)
|
||||
return;
|
||||
double distanceTo = rayTrace.getFirst()
|
||||
.distanceTo(from);
|
||||
if (nearestHit.getValue() != null && distanceTo >= bestDistance.getValue())
|
||||
return;
|
||||
|
||||
nearestHit.setValue(Pair.of(wse, rayTrace.getSecond()));
|
||||
bestDistance.setValue(distanceTo);
|
||||
});
|
||||
|
||||
if (nearestHit.getValue() == null)
|
||||
return Pair.of(ItemStack.EMPTY, null);
|
||||
|
||||
BlockPos selectedPos = nearestHit.getValue()
|
||||
.getSecond();
|
||||
|
||||
BlockPos origin = new BlockPos(offsetX, 0, offsetZ);
|
||||
if (!world.getBounds()
|
||||
.isVecInside(selectedPos))
|
||||
return Pair.of(ItemStack.EMPTY, null);
|
||||
if (new MutableBoundingBox(origin, origin.add(new Vec3i(size - 1, 0, size - 1))).isVecInside(selectedPos)) {
|
||||
if (PonderIndex.EDITOR_MODE)
|
||||
nearestHit.getValue()
|
||||
.getFirst()
|
||||
.selectBlock(selectedPos);
|
||||
return Pair.of(ItemStack.EMPTY, selectedPos);
|
||||
}
|
||||
|
||||
nearestHit.getValue()
|
||||
.getFirst()
|
||||
.selectBlock(selectedPos);
|
||||
BlockState blockState = world.getBlockState(selectedPos);
|
||||
ItemStack pickBlock = blockState.getPickBlock(
|
||||
new BlockRayTraceResult(VecHelper.getCenterOf(selectedPos), Direction.UP, selectedPos, true), world,
|
||||
selectedPos, Minecraft.getInstance().player);
|
||||
|
||||
return Pair.of(pickBlock, selectedPos);
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return getString("title");
|
||||
}
|
||||
|
@ -132,19 +196,16 @@ public class PonderScene {
|
|||
activeSchedule.add(new HideAllInstruction(10, null));
|
||||
}
|
||||
|
||||
public void renderScene(SuperRenderTypeBuffer buffer, MatrixStack ms) {
|
||||
float pt = Minecraft.getInstance()
|
||||
.getRenderPartialTicks();
|
||||
|
||||
public void renderScene(SuperRenderTypeBuffer buffer, MatrixStack ms, float pt) {
|
||||
ms.push();
|
||||
forEachVisible(PonderSceneElement.class, e -> e.renderFirst(world, buffer, ms));
|
||||
forEachVisible(PonderSceneElement.class, e -> e.renderFirst(world, buffer, ms, pt));
|
||||
for (RenderType type : RenderType.getBlockLayers())
|
||||
forEachVisible(PonderSceneElement.class, e -> e.renderLayer(world, buffer, type, ms));
|
||||
forEachVisible(PonderSceneElement.class, e -> e.renderLast(world, buffer, ms));
|
||||
forEachVisible(PonderSceneElement.class, e -> e.renderLayer(world, buffer, type, ms, pt));
|
||||
forEachVisible(PonderSceneElement.class, e -> e.renderLast(world, buffer, ms, pt));
|
||||
info.set(transform.xRotation.getValue(pt), transform.yRotation.getValue(pt));
|
||||
world.renderEntities(ms, buffer, info);
|
||||
world.renderParticles(ms, buffer, info);
|
||||
outliner.renderOutlines(ms, buffer);
|
||||
world.renderEntities(ms, buffer, info, pt);
|
||||
world.renderParticles(ms, buffer, info, pt);
|
||||
outliner.renderOutlines(ms, buffer, pt);
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
|
@ -295,8 +356,10 @@ public class PonderScene {
|
|||
}
|
||||
|
||||
public MatrixStack apply(MatrixStack ms) {
|
||||
float pt = Minecraft.getInstance()
|
||||
.getRenderPartialTicks();
|
||||
return apply(ms, AnimationTickHolder.getPartialTicks());
|
||||
}
|
||||
|
||||
public MatrixStack apply(MatrixStack ms, float pt) {
|
||||
ms.translate(width / 2, height / 2, 200);
|
||||
|
||||
MatrixStacker.of(ms)
|
||||
|
@ -316,11 +379,21 @@ public class PonderScene {
|
|||
return ms;
|
||||
}
|
||||
|
||||
public Vec3d screenToScene(float x, float y, int depth) {
|
||||
public Vec3d screenToScene(double x, double y, int depth) {
|
||||
refreshMatrix();
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
Vec3d vec = new Vec3d(x, y, depth);
|
||||
|
||||
// wut
|
||||
vec = vec.subtract(width / 2, height / 2, 200);
|
||||
vec = VecHelper.rotate(vec, 35, Axis.X);
|
||||
vec = VecHelper.rotate(vec, -55, Axis.Y);
|
||||
vec = vec.subtract(offset, 0, 0);
|
||||
vec = VecHelper.rotate(vec, 55, Axis.Y);
|
||||
vec = VecHelper.rotate(vec, -35, Axis.X);
|
||||
vec = VecHelper.rotate(vec, -xRotation.getValue(pt), Axis.X);
|
||||
vec = VecHelper.rotate(vec, -yRotation.getValue(pt), Axis.Y);
|
||||
vec = vec.mul(1f / 30, 1f / -30, 1f / 30);
|
||||
vec = vec.subtract((size + offsetX) / -2f, -1f, (size + offsetZ) / -2f);
|
||||
|
||||
return vec;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||
|
||||
import com.google.common.base.Strings;
|
||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||
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;
|
||||
|
@ -25,29 +26,41 @@ public class PonderTooltipHandler {
|
|||
|
||||
static LerpedFloat holdWProgress = LerpedFloat.linear()
|
||||
.startWithValue(0);
|
||||
static ItemStack lastHoveredStack = null;
|
||||
static ItemStack lastHoveredStack = ItemStack.EMPTY;
|
||||
static boolean subject = false;
|
||||
|
||||
public static final String HOLD_TO_PONDER = PonderLocalization.LANG_PREFIX + "hold_to_ponder";
|
||||
public static final String SUBJECT = PonderLocalization.LANG_PREFIX + "subject";
|
||||
|
||||
public static void tick() {
|
||||
Minecraft instance = Minecraft.getInstance();
|
||||
Screen currentScreen = instance.currentScreen;
|
||||
if (!(currentScreen instanceof ContainerScreen))
|
||||
return;
|
||||
ContainerScreen<?> cs = (ContainerScreen<?>) currentScreen;
|
||||
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
ItemStack prevStack = lastHoveredStack;
|
||||
lastHoveredStack = null;
|
||||
lastHoveredStack = ItemStack.EMPTY;
|
||||
subject = false;
|
||||
|
||||
if (currentScreen instanceof ContainerScreen) {
|
||||
ContainerScreen<?> cs = (ContainerScreen<?>) currentScreen;
|
||||
Slot slotUnderMouse = cs.getSlotUnderMouse();
|
||||
if (slotUnderMouse == null || !slotUnderMouse.getHasStack())
|
||||
return;
|
||||
stack = slotUnderMouse.getStack();
|
||||
} else if (currentScreen instanceof PonderUI) {
|
||||
PonderUI ponderUI = (PonderUI) currentScreen;
|
||||
stack = ponderUI.getHoveredTooltipItem();
|
||||
if (stack.isItemEqual(ponderUI.getSubject()))
|
||||
subject = true;
|
||||
} else
|
||||
return;
|
||||
|
||||
ItemStack stack = slotUnderMouse.getStack();
|
||||
|
||||
if (stack.isEmpty())
|
||||
return;
|
||||
if (!PonderRegistry.all.containsKey(stack.getItem()
|
||||
.getRegistryName()))
|
||||
return;
|
||||
|
||||
if (prevStack != stack)
|
||||
if (prevStack.isEmpty() || !prevStack.isItemEqual(stack))
|
||||
holdWProgress.startWithValue(0);
|
||||
|
||||
float value = holdWProgress.getValue();
|
||||
|
@ -56,10 +69,13 @@ public class PonderTooltipHandler {
|
|||
long window = instance.getWindow()
|
||||
.getHandle();
|
||||
|
||||
if (InputMappings.isKeyDown(window, keyCode)) {
|
||||
if (value >= 1)
|
||||
if (!subject && InputMappings.isKeyDown(window, keyCode)) {
|
||||
if (value >= 1) {
|
||||
ScreenOpener.open(new PonderUI(PonderRegistry.compile(stack.getItem()
|
||||
.getRegistryName())));
|
||||
holdWProgress.startWithValue(0);
|
||||
return;
|
||||
}
|
||||
holdWProgress.setValue(Math.min(1, value + Math.max(.25f, value) * .25f));
|
||||
} else
|
||||
holdWProgress.setValue(Math.max(0, value - .05f));
|
||||
|
@ -68,10 +84,14 @@ public class PonderTooltipHandler {
|
|||
}
|
||||
|
||||
public static void addToTooltip(List<ITextComponent> toolTip, ItemStack stack) {
|
||||
float renderPartialTicks = AnimationTickHolder.getPartialTicks();
|
||||
if (lastHoveredStack != stack)
|
||||
return;
|
||||
float renderPartialTicks = Minecraft.getInstance()
|
||||
.getRenderPartialTicks();
|
||||
if (subject) {
|
||||
toolTip.set(1, Lang.createTranslationTextComponent(SUBJECT)
|
||||
.applyTextStyle(TextFormatting.GREEN));
|
||||
return;
|
||||
}
|
||||
toolTip.set(1, makeProgressBar(Math.min(1, holdWProgress.getValue(renderPartialTicks) * 8 / 7f)));
|
||||
}
|
||||
|
||||
|
|
|
@ -9,41 +9,58 @@ 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.PonderScene.SceneTransform;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
||||
import com.simibubi.create.foundation.ponder.ui.PonderButton;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
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;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraftforge.fml.client.gui.GuiUtils;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
public class PonderUI extends AbstractSimiScreen {
|
||||
|
||||
public static final String PONDERING = PonderLocalization.LANG_PREFIX + "pondering";
|
||||
public static final String IDENTIFY_MODE = PonderLocalization.LANG_PREFIX + "identify_mode";
|
||||
|
||||
private List<PonderScene> scenes;
|
||||
private LerpedFloat fadeIn;
|
||||
private LerpedFloat sceneProgress;
|
||||
ItemStack stack;
|
||||
|
||||
private boolean identifyMode;
|
||||
private ItemStack hoveredTooltipItem;
|
||||
private BlockPos hoveredBlockPos;
|
||||
|
||||
private ClipboardHelper clipboardHelper;
|
||||
private BlockPos copiedBlockPos;
|
||||
|
||||
private LerpedFloat lazyIndex;
|
||||
private int index = 0;
|
||||
|
||||
private PonderButton left, right, icon, refresh, scan;
|
||||
private PonderButton left, right, icon, scan;
|
||||
|
||||
public PonderUI(List<PonderScene> scenes) {
|
||||
this.scenes = scenes;
|
||||
|
@ -54,6 +71,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
fadeIn = LerpedFloat.linear()
|
||||
.startWithValue(0)
|
||||
.chase(1, .1f, Chaser.EXP);
|
||||
clipboardHelper = new ClipboardHelper();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -76,7 +94,12 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
int spacing = 8;
|
||||
int bX = (width - 20) / 2 - (70 + 2 * spacing);
|
||||
|
||||
widgets.add(scan = new PonderButton(bX, bY, () -> identifyMode = !identifyMode).showing(AllIcons.I_MTD_SCAN)
|
||||
widgets.add(scan = new PonderButton(bX, bY, () -> {
|
||||
identifyMode = !identifyMode;
|
||||
if (!identifyMode)
|
||||
scenes.get(index)
|
||||
.deselect();
|
||||
}).showing(AllIcons.I_MTD_SCAN)
|
||||
.shortcut(bindings.keyBindDrop)
|
||||
.fade(0, -1));
|
||||
|
||||
|
@ -96,7 +119,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
.fade(0, -1));
|
||||
|
||||
bX += 50 + spacing;
|
||||
widgets.add(refresh = new PonderButton(bX, bY, this::replay).showing(AllIcons.I_MTD_REPLAY)
|
||||
widgets.add(new PonderButton(bX, bY, this::replay).showing(AllIcons.I_MTD_REPLAY)
|
||||
.shortcut(bindings.keyBindBack)
|
||||
.fade(0, -1));
|
||||
|
||||
|
@ -105,19 +128,40 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
@Override
|
||||
public void tick() {
|
||||
PonderScene activeScene = scenes.get(index);
|
||||
if (!identifyMode)
|
||||
activeScene.tick();
|
||||
sceneProgress.chase(activeScene.getSceneProgress(), .5f, Chaser.EXP);
|
||||
|
||||
lazyIndex.tickChaser();
|
||||
fadeIn.tickChaser();
|
||||
sceneProgress.tickChaser();
|
||||
|
||||
if (!identifyMode) {
|
||||
float lazyIndexValue = lazyIndex.getValue();
|
||||
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
||||
scenes.get(lazyIndexValue < index ? index - 1 : index + 1)
|
||||
.tick();
|
||||
}
|
||||
|
||||
updateIdentifiedItem(activeScene);
|
||||
}
|
||||
|
||||
public void updateIdentifiedItem(PonderScene activeScene) {
|
||||
hoveredTooltipItem = ItemStack.EMPTY;
|
||||
hoveredBlockPos = null;
|
||||
if (!identifyMode)
|
||||
return;
|
||||
|
||||
MainWindow w = minecraft.getWindow();
|
||||
double mouseX = minecraft.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth();
|
||||
double mouseY = minecraft.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight();
|
||||
SceneTransform t = activeScene.getTransform();
|
||||
Vec3d vec1 = t.screenToScene(mouseX, mouseY, 1000);
|
||||
Vec3d vec2 = t.screenToScene(mouseX, mouseY, -100);
|
||||
Pair<ItemStack, BlockPos> pair = activeScene.rayTraceScene(vec1, vec2);
|
||||
hoveredTooltipItem = pair.getFirst();
|
||||
hoveredBlockPos = pair.getSecond();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
|
||||
if (scroll(delta > 0))
|
||||
|
@ -126,6 +170,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
}
|
||||
|
||||
protected void replay() {
|
||||
identifyMode = false;
|
||||
scenes.get(index)
|
||||
.begin();
|
||||
}
|
||||
|
@ -140,6 +185,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
scenes.get(index)
|
||||
.begin();
|
||||
lazyIndex.chase(index, 1 / 4f, Chaser.EXP);
|
||||
identifyMode = false;
|
||||
return true;
|
||||
} else
|
||||
index = prevIndex;
|
||||
|
@ -149,8 +195,8 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
@Override
|
||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||
RenderSystem.enableBlend();
|
||||
renderVisibleScenes(mouseX, mouseY, partialTicks);
|
||||
renderWidgets(mouseX, mouseY, partialTicks);
|
||||
renderVisibleScenes(mouseX, mouseY, identifyMode ? 0 : partialTicks);
|
||||
renderWidgets(mouseX, mouseY, identifyMode ? 0 : partialTicks);
|
||||
}
|
||||
|
||||
protected void renderVisibleScenes(int mouseX, int mouseY, float partialTicks) {
|
||||
|
@ -164,7 +210,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance();
|
||||
PonderScene story = scenes.get(i);
|
||||
MatrixStack ms = new MatrixStack();
|
||||
double value = lazyIndex.getValue(partialTicks);
|
||||
double value = lazyIndex.getValue(AnimationTickHolder.getPartialTicks());
|
||||
double diff = i - value;
|
||||
double slide = MathHelper.lerp(diff * diff, 200, 600) * diff;
|
||||
|
||||
|
@ -174,8 +220,8 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
|
||||
ms.push();
|
||||
story.transform.updateScreenParams(width, height, slide);
|
||||
story.transform.apply(ms);
|
||||
story.renderScene(buffer, ms);
|
||||
story.transform.apply(ms, partialTicks);
|
||||
story.renderScene(buffer, ms, partialTicks);
|
||||
buffer.draw();
|
||||
|
||||
// coords for debug
|
||||
|
@ -238,6 +284,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
float fade = fadeIn.getValue(partialTicks);
|
||||
float lazyIndexValue = lazyIndex.getValue(partialTicks);
|
||||
float indexDiff = Math.abs(lazyIndexValue - index);
|
||||
PonderScene activeScene = scenes.get(index);
|
||||
int textColor = 0xeeeeee;
|
||||
|
||||
{
|
||||
|
@ -250,16 +297,35 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
y += 12;
|
||||
x += 0;
|
||||
RenderSystem.translated(0, 3 * (indexDiff), 0);
|
||||
font.drawSplitString(scenes.get(index)
|
||||
.getTitle(), x, y, left.x - x, ColorHelper.applyAlpha(textColor, 1 - indexDiff));
|
||||
font.drawSplitString(activeScene.getTitle(), x, y, left.x - x,
|
||||
ColorHelper.applyAlpha(textColor, 1 - indexDiff));
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
if (identifyMode) {
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(mouseX, mouseY, 800);
|
||||
drawString(font, "?", 6, 2, 0xddffffff);
|
||||
RenderSystem.translated(mouseX, mouseY, 100);
|
||||
if (hoveredTooltipItem.isEmpty()) {
|
||||
String tooltip = Lang
|
||||
.createTranslationTextComponent(IDENTIFY_MODE,
|
||||
new StringTextComponent(minecraft.gameSettings.keyBindDrop.getKeyBinding()
|
||||
.getLocalizedName()).applyTextStyle(TextFormatting.WHITE))
|
||||
.applyTextStyle(TextFormatting.GRAY)
|
||||
.getFormattedText();
|
||||
renderTooltip(font.listFormattedStringToWidth(tooltip, width / 3), 0, 0);
|
||||
} else
|
||||
renderTooltip(hoveredTooltipItem, 0, 0);
|
||||
if (hoveredBlockPos != null && PonderIndex.EDITOR_MODE) {
|
||||
RenderSystem.translated(0, -15, 0);
|
||||
boolean copied = copiedBlockPos != null && hoveredBlockPos.equals(copiedBlockPos);
|
||||
String coords = new StringTextComponent(
|
||||
hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + hoveredBlockPos.getZ())
|
||||
.applyTextStyles(copied ? TextFormatting.GREEN : TextFormatting.GOLD)
|
||||
.getFormattedText();
|
||||
renderTooltip(coords, 0, 0);
|
||||
}
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
scan.flash();
|
||||
} else {
|
||||
scan.dim();
|
||||
|
@ -288,8 +354,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
if (index == scenes.size() - 1 || index == scenes.size() - 2 && lazyIndexValue > index)
|
||||
right.fade(scenes.size() - lazyIndexValue - 1);
|
||||
|
||||
boolean finished = scenes.get(index)
|
||||
.isFinished();
|
||||
boolean finished = activeScene.isFinished();
|
||||
if (finished)
|
||||
right.flash();
|
||||
else
|
||||
|
@ -325,6 +390,8 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
}
|
||||
|
||||
private void renderOverlay(int i, float partialTicks) {
|
||||
if (identifyMode)
|
||||
return;
|
||||
RenderSystem.pushMatrix();
|
||||
PonderScene story = scenes.get(i);
|
||||
MatrixStack ms = new MatrixStack();
|
||||
|
@ -351,6 +418,15 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
if (handled.booleanValue())
|
||||
return true;
|
||||
|
||||
if (identifyMode && hoveredBlockPos != null && PonderIndex.EDITOR_MODE) {
|
||||
clipboardHelper.setClipboardString(minecraft.getWindow()
|
||||
.getHandle(),
|
||||
"BlockPos copied = util.grid.at(" + hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", "
|
||||
+ hoveredBlockPos.getZ() + ");");
|
||||
copiedBlockPos = hoveredBlockPos;
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.mouseClicked(x, y, button);
|
||||
}
|
||||
|
||||
|
@ -383,6 +459,9 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
|
||||
if (code == qCode) {
|
||||
identifyMode = !identifyMode;
|
||||
if (!identifyMode)
|
||||
scenes.get(index)
|
||||
.deselect();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -474,17 +553,24 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
|
||||
public static void renderBox(int x, int y, int w, int h, int backgroundColor, int borderColorStart,
|
||||
int borderColorEnd) {
|
||||
int zLevel = 100;
|
||||
GuiUtils.drawGradientRect(zLevel, x - 3, y - 4, x + w + 3, y - 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(zLevel, x - 3, y + h + 3, x + w + 3, y + h + 4, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(zLevel, x - 3, y - 3, x + w + 3, y + h + 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(zLevel, x - 4, y - 3, x - 3, y + h + 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(zLevel, x + w + 3, y - 3, x + w + 4, y + h + 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(zLevel, x - 3, y - 3 + 1, x - 3 + 1, y + h + 3 - 1, borderColorStart, borderColorEnd);
|
||||
GuiUtils.drawGradientRect(zLevel, x + w + 2, y - 3 + 1, x + w + 3, y + h + 3 - 1, borderColorStart,
|
||||
borderColorEnd);
|
||||
GuiUtils.drawGradientRect(zLevel, x - 3, y - 3, x + w + 3, y - 3 + 1, borderColorStart, borderColorStart);
|
||||
GuiUtils.drawGradientRect(zLevel, x - 3, y + h + 2, x + w + 3, y + h + 3, borderColorEnd, borderColorEnd);
|
||||
int z = 100;
|
||||
GuiUtils.drawGradientRect(z, x - 3, y - 4, x + w + 3, y - 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(z, x - 3, y + h + 3, x + w + 3, y + h + 4, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(z, x - 3, y - 3, x + w + 3, y + h + 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(z, x - 4, y - 3, x - 3, y + h + 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(z, x + w + 3, y - 3, x + w + 4, y + h + 3, backgroundColor, backgroundColor);
|
||||
GuiUtils.drawGradientRect(z, x - 3, y - 3 + 1, x - 3 + 1, y + h + 3 - 1, borderColorStart, borderColorEnd);
|
||||
GuiUtils.drawGradientRect(z, x + w + 2, y - 3 + 1, x + w + 3, y + h + 3 - 1, borderColorStart, borderColorEnd);
|
||||
GuiUtils.drawGradientRect(z, x - 3, y - 3, x + w + 3, y - 3 + 1, borderColorStart, borderColorStart);
|
||||
GuiUtils.drawGradientRect(z, x - 3, y + h + 2, x + w + 3, y + h + 3, borderColorEnd, borderColorEnd);
|
||||
}
|
||||
|
||||
public ItemStack getHoveredTooltipItem() {
|
||||
return hoveredTooltipItem;
|
||||
}
|
||||
|
||||
public ItemStack getSubject() {
|
||||
return stack;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
|||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||
import com.simibubi.create.content.schematics.SchematicWorld;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
|
@ -122,9 +121,8 @@ public class PonderWorld extends SchematicWorld {
|
|||
return this;
|
||||
}
|
||||
|
||||
public void renderEntities(MatrixStack ms, SuperRenderTypeBuffer buffer, ActiveRenderInfo ari) {
|
||||
public void renderEntities(MatrixStack ms, SuperRenderTypeBuffer buffer, ActiveRenderInfo ari, float pt) {
|
||||
Vec3d vec3d = ari.getProjectedView();
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
double d0 = vec3d.getX();
|
||||
double d1 = vec3d.getY();
|
||||
double d2 = vec3d.getZ();
|
||||
|
@ -157,8 +155,8 @@ public class PonderWorld extends SchematicWorld {
|
|||
renderManager.render(entity, d0 - x, d1 - y, d2 - z, f, pt, ms, buffer, light);
|
||||
}
|
||||
|
||||
public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo ari) {
|
||||
particles.renderParticles(ms, buffer, ari);
|
||||
public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo ari, float pt) {
|
||||
particles.renderParticles(ms, buffer, ari, pt);
|
||||
}
|
||||
|
||||
public void tick() {
|
||||
|
|
|
@ -59,10 +59,9 @@ public class PonderWorldParticles {
|
|||
}
|
||||
}
|
||||
|
||||
public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo p_228345_4_) {
|
||||
public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo p_228345_4_, float p_228345_5_) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
LightTexture p_228345_3_ = mc.gameRenderer.getLightmapTextureManager();
|
||||
float p_228345_5_ = mc.getRenderPartialTicks();
|
||||
|
||||
p_228345_3_.enableLightmap();
|
||||
Runnable enable = () -> {
|
||||
|
|
|
@ -5,7 +5,6 @@ import com.simibubi.create.foundation.ponder.PonderWorld;
|
|||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
@ -34,44 +33,44 @@ public abstract class AnimatedSceneElement extends PonderSceneElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
public final void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) {
|
||||
public final void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) {
|
||||
ms.push();
|
||||
float currentFade = applyFade(ms);
|
||||
renderFirst(world, buffer, ms, currentFade);
|
||||
float currentFade = applyFade(ms, pt);
|
||||
renderFirst(world, buffer, ms, currentFade, pt);
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms) {
|
||||
public final void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms,
|
||||
float pt) {
|
||||
ms.push();
|
||||
float currentFade = applyFade(ms);
|
||||
renderLayer(world, buffer, type, ms, currentFade);
|
||||
float currentFade = applyFade(ms, pt);
|
||||
renderLayer(world, buffer, type, ms, currentFade, pt);
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) {
|
||||
public final void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) {
|
||||
ms.push();
|
||||
float currentFade = applyFade(ms);
|
||||
renderLast(world, buffer, ms, currentFade);
|
||||
float currentFade = applyFade(ms, pt);
|
||||
renderLast(world, buffer, ms, currentFade, pt);
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
protected float applyFade(MatrixStack ms) {
|
||||
float currentFade = fade.getValue(Minecraft.getInstance()
|
||||
.getRenderPartialTicks());
|
||||
protected float applyFade(MatrixStack ms, float pt) {
|
||||
float currentFade = fade.getValue(pt);
|
||||
if (fadeVec != null)
|
||||
MatrixStacker.of(ms)
|
||||
.translate(fadeVec.scale(-1 + currentFade));
|
||||
return currentFade;
|
||||
}
|
||||
|
||||
protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms,
|
||||
float fade) {}
|
||||
protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float fade,
|
||||
float pt) {}
|
||||
|
||||
protected void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {}
|
||||
protected void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {}
|
||||
|
||||
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {}
|
||||
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {}
|
||||
|
||||
protected int lightCoordsFromFade(float fade) {
|
||||
int light = 0xF000F0;
|
||||
|
|
|
@ -62,11 +62,9 @@ public class ParrotElement extends AnimatedSceneElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {
|
||||
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {
|
||||
EntityRendererManager entityrenderermanager = Minecraft.getInstance()
|
||||
.getRenderManager();
|
||||
float pt = Minecraft.getInstance()
|
||||
.getRenderPartialTicks();
|
||||
|
||||
if (entity == null)
|
||||
pose.create(world);
|
||||
|
|
|
@ -9,10 +9,10 @@ import net.minecraft.client.renderer.RenderType;
|
|||
|
||||
public abstract class PonderSceneElement extends PonderElement {
|
||||
|
||||
public abstract void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms);
|
||||
public abstract void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt);
|
||||
|
||||
public abstract void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms);
|
||||
public abstract void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float pt);
|
||||
|
||||
public abstract void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms);
|
||||
public abstract void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt);
|
||||
|
||||
}
|
||||
|
|
|
@ -31,12 +31,12 @@ public abstract class TrackedElement<T> extends PonderSceneElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) {}
|
||||
public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) {}
|
||||
|
||||
@Override
|
||||
public void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms) {}
|
||||
public void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float pt) {}
|
||||
|
||||
@Override
|
||||
public void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) {}
|
||||
public void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) {}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,10 +4,10 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.PonderWorld;
|
||||
|
@ -16,8 +16,10 @@ import com.simibubi.create.foundation.render.Compartment;
|
|||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBufferCache;
|
||||
import com.simibubi.create.foundation.render.TileEntityRenderHelper;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockRenderType;
|
||||
|
@ -30,13 +32,22 @@ import net.minecraft.client.renderer.BufferBuilder;
|
|||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.RenderTypeLookup;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.fluid.IFluidState;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.RayTraceContext;
|
||||
import net.minecraft.util.math.RayTraceContext.BlockMode;
|
||||
import net.minecraft.util.math.RayTraceContext.FluidMode;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||
|
||||
|
@ -54,6 +65,8 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
Vec3d animatedRotation = Vec3d.ZERO;
|
||||
Vec3d centerOfRotation = Vec3d.ZERO;
|
||||
|
||||
BlockPos selectedBlock;
|
||||
|
||||
public WorldSectionElement() {}
|
||||
|
||||
public WorldSectionElement(Selection section) {
|
||||
|
@ -91,6 +104,15 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
public void reset(PonderScene scene) {
|
||||
super.reset(scene);
|
||||
resetAnimatedTransform();
|
||||
resetSelectedBlock();
|
||||
}
|
||||
|
||||
public void selectBlock(BlockPos pos) {
|
||||
selectedBlock = pos;
|
||||
}
|
||||
|
||||
public void resetSelectedBlock() {
|
||||
selectedBlock = null;
|
||||
}
|
||||
|
||||
public void resetAnimatedTransform() {
|
||||
|
@ -133,6 +155,57 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
return super.isVisible() && !isEmpty();
|
||||
}
|
||||
|
||||
class WorldSectionRayTraceResult {
|
||||
Vec3d actualHitVec;
|
||||
BlockPos worldPos;
|
||||
}
|
||||
|
||||
public Pair<Vec3d, BlockPos> rayTrace(PonderWorld world, Vec3d source, Vec3d target) {
|
||||
world.setMask(this.section);
|
||||
Vec3d transformedTarget = reverseTransformVec(target);
|
||||
BlockRayTraceResult rayTraceBlocks = world.rayTraceBlocks(new RayTraceContext(reverseTransformVec(source),
|
||||
transformedTarget, BlockMode.OUTLINE, FluidMode.NONE, null));
|
||||
world.clearMask();
|
||||
|
||||
if (rayTraceBlocks == null)
|
||||
return null;
|
||||
if (rayTraceBlocks.getHitVec() == null)
|
||||
return null;
|
||||
|
||||
double t = rayTraceBlocks.getHitVec()
|
||||
.subtract(transformedTarget)
|
||||
.lengthSquared()
|
||||
/ source.subtract(target)
|
||||
.lengthSquared();
|
||||
Vec3d actualHit = VecHelper.lerp((float) t, target, source);
|
||||
return Pair.of(actualHit, rayTraceBlocks.getPos());
|
||||
}
|
||||
|
||||
private Vec3d reverseTransformVec(Vec3d in) {
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
in = in.subtract(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
|
||||
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) {
|
||||
in = in.subtract(centerOfRotation);
|
||||
in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x), Axis.X);
|
||||
in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z), Axis.Z);
|
||||
in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y), Axis.Y);
|
||||
in = in.add(centerOfRotation);
|
||||
}
|
||||
return in;
|
||||
}
|
||||
|
||||
public void transformMS(MatrixStack ms, float pt) {
|
||||
MatrixStacker.of(ms)
|
||||
.translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
|
||||
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO))
|
||||
MatrixStacker.of(ms)
|
||||
.translate(centerOfRotation)
|
||||
.rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x))
|
||||
.rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z))
|
||||
.rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y))
|
||||
.translateBack(centerOfRotation);
|
||||
}
|
||||
|
||||
public void tick(PonderScene scene) {
|
||||
prevAnimatedOffset = animatedOffset;
|
||||
prevAnimatedRotation = animatedRotation;
|
||||
|
@ -147,46 +220,22 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms,
|
||||
float fade) {
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
|
||||
MatrixStacker.of(ms)
|
||||
.translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
|
||||
|
||||
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO))
|
||||
MatrixStacker.of(ms)
|
||||
.translate(centerOfRotation)
|
||||
.rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x))
|
||||
.rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z))
|
||||
.rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y))
|
||||
.translateBack(centerOfRotation);
|
||||
|
||||
protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float fade,
|
||||
float pt) {
|
||||
transformMS(ms, pt);
|
||||
renderStructure(world, ms, buffer, type, fade);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {
|
||||
public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {
|
||||
int light = -1;
|
||||
if (fade != 1)
|
||||
light = (int) (MathHelper.lerp(fade, 5, 14));
|
||||
if (redraw)
|
||||
renderedTileEntities = null;
|
||||
|
||||
//TODO: extract method
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
MatrixStacker.of(ms)
|
||||
.translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
|
||||
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO))
|
||||
MatrixStacker.of(ms)
|
||||
.translate(centerOfRotation)
|
||||
.rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x))
|
||||
.rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z))
|
||||
.rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y))
|
||||
.translateBack(centerOfRotation);
|
||||
|
||||
transformMS(ms, pt);
|
||||
world.pushFakeLight(light);
|
||||
renderTileEntities(world, ms, buffer);
|
||||
renderTileEntities(world, ms, buffer, pt);
|
||||
world.popLight();
|
||||
}
|
||||
|
||||
|
@ -210,11 +259,30 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {
|
||||
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {
|
||||
redraw = false;
|
||||
if (selectedBlock == null)
|
||||
return;
|
||||
BlockState blockState = world.getBlockState(selectedBlock);
|
||||
if (blockState.isAir(world, selectedBlock))
|
||||
return;
|
||||
VoxelShape shape =
|
||||
blockState.getShape(world, selectedBlock, ISelectionContext.forEntity(Minecraft.getInstance().player));
|
||||
if (shape.isEmpty())
|
||||
return;
|
||||
|
||||
ms.push();
|
||||
transformMS(ms, pt);
|
||||
RenderSystem.disableTexture();
|
||||
WorldRenderer.drawBox(ms, buffer.getBuffer(RenderType.getLines()), shape.getBoundingBox()
|
||||
.offset(selectedBlock), 1, 1, 1, 1);
|
||||
if (buffer instanceof SuperRenderTypeBuffer)
|
||||
((SuperRenderTypeBuffer) buffer).draw(RenderType.getLines());
|
||||
RenderSystem.enableTexture();
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
private void renderTileEntities(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer) {
|
||||
private void renderTileEntities(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer, float pt) {
|
||||
if (renderedTileEntities == null) {
|
||||
renderedTileEntities = new ArrayList<>();
|
||||
section.forEach(pos -> {
|
||||
|
@ -224,8 +292,7 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
});
|
||||
} else
|
||||
renderedTileEntities.removeIf(te -> world.getTileEntity(te.getPos()) != te);
|
||||
|
||||
TileEntityRenderHelper.renderTileEntities(world, renderedTileEntities, ms, new MatrixStack(), buffer);
|
||||
TileEntityRenderHelper.renderTileEntities(world, renderedTileEntities, ms, new MatrixStack(), buffer, pt);
|
||||
}
|
||||
|
||||
private SuperByteBuffer buildStructureBuffer(PonderWorld world, RenderType layer) {
|
||||
|
|
|
@ -24,13 +24,23 @@ public class TileEntityRenderHelper {
|
|||
|
||||
public static void renderTileEntities(World world, Iterable<TileEntity> customRenderTEs, MatrixStack ms,
|
||||
MatrixStack localTransform, IRenderTypeBuffer buffer) {
|
||||
|
||||
renderTileEntities(world, null, customRenderTEs, ms, localTransform, buffer);
|
||||
}
|
||||
|
||||
public static void renderTileEntities(World world, PlacementSimulationWorld renderWorld, Iterable<TileEntity> customRenderTEs, MatrixStack ms,
|
||||
MatrixStack localTransform, IRenderTypeBuffer buffer) {
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
public static void renderTileEntities(World world, Iterable<TileEntity> customRenderTEs, MatrixStack ms,
|
||||
MatrixStack localTransform, IRenderTypeBuffer buffer, float pt) {
|
||||
renderTileEntities(world, null, customRenderTEs, ms, localTransform, buffer, pt);
|
||||
}
|
||||
|
||||
public static void renderTileEntities(World world, PlacementSimulationWorld renderWorld,
|
||||
Iterable<TileEntity> customRenderTEs, MatrixStack ms, MatrixStack localTransform, IRenderTypeBuffer buffer) {
|
||||
renderTileEntities(world, renderWorld, customRenderTEs, ms, localTransform, buffer,
|
||||
AnimationTickHolder.getPartialTicks());
|
||||
}
|
||||
|
||||
public static void renderTileEntities(World world, PlacementSimulationWorld renderWorld,
|
||||
Iterable<TileEntity> customRenderTEs, MatrixStack ms, MatrixStack localTransform, IRenderTypeBuffer buffer,
|
||||
float pt) {
|
||||
Matrix4f matrix = localTransform.peek()
|
||||
.getModel();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.ArrayList;
|
|||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.outliner.AABBOutline;
|
||||
|
||||
|
@ -29,6 +30,6 @@ public class LightVolumeDebugger {
|
|||
outline.getParams().colored(pair.getSecond());
|
||||
return outline;
|
||||
})
|
||||
.forEach(outline -> outline.render(ms, buffer));
|
||||
.forEach(outline -> outline.render(ms, buffer, AnimationTickHolder.getPartialTicks()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ public class ValueBox extends ChasingAABBOutline {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
boolean hasTransform = transform != null;
|
||||
if (transform instanceof Sided && params.getHighlightedFace() != null)
|
||||
((Sided) transform).fromSide(params.getHighlightedFace());
|
||||
|
@ -88,7 +88,7 @@ public class ValueBox extends ChasingAABBOutline {
|
|||
.getNormal()
|
||||
.copy();
|
||||
params.colored(isPassive ? passiveColor : highlightColor);
|
||||
super.render(ms, buffer);
|
||||
super.render(ms, buffer, pt);
|
||||
|
||||
float fontScale = hasTransform ? -transform.getFontScale() : -1 / 64f;
|
||||
ms.scale(fontScale, fontScale, fontScale);
|
||||
|
|
|
@ -22,7 +22,7 @@ public class AABBOutline extends Outline {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
renderBB(ms, buffer, bb);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ public class BlockClusterOutline extends Outline {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
for (MergeEntry edge : cluster.visibleEdges) {
|
||||
Vec3d start = new Vec3d(edge.pos);
|
||||
Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, edge.axis);
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.simibubi.create.foundation.utility.outliner;
|
|||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
@ -29,8 +28,8 @@ public class ChasingAABBOutline extends AABBOutline {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
renderBB(ms, buffer, interpolateBBs(prevBB, bb, AnimationTickHolder.getPartialTicks()));
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
renderBB(ms, buffer, interpolateBBs(prevBB, bb, pt));
|
||||
}
|
||||
|
||||
private static AxisAlignedBB interpolateBBs(AxisAlignedBB current, AxisAlignedBB target, float pt) {
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.simibubi.create.foundation.utility.outliner;
|
|||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
@ -19,7 +18,7 @@ public class LineOutline extends Outline {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
renderCuboidLine(ms, buffer, start, end);
|
||||
}
|
||||
|
||||
|
@ -46,8 +45,7 @@ public class LineOutline extends Outline {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
float distanceToTarget = 1 - MathHelper.lerp(pt, prevProgress, progress);
|
||||
Vec3d start = end.add(this.start.subtract(end)
|
||||
.scale(distanceToTarget));
|
||||
|
|
|
@ -31,7 +31,7 @@ public abstract class Outline {
|
|||
params = new OutlineParams();
|
||||
}
|
||||
|
||||
public abstract void render(MatrixStack ms, SuperRenderTypeBuffer buffer);
|
||||
public abstract void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt);
|
||||
|
||||
public void renderCuboidLine(MatrixStack ms, SuperRenderTypeBuffer buffer, Vec3d start, Vec3d end) {
|
||||
Vec3d diff = end.subtract(start);
|
||||
|
|
|
@ -10,7 +10,6 @@ import java.util.Set;
|
|||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.outliner.LineOutline.EndChasingLineOutline;
|
||||
import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams;
|
||||
|
||||
|
@ -146,7 +145,7 @@ public class Outliner {
|
|||
toClear.forEach(outlines::remove);
|
||||
}
|
||||
|
||||
public void renderOutlines(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
public void renderOutlines(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) {
|
||||
outlines.forEach((key, entry) -> {
|
||||
Outline outline = entry.getOutline();
|
||||
outline.params.alpha = 1;
|
||||
|
@ -156,13 +155,13 @@ public class Outliner {
|
|||
float fadeticks = OutlineEntry.fadeTicks;
|
||||
float lastAlpha = prevTicks >= 0 ? 1 : 1 + (prevTicks / fadeticks);
|
||||
float currentAlpha = 1 + (entry.ticksTillRemoval / fadeticks);
|
||||
float alpha = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), lastAlpha, currentAlpha);
|
||||
float alpha = MathHelper.lerp(pt, lastAlpha, currentAlpha);
|
||||
|
||||
outline.params.alpha = alpha * alpha * alpha;
|
||||
if (outline.params.alpha < 1 / 8f)
|
||||
return;
|
||||
}
|
||||
outline.render(ms, buffer);
|
||||
outline.render(ms, buffer, pt);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue