Such convenience
- Organized util and scene builder methods into nested classes - Selection rework, allows for addition and substraction - World sections now merge into a global world section after fading in - Support for managing reference to elements created by previous instructions - more util - Support for animating world sections to roughly simulate a contraption - Less paperwork for making new scenes - Support for outliner chaseAABB - Support for outlining selections
This commit is contained in:
parent
45fc0ca7ee
commit
c4e1f680c9
53 changed files with 1771 additions and 1031 deletions
|
@ -337,7 +337,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
|
|||
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
||||
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
|
||||
4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json
|
||||
6fa36883e76e9e403bb429c8f86b8c0d3bba0cff assets/create/blockstates/radial_chassis.json
|
||||
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
|
||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
||||
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
|
||||
|
@ -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
|
||||
880014dda429e6e2f21e227398d861e4da5e90c6 assets/create/lang/en_us.json
|
||||
c07a94266b5ccde4d9e35467943cc512fe4b5896 assets/create/lang/unfinished/de_de.json
|
||||
e5a0e1b67981159c16eb4563736f85310c77f979 assets/create/lang/unfinished/es_es.json
|
||||
4c492fcb95abe9242c3149ba2b08451ba078c223 assets/create/lang/unfinished/es_mx.json
|
||||
a9ea43cba7ebf87860d165839c98986b8da17f8e assets/create/lang/unfinished/fr_fr.json
|
||||
cc4fe91e45becc807f49b7114d32d44812d0ec42 assets/create/lang/unfinished/it_it.json
|
||||
287f5a8985786f1fe4a44a4ff4907902074aa725 assets/create/lang/unfinished/ja_jp.json
|
||||
2125c67df82987c0bf66efb0b6c59da916362480 assets/create/lang/unfinished/ko_kr.json
|
||||
9cfd8839a607ba5230a9716bcda3fae0fc9fd9fd assets/create/lang/unfinished/nl_nl.json
|
||||
d972eac60bf24d8102c013667b3c76291912edb4 assets/create/lang/unfinished/pt_br.json
|
||||
a552694a6a62274a33cdea255584c3ea3bbc25ef assets/create/lang/unfinished/ru_ru.json
|
||||
d4ea1d09bb09cd8fdbf9a9c996ab66e8db290e92 assets/create/lang/unfinished/zh_cn.json
|
||||
5b453190f3d422b4124b426fe61cc831b89fd2fa assets/create/lang/unfinished/zh_tw.json
|
||||
4bc90775f20e4373d8acfcd68df5a65134e04866 assets/create/lang/en_us.json
|
||||
556b49bc145684816fe4ed3d01b8292b027785f6 assets/create/lang/unfinished/de_de.json
|
||||
0112e46354dc5a3e404e80f18c3e9cf2ce2ac3a7 assets/create/lang/unfinished/es_es.json
|
||||
22d8dbe2f7a2b7bb7b8175e6ea7ffe5461138339 assets/create/lang/unfinished/es_mx.json
|
||||
5aac59946786fe76ff0d5ab8e548c086adb46a7b assets/create/lang/unfinished/fr_fr.json
|
||||
479b811f2a0a687e7a1d14cfbed85af8ed8167b9 assets/create/lang/unfinished/it_it.json
|
||||
22ab034f6f8cadcbc689f27e8697e52bc9fd701f assets/create/lang/unfinished/ja_jp.json
|
||||
c046e6335a67a8685bb7e74cd6b14a5ee9c376db assets/create/lang/unfinished/ko_kr.json
|
||||
96995633b85eaff2ac1b38a8958c6d167150d255 assets/create/lang/unfinished/nl_nl.json
|
||||
8e8159926be6be37f97f6d4cf47deb8c236b83dc assets/create/lang/unfinished/pt_br.json
|
||||
4485be9e7a8a2b0d006464390e664d6d504328b5 assets/create/lang/unfinished/ru_ru.json
|
||||
8bfa521e0220fe71dbeb537a08845522e1ae0899 assets/create/lang/unfinished/zh_cn.json
|
||||
eeaa83dafc8a683b4834cd87a49cb9b3c88e4121 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
|
||||
|
@ -1587,7 +1587,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
|||
9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json
|
||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||
e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json
|
||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
||||
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
||||
356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json
|
||||
|
|
|
@ -89,8 +89,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "x",
|
||||
"sticky_west": "true"
|
||||
"sticky_west": "true",
|
||||
"axis": "x"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -99,8 +99,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "y",
|
||||
"sticky_west": "true"
|
||||
"sticky_west": "true",
|
||||
"axis": "y"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -109,8 +109,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "z",
|
||||
"sticky_west": "true"
|
||||
"sticky_west": "true",
|
||||
"axis": "z"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z_sticky",
|
||||
|
@ -119,8 +119,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "x",
|
||||
"sticky_west": "false"
|
||||
"sticky_west": "false",
|
||||
"axis": "x"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -129,8 +129,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "y",
|
||||
"sticky_west": "false"
|
||||
"sticky_west": "false",
|
||||
"axis": "y"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -139,8 +139,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "z",
|
||||
"sticky_west": "false"
|
||||
"sticky_west": "false",
|
||||
"axis": "z"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z",
|
||||
|
@ -149,8 +149,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "x",
|
||||
"sticky_north": "true"
|
||||
"sticky_north": "true",
|
||||
"axis": "x"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky"
|
||||
|
@ -158,8 +158,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "y",
|
||||
"sticky_north": "true"
|
||||
"sticky_north": "true",
|
||||
"axis": "y"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -168,8 +168,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "z",
|
||||
"sticky_north": "true"
|
||||
"sticky_north": "true",
|
||||
"axis": "z"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -178,8 +178,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "x",
|
||||
"sticky_north": "false"
|
||||
"sticky_north": "false",
|
||||
"axis": "x"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x"
|
||||
|
@ -187,8 +187,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "y",
|
||||
"sticky_north": "false"
|
||||
"sticky_north": "false",
|
||||
"axis": "y"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -197,8 +197,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "z",
|
||||
"sticky_north": "false"
|
||||
"sticky_north": "false",
|
||||
"axis": "z"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -207,8 +207,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "x",
|
||||
"sticky_east": "true"
|
||||
"sticky_east": "true",
|
||||
"axis": "x"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -217,8 +217,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "y",
|
||||
"sticky_east": "true"
|
||||
"sticky_east": "true",
|
||||
"axis": "y"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -227,8 +227,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "z",
|
||||
"sticky_east": "true"
|
||||
"sticky_east": "true",
|
||||
"axis": "z"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z_sticky"
|
||||
|
@ -236,8 +236,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "x",
|
||||
"sticky_east": "false"
|
||||
"sticky_east": "false",
|
||||
"axis": "x"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -246,8 +246,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "y",
|
||||
"sticky_east": "false"
|
||||
"sticky_east": "false",
|
||||
"axis": "y"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -256,8 +256,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"axis": "z",
|
||||
"sticky_east": "false"
|
||||
"sticky_east": "false",
|
||||
"axis": "z"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z"
|
||||
|
|
|
@ -1813,20 +1813,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 994",
|
||||
"_": "Missing Localizations: 999",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 36",
|
||||
"_": "Missing Localizations: 41",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 924",
|
||||
"_": "Missing Localizations: 929",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 706",
|
||||
"_": "Missing Localizations: 711",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 41",
|
||||
"_": "Missing Localizations: 46",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 48",
|
||||
"_": "Missing Localizations: 53",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 95",
|
||||
"_": "Missing Localizations: 100",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1193",
|
||||
"_": "Missing Localizations: 1198",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1259",
|
||||
"_": "Missing Localizations: 1264",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 45",
|
||||
"_": "Missing Localizations: 50",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 43",
|
||||
"_": "Missing Localizations: 48",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 48",
|
||||
"_": "Missing Localizations: 53",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1814,20 +1814,25 @@
|
|||
"create.ponder.brass_hand.scene_0.x": "UNLOCALIZED: Das X axis",
|
||||
"create.ponder.brass_hand.scene_0.y": "UNLOCALIZED: Das Y axis",
|
||||
"create.ponder.brass_hand.scene_0.z": "UNLOCALIZED: Das Z axis",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Debug Scene 1: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_0.title": "UNLOCALIZED: Coordinate Space",
|
||||
"create.ponder.brass_hand.scene_1.change_blocks": "UNLOCALIZED: Blocks can be modified",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Debug Scene 2: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Debug Scene 3: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_1.title": "UNLOCALIZED: Changing Blocks",
|
||||
"create.ponder.brass_hand.scene_2.title": "UNLOCALIZED: Showing Fluids",
|
||||
"create.ponder.brass_hand.scene_2.fluids": "UNLOCALIZED: Fluid rendering test.",
|
||||
"create.ponder.brass_hand.scene_3.outofbounds": "UNLOCALIZED: Blocks outside of the base plate do not affect scaling",
|
||||
"create.ponder.brass_hand.scene_3.thanks_to_configureBasePlate": "UNLOCALIZED: configureBasePlate() makes sure of that.",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Debug Scene 4: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_3.title": "UNLOCALIZED: Out of bounds / configureBasePlate",
|
||||
"create.ponder.brass_hand.scene_4.incoming": "UNLOCALIZED: Incoming...",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Debug Scene 5: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Debug Scene 6: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_4.title": "UNLOCALIZED: Emitting particles",
|
||||
"create.ponder.brass_hand.scene_5.title": "UNLOCALIZED: Basic player interaction",
|
||||
"create.ponder.brass_hand.scene_6.birbs_interesting": "UNLOCALIZED: More birbs = More interesting",
|
||||
"create.ponder.brass_hand.scene_6.poi": "UNLOCALIZED: Point of Interest",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Debug Scene 7: Birbs",
|
||||
"create.ponder.brass_hand.scene_6.title": "UNLOCALIZED: Birbs",
|
||||
"create.ponder.brass_hand.scene_7.seamless": "UNLOCALIZED: Seamless substitution of blocks",
|
||||
"create.ponder.brass_hand.scene_7.blast_off": "UNLOCALIZED: Up, up and away.",
|
||||
"create.ponder.brass_hand.scene_7.independent": "UNLOCALIZED: This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "UNLOCALIZED: This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
"trigger": "create:bracket_apply",
|
||||
"conditions": {
|
||||
"accepted_entries": [
|
||||
"create:large_cogwheel",
|
||||
"create:cogwheel"
|
||||
"create:cogwheel",
|
||||
"create:large_cogwheel"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class ElementLink<T extends PonderElement> {
|
||||
|
||||
private Class<T> elementClass;
|
||||
private UUID id;
|
||||
|
||||
public ElementLink(Class<T> elementClass, UUID id) {
|
||||
this.elementClass = elementClass;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public T cast(PonderElement e) {
|
||||
return elementClass.cast(e);
|
||||
}
|
||||
|
||||
}
|
|
@ -6,6 +6,8 @@ public class PonderElement {
|
|||
|
||||
public void tick(PonderScene scene) {}
|
||||
|
||||
public void reset(PonderScene scene) {}
|
||||
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class PonderInstruction {
|
||||
|
||||
public boolean isBlocking() {
|
||||
|
@ -12,4 +14,28 @@ public abstract class PonderInstruction {
|
|||
|
||||
public abstract void tick(PonderScene scene);
|
||||
|
||||
public static PonderInstruction simple(Consumer<PonderScene> callback) {
|
||||
return new Simple(callback);
|
||||
}
|
||||
|
||||
private static class Simple extends PonderInstruction {
|
||||
|
||||
private Consumer<PonderScene> callback;
|
||||
|
||||
public Simple(Consumer<PonderScene> callback) {
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComplete() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
callback.accept(scene);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ import java.util.zip.GZIPInputStream;
|
|||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.PonderStoryBoardEntry.PonderStoryBoard;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
||||
import com.simibubi.create.foundation.ponder.content.SharedText;
|
||||
import com.tterrag.registrate.util.entry.ItemProviderEntry;
|
||||
|
@ -28,12 +28,16 @@ import net.minecraft.world.gen.feature.template.Template;
|
|||
|
||||
public class PonderRegistry {
|
||||
|
||||
static Map<ResourceLocation, List<PonderStoryBoard>> all = new HashMap<>();
|
||||
static Map<ResourceLocation, List<PonderStoryBoardEntry>> all = new HashMap<>();
|
||||
|
||||
public static void addStoryBoard(ItemProviderEntry<?> component, PonderStoryBoard storyBoard) {
|
||||
public static void addStoryBoard(ItemProviderEntry<?> component, String schematic, PonderStoryBoard storyBoard) {
|
||||
ResourceLocation id = component.getId();
|
||||
all.computeIfAbsent(id, $ -> new ArrayList<>())
|
||||
.add(storyBoard);
|
||||
.add(new PonderStoryBoardEntry(storyBoard, schematic));
|
||||
}
|
||||
|
||||
public static MultiSceneBuilder forComponent(ItemProviderEntry<?> component) {
|
||||
return new MultiSceneBuilder(component);
|
||||
}
|
||||
|
||||
public static List<PonderScene> compile(ResourceLocation id) {
|
||||
|
@ -44,28 +48,31 @@ public class PonderRegistry {
|
|||
SharedText.gatherText();
|
||||
}
|
||||
|
||||
List<PonderStoryBoard> list = all.get(id);
|
||||
List<PonderStoryBoardEntry> list = all.get(id);
|
||||
List<PonderScene> scenes = new ArrayList<>();
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
|
||||
PonderStoryBoard sb = list.get(i);
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
PonderStoryBoardEntry sb = list.get(i);
|
||||
Template activeTemplate = loadSchematic(sb.getSchematicName());
|
||||
PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().world);
|
||||
activeTemplate.addBlocksToWorld(world, BlockPos.ZERO, new PlacementSettings());
|
||||
world.createBackup();
|
||||
|
||||
PonderScene scene = new PonderScene(world, id, i);
|
||||
PonderLocalization.registerSpecific(id, i, "title", sb.getStoryTitle());
|
||||
SceneBuilder builder = scene.builder();
|
||||
sb.program(builder, builder.getSceneBuildingUtil());
|
||||
PonderScene scene = compileScene(id, i, sb, world);
|
||||
scene.begin();
|
||||
scenes.add(scene);
|
||||
|
||||
}
|
||||
|
||||
return scenes;
|
||||
}
|
||||
|
||||
public static PonderScene compileScene(ResourceLocation id, int i, PonderStoryBoardEntry sb, PonderWorld world) {
|
||||
PonderScene scene = new PonderScene(world, id, i);
|
||||
SceneBuilder builder = scene.builder();
|
||||
sb.getBoard()
|
||||
.program(builder, scene.getSceneBuildingUtil());
|
||||
return scene;
|
||||
}
|
||||
|
||||
public static Template loadSchematic(String path) {
|
||||
Template t = new Template();
|
||||
String filepath = "ponder/" + path + ".nbt";
|
||||
|
@ -87,15 +94,25 @@ public class PonderRegistry {
|
|||
PonderIndex.register();
|
||||
SharedText.gatherText();
|
||||
all.forEach((id, list) -> {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
PonderStoryBoard sb = list.get(i);
|
||||
PonderScene scene = new PonderScene(null, id, i);
|
||||
PonderLocalization.registerSpecific(id, i, "title", sb.getStoryTitle());
|
||||
SceneBuilder builder = scene.builder();
|
||||
sb.program(builder, builder.getSceneBuildingUtil());
|
||||
}
|
||||
for (int i = 0; i < list.size(); i++)
|
||||
compileScene(id, i, list.get(i), null);
|
||||
});
|
||||
return PonderLocalization.record();
|
||||
}
|
||||
|
||||
public static class MultiSceneBuilder {
|
||||
|
||||
private ItemProviderEntry<?> component;
|
||||
|
||||
MultiSceneBuilder(ItemProviderEntry<?> component) {
|
||||
this.component = component;
|
||||
}
|
||||
|
||||
public MultiSceneBuilder addStoryBoard(String schematicPath, PonderStoryBoard storyBoard) {
|
||||
PonderRegistry.addStoryBoard(component, schematicPath, storyBoard);
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,77 +1,61 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.function.UnaryOperator;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderPalette;
|
||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.ParrotElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.PonderOverlayElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.PonderSceneElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.DelayInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.DisplayWorldSectionInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter;
|
||||
import com.simibubi.create.foundation.ponder.instructions.HideAllInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.MarkAsFinishedInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.MovePoiInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ReplaceBlocksInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.RotateSceneInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ShowCompleteSchematicInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ShowInputInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.TextInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.TileEntityDataInstruction;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
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.particles.RedstoneParticleData;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
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 {
|
||||
|
||||
boolean finished;
|
||||
int sceneIndex;
|
||||
|
||||
List<PonderInstruction> schedule, activeSchedule;
|
||||
Map<UUID, PonderElement> linkedElements;
|
||||
Set<PonderElement> elements;
|
||||
|
||||
PonderWorld world;
|
||||
ResourceLocation component;
|
||||
int sceneIndex;
|
||||
SceneTransform transform;
|
||||
public boolean finished;
|
||||
SceneRenderInfo info;
|
||||
Outliner outliner;
|
||||
String defaultTitle;
|
||||
|
||||
Vec3d pointOfInterest;
|
||||
Vec3d chasingPointOfInterest;
|
||||
WorldSectionElement baseWorldSection;
|
||||
|
||||
private int offsetX;
|
||||
private int offsetZ;
|
||||
private int size;
|
||||
int offsetX;
|
||||
int offsetZ;
|
||||
int size;
|
||||
|
||||
public PonderScene(PonderWorld world, ResourceLocation component, int sceneIndex) {
|
||||
pointOfInterest = Vec3d.ZERO;
|
||||
|
@ -82,11 +66,16 @@ public class PonderScene {
|
|||
|
||||
outliner = new Outliner();
|
||||
elements = new HashSet<>();
|
||||
linkedElements = new HashMap<>();
|
||||
schedule = new ArrayList<>();
|
||||
activeSchedule = new ArrayList<>();
|
||||
transform = new SceneTransform();
|
||||
size = getBounds().getXSize();
|
||||
info = new SceneRenderInfo();
|
||||
baseWorldSection = new WorldSectionElement();
|
||||
|
||||
PonderLocalization.registerSpecific(component, sceneIndex, "title", "Untitled Scene");
|
||||
setPointOfInterest(new Vec3d(0, 4, 0));
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
|
@ -107,9 +96,19 @@ public class PonderScene {
|
|||
world.restore();
|
||||
transform = new SceneTransform();
|
||||
finished = false;
|
||||
forEach(WorldSectionElement.class, wse -> wse.queueRedraw(world));
|
||||
setPointOfInterest(new Vec3d(0, 4, 0));
|
||||
forEach(pe -> pe.reset(this));
|
||||
elements.clear();
|
||||
linkedElements.clear();
|
||||
activeSchedule.addAll(schedule);
|
||||
|
||||
baseWorldSection.setEmpty();
|
||||
baseWorldSection.forceApplyFade(1);
|
||||
elements.add(baseWorldSection);
|
||||
}
|
||||
|
||||
public WorldSectionElement getBaseWorldSection() {
|
||||
return baseWorldSection;
|
||||
}
|
||||
|
||||
public void fadeOut() {
|
||||
|
@ -176,6 +175,22 @@ public class PonderScene {
|
|||
elements.add(e);
|
||||
}
|
||||
|
||||
public <E extends PonderElement> void linkElement(E e, ElementLink<E> link) {
|
||||
linkedElements.put(link.getId(), e);
|
||||
}
|
||||
|
||||
public <E extends PonderElement> E resolve(ElementLink<E> link) {
|
||||
return link.cast(linkedElements.get(link.getId()));
|
||||
}
|
||||
|
||||
public <E extends PonderElement> void runWith(ElementLink<E> link, Consumer<E> callback) {
|
||||
callback.accept(resolve(link));
|
||||
}
|
||||
|
||||
public <E extends PonderElement, F> F applyTo(ElementLink<E> link, Function<E, F> function) {
|
||||
return function.apply(resolve(link));
|
||||
}
|
||||
|
||||
public PonderWorld getWorld() {
|
||||
return world;
|
||||
}
|
||||
|
@ -206,10 +221,14 @@ public class PonderScene {
|
|||
}
|
||||
|
||||
public SceneBuilder builder() {
|
||||
return new SceneBuilder();
|
||||
return new SceneBuilder(this);
|
||||
}
|
||||
|
||||
private Supplier<String> textGetter(String key) {
|
||||
public SceneBuildingUtil getSceneBuildingUtil() {
|
||||
return new SceneBuildingUtil(getBounds());
|
||||
}
|
||||
|
||||
Supplier<String> textGetter(String key) {
|
||||
return () -> PonderLocalization.getSpecific(component, sceneIndex, key);
|
||||
}
|
||||
|
||||
|
@ -301,188 +320,16 @@ public class PonderScene {
|
|||
|
||||
}
|
||||
|
||||
public class SceneBuilder {
|
||||
|
||||
private SceneBuildingUtil sceneBuildingUtil;
|
||||
|
||||
public SceneBuilder() {
|
||||
sceneBuildingUtil = new SceneBuildingUtil();
|
||||
}
|
||||
|
||||
public SceneBuildingUtil getSceneBuildingUtil() {
|
||||
return sceneBuildingUtil;
|
||||
}
|
||||
|
||||
public SceneBuilder showBasePlate() {
|
||||
return showSection(Select.cuboid(new BlockPos(offsetX, 0, offsetZ), new Vec3i(size, 0, size)),
|
||||
Direction.UP);
|
||||
}
|
||||
|
||||
public SceneBuilder showTargetedText(PonderPalette color, Vec3d position, String key, String defaultText,
|
||||
int duration) {
|
||||
PonderLocalization.registerSpecific(component, sceneIndex, key, defaultText);
|
||||
return addInstruction(new TextInstruction(color.getColor(), textGetter(key), duration, position));
|
||||
}
|
||||
|
||||
public SceneBuilder showSelectionWithText(PonderPalette color, Select selection, String key, String defaultText,
|
||||
int duration) {
|
||||
PonderLocalization.registerSpecific(component, sceneIndex, key, defaultText);
|
||||
return addInstruction(new TextInstruction(color.getColor(), textGetter(key), duration, selection));
|
||||
}
|
||||
|
||||
public SceneBuilder showText(PonderPalette color, int y, String key, String defaultText, int duration) {
|
||||
PonderLocalization.registerSpecific(component, sceneIndex, key, defaultText);
|
||||
return addInstruction(new TextInstruction(color.getColor(), textGetter(key), duration, y));
|
||||
}
|
||||
|
||||
public SceneBuilder showSection(Select selection, Direction fadeInDirection) {
|
||||
return addInstruction(
|
||||
new DisplayWorldSectionInstruction(15, fadeInDirection, new WorldSectionElement(selection)));
|
||||
}
|
||||
|
||||
public SceneBuilder debugSchematic() {
|
||||
return addInstruction(new ShowCompleteSchematicInstruction());
|
||||
}
|
||||
|
||||
public SceneBuilder idle(int ticks) {
|
||||
return addInstruction(new DelayInstruction(ticks));
|
||||
}
|
||||
|
||||
public SceneBuilder idleSeconds(int seconds) {
|
||||
return idle(seconds * 20);
|
||||
}
|
||||
|
||||
public SceneBuilder markAsFinished() {
|
||||
return addInstruction(new MarkAsFinishedInstruction());
|
||||
}
|
||||
|
||||
public SceneBuilder rotateCameraY(float degrees) {
|
||||
return addInstruction(new RotateSceneInstruction(0, degrees, true));
|
||||
}
|
||||
|
||||
public SceneBuilder setBlocks(Select selection, BlockState state) {
|
||||
return addInstruction(new ReplaceBlocksInstruction(selection, state, true));
|
||||
}
|
||||
|
||||
public SceneBuilder replaceBlocks(Select selection, BlockState state) {
|
||||
return addInstruction(new ReplaceBlocksInstruction(selection, state, true));
|
||||
}
|
||||
|
||||
public SceneBuilder setKineticSpeed(Select selection, float speed) {
|
||||
return modifyKineticSpeed(selection, f -> speed);
|
||||
}
|
||||
|
||||
public SceneBuilder multiplyKineticSpeed(Select selection, float modifier) {
|
||||
return modifyKineticSpeed(selection, f -> f * modifier);
|
||||
}
|
||||
|
||||
public SceneBuilder modifyKineticSpeed(Select selection, UnaryOperator<Float> speedFunc) {
|
||||
addInstruction(new TileEntityDataInstruction(selection, SpeedGaugeTileEntity.class, nbt -> {
|
||||
float newSpeed = speedFunc.apply(nbt.getFloat("Speed"));
|
||||
nbt.putFloat("Value", SpeedGaugeTileEntity.getDialTarget(newSpeed));
|
||||
return nbt;
|
||||
}, false));
|
||||
return addInstruction(new TileEntityDataInstruction(selection, KineticTileEntity.class, nbt -> {
|
||||
nbt.putFloat("Speed", speedFunc.apply(nbt.getFloat("Speed")));
|
||||
return nbt;
|
||||
}, false));
|
||||
}
|
||||
|
||||
public SceneBuilder flapFunnels(Select selection, boolean outward) {
|
||||
return addInstruction(new TileEntityDataInstruction(selection, FunnelTileEntity.class, nbt -> {
|
||||
nbt.putInt("Flap", outward ? -1 : 1);
|
||||
return nbt;
|
||||
}, false));
|
||||
}
|
||||
|
||||
public SceneBuilder movePOI(Vec3d location) {
|
||||
return addInstruction(new MovePoiInstruction(location));
|
||||
}
|
||||
|
||||
public SceneBuilder showControls(InputWindowElement element, int duration) {
|
||||
return addInstruction(new ShowInputInstruction(element, duration));
|
||||
}
|
||||
|
||||
public SceneBuilder emitParticles(Vec3d location, Emitter emitter, float amountPerCycle, int cycles) {
|
||||
return addInstruction(new EmitParticlesInstruction(location, emitter, amountPerCycle, cycles));
|
||||
}
|
||||
|
||||
public SceneBuilder indicateSuccess(BlockPos pos) {
|
||||
return addInstruction(new EmitParticlesInstruction(VecHelper.getCenterOf(pos),
|
||||
Emitter.withinBlockSpace(new RedstoneParticleData(.5f, 1, .7f, 1), new Vec3d(0, 0, 0)), 20, 2));
|
||||
}
|
||||
|
||||
public SceneBuilder birbOnTurntable(BlockPos pos) {
|
||||
return addInstruction(new CreateParrotInstruction(10, Direction.DOWN,
|
||||
ParrotElement.spinOnComponent(VecHelper.getCenterOf(pos), pos)));
|
||||
}
|
||||
|
||||
public SceneBuilder birbOnSpinnyShaft(BlockPos pos) {
|
||||
return addInstruction(
|
||||
new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.spinOnComponent(VecHelper.getCenterOf(pos)
|
||||
.add(0, 0.5, 0), pos)));
|
||||
}
|
||||
|
||||
public SceneBuilder birbLookingAtPOI(Vec3d location) {
|
||||
return addInstruction(new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.lookAtPOI(location)));
|
||||
}
|
||||
|
||||
public SceneBuilder birbPartying(Vec3d location) {
|
||||
return addInstruction(new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.dance(location)));
|
||||
}
|
||||
|
||||
public SceneBuilder addInstruction(PonderInstruction instruction) {
|
||||
schedule.add(instruction);
|
||||
return this;
|
||||
}
|
||||
|
||||
public class SceneBuildingUtil {
|
||||
|
||||
public Vec3d centerOf(int x, int y, int z) {
|
||||
return VecHelper.getCenterOf(new BlockPos(x, y, z));
|
||||
}
|
||||
|
||||
public Vec3d topOf(int x, int y, int z) {
|
||||
return new Vec3d(x + .5, y + 1, z + .5);
|
||||
}
|
||||
|
||||
public Vec3d vector(double x, double y, double z) {
|
||||
return new Vec3d(x, y, z);
|
||||
}
|
||||
|
||||
public Select everywhere() {
|
||||
return Select.everything(getBounds());
|
||||
}
|
||||
|
||||
public Select column(int x, int z) {
|
||||
return Select.column(getBounds(), x, z);
|
||||
}
|
||||
|
||||
public Select layer(int y) {
|
||||
return layers(y, 1);
|
||||
}
|
||||
|
||||
public Select layers(int y, int height) {
|
||||
return Select.layer(getBounds(), y, height);
|
||||
}
|
||||
|
||||
public Select layersFrom(int y) {
|
||||
return Select.layer(getBounds(), y, getBounds().getYSize());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public SceneBuilder configureBasePlate(int xOffset, int zOffset, int basePlateSize) {
|
||||
offsetX = xOffset;
|
||||
offsetZ = zOffset;
|
||||
size = basePlateSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public Outliner getOutliner() {
|
||||
return outliner;
|
||||
}
|
||||
|
||||
public boolean isFinished() {
|
||||
return finished;
|
||||
}
|
||||
|
||||
public void setFinished(boolean finished) {
|
||||
this.finished = finished;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil;
|
||||
|
||||
public abstract class PonderStoryBoard {
|
||||
|
||||
public abstract String getSchematicName();
|
||||
|
||||
public abstract String getStoryTitle();
|
||||
|
||||
public abstract void program(SceneBuilder scene, SceneBuildingUtil util);
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
public class PonderStoryBoardEntry {
|
||||
|
||||
private String schematicName;
|
||||
private PonderStoryBoard board;
|
||||
|
||||
public PonderStoryBoardEntry(PonderStoryBoard board, String schematicName) {
|
||||
this.board = board;
|
||||
this.schematicName = schematicName;
|
||||
}
|
||||
|
||||
public interface PonderStoryBoard {
|
||||
public abstract void program(SceneBuilder scene, SceneBuildingUtil util);
|
||||
}
|
||||
|
||||
public String getSchematicName() {
|
||||
return schematicName;
|
||||
}
|
||||
|
||||
public PonderStoryBoard getBoard() {
|
||||
return board;
|
||||
}
|
||||
|
||||
}
|
|
@ -106,7 +106,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
int prevIndex = index;
|
||||
index = forward ? index + 1 : index - 1;
|
||||
index = MathHelper.clamp(index, 0, scenes.size() - 1);
|
||||
if (prevIndex != index && Math.abs(index - lazyIndex.getValue()) < 1.5f) {
|
||||
if (prevIndex != index) {// && Math.abs(index - lazyIndex.getValue()) < 1.5f) {
|
||||
scenes.get(prevIndex)
|
||||
.fadeOut();
|
||||
scenes.get(index)
|
||||
|
@ -228,7 +228,7 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
if (index == scenes.size() - 1 || index == scenes.size() - 2 && lazyIndexValue > index)
|
||||
right.fade(scenes.size() - lazyIndexValue - 1);
|
||||
|
||||
if (scenes.get(index).finished)
|
||||
if (scenes.get(index).isFinished())
|
||||
right.flash();
|
||||
else
|
||||
right.dim();
|
||||
|
|
|
@ -38,7 +38,7 @@ public class PonderWorld extends SchematicWorld {
|
|||
protected PonderWorldParticles particles;
|
||||
|
||||
int overrideLight;
|
||||
Select mask;
|
||||
Selection mask;
|
||||
|
||||
public PonderWorld(BlockPos anchor, World original) {
|
||||
super(anchor, original);
|
||||
|
@ -81,7 +81,7 @@ public class PonderWorld extends SchematicWorld {
|
|||
return overrideLight == -1 ? 15 : overrideLight;
|
||||
}
|
||||
|
||||
public void setMask(Select mask) {
|
||||
public void setMask(Selection mask) {
|
||||
this.mask = mask;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,292 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.UnaryOperator;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderPalette;
|
||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.ParrotElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
import com.simibubi.create.foundation.ponder.instructions.AnimateWorldSectionInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ChaseAABBInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.DelayInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.DisplayWorldSectionInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter;
|
||||
import com.simibubi.create.foundation.ponder.instructions.FadeOutOfSceneInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.MarkAsFinishedInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.MovePoiInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.OutlineSelectionInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ReplaceBlocksInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.RotateSceneInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ShowCompleteSchematicInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.ShowInputInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.TextInstruction;
|
||||
import com.simibubi.create.foundation.ponder.instructions.TileEntityDataInstruction;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.particles.RedstoneParticleData;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
|
||||
public class SceneBuilder {
|
||||
|
||||
public final OverlayInstructions overlay;
|
||||
public final SpecialInstructions special;
|
||||
public final WorldInstructions world;
|
||||
public final DebugInstructions debug;
|
||||
public final EffectInstructions effects;
|
||||
|
||||
private final PonderScene scene;
|
||||
|
||||
public SceneBuilder(PonderScene ponderScene) {
|
||||
scene = ponderScene;
|
||||
overlay = new OverlayInstructions();
|
||||
special = new SpecialInstructions();
|
||||
world = new WorldInstructions();
|
||||
debug = new DebugInstructions();
|
||||
effects = new EffectInstructions();
|
||||
}
|
||||
|
||||
// General
|
||||
|
||||
public void title(String title) {
|
||||
PonderLocalization.registerSpecific(scene.component, scene.sceneIndex, "title", title);
|
||||
}
|
||||
|
||||
public void configureBasePlate(int xOffset, int zOffset, int basePlateSize) {
|
||||
scene.offsetX = xOffset;
|
||||
scene.offsetZ = zOffset;
|
||||
scene.size = basePlateSize;
|
||||
}
|
||||
|
||||
public void showBasePlate() {
|
||||
world.showSection(scene.getSceneBuildingUtil().select.cuboid(new BlockPos(scene.offsetX, 0, scene.offsetZ),
|
||||
new Vec3i(scene.size, 0, scene.size)), Direction.UP);
|
||||
}
|
||||
|
||||
public void idle(int ticks) {
|
||||
addInstruction(new DelayInstruction(ticks));
|
||||
}
|
||||
|
||||
public void idleSeconds(int seconds) {
|
||||
idle(seconds * 20);
|
||||
}
|
||||
|
||||
public void markAsFinished() {
|
||||
addInstruction(new MarkAsFinishedInstruction());
|
||||
}
|
||||
|
||||
public void rotateCameraY(float degrees) {
|
||||
addInstruction(new RotateSceneInstruction(0, degrees, true));
|
||||
}
|
||||
|
||||
public class EffectInstructions {
|
||||
|
||||
public void emitParticles(Vec3d location, Emitter emitter, float amountPerCycle, int cycles) {
|
||||
addInstruction(new EmitParticlesInstruction(location, emitter, amountPerCycle, cycles));
|
||||
}
|
||||
|
||||
public void indicateSuccess(BlockPos pos) {
|
||||
addInstruction(new EmitParticlesInstruction(VecHelper.getCenterOf(pos),
|
||||
Emitter.withinBlockSpace(new RedstoneParticleData(.5f, 1, .7f, 1), new Vec3d(0, 0, 0)), 20, 2));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class OverlayInstructions {
|
||||
|
||||
public void showTargetedText(PonderPalette color, Vec3d position, String key, String defaultText,
|
||||
int duration) {
|
||||
PonderLocalization.registerSpecific(scene.component, scene.sceneIndex, key, defaultText);
|
||||
addInstruction(new TextInstruction(color.getColor(), scene.textGetter(key), duration, position));
|
||||
}
|
||||
|
||||
public void showSelectionWithText(PonderPalette color, Selection selection, String key, String defaultText,
|
||||
int duration) {
|
||||
PonderLocalization.registerSpecific(scene.component, scene.sceneIndex, key, defaultText);
|
||||
addInstruction(new TextInstruction(color.getColor(), scene.textGetter(key), duration, selection));
|
||||
}
|
||||
|
||||
public void showText(PonderPalette color, int y, String key, String defaultText, int duration) {
|
||||
PonderLocalization.registerSpecific(scene.component, scene.sceneIndex, key, defaultText);
|
||||
addInstruction(new TextInstruction(color.getColor(), scene.textGetter(key), duration, y));
|
||||
}
|
||||
|
||||
public void showControls(InputWindowElement element, int duration) {
|
||||
addInstruction(new ShowInputInstruction(element, duration));
|
||||
}
|
||||
|
||||
public void chaseBoundingBoxOutline(PonderPalette color, Object slot, AxisAlignedBB boundingBox, int duration) {
|
||||
addInstruction(new ChaseAABBInstruction(color, slot, boundingBox, duration));
|
||||
}
|
||||
|
||||
public void showOutline(PonderPalette color, Object slot, Selection selection, int duration) {
|
||||
addInstruction(new OutlineSelectionInstruction(color, slot, selection, duration));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class SpecialInstructions {
|
||||
|
||||
public void birbOnTurntable(BlockPos pos) {
|
||||
addInstruction(new CreateParrotInstruction(10, Direction.DOWN,
|
||||
ParrotElement.spinOnComponent(VecHelper.getCenterOf(pos), pos)));
|
||||
}
|
||||
|
||||
public void birbOnSpinnyShaft(BlockPos pos) {
|
||||
addInstruction(
|
||||
new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.spinOnComponent(VecHelper.getCenterOf(pos)
|
||||
.add(0, 0.5, 0), pos)));
|
||||
}
|
||||
|
||||
public void birbLookingAtPOI(Vec3d location) {
|
||||
addInstruction(new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.lookAtPOI(location)));
|
||||
}
|
||||
|
||||
public void birbPartying(Vec3d location) {
|
||||
addInstruction(new CreateParrotInstruction(10, Direction.DOWN, ParrotElement.dance(location)));
|
||||
}
|
||||
|
||||
public void movePointOfInterest(Vec3d location) {
|
||||
addInstruction(new MovePoiInstruction(location));
|
||||
}
|
||||
|
||||
public void movePointOfInterest(BlockPos location) {
|
||||
movePointOfInterest(VecHelper.getCenterOf(location));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class WorldInstructions {
|
||||
|
||||
public void showSection(Selection selection, Direction fadeInDirection) {
|
||||
addInstruction(new DisplayWorldSectionInstruction(15, fadeInDirection, selection, true));
|
||||
}
|
||||
|
||||
public ElementLink<WorldSectionElement> showIndependentSection(Selection selection, Direction fadeInDirection) {
|
||||
DisplayWorldSectionInstruction instruction =
|
||||
new DisplayWorldSectionInstruction(15, fadeInDirection, selection, false);
|
||||
addInstruction(instruction);
|
||||
return instruction.createLink(scene);
|
||||
}
|
||||
|
||||
public void hideSection(Selection selection, Direction fadeOutDirection) {
|
||||
WorldSectionElement worldSectionElement = new WorldSectionElement(selection);
|
||||
ElementLink<WorldSectionElement> elementLink =
|
||||
new ElementLink<>(WorldSectionElement.class, UUID.randomUUID());
|
||||
|
||||
addInstruction(scene -> {
|
||||
scene.getBaseWorldSection()
|
||||
.erase(selection);
|
||||
scene.linkElement(worldSectionElement, elementLink);
|
||||
scene.addElement(worldSectionElement);
|
||||
worldSectionElement.queueRedraw();
|
||||
});
|
||||
|
||||
hideIndependentSection(elementLink, fadeOutDirection);
|
||||
}
|
||||
|
||||
public void hideIndependentSection(ElementLink<WorldSectionElement> link, Direction fadeOutDirection) {
|
||||
addInstruction(new FadeOutOfSceneInstruction<>(15, fadeOutDirection, link));
|
||||
}
|
||||
|
||||
public ElementLink<WorldSectionElement> makeSectionIndependent(Selection selection) {
|
||||
WorldSectionElement worldSectionElement = new WorldSectionElement(selection);
|
||||
ElementLink<WorldSectionElement> elementLink =
|
||||
new ElementLink<>(WorldSectionElement.class, UUID.randomUUID());
|
||||
|
||||
addInstruction(scene -> {
|
||||
scene.getBaseWorldSection()
|
||||
.erase(selection);
|
||||
scene.linkElement(worldSectionElement, elementLink);
|
||||
scene.addElement(worldSectionElement);
|
||||
worldSectionElement.resetAnimatedTransform();
|
||||
worldSectionElement.setVisible(true);
|
||||
worldSectionElement.forceApplyFade(1);
|
||||
});
|
||||
|
||||
return elementLink;
|
||||
}
|
||||
|
||||
public void rotateSection(ElementLink<WorldSectionElement> link, double xRotation, double yRotation,
|
||||
double zRotation, int duration) {
|
||||
addInstruction(
|
||||
AnimateWorldSectionInstruction.rotate(link, new Vec3d(xRotation, yRotation, zRotation), duration));
|
||||
}
|
||||
|
||||
public void moveSection(ElementLink<WorldSectionElement> link, Vec3d offset, int duration) {
|
||||
addInstruction(AnimateWorldSectionInstruction.move(link, offset, duration));
|
||||
}
|
||||
|
||||
public void setBlocks(Selection selection, BlockState state, boolean spawnParticles) {
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, state, true, spawnParticles));
|
||||
}
|
||||
|
||||
public void setBlock(BlockPos pos, BlockState state) {
|
||||
setBlocks(scene.getSceneBuildingUtil().select.position(pos), state, true);
|
||||
}
|
||||
|
||||
public void replaceBlocks(Selection selection, BlockState state, boolean spawnParticles) {
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, state, false, spawnParticles));
|
||||
}
|
||||
|
||||
public void setKineticSpeed(Selection selection, float speed) {
|
||||
modifyKineticSpeed(selection, f -> speed);
|
||||
}
|
||||
|
||||
public void multiplyKineticSpeed(Selection selection, float modifier) {
|
||||
modifyKineticSpeed(selection, f -> f * modifier);
|
||||
}
|
||||
|
||||
public void modifyKineticSpeed(Selection selection, UnaryOperator<Float> speedFunc) {
|
||||
addInstruction(new TileEntityDataInstruction(selection, SpeedGaugeTileEntity.class, nbt -> {
|
||||
float newSpeed = speedFunc.apply(nbt.getFloat("Speed"));
|
||||
nbt.putFloat("Value", SpeedGaugeTileEntity.getDialTarget(newSpeed));
|
||||
return nbt;
|
||||
}, false));
|
||||
addInstruction(new TileEntityDataInstruction(selection, KineticTileEntity.class, nbt -> {
|
||||
nbt.putFloat("Speed", speedFunc.apply(nbt.getFloat("Speed")));
|
||||
return nbt;
|
||||
}, false));
|
||||
}
|
||||
|
||||
public void flapFunnels(Selection selection, boolean outward) {
|
||||
addInstruction(new TileEntityDataInstruction(selection, FunnelTileEntity.class, nbt -> {
|
||||
nbt.putInt("Flap", outward ? -1 : 1);
|
||||
return nbt;
|
||||
}, false));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class DebugInstructions {
|
||||
|
||||
public void debugSchematic() {
|
||||
addInstruction(new ShowCompleteSchematicInstruction());
|
||||
}
|
||||
|
||||
public void addInstructionInstance(PonderInstruction instruction) {
|
||||
addInstruction(instruction);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void addInstruction(PonderInstruction instruction) {
|
||||
scene.schedule.add(instruction);
|
||||
}
|
||||
|
||||
private void addInstruction(Consumer<PonderScene> callback) {
|
||||
scene.schedule.add(PonderInstruction.simple(callback));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
|
||||
public class SceneBuildingUtil {
|
||||
|
||||
public final SelectionUtil select;
|
||||
public final VectorUtil vector;
|
||||
public final PositionUtil grid;
|
||||
|
||||
private final MutableBoundingBox sceneBounds;
|
||||
|
||||
SceneBuildingUtil(MutableBoundingBox sceneBounds) {
|
||||
this.sceneBounds = sceneBounds;
|
||||
this.select = new SelectionUtil();
|
||||
this.vector = new VectorUtil();
|
||||
this.grid = new PositionUtil();
|
||||
}
|
||||
|
||||
public class PositionUtil {
|
||||
|
||||
public BlockPos at(int x, int y, int z) {
|
||||
return new BlockPos(x, y, z);
|
||||
}
|
||||
|
||||
public BlockPos zero() {
|
||||
return at(0, 0, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class VectorUtil {
|
||||
|
||||
public Vec3d centerOf(int x, int y, int z) {
|
||||
return centerOf(grid.at(x, y, z));
|
||||
}
|
||||
|
||||
public Vec3d centerOf(BlockPos pos) {
|
||||
return VecHelper.getCenterOf(pos);
|
||||
}
|
||||
|
||||
public Vec3d topOf(int x, int y, int z) {
|
||||
return blockSurface(grid.at(x, y, z), Direction.UP);
|
||||
}
|
||||
|
||||
public Vec3d topOf(BlockPos pos) {
|
||||
return blockSurface(pos, Direction.UP);
|
||||
}
|
||||
|
||||
public Vec3d blockSurface(BlockPos pos, Direction face) {
|
||||
return blockSurface(pos, face, 0);
|
||||
}
|
||||
|
||||
public Vec3d blockSurface(BlockPos pos, Direction face, float margin) {
|
||||
return centerOf(pos).add(new Vec3d(face.getDirectionVec()).scale(.5f + margin));
|
||||
}
|
||||
|
||||
public Vec3d at(double x, double y, double z) {
|
||||
return new Vec3d(x, y, z);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class SelectionUtil {
|
||||
|
||||
public Selection everywhere() {
|
||||
return Selection.of(sceneBounds);
|
||||
}
|
||||
|
||||
public Selection position(int x, int y, int z) {
|
||||
return position(grid.at(x, y, z));
|
||||
}
|
||||
|
||||
public Selection position(BlockPos pos) {
|
||||
return cuboid(pos, BlockPos.ZERO);
|
||||
}
|
||||
|
||||
public Selection fromTo(int x, int y, int z, int x2, int y2, int z2) {
|
||||
return fromTo(new BlockPos(x, y, z), new BlockPos(x2, y2, z2));
|
||||
}
|
||||
|
||||
public Selection fromTo(BlockPos pos1, BlockPos pos2) {
|
||||
return cuboid(pos1, pos2.subtract(pos1));
|
||||
}
|
||||
|
||||
public Selection column(int x, int z) {
|
||||
return cuboid(new BlockPos(x, 1, z), new Vec3i(0, sceneBounds.getYSize(), 0));
|
||||
}
|
||||
|
||||
public Selection layer(int y) {
|
||||
return layers(y, 1);
|
||||
}
|
||||
|
||||
public Selection layersFrom(int y) {
|
||||
return layers(y, sceneBounds.getYSize() - y);
|
||||
}
|
||||
|
||||
public Selection layers(int y, int height) {
|
||||
return cuboid(new BlockPos(0, y, 0), new Vec3i(sceneBounds.getXSize(),
|
||||
Math.min(sceneBounds.getYSize() - y, height) - 1, sceneBounds.getZSize()));
|
||||
}
|
||||
|
||||
public Selection cuboid(BlockPos origin, Vec3i size) {
|
||||
return Selection.of(new MutableBoundingBox(origin, origin.add(size)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams;
|
||||
import com.simibubi.create.foundation.utility.outliner.Outliner;
|
||||
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
|
||||
public abstract class Select implements Predicate<BlockPos> {
|
||||
|
||||
public static Select cuboid(BlockPos origin, Vec3i size) {
|
||||
return new Cuboid(origin, size);
|
||||
}
|
||||
|
||||
public static Select pos(int x, int y, int z) {
|
||||
return new Cuboid(new BlockPos(x, y, z), BlockPos.ZERO);
|
||||
}
|
||||
|
||||
public static Select fromTo(int x, int y, int z, int x2, int y2, int z2) {
|
||||
return new Cuboid(new BlockPos(x, y, z), new BlockPos(x2 - x, y2 - y, z2 - z));
|
||||
}
|
||||
|
||||
public static Select everything(MutableBoundingBox bounds) {
|
||||
return cuboid(BlockPos.ZERO, bounds.getLength());
|
||||
}
|
||||
|
||||
public static Select compound(Select... other) {
|
||||
return new Compound(other);
|
||||
}
|
||||
|
||||
public static Select column(MutableBoundingBox bounds, int x, int z) {
|
||||
return cuboid(new BlockPos(x, 1, z), new Vec3i(0, bounds.getYSize(), 0));
|
||||
}
|
||||
|
||||
public static Select layer(MutableBoundingBox bounds, int y, int height) {
|
||||
return cuboid(new BlockPos(0, y, 0),
|
||||
new Vec3i(bounds.getXSize(), Math.min(bounds.getYSize() - y, height) - 1, bounds.getZSize()));
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
public WorldSectionElement asElement() {
|
||||
return new WorldSectionElement(this);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@Override
|
||||
public abstract int hashCode();
|
||||
|
||||
public abstract Stream<BlockPos> all();
|
||||
|
||||
public abstract Vec3d getCenter();
|
||||
|
||||
public abstract OutlineParams makeOutline(Outliner outliner);
|
||||
|
||||
private static class Compound extends Select {
|
||||
|
||||
private Select[] parts;
|
||||
private int hash;
|
||||
private Vec3d center;
|
||||
private Set<BlockPos> cluster;
|
||||
|
||||
public Compound(Select... parts) {
|
||||
this.parts = parts;
|
||||
if (parts.length == 0)
|
||||
throw new IllegalArgumentException("Cannot instantiate Compound Select with zero parts");
|
||||
|
||||
cluster = new HashSet<>();
|
||||
parts[0].all()
|
||||
.map(BlockPos::toImmutable)
|
||||
.forEach(cluster::add);
|
||||
hash = parts[0].hashCode();
|
||||
center = parts[0].getCenter()
|
||||
.scale(1f / parts.length);
|
||||
for (int i = 1; i < parts.length; i++) {
|
||||
Select select = parts[i];
|
||||
select.all()
|
||||
.map(BlockPos::toImmutable)
|
||||
.forEach(cluster::add);
|
||||
hash = hash ^ select.hashCode();
|
||||
center = center.add(select.getCenter()
|
||||
.scale(1f / parts.length));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(BlockPos t) {
|
||||
for (Select select : parts)
|
||||
if (select.test(t))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<BlockPos> all() {
|
||||
return cluster.stream();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3d getCenter() {
|
||||
return center;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutlineParams makeOutline(Outliner outliner) {
|
||||
return outliner.showCluster(this, cluster);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class Cuboid extends Select {
|
||||
|
||||
MutableBoundingBox bb;
|
||||
Vec3i origin;
|
||||
Vec3i size;
|
||||
|
||||
public Cuboid(BlockPos origin, Vec3i size) {
|
||||
bb = new MutableBoundingBox(origin, origin.add(size));
|
||||
this.origin = origin;
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(BlockPos t) {
|
||||
return bb.isVecInside(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<BlockPos> all() {
|
||||
return BlockPos.func_229383_a_(bb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return origin.hashCode() ^ size.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3d getCenter() {
|
||||
return new AxisAlignedBB(new BlockPos(origin), new BlockPos(origin).add(size)
|
||||
.add(1, 1, 1)).getCenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutlineParams makeOutline(Outliner outliner) {
|
||||
return outliner.showAABB(this, new AxisAlignedBB(new BlockPos(origin), new BlockPos(origin).add(size)
|
||||
.add(1, 1, 1)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
package com.simibubi.create.foundation.ponder;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams;
|
||||
import com.simibubi.create.foundation.utility.outliner.Outliner;
|
||||
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public abstract class Selection implements Predicate<BlockPos> {
|
||||
|
||||
public static Selection of(MutableBoundingBox bb) {
|
||||
return new Simple(bb);
|
||||
}
|
||||
|
||||
public abstract Selection add(Selection other);
|
||||
|
||||
public abstract Selection substract(Selection other);
|
||||
|
||||
public abstract Selection copy();
|
||||
|
||||
public abstract Vec3d getCenter();
|
||||
|
||||
public abstract void forEach(Consumer<BlockPos> callback);
|
||||
|
||||
public abstract OutlineParams makeOutline(Outliner outliner, Object slot);
|
||||
|
||||
public OutlineParams makeOutline(Outliner outliner) {
|
||||
return makeOutline(outliner, this);
|
||||
}
|
||||
|
||||
private static class Compound extends Selection {
|
||||
|
||||
Set<BlockPos> posSet;
|
||||
Vec3d center;
|
||||
|
||||
public Compound(Simple initial) {
|
||||
posSet = new HashSet<>();
|
||||
add(initial);
|
||||
}
|
||||
|
||||
private Compound(Set<BlockPos> template) {
|
||||
posSet = new HashSet<>(template);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(BlockPos t) {
|
||||
return posSet.contains(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Selection add(Selection other) {
|
||||
other.forEach(p -> posSet.add(p.toImmutable()));
|
||||
center = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Selection substract(Selection other) {
|
||||
other.forEach(p -> posSet.remove(p.toImmutable()));
|
||||
center = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEach(Consumer<BlockPos> callback) {
|
||||
posSet.forEach(callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutlineParams makeOutline(Outliner outliner, Object slot) {
|
||||
return outliner.showCluster(slot, posSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3d getCenter() {
|
||||
return center == null ? center = evalCenter() : center;
|
||||
}
|
||||
|
||||
private Vec3d evalCenter() {
|
||||
Vec3d center = Vec3d.ZERO;
|
||||
if (posSet.isEmpty())
|
||||
return center;
|
||||
for (BlockPos blockPos : posSet)
|
||||
center = center.add(new Vec3d(blockPos));
|
||||
center = center.scale(1f / posSet.size());
|
||||
return center.add(new Vec3d(.5, .5, .5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Selection copy() {
|
||||
return new Compound(posSet);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class Simple extends Selection {
|
||||
|
||||
private MutableBoundingBox bb;
|
||||
private AxisAlignedBB aabb;
|
||||
|
||||
public Simple(MutableBoundingBox bb) {
|
||||
this.bb = bb;
|
||||
this.aabb = getAABB();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(BlockPos t) {
|
||||
return bb.isVecInside(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Selection add(Selection other) {
|
||||
return new Compound(this).add(other);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Selection substract(Selection other) {
|
||||
return new Compound(this).substract(other);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEach(Consumer<BlockPos> callback) {
|
||||
BlockPos.func_229383_a_(bb)
|
||||
.forEach(callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3d getCenter() {
|
||||
return aabb.getCenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutlineParams makeOutline(Outliner outliner, Object slot) {
|
||||
return outliner.showAABB(slot, aabb);
|
||||
}
|
||||
|
||||
private AxisAlignedBB getAABB() {
|
||||
return new AxisAlignedBB(bb.minX, bb.minY, bb.minZ, bb.maxX + 1, bb.maxY + 1, bb.maxZ + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Selection copy() {
|
||||
return new Simple(new MutableBoundingBox(bb));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -6,13 +6,14 @@ import com.simibubi.create.AllBlocks;
|
|||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel;
|
||||
import com.simibubi.create.content.contraptions.particle.RotationIndicatorParticleData;
|
||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||
import com.simibubi.create.foundation.ponder.PonderRegistry;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil;
|
||||
import com.simibubi.create.foundation.ponder.PonderStoryBoard;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.PonderStoryBoardEntry.PonderStoryBoard;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
import com.tterrag.registrate.util.entry.ItemEntry;
|
||||
|
@ -22,273 +23,328 @@ import net.minecraft.item.Item;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.particles.ParticleTypes;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public abstract class DebugScenes extends PonderStoryBoard {
|
||||
public class DebugScenes {
|
||||
|
||||
private int index;
|
||||
private static int index;
|
||||
|
||||
public static void registerAll() {
|
||||
index = 1;
|
||||
add(DebugScenes::coordinateScene);
|
||||
add(DebugScenes::blocksScene);
|
||||
add(DebugScenes::fluidsScene);
|
||||
add(DebugScenes::offScreenScene);
|
||||
add(DebugScenes::particleScene);
|
||||
add(DebugScenes::controlsScene);
|
||||
add(DebugScenes::birbScene);
|
||||
add(DebugScenes::sectionsScene);
|
||||
}
|
||||
|
||||
private static void add(PonderStoryBoard sb) {
|
||||
ItemEntry<Item> item = AllItems.BRASS_HAND;
|
||||
int i = 0;
|
||||
PonderRegistry.addStoryBoard(item, new CoordinateScene(++i));
|
||||
PonderRegistry.addStoryBoard(item, new BlocksScene(++i));
|
||||
PonderRegistry.addStoryBoard(item, new FluidsScene(++i));
|
||||
PonderRegistry.addStoryBoard(item, new OffScreenScene(++i));
|
||||
PonderRegistry.addStoryBoard(item, new ParticlesScene(++i));
|
||||
PonderRegistry.addStoryBoard(item, new ControlsScene(++i));
|
||||
PonderRegistry.addStoryBoard(item, new BirbScene(++i));
|
||||
String schematicPath = "debug/scene_" + index;
|
||||
PonderRegistry.addStoryBoard(item, schematicPath, sb);
|
||||
index++;
|
||||
}
|
||||
|
||||
public DebugScenes(int index) {
|
||||
this.index = index;
|
||||
public static void coordinateScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Coordinate Space");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
|
||||
Selection xAxis = util.select.fromTo(2, 1, 1, 4, 1, 1);
|
||||
Selection yAxis = util.select.fromTo(1, 2, 1, 1, 4, 1);
|
||||
Selection zAxis = util.select.fromTo(1, 1, 2, 1, 1, 4);
|
||||
|
||||
scene.idle(10);
|
||||
scene.overlay.showSelectionWithText(PonderPalette.RED, xAxis, "x", "Das X axis", 20);
|
||||
scene.idle(20);
|
||||
scene.overlay.showSelectionWithText(PonderPalette.GREEN, yAxis, "y", "Das Y axis", 20);
|
||||
scene.idle(20);
|
||||
scene.overlay.showSelectionWithText(PonderPalette.BLUE, zAxis, "z", "Das Z axis", 20);
|
||||
scene.idle(10);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getSchematicName() {
|
||||
return "debug/scene_" + index;
|
||||
public static void blocksScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Changing Blocks");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
scene.overlay.showText(WHITE, 10, "change_blocks", "Blocks can be modified", 1000);
|
||||
scene.idle(20);
|
||||
scene.world.replaceBlocks(util.select.fromTo(1, 1, 3, 2, 2, 4),
|
||||
AllBlocks.REFINED_RADIANCE_CASING.getDefaultState(), true);
|
||||
scene.idle(10);
|
||||
scene.world.replaceBlocks(util.select.position(3, 1, 1), Blocks.GOLD_BLOCK.getDefaultState(), true);
|
||||
scene.rotateCameraY(180);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStoryTitle() {
|
||||
return "Debug Scene " + index + (getTitle().isEmpty() ? "" : ": " + getTitle());
|
||||
}
|
||||
public static void fluidsScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Showing Fluids");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
Vec3d parrotPos = util.vector.topOf(1, 0, 1);
|
||||
scene.special.birbLookingAtPOI(parrotPos);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
scene.overlay.showTargetedText(WHITE, new Vec3d(1, 2.5, 4.5), "fluids", "Fluid rendering test.", 1000);
|
||||
scene.markAsFinished();
|
||||
|
||||
protected String getTitle() {
|
||||
return "";
|
||||
}
|
||||
Object outlineSlot = new Object();
|
||||
|
||||
static class CoordinateScene extends DebugScenes {
|
||||
Vec3d vec1 = util.vector.topOf(1, 0, 0);
|
||||
Vec3d vec2 = util.vector.topOf(0, 0, 1);
|
||||
AxisAlignedBB boundingBox1 = new AxisAlignedBB(vec1, vec1).expand(0, 2.5, 0)
|
||||
.grow(.15, 0, .15);
|
||||
AxisAlignedBB boundingBox2 = new AxisAlignedBB(vec2, vec2).expand(0, .125, 0)
|
||||
.grow(.45, 0, .45);
|
||||
Vec3d poi1 = boundingBox1.getCenter();
|
||||
Vec3d poi2 = boundingBox2.getCenter();
|
||||
|
||||
public CoordinateScene(int index) {
|
||||
super(index);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, outlineSlot,
|
||||
i % 2 == 0 ? boundingBox1 : boundingBox2, 15);
|
||||
scene.idle(3);
|
||||
scene.special.movePointOfInterest(i % 2 == 0 ? poi1 : poi2);
|
||||
scene.idle(12);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.showSection(util.layersFrom(1), Direction.DOWN);
|
||||
|
||||
scene.idle(10);
|
||||
scene.showSelectionWithText(PonderPalette.RED, Select.fromTo(2, 1, 1, 4, 1, 1), "x", "Das X axis", 20);
|
||||
scene.idle(20);
|
||||
scene.showSelectionWithText(PonderPalette.GREEN, Select.fromTo(1, 2, 1, 1, 4, 1), "y", "Das Y axis", 20);
|
||||
scene.idle(20);
|
||||
scene.showSelectionWithText(PonderPalette.BLUE, Select.fromTo(1, 1, 2, 1, 1, 4), "z", "Das Z axis", 20);
|
||||
scene.idle(10);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Coordinate Space";
|
||||
}
|
||||
scene.idle(12);
|
||||
scene.special.movePointOfInterest(util.grid.at(-4, 5, 4));
|
||||
scene.overlay.showTargetedText(PonderPalette.RED, parrotPos.add(-.25f, 0.25f, .25f), "wut", "dafuq?", 40);
|
||||
|
||||
}
|
||||
|
||||
static class BlocksScene extends DebugScenes {
|
||||
public static void offScreenScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Out of bounds / configureBasePlate");
|
||||
scene.configureBasePlate(1, 0, 6);
|
||||
scene.showBasePlate();
|
||||
|
||||
public BlocksScene(int index) {
|
||||
super(index);
|
||||
}
|
||||
Selection out1 = util.select.fromTo(7, 0, 0, 8, 0, 5);
|
||||
Selection out2 = util.select.fromTo(0, 0, 0, 0, 0, 5);
|
||||
Selection blocksExceptBasePlate = util.select.layersFrom(1)
|
||||
.add(out1)
|
||||
.add(out2);
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.showSection(util.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
scene.showText(WHITE, 10, "change_blocks", "Blocks can be modified", 1000);
|
||||
scene.idle(20);
|
||||
scene.replaceBlocks(Select.fromTo(1, 1, 3, 2, 2, 4), AllBlocks.REFINED_RADIANCE_CASING.getDefaultState());
|
||||
scene.idle(10);
|
||||
scene.replaceBlocks(Select.pos(3, 1, 1), Blocks.GOLD_BLOCK.getDefaultState());
|
||||
scene.rotateCameraY(180);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
scene.idle(10);
|
||||
scene.world.showSection(blocksExceptBasePlate, Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Changing Blocks";
|
||||
}
|
||||
scene.overlay.showSelectionWithText(PonderPalette.BLACK, out1, "outofbounds",
|
||||
"Blocks outside of the base plate do not affect scaling", 100);
|
||||
scene.overlay.showSelectionWithText(PonderPalette.BLACK, out2, "thanks_to_configureBasePlate",
|
||||
"configureBasePlate() makes sure of that.", 100);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
public static void particleScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Emitting particles");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
Vec3d emitterPos = util.vector.at(2.5, 2.25, 2.5);
|
||||
Emitter emitter = Emitter.simple(ParticleTypes.LAVA, util.vector.at(0, .1, 0));
|
||||
Emitter rotation =
|
||||
Emitter.simple(new RotationIndicatorParticleData(SpeedLevel.MEDIUM.getColor(), 12, 1, 1, 20, 'Y'),
|
||||
util.vector.at(0, .1, 0));
|
||||
|
||||
scene.overlay.showTargetedText(WHITE, emitterPos, "incoming", "Incoming...", 20);
|
||||
scene.idle(30);
|
||||
scene.effects.emitParticles(emitterPos, emitter, 1, 60);
|
||||
scene.effects.emitParticles(emitterPos, rotation, 20, 1);
|
||||
scene.idle(30);
|
||||
scene.rotateCameraY(180);
|
||||
}
|
||||
|
||||
public static void controlsScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Basic player interaction");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layer(1), Direction.DOWN);
|
||||
scene.idle(4);
|
||||
scene.world.showSection(util.select.layer(2), Direction.DOWN);
|
||||
scene.idle(4);
|
||||
scene.world.showSection(util.select.layer(3), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
BlockPos shaftPos = util.grid.at(3, 1, 1);
|
||||
Selection shaftSelection = util.select.position(shaftPos);
|
||||
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(shaftPos), Pointing.DOWN).rightClick()
|
||||
.whileSneaking()
|
||||
.withWrench(), 40);
|
||||
scene.idle(20);
|
||||
scene.world.replaceBlocks(shaftSelection, AllBlocks.SHAFT.getDefaultState(), true);
|
||||
|
||||
scene.idle(20);
|
||||
scene.world.hideSection(shaftSelection, Direction.UP);
|
||||
|
||||
scene.idle(20);
|
||||
|
||||
scene.overlay.showControls(new InputWindowElement(util.vector.at(1, 4.5, 3.5), Pointing.LEFT).rightClick()
|
||||
.withItem(new ItemStack(Blocks.POLISHED_ANDESITE)), 20);
|
||||
scene.world.showSection(util.select.layer(4), Direction.DOWN);
|
||||
|
||||
scene.idle(40);
|
||||
|
||||
BlockPos chassis = util.grid.at(1, 1, 3);
|
||||
Vec3d chassisSurface = util.vector.blockSurface(chassis, Direction.NORTH);
|
||||
|
||||
Object chassisValueBoxHighlight = new Object();
|
||||
Object chassisEffectHighlight = new Object();
|
||||
|
||||
AxisAlignedBB point = new AxisAlignedBB(chassisSurface, chassisSurface);
|
||||
AxisAlignedBB expanded = point.grow(1 / 4f, 1 / 4f, 1 / 16f);
|
||||
|
||||
Selection singleBlock = util.select.position(1, 2, 3);
|
||||
Selection twoBlocks = util.select.fromTo(1, 2, 3, 1, 3, 3);
|
||||
Selection threeBlocks = util.select.fromTo(1, 2, 3, 1, 4, 3);
|
||||
|
||||
Selection singleRow = util.select.fromTo(1, 2, 3, 3, 2, 3);
|
||||
Selection twoRows = util.select.fromTo(1, 2, 3, 3, 3, 3);
|
||||
Selection threeRows = twoRows.copy()
|
||||
.add(threeBlocks);
|
||||
|
||||
scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, chassisValueBoxHighlight, point, 1);
|
||||
scene.idle(1);
|
||||
scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, chassisValueBoxHighlight, expanded, 120);
|
||||
scene.overlay.showControls(new InputWindowElement(chassisSurface, Pointing.UP).scroll()
|
||||
.withWrench(), 40);
|
||||
|
||||
PonderPalette white = PonderPalette.WHITE;
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, singleBlock, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, twoBlocks, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, threeBlocks, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, twoBlocks, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, singleBlock, 10);
|
||||
scene.idle(10);
|
||||
|
||||
scene.idle(30);
|
||||
scene.overlay.showControls(new InputWindowElement(chassisSurface, Pointing.UP).whileCTRL()
|
||||
.scroll()
|
||||
.withWrench(), 40);
|
||||
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, singleRow, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, twoRows, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, threeRows, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, twoRows, 10);
|
||||
scene.idle(10);
|
||||
scene.overlay.showOutline(white, chassisEffectHighlight, singleRow, 10);
|
||||
scene.idle(10);
|
||||
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
public static void birbScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Birbs");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
BlockPos pos = new BlockPos(1, 2, 3);
|
||||
scene.special.birbOnSpinnyShaft(pos);
|
||||
scene.overlay.showTargetedText(PonderPalette.GREEN, util.vector.topOf(pos), "birbs_interesting",
|
||||
"More birbs = More interesting", 100);
|
||||
|
||||
scene.idle(10);
|
||||
scene.special.birbPartying(util.vector.topOf(0, 1, 2));
|
||||
scene.idle(10);
|
||||
|
||||
scene.special.birbLookingAtPOI(util.vector.centerOf(3, 1, 3)
|
||||
.add(0, 0.25f, 0));
|
||||
scene.idle(20);
|
||||
|
||||
BlockPos poi1 = util.grid.at(4, 1, 0);
|
||||
BlockPos poi2 = util.grid.at(0, 1, 4);
|
||||
|
||||
scene.world.setBlock(poi1, Blocks.GOLD_BLOCK.getDefaultState());
|
||||
scene.special.movePointOfInterest(poi1);
|
||||
scene.idle(20);
|
||||
|
||||
scene.world.setBlock(poi2, Blocks.GOLD_BLOCK.getDefaultState());
|
||||
scene.special.movePointOfInterest(poi2);
|
||||
scene.overlay.showTargetedText(PonderPalette.FAST, util.vector.centerOf(poi2), "poi", "Point of Interest", 20);
|
||||
scene.idle(20);
|
||||
|
||||
scene.world.setBlock(poi1, Blocks.AIR.getDefaultState());
|
||||
scene.special.movePointOfInterest(poi1);
|
||||
scene.idle(20);
|
||||
|
||||
scene.world.setBlock(poi2, Blocks.AIR.getDefaultState());
|
||||
scene.special.movePointOfInterest(poi2);
|
||||
}
|
||||
|
||||
public static void sectionsScene(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Sections");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.rotateCameraY(95);
|
||||
|
||||
BlockPos mergePos = util.grid.at(1, 1, 1);
|
||||
BlockPos independentPos = util.grid.at(3, 1, 1);
|
||||
Selection toMerge = util.select.position(mergePos);
|
||||
Selection independent = util.select.position(independentPos);
|
||||
Selection start = util.select.layersFrom(1)
|
||||
.substract(toMerge)
|
||||
.substract(independent);
|
||||
|
||||
scene.world.showSection(start, Direction.DOWN);
|
||||
scene.idle(20);
|
||||
|
||||
scene.world.showSection(toMerge, Direction.DOWN);
|
||||
ElementLink<WorldSectionElement> link = scene.world.showIndependentSection(independent, Direction.DOWN);
|
||||
|
||||
scene.idle(20);
|
||||
|
||||
scene.overlay.showTargetedText(PonderPalette.GREEN, util.vector.topOf(mergePos), "merged",
|
||||
"This Section got merged to base.", 40);
|
||||
scene.idle(10);
|
||||
scene.overlay.showTargetedText(PonderPalette.RED, util.vector.topOf(independentPos), "independent",
|
||||
"This Section renders independently.", 40);
|
||||
|
||||
scene.idle(40);
|
||||
|
||||
scene.world.hideIndependentSection(link, Direction.DOWN);
|
||||
scene.world.hideSection(util.select.fromTo(mergePos, util.grid.at(1, 1, 4)), Direction.DOWN);
|
||||
|
||||
scene.idle(20);
|
||||
|
||||
Selection hiddenReplaceArea = util.select.fromTo(2, 1, 2, 4, 1, 4)
|
||||
.substract(util.select.position(4, 1, 3))
|
||||
.substract(util.select.position(2, 1, 3));
|
||||
|
||||
scene.world.hideSection(hiddenReplaceArea, Direction.UP);
|
||||
scene.idle(20);
|
||||
scene.world.setBlocks(hiddenReplaceArea, AllBlocks.REFINED_RADIANCE_CASING.getDefaultState(), false);
|
||||
scene.world.showSection(hiddenReplaceArea, Direction.DOWN);
|
||||
scene.idle(20);
|
||||
scene.overlay.showSelectionWithText(PonderPalette.BLUE, hiddenReplaceArea, "seamless",
|
||||
"Seamless substitution of blocks", 30);
|
||||
|
||||
scene.idle(40);
|
||||
|
||||
ElementLink<WorldSectionElement> helicopter = scene.world.makeSectionIndependent(hiddenReplaceArea);
|
||||
scene.world.rotateSection(helicopter, 50, 5 * 360, 0, 60);
|
||||
scene.world.moveSection(helicopter, util.vector.at(0, 4, 5), 50);
|
||||
scene.overlay.showText(PonderPalette.BLUE, 30, "blast_off", "Up, up and away.", 30);
|
||||
|
||||
scene.idle(40);
|
||||
scene.world.hideIndependentSection(helicopter, Direction.UP);
|
||||
|
||||
}
|
||||
|
||||
static class FluidsScene extends DebugScenes {
|
||||
|
||||
public FluidsScene(int index) {
|
||||
super(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.showSection(util.layersFrom(1), Direction.DOWN);
|
||||
scene.showTargetedText(WHITE, new Vec3d(1, 2.5, 4.5), "fluids", "Fluid rendering test.", 1000);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Showing Fluids";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class OffScreenScene extends DebugScenes {
|
||||
|
||||
public OffScreenScene(int index) {
|
||||
super(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.configureBasePlate(1, 0, 6);
|
||||
scene.showBasePlate();
|
||||
Select out1 = Select.fromTo(7, 0, 0, 8, 0, 5);
|
||||
Select out2 = Select.fromTo(0, 0, 0, 0, 0, 5);
|
||||
scene.idle(10);
|
||||
scene.showSection(Select.compound(util.layersFrom(1), out1, out2), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
scene.showSelectionWithText(PonderPalette.BLACK, out1, "outofbounds",
|
||||
"Blocks outside of the base plate do not affect scaling", 100);
|
||||
scene.showSelectionWithText(PonderPalette.BLACK, out2, "thanks_to_configureBasePlate",
|
||||
"configureBasePlate() makes sure of that.", 100);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Out of bounds / configureBasePlate";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class ParticlesScene extends DebugScenes {
|
||||
|
||||
public ParticlesScene(int index) {
|
||||
super(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.showSection(util.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
Vec3d emitterPos = util.vector(2.5, 2.25, 2.5);
|
||||
Emitter emitter = Emitter.simple(ParticleTypes.LAVA, util.vector(0, .1, 0));
|
||||
Emitter rotation =
|
||||
Emitter.simple(new RotationIndicatorParticleData(SpeedLevel.MEDIUM.getColor(), 12, 1, 1, 20, 'Y'),
|
||||
util.vector(0, .1, 0));
|
||||
|
||||
scene.showTargetedText(WHITE, emitterPos, "incoming", "Incoming...", 20);
|
||||
scene.idle(30);
|
||||
scene.addInstruction(new EmitParticlesInstruction(emitterPos, emitter, 1, 60));
|
||||
scene.addInstruction(new EmitParticlesInstruction(emitterPos, rotation, 20, 1));
|
||||
scene.idle(30);
|
||||
scene.rotateCameraY(180);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Emitting particles";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class ControlsScene extends DebugScenes {
|
||||
|
||||
public ControlsScene(int index) {
|
||||
super(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.showSection(util.layer(1), Direction.DOWN);
|
||||
scene.idle(4);
|
||||
scene.showSection(util.layer(2), Direction.DOWN);
|
||||
scene.idle(4);
|
||||
scene.showSection(util.layer(3), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
scene.showControls(new InputWindowElement(util.topOf(3, 1, 1), Pointing.DOWN).rightClick()
|
||||
.whileSneaking()
|
||||
.withWrench(), 40);
|
||||
scene.idle(8);
|
||||
scene.replaceBlocks(Select.pos(3, 1, 1), AllBlocks.SHAFT.getDefaultState());
|
||||
scene.idle(20);
|
||||
|
||||
scene.showControls(new InputWindowElement(new Vec3d(1, 4.5, 3.5), Pointing.LEFT).rightClick()
|
||||
.withItem(new ItemStack(Blocks.POLISHED_ANDESITE)), 20);
|
||||
scene.idle(4);
|
||||
scene.showSection(util.layer(4), Direction.DOWN);
|
||||
scene.idle(8);
|
||||
|
||||
scene.showControls(new InputWindowElement(new Vec3d(2.5, 1.5, 3), Pointing.UP).whileCTRL()
|
||||
.scroll()
|
||||
.withWrench(), 40);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Basic player interaction";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class BirbScene extends DebugScenes {
|
||||
|
||||
public BirbScene(int index) {
|
||||
super(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.showSection(util.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
BlockPos pos = new BlockPos(1, 2, 3);
|
||||
scene.birbOnSpinnyShaft(pos);
|
||||
scene.showTargetedText(PonderPalette.GREEN, util.topOf(1, 2, 3), "birbs_interesting",
|
||||
"More birbs = More interesting", 100);
|
||||
scene.idle(10);
|
||||
scene.birbPartying(util.topOf(0, 1, 2));
|
||||
scene.idle(10);
|
||||
|
||||
scene.movePOI(Vec3d.ZERO);
|
||||
scene.birbLookingAtPOI(util.centerOf(3, 1, 3)
|
||||
.add(0, 0.25f, 0));
|
||||
scene.idle(20);
|
||||
|
||||
scene.replaceBlocks(Select.pos(4, 1, 0), Blocks.GOLD_BLOCK.getDefaultState());
|
||||
scene.movePOI(util.centerOf(4, 1, 0));
|
||||
scene.idle(20);
|
||||
|
||||
scene.replaceBlocks(Select.pos(0, 1, 4), Blocks.GOLD_BLOCK.getDefaultState());
|
||||
scene.movePOI(util.centerOf(0, 1, 4));
|
||||
scene.showTargetedText(PonderPalette.FAST, util.centerOf(0, 1, 4), "poi", "Point of Interest", 20);
|
||||
scene.idle(20);
|
||||
|
||||
scene.replaceBlocks(Select.pos(4, 1, 0), Blocks.AIR.getDefaultState());
|
||||
scene.movePOI(util.centerOf(4, 1, 0));
|
||||
scene.idle(20);
|
||||
|
||||
scene.replaceBlocks(Select.pos(0, 1, 4), Blocks.AIR.getDefaultState());
|
||||
scene.movePOI(util.centerOf(0, 1, 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitle() {
|
||||
return "Birbs";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
import static com.simibubi.create.foundation.ponder.content.PonderPalette.WHITE;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
|
||||
public class KineticsScenes {
|
||||
|
||||
public static void template(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("This is a template");
|
||||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
public static void shaftAsRelay(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Relaying rotational force using Shafts");
|
||||
scene.configureBasePlate(0, 0, 5);
|
||||
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||
|
||||
BlockPos gaugePos = util.grid.at(0, 1, 2);
|
||||
Selection gauge = util.select.position(gaugePos);
|
||||
scene.world.showSection(gauge, Direction.UP);
|
||||
scene.world.setKineticSpeed(gauge, 0);
|
||||
|
||||
scene.idle(5);
|
||||
scene.world.showSection(util.select.position(5, 1, 2), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
for (int i = 4; i >= 1; i--) {
|
||||
if (i == 2)
|
||||
scene.rotateCameraY(70);
|
||||
scene.idle(5);
|
||||
scene.world.showSection(util.select.position(i, 1, 2), Direction.DOWN);
|
||||
}
|
||||
|
||||
scene.world.setKineticSpeed(gauge, 64);
|
||||
scene.effects.indicateSuccess(gaugePos);
|
||||
scene.idle(10);
|
||||
scene.overlay.showTargetedText(WHITE, util.vector.at(3, 1.5, 2.5), "shaft_relay",
|
||||
"Shafts will relay rotation in a straight line.", 1000);
|
||||
|
||||
scene.idle(20);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
public static void shaftsCanBeEncased(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Encasing Shafts");
|
||||
scene.showBasePlate();
|
||||
|
||||
Selection shaft = util.select.cuboid(new BlockPos(0, 1, 2), new Vec3i(4, 0, 2));
|
||||
Selection andesite = util.select.position(3, 1, 2);
|
||||
Selection brass = util.select.position(1, 1, 2);
|
||||
|
||||
scene.world.showSection(shaft, Direction.DOWN);
|
||||
scene.idle(20);
|
||||
|
||||
BlockEntry<EncasedShaftBlock> andesiteEncased = AllBlocks.ANDESITE_ENCASED_SHAFT;
|
||||
ItemStack andesiteCasingItem = AllBlocks.ANDESITE_CASING.asStack();
|
||||
|
||||
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(3, 1, 2), Pointing.DOWN).rightClick()
|
||||
.withItem(andesiteCasingItem), 60);
|
||||
scene.idle(7);
|
||||
scene.world.setBlocks(andesite, andesiteEncased.getDefaultState()
|
||||
.with(EncasedShaftBlock.AXIS, Axis.X), true);
|
||||
scene.world.setKineticSpeed(shaft, -112);
|
||||
scene.idle(10);
|
||||
|
||||
BlockEntry<EncasedShaftBlock> brassEncased = AllBlocks.BRASS_ENCASED_SHAFT;
|
||||
ItemStack brassCasingItem = AllBlocks.BRASS_CASING.asStack();
|
||||
|
||||
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(1, 0, 2), Pointing.UP).rightClick()
|
||||
.withItem(brassCasingItem), 60);
|
||||
scene.idle(7);
|
||||
scene.world.setBlocks(brass, brassEncased.getDefaultState()
|
||||
.with(EncasedShaftBlock.AXIS, Axis.X), true);
|
||||
scene.world.setKineticSpeed(shaft, -112);
|
||||
|
||||
scene.idle(10);
|
||||
scene.overlay.showTargetedText(WHITE, util.vector.at(1.5, 2, 2.5), "shaft_can_be_encased",
|
||||
"Andesite or Brass Casing can be used to encase them.", 1000);
|
||||
}
|
||||
|
||||
}
|
|
@ -5,19 +5,18 @@ import com.simibubi.create.foundation.ponder.PonderRegistry;
|
|||
|
||||
public class PonderIndex {
|
||||
|
||||
/**
|
||||
* When true, lang files are bypassed and any text in ponder can be hot-swapped
|
||||
* without the need of runData
|
||||
*/
|
||||
public static final boolean EDITOR_MODE = true;
|
||||
|
||||
public static void register() {
|
||||
// Register storyboards here (Requires re-launch)
|
||||
// Register storyboards here (Changes require re-launch)
|
||||
|
||||
PonderRegistry.addStoryBoard(AllBlocks.SHAFT, new ShaftAsRelay());
|
||||
PonderRegistry.addStoryBoard(AllBlocks.SHAFT, new ShaftsCanBeEncased());
|
||||
PonderRegistry.forComponent(AllBlocks.SHAFT)
|
||||
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay)
|
||||
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased);
|
||||
|
||||
DebugScenes.registerAll();
|
||||
// Debug scenes, can be found in game via the Brass Hand
|
||||
if (EDITOR_MODE)
|
||||
DebugScenes.registerAll();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
import static com.simibubi.create.foundation.ponder.content.PonderPalette.WHITE;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil;
|
||||
import com.simibubi.create.foundation.ponder.PonderStoryBoard;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
class ShaftAsRelay extends PonderStoryBoard {
|
||||
|
||||
@Override
|
||||
public String getSchematicName() {
|
||||
return "shaft/shaft";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStoryTitle() {
|
||||
return "Relaying rotational force using Shafts";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.configureBasePlate(0, 0, 5);
|
||||
scene.showSection(util.layer(0), Direction.UP);
|
||||
|
||||
Select gauge = Select.pos(0, 1, 2);
|
||||
scene.showSection(gauge, Direction.UP);
|
||||
scene.setKineticSpeed(gauge, 0);
|
||||
|
||||
scene.idle(5);
|
||||
scene.showSection(Select.pos(5, 1, 2), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
for (int i = 4; i >= 1; i--) {
|
||||
if (i == 2)
|
||||
scene.rotateCameraY(70);
|
||||
scene.idle(5);
|
||||
scene.showSection(Select.pos(i, 1, 2), Direction.DOWN);
|
||||
}
|
||||
|
||||
scene.setKineticSpeed(gauge, 64);
|
||||
scene.indicateSuccess(new BlockPos(0, 1, 2));
|
||||
scene.idle(10);
|
||||
scene.showTargetedText(WHITE, new Vec3d(3, 1.5, 2.5), "shaft_relay",
|
||||
"Shafts will relay rotation in a straight line.", 1000);
|
||||
|
||||
scene.idle(20);
|
||||
scene.markAsFinished();
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
import static com.simibubi.create.foundation.ponder.content.PonderPalette.WHITE;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene.SceneBuilder.SceneBuildingUtil;
|
||||
import com.simibubi.create.foundation.ponder.PonderStoryBoard;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
|
||||
class ShaftsCanBeEncased extends PonderStoryBoard {
|
||||
|
||||
@Override
|
||||
public String getSchematicName() {
|
||||
return "shaft/encasing_shafts";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStoryTitle() {
|
||||
return "Encasing Shafts";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void program(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.showBasePlate();
|
||||
|
||||
Select shaft = Select.cuboid(new BlockPos(0, 1, 2), new Vec3i(4, 0, 2));
|
||||
Select andesite = Select.pos(3, 1, 2);
|
||||
Select brass = Select.pos(1, 1, 2);
|
||||
|
||||
scene.showSection(shaft, Direction.DOWN);
|
||||
scene.idle(20);
|
||||
|
||||
BlockEntry<EncasedShaftBlock> andesiteEncased = AllBlocks.ANDESITE_ENCASED_SHAFT;
|
||||
scene.showControls(new InputWindowElement(util.topOf(3, 1, 2), Pointing.DOWN).rightClick()
|
||||
.withItem(AllBlocks.ANDESITE_CASING.asStack()), 60);
|
||||
scene.idle(7);
|
||||
scene.setBlocks(andesite, andesiteEncased.getDefaultState()
|
||||
.with(EncasedShaftBlock.AXIS, Axis.X));
|
||||
scene.setKineticSpeed(shaft, -112);
|
||||
scene.idle(10);
|
||||
|
||||
BlockEntry<EncasedShaftBlock> brassEncased = AllBlocks.BRASS_ENCASED_SHAFT;
|
||||
scene.showControls(new InputWindowElement(util.topOf(1, 0, 2), Pointing.UP).rightClick()
|
||||
.withItem(AllBlocks.BRASS_CASING.asStack()), 60);
|
||||
scene.idle(7);
|
||||
scene.setBlocks(brass, brassEncased.getDefaultState()
|
||||
.with(EncasedShaftBlock.AXIS, Axis.X));
|
||||
scene.setKineticSpeed(shaft, -112);
|
||||
|
||||
scene.idle(10);
|
||||
scene.showTargetedText(WHITE, new Vec3d(1.5, 2, 2.5), "shaft_can_be_encased",
|
||||
"Andesite or Brass Casing can be used to encase them.", 1000);
|
||||
}
|
||||
|
||||
}
|
|
@ -8,6 +8,7 @@ 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;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public abstract class AnimatedSceneElement extends PonderSceneElement {
|
||||
|
@ -20,6 +21,10 @@ public abstract class AnimatedSceneElement extends PonderSceneElement {
|
|||
.startWithValue(0);
|
||||
}
|
||||
|
||||
public void forceApplyFade(float fade) {
|
||||
this.fade.startWithValue(fade);
|
||||
}
|
||||
|
||||
public void setFade(float fade) {
|
||||
this.fade.setValue(fade);
|
||||
}
|
||||
|
@ -71,7 +76,7 @@ public abstract class AnimatedSceneElement extends PonderSceneElement {
|
|||
protected int lightCoordsFromFade(float fade) {
|
||||
int light = 0xF000F0;
|
||||
if (fade != 1) {
|
||||
light = (int) (0xF * fade);
|
||||
light = (int) (MathHelper.lerp(fade, 5, 0xF));
|
||||
light = light << 4 | light << 20;
|
||||
}
|
||||
return light;
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.simibubi.create.foundation.ponder.elements;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
@ -12,11 +11,14 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
|||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.PonderWorld;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
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.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockRenderType;
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -34,6 +36,7 @@ import net.minecraft.fluid.IFluidState;
|
|||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||
|
||||
|
@ -42,18 +45,99 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
public static final Compartment<Pair<Integer, Integer>> DOC_WORLD_SECTION = new Compartment<>();
|
||||
|
||||
List<TileEntity> renderedTileEntities;
|
||||
Select section;
|
||||
Selection section;
|
||||
boolean redraw;
|
||||
|
||||
public WorldSectionElement(Select section) {
|
||||
this.section = section;
|
||||
Vec3d prevAnimatedOffset = Vec3d.ZERO;
|
||||
Vec3d animatedOffset = Vec3d.ZERO;
|
||||
Vec3d prevAnimatedRotation = Vec3d.ZERO;
|
||||
Vec3d animatedRotation = Vec3d.ZERO;
|
||||
Vec3d centerOfRotation = Vec3d.ZERO;
|
||||
|
||||
public WorldSectionElement() {}
|
||||
|
||||
public WorldSectionElement(Selection section) {
|
||||
this.section = section.copy();
|
||||
centerOfRotation = section.getCenter();
|
||||
}
|
||||
|
||||
public void queueRedraw(PonderWorld world) {
|
||||
public void mergeOnto(WorldSectionElement other) {
|
||||
setVisible(false);
|
||||
if (other.isEmpty())
|
||||
other.set(section);
|
||||
else
|
||||
other.add(section);
|
||||
}
|
||||
|
||||
public void set(Selection selection) {
|
||||
applyNewSelection(selection.copy());
|
||||
}
|
||||
|
||||
public void add(Selection toAdd) {
|
||||
applyNewSelection(this.section.add(toAdd));
|
||||
}
|
||||
|
||||
public void erase(Selection toErase) {
|
||||
applyNewSelection(this.section.substract(toErase));
|
||||
}
|
||||
|
||||
private void applyNewSelection(Selection selection) {
|
||||
this.section = selection;
|
||||
centerOfRotation = this.section.getCenter();
|
||||
queueRedraw();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(PonderScene scene) {
|
||||
super.reset(scene);
|
||||
resetAnimatedTransform();
|
||||
}
|
||||
|
||||
public void resetAnimatedTransform() {
|
||||
prevAnimatedOffset = Vec3d.ZERO;
|
||||
animatedOffset = Vec3d.ZERO;
|
||||
prevAnimatedRotation = Vec3d.ZERO;
|
||||
animatedRotation = Vec3d.ZERO;
|
||||
}
|
||||
|
||||
public void queueRedraw() {
|
||||
redraw = true;
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return section == null;
|
||||
}
|
||||
|
||||
public void setEmpty() {
|
||||
section = null;
|
||||
}
|
||||
|
||||
public void setAnimatedRotation(Vec3d eulerAngles) {
|
||||
this.animatedRotation = eulerAngles;
|
||||
}
|
||||
|
||||
public Vec3d getAnimatedRotation() {
|
||||
return animatedRotation;
|
||||
}
|
||||
|
||||
public void setAnimatedOffset(Vec3d offset) {
|
||||
this.animatedOffset = offset;
|
||||
}
|
||||
|
||||
public Vec3d getAnimatedOffset() {
|
||||
return animatedOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return super.isVisible() && !isEmpty();
|
||||
}
|
||||
|
||||
public void tick(PonderScene scene) {
|
||||
prevAnimatedOffset = animatedOffset;
|
||||
prevAnimatedRotation = animatedRotation;
|
||||
if (!isVisible())
|
||||
return;
|
||||
if (renderedTileEntities == null)
|
||||
return;
|
||||
renderedTileEntities.forEach(te -> {
|
||||
|
@ -65,6 +149,19 @@ 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);
|
||||
|
||||
renderStructure(world, ms, buffer, type, fade);
|
||||
}
|
||||
|
||||
|
@ -108,10 +205,11 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
private void renderTileEntities(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer) {
|
||||
if (renderedTileEntities == null) {
|
||||
renderedTileEntities = new ArrayList<>();
|
||||
section.all()
|
||||
.map(world::getTileEntity)
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(renderedTileEntities::add);
|
||||
section.forEach(pos -> {
|
||||
TileEntity tileEntity = world.getTileEntity(pos);
|
||||
if (tileEntity != null)
|
||||
renderedTileEntities.add(tileEntity);
|
||||
});
|
||||
} else
|
||||
renderedTileEntities.removeIf(te -> world.getTileEntity(te.getPos()) != te);
|
||||
|
||||
|
@ -129,24 +227,23 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
|
||||
world.setMask(this.section);
|
||||
|
||||
section.all()
|
||||
.forEach(pos -> {
|
||||
BlockState state = world.getBlockState(pos);
|
||||
IFluidState ifluidstate = world.getFluidState(pos);
|
||||
section.forEach(pos -> {
|
||||
BlockState state = world.getBlockState(pos);
|
||||
IFluidState ifluidstate = world.getFluidState(pos);
|
||||
|
||||
ms.push();
|
||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
ms.push();
|
||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
|
||||
if (state.getRenderType() != BlockRenderType.ENTITYBLOCK_ANIMATED && state.getBlock() != Blocks.AIR
|
||||
&& RenderTypeLookup.canRenderInLayer(state, layer))
|
||||
blockRenderer.renderModel(world, dispatcher.getModelForState(state), state, pos, ms, builder, true,
|
||||
random, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE);
|
||||
if (state.getRenderType() != BlockRenderType.ENTITYBLOCK_ANIMATED && state.getBlock() != Blocks.AIR
|
||||
&& RenderTypeLookup.canRenderInLayer(state, layer))
|
||||
blockRenderer.renderModel(world, dispatcher.getModelForState(state), state, pos, ms, builder, true,
|
||||
random, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE);
|
||||
|
||||
if (!ifluidstate.isEmpty() && RenderTypeLookup.canRenderInLayer(ifluidstate, layer))
|
||||
dispatcher.renderFluid(pos, world, builder, ifluidstate);
|
||||
if (!ifluidstate.isEmpty() && RenderTypeLookup.canRenderInLayer(ifluidstate, layer))
|
||||
dispatcher.renderFluid(pos, world, builder, ifluidstate);
|
||||
|
||||
ms.pop();
|
||||
});
|
||||
ms.pop();
|
||||
});
|
||||
|
||||
world.clearMask();
|
||||
builder.finishDrawing();
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class AnimateWorldSectionInstruction extends TickingInstruction {
|
||||
|
||||
protected Vec3d deltaPerTick;
|
||||
protected Vec3d totalDelta;
|
||||
protected Vec3d target;
|
||||
protected ElementLink<WorldSectionElement> link;
|
||||
protected WorldSectionElement element;
|
||||
|
||||
private BiConsumer<WorldSectionElement, Vec3d> setter;
|
||||
private Function<WorldSectionElement, Vec3d> getter;
|
||||
|
||||
public static AnimateWorldSectionInstruction rotate(ElementLink<WorldSectionElement> link, Vec3d rotation,
|
||||
int ticks) {
|
||||
return new AnimateWorldSectionInstruction(link, rotation, ticks, WorldSectionElement::setAnimatedRotation,
|
||||
WorldSectionElement::getAnimatedRotation);
|
||||
}
|
||||
|
||||
public static AnimateWorldSectionInstruction move(ElementLink<WorldSectionElement> link, Vec3d offset, int ticks) {
|
||||
return new AnimateWorldSectionInstruction(link, offset, ticks, WorldSectionElement::setAnimatedOffset,
|
||||
WorldSectionElement::getAnimatedOffset);
|
||||
}
|
||||
|
||||
protected AnimateWorldSectionInstruction(ElementLink<WorldSectionElement> link, Vec3d totalDelta, int ticks,
|
||||
BiConsumer<WorldSectionElement, Vec3d> setter, Function<WorldSectionElement, Vec3d> getter) {
|
||||
super(false, ticks);
|
||||
this.link = link;
|
||||
this.setter = setter;
|
||||
this.getter = getter;
|
||||
this.deltaPerTick = totalDelta.scale(1d / ticks);
|
||||
this.totalDelta = totalDelta;
|
||||
this.target = totalDelta;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void firstTick(PonderScene scene) {
|
||||
super.firstTick(scene);
|
||||
element = scene.resolve(link);
|
||||
if (element == null)
|
||||
return;
|
||||
target = getter.apply(element)
|
||||
.add(totalDelta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
super.tick(scene);
|
||||
if (element == null)
|
||||
return;
|
||||
if (remainingTicks == 0) {
|
||||
setter.accept(element, target);
|
||||
return;
|
||||
}
|
||||
setter.accept(element, getter.apply(element)
|
||||
.add(deltaPerTick));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderPalette;
|
||||
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
|
||||
public class ChaseAABBInstruction extends TickingInstruction {
|
||||
|
||||
private AxisAlignedBB bb;
|
||||
private Object slot;
|
||||
private PonderPalette color;
|
||||
|
||||
public ChaseAABBInstruction(PonderPalette color, Object slot, AxisAlignedBB bb, int ticks) {
|
||||
super(false, ticks);
|
||||
this.color = color;
|
||||
this.slot = slot;
|
||||
this.bb = bb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
super.tick(scene);
|
||||
scene.getOutliner()
|
||||
.chaseAABB(slot, bb)
|
||||
.lineWidth(1 / 16f)
|
||||
.colored(color.getColor());
|
||||
}
|
||||
|
||||
}
|
|
@ -10,4 +10,9 @@ public class CreateParrotInstruction extends FadeIntoSceneInstruction<ParrotElem
|
|||
super(fadeInTicks, fadeInFrom, element);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<ParrotElement> getElementClass() {
|
||||
return ParrotElement.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,13 +1,42 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
|
||||
public class DisplayWorldSectionInstruction extends FadeIntoSceneInstruction<WorldSectionElement> {
|
||||
|
||||
public DisplayWorldSectionInstruction(int fadeInTicks, Direction fadeInFrom, WorldSectionElement element) {
|
||||
super(fadeInTicks, fadeInFrom, element);
|
||||
private Selection initialSelection;
|
||||
private boolean mergeToBase;
|
||||
|
||||
public DisplayWorldSectionInstruction(int fadeInTicks, Direction fadeInFrom, Selection selection, boolean mergeToBase) {
|
||||
super(fadeInTicks, fadeInFrom, new WorldSectionElement(selection));
|
||||
initialSelection = selection;
|
||||
this.mergeToBase = mergeToBase;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void firstTick(PonderScene scene) {
|
||||
super.firstTick(scene);
|
||||
element.set(initialSelection);
|
||||
element.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
super.tick(scene);
|
||||
if (remainingTicks > 0)
|
||||
return;
|
||||
if (!mergeToBase)
|
||||
return;
|
||||
element.mergeOnto(scene.getBaseWorldSection());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<WorldSectionElement> getElementClass() {
|
||||
return WorldSectionElement.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,21 +1,25 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.elements.AnimatedSceneElement;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class FadeIntoSceneInstruction<T extends AnimatedSceneElement> extends TickingInstruction {
|
||||
public abstract class FadeIntoSceneInstruction<T extends AnimatedSceneElement> extends TickingInstruction {
|
||||
|
||||
private Direction fadeInFrom;
|
||||
private T element;
|
||||
protected T element;
|
||||
private ElementLink<T> elementLink;
|
||||
|
||||
public FadeIntoSceneInstruction(int fadeInTicks, Direction fadeInFrom, T element) {
|
||||
super(false, fadeInTicks);
|
||||
this.fadeInFrom = fadeInFrom;
|
||||
this.element = element;
|
||||
}
|
||||
super(false, fadeInTicks);
|
||||
this.fadeInFrom = fadeInFrom;
|
||||
this.element = element;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void firstTick(PonderScene scene) {
|
||||
|
@ -23,6 +27,8 @@ public class FadeIntoSceneInstruction<T extends AnimatedSceneElement> extends Ti
|
|||
scene.addElement(element);
|
||||
element.setFade(0);
|
||||
element.setFadeVec(new Vec3d(fadeInFrom.getDirectionVec()).scale(.5f));
|
||||
if (elementLink != null)
|
||||
scene.linkElement(element, elementLink);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -34,4 +40,12 @@ public class FadeIntoSceneInstruction<T extends AnimatedSceneElement> extends Ti
|
|||
element.setFade(1);
|
||||
}
|
||||
|
||||
public ElementLink<T> createLink(PonderScene scene) {
|
||||
elementLink = new ElementLink<>(getElementClass(), UUID.randomUUID());
|
||||
scene.linkElement(element, elementLink);
|
||||
return elementLink;
|
||||
}
|
||||
|
||||
protected abstract Class<T> getElementClass();
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.elements.AnimatedSceneElement;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class FadeOutOfSceneInstruction<T extends AnimatedSceneElement> extends TickingInstruction {
|
||||
|
||||
private Direction fadeOutTo;
|
||||
private ElementLink<T> link;
|
||||
private T element;
|
||||
|
||||
public FadeOutOfSceneInstruction(int fadeOutTicks, Direction fadeOutTo, ElementLink<T> link) {
|
||||
super(false, fadeOutTicks);
|
||||
this.fadeOutTo = fadeOutTo.getOpposite();
|
||||
this.link = link;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void firstTick(PonderScene scene) {
|
||||
super.firstTick(scene);
|
||||
element = scene.resolve(link);
|
||||
if (element == null)
|
||||
return;
|
||||
element.setVisible(true);
|
||||
element.setFade(1);
|
||||
element.setFadeVec(new Vec3d(fadeOutTo.getDirectionVec()).scale(.5f));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
super.tick(scene);
|
||||
if (element == null)
|
||||
return;
|
||||
float fade = (remainingTicks / (float) totalTicks);
|
||||
element.setFade(1 - (1 - fade) * (1 - fade));
|
||||
if (remainingTicks == 0) {
|
||||
element.setVisible(false);
|
||||
element.setFade(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -12,7 +12,7 @@ public class MarkAsFinishedInstruction extends PonderInstruction {
|
|||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
scene.finished = true;
|
||||
scene.setFinished(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.content.PonderPalette;
|
||||
|
||||
public class OutlineSelectionInstruction extends TickingInstruction {
|
||||
|
||||
private PonderPalette color;
|
||||
private Object slot;
|
||||
private Selection selection;
|
||||
|
||||
public OutlineSelectionInstruction(PonderPalette color, Object slot, Selection selection, int ticks) {
|
||||
super(false, ticks);
|
||||
this.color = color;
|
||||
this.slot = slot;
|
||||
this.selection = selection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
super.tick(scene);
|
||||
selection.makeOutline(scene.getOutliner(), slot)
|
||||
.lineWidth(1 / 16f)
|
||||
.colored(color.getColor());
|
||||
}
|
||||
|
||||
}
|
|
@ -2,7 +2,7 @@ package com.simibubi.create.foundation.ponder.instructions;
|
|||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.PonderWorld;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
|
@ -11,27 +11,30 @@ public class ReplaceBlocksInstruction extends WorldModifyInstruction {
|
|||
|
||||
private BlockState stateToUse;
|
||||
private boolean replaceAir;
|
||||
private boolean spawnParticles;
|
||||
|
||||
public ReplaceBlocksInstruction(Select selection, BlockState stateToUse, boolean replaceAir) {
|
||||
public ReplaceBlocksInstruction(Selection selection, BlockState stateToUse, boolean replaceAir,
|
||||
boolean spawnParticles) {
|
||||
super(selection);
|
||||
this.stateToUse = stateToUse;
|
||||
this.replaceAir = replaceAir;
|
||||
this.spawnParticles = spawnParticles;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void runModification(Select selection, PonderScene scene) {
|
||||
protected void runModification(Selection selection, PonderScene scene) {
|
||||
PonderWorld world = scene.getWorld();
|
||||
selection.all()
|
||||
.forEach(pos -> {
|
||||
if (!world.getBounds()
|
||||
.isVecInside(pos))
|
||||
return;
|
||||
BlockState prevState = world.getBlockState(pos);
|
||||
if (!replaceAir && prevState == Blocks.AIR.getDefaultState())
|
||||
return;
|
||||
selection.forEach(pos -> {
|
||||
if (!world.getBounds()
|
||||
.isVecInside(pos))
|
||||
return;
|
||||
BlockState prevState = world.getBlockState(pos);
|
||||
if (!replaceAir && prevState == Blocks.AIR.getDefaultState())
|
||||
return;
|
||||
if (spawnParticles)
|
||||
world.addBlockDestroyEffects(pos, prevState);
|
||||
world.setBlockState(pos, stateToUse);
|
||||
});
|
||||
world.setBlockState(pos, stateToUse);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,14 +2,13 @@ package com.simibubi.create.foundation.ponder.instructions;
|
|||
|
||||
import com.simibubi.create.foundation.ponder.PonderInstruction;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
|
||||
public class ShowCompleteSchematicInstruction extends PonderInstruction {
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
scene.addElement(Select.everything(scene.getBounds())
|
||||
.asElement());
|
||||
scene.addElement(new WorldSectionElement(scene.getSceneBuildingUtil().select.everywhere()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.simibubi.create.foundation.ponder.instructions;
|
|||
import java.util.function.Supplier;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.elements.OutlinerElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.TextWindowElement;
|
||||
|
||||
|
@ -18,7 +18,7 @@ public class TextInstruction extends FadeInOutInstruction {
|
|||
super(duration);
|
||||
}
|
||||
|
||||
public TextInstruction(int color, Supplier<String> text, int duration, Select selection) {
|
||||
public TextInstruction(int color, Supplier<String> text, int duration, Selection selection) {
|
||||
this(color, text, duration);
|
||||
element = new TextWindowElement(text).pointAt(selection.getCenter());
|
||||
element.colored(color);
|
||||
|
|
|
@ -4,7 +4,7 @@ import java.util.function.UnaryOperator;
|
|||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.PonderWorld;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.tileEntity.SyncedTileEntity;
|
||||
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
|
@ -16,7 +16,7 @@ public class TileEntityDataInstruction extends WorldModifyInstruction {
|
|||
private UnaryOperator<CompoundNBT> data;
|
||||
private Class<? extends TileEntity> type;
|
||||
|
||||
public TileEntityDataInstruction(Select selection, Class<? extends TileEntity> type,
|
||||
public TileEntityDataInstruction(Selection selection, Class<? extends TileEntity> type,
|
||||
UnaryOperator<CompoundNBT> data, boolean redraw) {
|
||||
super(selection);
|
||||
this.type = type;
|
||||
|
@ -25,21 +25,20 @@ public class TileEntityDataInstruction extends WorldModifyInstruction {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void runModification(Select selection, PonderScene scene) {
|
||||
protected void runModification(Selection selection, PonderScene scene) {
|
||||
PonderWorld world = scene.getWorld();
|
||||
selection.all()
|
||||
.forEach(pos -> {
|
||||
if (!world.getBounds()
|
||||
.isVecInside(pos))
|
||||
return;
|
||||
TileEntity tileEntity = world.getTileEntity(pos);
|
||||
if (!type.isInstance(tileEntity))
|
||||
return;
|
||||
CompoundNBT apply = data.apply(tileEntity.write(new CompoundNBT()));
|
||||
tileEntity.read(apply);
|
||||
if (tileEntity instanceof SyncedTileEntity)
|
||||
((SyncedTileEntity) tileEntity).readClientUpdate(apply);
|
||||
});
|
||||
selection.forEach(pos -> {
|
||||
if (!world.getBounds()
|
||||
.isVecInside(pos))
|
||||
return;
|
||||
TileEntity tileEntity = world.getTileEntity(pos);
|
||||
if (!type.isInstance(tileEntity))
|
||||
return;
|
||||
CompoundNBT apply = data.apply(tileEntity.write(new CompoundNBT()));
|
||||
tileEntity.read(apply);
|
||||
if (tileEntity instanceof SyncedTileEntity)
|
||||
((SyncedTileEntity) tileEntity).readClientUpdate(apply);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,14 +2,14 @@ package com.simibubi.create.foundation.ponder.instructions;
|
|||
|
||||
import com.simibubi.create.foundation.ponder.PonderInstruction;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.Select;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
|
||||
public abstract class WorldModifyInstruction extends PonderInstruction {
|
||||
|
||||
private Select selection;
|
||||
private Selection selection;
|
||||
|
||||
public WorldModifyInstruction(Select selection) {
|
||||
public WorldModifyInstruction(Selection selection) {
|
||||
this.selection = selection;
|
||||
}
|
||||
|
||||
|
@ -22,10 +22,10 @@ public abstract class WorldModifyInstruction extends PonderInstruction {
|
|||
public void tick(PonderScene scene) {
|
||||
runModification(selection, scene);
|
||||
if (needsRedraw())
|
||||
scene.forEach(WorldSectionElement.class, wse -> wse.queueRedraw(scene.getWorld()));
|
||||
scene.forEach(WorldSectionElement.class, WorldSectionElement::queueRedraw);
|
||||
}
|
||||
|
||||
protected abstract void runModification(Select selection, PonderScene scene);
|
||||
protected abstract void runModification(Selection selection, PonderScene scene);
|
||||
|
||||
protected abstract boolean needsRedraw();
|
||||
|
||||
|
|
|
@ -60,14 +60,14 @@ public class Outliner {
|
|||
public OutlineParams showAABB(Object slot, AxisAlignedBB bb, int ttl) {
|
||||
createAABBOutlineIfMissing(slot, bb);
|
||||
ChasingAABBOutline outline = getAndRefreshAABB(slot, ttl);
|
||||
outline.prevBB = outline.targetBB = bb;
|
||||
outline.prevBB = outline.targetBB = outline.bb = bb;
|
||||
return outline.getParams();
|
||||
}
|
||||
|
||||
public OutlineParams showAABB(Object slot, AxisAlignedBB bb) {
|
||||
createAABBOutlineIfMissing(slot, bb);
|
||||
ChasingAABBOutline outline = getAndRefreshAABB(slot);
|
||||
outline.prevBB = outline.targetBB = bb;
|
||||
outline.prevBB = outline.targetBB = outline.bb = bb;
|
||||
return outline.getParams();
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ public class Outliner {
|
|||
// Utility
|
||||
|
||||
private void createAABBOutlineIfMissing(Object slot, AxisAlignedBB bb) {
|
||||
if (!outlines.containsKey(slot)) {
|
||||
if (!outlines.containsKey(slot) || !(outlines.get(slot).outline instanceof AABBOutline)) {
|
||||
ChasingAABBOutline outline = new ChasingAABBOutline(bb);
|
||||
outlines.put(slot, new OutlineEntry(outline));
|
||||
}
|
||||
|
|
BIN
src/main/resources/ponder/debug/scene_8.nbt
Normal file
BIN
src/main/resources/ponder/debug/scene_8.nbt
Normal file
Binary file not shown.
Loading…
Reference in a new issue