Start to rework the graphics for the wires layer, make wires cooler than belts
BIN
artwork/thirdparty/iogames.space/thumb.png
vendored
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 66 KiB |
4
artwork/thirdparty/iogames.space/thumb.psd
vendored
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:84ed53e2e72ef7c2bf7e590efb1253ff487515400f8d59506b870de54ad82d59
|
||||
size 9016895
|
||||
oid sha256:f1e029d2578801eaf3fa254424cb48fefebd644f1b7d0579243276c7a61a169d
|
||||
size 9029705
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3817a1720617b4e30631c9a6b3532c4d3a003b285f20263746da4a035457ff0a
|
||||
size 146014
|
||||
oid sha256:fc3cb708282fb2d52aee71c427a4fddd0ee7cfff1869d08ae3a9b3924d5f798b
|
||||
size 146510
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b8ace4cd365be92bfec392bf9148dbc68eeecbeeab8da943ccb9911adafb14ac
|
||||
size 70920
|
||||
oid sha256:af7d1113b0cb0bbcf626889fc242cc6eabb5a9b50e0eef9bf013334f7e3eb7fa
|
||||
size 70769
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d42d1a6d29ed6a5930d9c90313e991cc7f2b070150ba9c3263d1ec1f108814ab
|
||||
size 5149412
|
||||
oid sha256:a1200717523a78bc2e98929a5d276458f9ce2041969fa54c40873ba08340b219
|
||||
size 5196595
|
||||
|
@ -232,7 +232,6 @@ module.exports = ({
|
||||
pattern: /globalConfig\.beltSpeedItemsPerSecond/g,
|
||||
replacement: () => "2.0",
|
||||
},
|
||||
{ pattern: /globalConfig\.itemSpacingOnBelts/g, replacement: () => "0.63" },
|
||||
{ pattern: /globalConfig\.debug/g, replacement: () => "''" },
|
||||
],
|
||||
}),
|
||||
|
@ -874,7 +874,7 @@
|
||||
},
|
||||
"sprites/blueprints/wire_left.png":
|
||||
{
|
||||
"frame": {"x":599,"y":87,"w":11,"h":11},
|
||||
"frame": {"x":615,"y":37,"w":11,"h":11},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":2,"w":11,"h":11},
|
||||
@ -882,7 +882,7 @@
|
||||
},
|
||||
"sprites/blueprints/wire_right.png":
|
||||
{
|
||||
"frame": {"x":611,"y":70,"w":11,"h":11},
|
||||
"frame": {"x":617,"y":20,"w":11,"h":11},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":2,"w":11,"h":11},
|
||||
@ -890,7 +890,7 @@
|
||||
},
|
||||
"sprites/blueprints/wire_top.png":
|
||||
{
|
||||
"frame": {"x":617,"y":20,"w":9,"h":13},
|
||||
"frame": {"x":620,"y":3,"w":9,"h":13},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":9,"h":13},
|
||||
@ -1106,7 +1106,7 @@
|
||||
},
|
||||
"sprites/buildings/wire_left.png":
|
||||
{
|
||||
"frame": {"x":614,"y":85,"w":11,"h":11},
|
||||
"frame": {"x":587,"y":105,"w":11,"h":11},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":2,"w":11,"h":11},
|
||||
@ -1114,7 +1114,7 @@
|
||||
},
|
||||
"sprites/buildings/wire_right.png":
|
||||
{
|
||||
"frame": {"x":614,"y":100,"w":11,"h":11},
|
||||
"frame": {"x":599,"y":87,"w":11,"h":11},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":2,"w":11,"h":11},
|
||||
@ -1122,7 +1122,7 @@
|
||||
},
|
||||
"sprites/buildings/wire_top.png":
|
||||
{
|
||||
"frame": {"x":618,"y":53,"w":9,"h":13},
|
||||
"frame": {"x":611,"y":70,"w":9,"h":13},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":9,"h":13},
|
||||
@ -1170,7 +1170,7 @@
|
||||
},
|
||||
"sprites/misc/deletion_marker.png":
|
||||
{
|
||||
"frame": {"x":602,"y":115,"w":10,"h":10},
|
||||
"frame": {"x":602,"y":103,"w":10,"h":10},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":10,"h":10},
|
||||
@ -1194,7 +1194,7 @@
|
||||
},
|
||||
"sprites/misc/slot_bad_arrow.png":
|
||||
{
|
||||
"frame": {"x":602,"y":115,"w":10,"h":10},
|
||||
"frame": {"x":602,"y":103,"w":10,"h":10},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":10,"h":10},
|
||||
@ -1202,7 +1202,7 @@
|
||||
},
|
||||
"sprites/misc/slot_good_arrow.png":
|
||||
{
|
||||
"frame": {"x":616,"y":115,"w":10,"h":10},
|
||||
"frame": {"x":616,"y":103,"w":10,"h":10},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":10,"h":10},
|
||||
@ -1250,23 +1250,23 @@
|
||||
},
|
||||
"sprites/wires/pin_negative_eject.png":
|
||||
{
|
||||
"frame": {"x":603,"y":54,"w":11,"h":12},
|
||||
"frame": {"x":618,"y":52,"w":9,"h":12},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":11,"h":12},
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":9,"h":12},
|
||||
"sourceSize": {"w":13,"h":13}
|
||||
},
|
||||
"sprites/wires/pin_positive_accept.png":
|
||||
{
|
||||
"frame": {"x":615,"y":37,"w":11,"h":12},
|
||||
"frame": {"x":614,"y":87,"w":9,"h":12},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":11,"h":12},
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":9,"h":12},
|
||||
"sourceSize": {"w":13,"h":13}
|
||||
},
|
||||
"sprites/wires/pin_positive_eject.png":
|
||||
{
|
||||
"frame": {"x":587,"y":105,"w":11,"h":12},
|
||||
"frame": {"x":603,"y":54,"w":11,"h":12},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":11,"h":12},
|
||||
@ -1285,8 +1285,8 @@
|
||||
"version": "1.0",
|
||||
"image": "atlas0_10.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {"w":630,"h":128},
|
||||
"size": {"w":632,"h":128},
|
||||
"scale": "0.1",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:64992def403ecae5d6a9a8c1d669aa36:a6ea6940afa6efd3e09314c1b1be5a97:f159918d23e5952766c6d23ab52278c6$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:f9d84407e7fd8a428996f4d57e250e84:01202b345d862a009ec7b1beee1ef160:f159918d23e5952766c6d23ab52278c6$"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 205 KiB |
@ -474,7 +474,7 @@
|
||||
},
|
||||
"sprites/belt/right_3.png":
|
||||
{
|
||||
"frame": {"x":1207,"y":770,"w":57,"h":57},
|
||||
"frame": {"x":1142,"y":892,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -482,7 +482,7 @@
|
||||
},
|
||||
"sprites/belt/right_4.png":
|
||||
{
|
||||
"frame": {"x":1081,"y":832,"w":57,"h":57},
|
||||
"frame": {"x":1203,"y":892,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -490,7 +490,7 @@
|
||||
},
|
||||
"sprites/belt/right_5.png":
|
||||
{
|
||||
"frame": {"x":1081,"y":893,"w":57,"h":57},
|
||||
"frame": {"x":958,"y":893,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -498,7 +498,7 @@
|
||||
},
|
||||
"sprites/belt/right_6.png":
|
||||
{
|
||||
"frame": {"x":1081,"y":954,"w":57,"h":57},
|
||||
"frame": {"x":1019,"y":893,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -506,7 +506,7 @@
|
||||
},
|
||||
"sprites/belt/right_7.png":
|
||||
{
|
||||
"frame": {"x":1142,"y":831,"w":57,"h":57},
|
||||
"frame": {"x":1080,"y":893,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -514,7 +514,7 @@
|
||||
},
|
||||
"sprites/belt/right_8.png":
|
||||
{
|
||||
"frame": {"x":1142,"y":892,"w":57,"h":57},
|
||||
"frame": {"x":958,"y":954,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -522,7 +522,7 @@
|
||||
},
|
||||
"sprites/belt/right_9.png":
|
||||
{
|
||||
"frame": {"x":1203,"y":831,"w":57,"h":57},
|
||||
"frame": {"x":1019,"y":954,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -610,7 +610,7 @@
|
||||
},
|
||||
"sprites/belt/right_20.png":
|
||||
{
|
||||
"frame": {"x":959,"y":893,"w":57,"h":57},
|
||||
"frame": {"x":1020,"y":832,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -618,7 +618,7 @@
|
||||
},
|
||||
"sprites/belt/right_21.png":
|
||||
{
|
||||
"frame": {"x":959,"y":954,"w":57,"h":57},
|
||||
"frame": {"x":1024,"y":771,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -626,7 +626,7 @@
|
||||
},
|
||||
"sprites/belt/right_22.png":
|
||||
{
|
||||
"frame": {"x":1020,"y":832,"w":57,"h":57},
|
||||
"frame": {"x":1085,"y":770,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -634,7 +634,7 @@
|
||||
},
|
||||
"sprites/belt/right_23.png":
|
||||
{
|
||||
"frame": {"x":1020,"y":893,"w":57,"h":57},
|
||||
"frame": {"x":1146,"y":770,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -642,7 +642,7 @@
|
||||
},
|
||||
"sprites/belt/right_24.png":
|
||||
{
|
||||
"frame": {"x":1020,"y":954,"w":57,"h":57},
|
||||
"frame": {"x":1207,"y":770,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -650,7 +650,7 @@
|
||||
},
|
||||
"sprites/belt/right_25.png":
|
||||
{
|
||||
"frame": {"x":1024,"y":771,"w":57,"h":57},
|
||||
"frame": {"x":1081,"y":832,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -658,7 +658,7 @@
|
||||
},
|
||||
"sprites/belt/right_26.png":
|
||||
{
|
||||
"frame": {"x":1085,"y":770,"w":57,"h":57},
|
||||
"frame": {"x":1142,"y":831,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -666,7 +666,7 @@
|
||||
},
|
||||
"sprites/belt/right_27.png":
|
||||
{
|
||||
"frame": {"x":1146,"y":770,"w":57,"h":57},
|
||||
"frame": {"x":1203,"y":831,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -898,7 +898,7 @@
|
||||
},
|
||||
"sprites/buildings/belt_left.png":
|
||||
{
|
||||
"frame": {"x":1142,"y":953,"w":57,"h":57},
|
||||
"frame": {"x":1080,"y":954,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
|
||||
@ -906,7 +906,7 @@
|
||||
},
|
||||
"sprites/buildings/belt_right.png":
|
||||
{
|
||||
"frame": {"x":1203,"y":892,"w":57,"h":57},
|
||||
"frame": {"x":1141,"y":953,"w":57,"h":57},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
|
||||
@ -970,7 +970,7 @@
|
||||
},
|
||||
"sprites/buildings/mixer.png":
|
||||
{
|
||||
"frame": {"x":936,"y":203,"w":174,"h":96},
|
||||
"frame": {"x":1126,"y":103,"w":174,"h":96},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
|
||||
@ -1050,7 +1050,7 @@
|
||||
},
|
||||
"sprites/buildings/stacker.png":
|
||||
{
|
||||
"frame": {"x":1126,"y":103,"w":174,"h":96},
|
||||
"frame": {"x":936,"y":203,"w":174,"h":96},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
|
||||
@ -1106,7 +1106,7 @@
|
||||
},
|
||||
"sprites/buildings/wire_left.png":
|
||||
{
|
||||
"frame": {"x":1203,"y":953,"w":47,"h":47},
|
||||
"frame": {"x":1202,"y":953,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":16,"w":47,"h":47},
|
||||
@ -1114,7 +1114,7 @@
|
||||
},
|
||||
"sprites/buildings/wire_right.png":
|
||||
{
|
||||
"frame": {"x":1254,"y":953,"w":47,"h":47},
|
||||
"frame": {"x":1253,"y":953,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":16,"y":16,"w":47,"h":47},
|
||||
@ -1154,7 +1154,7 @@
|
||||
},
|
||||
"sprites/map_overview/belt_left.png":
|
||||
{
|
||||
"frame": {"x":1288,"y":303,"w":15,"h":15},
|
||||
"frame": {"x":878,"y":762,"w":15,"h":15},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":1,"w":15,"h":15},
|
||||
@ -1162,7 +1162,7 @@
|
||||
},
|
||||
"sprites/map_overview/belt_right.png":
|
||||
{
|
||||
"frame": {"x":1288,"y":322,"w":15,"h":15},
|
||||
"frame": {"x":1270,"y":648,"w":15,"h":15},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":1,"w":15,"h":15},
|
||||
@ -1242,34 +1242,34 @@
|
||||
},
|
||||
"sprites/wires/pin_negative_accept.png":
|
||||
{
|
||||
"frame": {"x":916,"y":877,"w":39,"h":54},
|
||||
"frame": {"x":916,"y":877,"w":38,"h":53},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":12,"y":0,"w":39,"h":54},
|
||||
"spriteSourceSize": {"x":13,"y":0,"w":38,"h":53},
|
||||
"sourceSize": {"w":64,"h":64}
|
||||
},
|
||||
"sprites/wires/pin_negative_eject.png":
|
||||
{
|
||||
"frame": {"x":916,"y":935,"w":39,"h":54},
|
||||
"frame": {"x":1264,"y":831,"w":33,"h":51},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":12,"y":0,"w":39,"h":54},
|
||||
"spriteSourceSize": {"x":15,"y":0,"w":33,"h":51},
|
||||
"sourceSize": {"w":64,"h":64}
|
||||
},
|
||||
"sprites/wires/pin_positive_accept.png":
|
||||
{
|
||||
"frame": {"x":1264,"y":831,"w":39,"h":54},
|
||||
"frame": {"x":1264,"y":886,"w":33,"h":51},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":12,"y":0,"w":39,"h":54},
|
||||
"spriteSourceSize": {"x":15,"y":0,"w":33,"h":51},
|
||||
"sourceSize": {"w":64,"h":64}
|
||||
},
|
||||
"sprites/wires/pin_positive_eject.png":
|
||||
{
|
||||
"frame": {"x":1264,"y":889,"w":39,"h":54},
|
||||
"frame": {"x":916,"y":934,"w":38,"h":53},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":12,"y":0,"w":39,"h":54},
|
||||
"spriteSourceSize": {"x":13,"y":0,"w":38,"h":53},
|
||||
"sourceSize": {"w":64,"h":64}
|
||||
},
|
||||
"sprites/wires/positive_energy.png":
|
||||
@ -1285,8 +1285,8 @@
|
||||
"version": "1.0",
|
||||
"image": "atlas0_50.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {"w":1306,"h":1024},
|
||||
"size": {"w":1303,"h":1024},
|
||||
"scale": "0.5",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:64992def403ecae5d6a9a8c1d669aa36:a6ea6940afa6efd3e09314c1b1be5a97:f159918d23e5952766c6d23ab52278c6$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:f9d84407e7fd8a428996f4d57e250e84:01202b345d862a009ec7b1beee1ef160:f159918d23e5952766c6d23ab52278c6$"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 485 KiB After Width: | Height: | Size: 484 KiB |
Before Width: | Height: | Size: 972 KiB After Width: | Height: | Size: 968 KiB |
@ -589,6 +589,22 @@
|
||||
<key>scale9FromFile</key>
|
||||
<false/>
|
||||
</struct>
|
||||
<key type="filename">sprites/wires/negative_energy.png</key>
|
||||
<key type="filename">sprites/wires/positive_energy.png</key>
|
||||
<struct type="IndividualSpriteSettings">
|
||||
<key>pivotPoint</key>
|
||||
<point_f>0.5,0.5</point_f>
|
||||
<key>spriteScale</key>
|
||||
<double>1</double>
|
||||
<key>scale9Enabled</key>
|
||||
<false/>
|
||||
<key>scale9Borders</key>
|
||||
<rect>16,16,32,32</rect>
|
||||
<key>scale9Paddings</key>
|
||||
<rect>16,16,32,32</rect>
|
||||
<key>scale9FromFile</key>
|
||||
<false/>
|
||||
</struct>
|
||||
</map>
|
||||
<key>fileList</key>
|
||||
<array>
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 4.0 KiB |
@ -51,9 +51,15 @@ export const globalConfig = {
|
||||
// Belt speeds
|
||||
// NOTICE: Update webpack.production.config too!
|
||||
beltSpeedItemsPerSecond: 2,
|
||||
itemSpacingOnBelts: 0.63,
|
||||
minerSpeedItemsPerSecond: 0, // COMPUTED
|
||||
|
||||
beltItemSpacingByLayer: {
|
||||
regular: 0.63,
|
||||
wires: 0.33,
|
||||
},
|
||||
|
||||
wiresSpeedItemsPerSecond: 6,
|
||||
|
||||
undergroundBeltMaxTilesByTier: [5, 8],
|
||||
|
||||
buildingSpeeds: {
|
||||
|
@ -90,7 +90,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
* @param {boolean} computeSpacing Whether to also compute the spacing
|
||||
*/
|
||||
init(computeSpacing = true) {
|
||||
// Find acceptor and ejector
|
||||
this.onPathChanged();
|
||||
|
||||
this.totalLength = this.computeTotalLength();
|
||||
|
||||
@ -108,8 +108,6 @@ export class BeltPath extends BasicSerializableObject {
|
||||
for (let i = 0; i < this.entityPath.length; ++i) {
|
||||
this.entityPath[i].components.Belt.assignedPath = this;
|
||||
}
|
||||
|
||||
this.onPathChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,7 +115,14 @@ export class BeltPath extends BasicSerializableObject {
|
||||
* @returns {boolean}
|
||||
*/
|
||||
canAcceptItem() {
|
||||
return this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts;
|
||||
return this.spacingToFirstItem >= this.getItemSpacing();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the spacing between items
|
||||
*/
|
||||
getItemSpacing() {
|
||||
return globalConfig.beltItemSpacingByLayer[this.layer];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -133,15 +138,15 @@ export class BeltPath extends BasicSerializableObject {
|
||||
* @param {BaseItem} item
|
||||
*/
|
||||
tryAcceptItem(item) {
|
||||
if (this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts) {
|
||||
if (this.spacingToFirstItem >= this.getItemSpacing()) {
|
||||
// So, since we already need one tick to accept this item we will add this directly.
|
||||
const beltProgressPerTick =
|
||||
this.root.hubGoals.getBeltBaseSpeed() *
|
||||
this.root.hubGoals.getBeltBaseSpeed(this.layer) *
|
||||
this.root.dynamicTickrate.deltaSeconds *
|
||||
globalConfig.itemSpacingOnBelts;
|
||||
this.getItemSpacing();
|
||||
|
||||
// First, compute how much progress we can make *at max*
|
||||
const maxProgress = Math.max(0, this.spacingToFirstItem - globalConfig.itemSpacingOnBelts);
|
||||
const maxProgress = Math.max(0, this.spacingToFirstItem - this.getItemSpacing());
|
||||
const initialProgress = Math.min(maxProgress, beltProgressPerTick);
|
||||
|
||||
this.items.unshift([this.spacingToFirstItem - initialProgress, item]);
|
||||
@ -200,6 +205,8 @@ export class BeltPath extends BasicSerializableObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.layer = this.entityPath[0].layer;
|
||||
}
|
||||
|
||||
// Following code will be compiled out outside of dev versions
|
||||
@ -376,7 +383,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
this.onPathChanged();
|
||||
|
||||
// Extend the path length
|
||||
const additionalLength = beltComp.getEffectiveLengthTiles();
|
||||
const additionalLength = beltComp.getEffectiveLengthTiles(entity.layer);
|
||||
this.totalLength += additionalLength;
|
||||
DEBUG && logger.log(" Extended total length by", additionalLength, "to", this.totalLength);
|
||||
|
||||
@ -419,7 +426,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
// All items on that belt are simply lost (for now)
|
||||
|
||||
const length = beltComp.getEffectiveLengthTiles();
|
||||
const length = beltComp.getEffectiveLengthTiles(entity.layer);
|
||||
|
||||
// Extend the length of this path
|
||||
this.totalLength += length;
|
||||
@ -471,7 +478,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
const beltComp = entity.components.Belt;
|
||||
beltComp.assignedPath = null;
|
||||
|
||||
const entityLength = beltComp.getEffectiveLengthTiles();
|
||||
const entityLength = beltComp.getEffectiveLengthTiles(entity.layer);
|
||||
assert(this.entityPath.indexOf(entity) >= 0, "Entity not contained for split");
|
||||
assert(this.entityPath.indexOf(entity) !== 0, "Entity is first");
|
||||
assert(this.entityPath.indexOf(entity) !== this.entityPath.length - 1, "Entity is last");
|
||||
@ -489,7 +496,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
++firstPathEntityCount;
|
||||
firstPathEndEntity = otherEntity;
|
||||
firstPathLength += otherEntity.components.Belt.getEffectiveLengthTiles();
|
||||
firstPathLength += otherEntity.components.Belt.getEffectiveLengthTiles(otherEntity.layer);
|
||||
}
|
||||
|
||||
DEBUG &&
|
||||
@ -633,7 +640,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
// Ok, first remove the entity
|
||||
const beltComp = entity.components.Belt;
|
||||
const beltLength = beltComp.getEffectiveLengthTiles();
|
||||
const beltLength = beltComp.getEffectiveLengthTiles(entity.layer);
|
||||
|
||||
DEBUG &&
|
||||
logger.log(
|
||||
@ -742,7 +749,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
// Ok, first remove the entity
|
||||
const beltComp = entity.components.Belt;
|
||||
const beltLength = beltComp.getEffectiveLengthTiles();
|
||||
const beltLength = beltComp.getEffectiveLengthTiles(entity.layer);
|
||||
|
||||
DEBUG &&
|
||||
logger.log(
|
||||
@ -882,7 +889,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
beltComp.assignedPath = this;
|
||||
|
||||
// Update our length
|
||||
const additionalLength = beltComp.getEffectiveLengthTiles();
|
||||
const additionalLength = beltComp.getEffectiveLengthTiles(entity.layer);
|
||||
this.totalLength += additionalLength;
|
||||
}
|
||||
|
||||
@ -939,7 +946,8 @@ export class BeltPath extends BasicSerializableObject {
|
||||
computeTotalLength() {
|
||||
let length = 0;
|
||||
for (let i = 0; i < this.entityPath.length; ++i) {
|
||||
length += this.entityPath[i].components.Belt.getEffectiveLengthTiles();
|
||||
const entity = this.entityPath[i];
|
||||
length += entity.components.Belt.getEffectiveLengthTiles(this.layer);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
@ -954,15 +962,15 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
// Divide by item spacing on belts since we use throughput and not speed
|
||||
let beltSpeed =
|
||||
this.root.hubGoals.getBeltBaseSpeed() *
|
||||
this.root.hubGoals.getBeltBaseSpeed(this.layer) *
|
||||
this.root.dynamicTickrate.deltaSeconds *
|
||||
globalConfig.itemSpacingOnBelts;
|
||||
this.getItemSpacing();
|
||||
|
||||
if (G_IS_DEV && globalConfig.debug.instantBelts) {
|
||||
beltSpeed *= 100;
|
||||
}
|
||||
|
||||
let minimumDistance = this.ejectorSlot.item ? globalConfig.itemSpacingOnBelts : 0;
|
||||
let minimumDistance = this.ejectorSlot.item ? this.getItemSpacing() : 0;
|
||||
|
||||
// Try to reduce spacing
|
||||
let remainingAmount = beltSpeed;
|
||||
@ -983,7 +991,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
break;
|
||||
}
|
||||
|
||||
minimumDistance = globalConfig.itemSpacingOnBelts;
|
||||
minimumDistance = this.getItemSpacing();
|
||||
}
|
||||
|
||||
const lastItem = this.items[this.items.length - 1];
|
||||
@ -1012,14 +1020,14 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
for (let i = 0; i < this.entityPath.length; ++i) {
|
||||
const beltComp = this.entityPath[i].components.Belt;
|
||||
const localLength = beltComp.getEffectiveLengthTiles();
|
||||
const localLength = beltComp.getEffectiveLengthTiles(this.layer);
|
||||
|
||||
if (currentLength + localLength >= progress || i === this.entityPath.length - 1) {
|
||||
// Min required here due to floating point issues
|
||||
const localProgress = Math.min(1.0, progress - currentLength);
|
||||
|
||||
assert(localProgress >= 0.0, "Invalid local progress: " + localProgress);
|
||||
const localSpace = beltComp.transformBeltToLocalSpace(localProgress);
|
||||
const localSpace = beltComp.transformBeltToLocalSpace(localProgress, this.layer);
|
||||
return this.entityPath[i].components.StaticMapEntity.localTileToWorld(localSpace);
|
||||
}
|
||||
currentLength += localLength;
|
||||
@ -1123,13 +1131,18 @@ export class BeltPath extends BasicSerializableObject {
|
||||
for (let i = 0; i < this.entityPath.length; ++i) {
|
||||
const entity = this.entityPath[i];
|
||||
const beltComp = entity.components.Belt;
|
||||
const beltLength = beltComp.getEffectiveLengthTiles();
|
||||
const beltLength = beltComp.getEffectiveLengthTiles(this.layer);
|
||||
|
||||
// Check if the item is on the current belt
|
||||
if (trackPos + beltLength >= currentItemPos) {
|
||||
// Check if the current items are on the belt
|
||||
while (trackPos + beltLength >= currentItemPos) {
|
||||
// Its on the belt, render it now
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
const localPos = beltComp.transformBeltToLocalSpace(currentItemPos - trackPos);
|
||||
assert(
|
||||
currentItemPos - trackPos >= 0,
|
||||
"invalid track pos: " + currentItemPos + " vs " + trackPos + " (l =" + beltLength + ")"
|
||||
);
|
||||
|
||||
const localPos = beltComp.transformBeltToLocalSpace(currentItemPos - trackPos, this.layer);
|
||||
const worldPos = staticComp.localTileToWorld(localPos).toWorldSpaceCenterOfTile();
|
||||
|
||||
const distanceAndItem = this.items[currentItemIndex];
|
||||
@ -1143,7 +1156,7 @@ export class BeltPath extends BasicSerializableObject {
|
||||
|
||||
if (currentItemIndex >= this.items.length) {
|
||||
// We rendered all items
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ export class MetaBeltBaseBuilding extends MetaBuilding {
|
||||
* @returns {Array<[string, string]>}
|
||||
*/
|
||||
getAdditionalStatistics(root, variant) {
|
||||
const beltSpeed = root.hubGoals.getBeltBaseSpeed();
|
||||
const beltSpeed = root.hubGoals.getBeltBaseSpeed(enumLayer.regular);
|
||||
return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)]];
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@ import { types } from "../../savegame/serialization";
|
||||
import { BeltPath } from "../belt_path";
|
||||
import { Component } from "../component";
|
||||
import { Entity } from "../entity";
|
||||
import { enumLayer } from "../root";
|
||||
|
||||
export const curvedBeltLength = /* Math.PI / 4 */ 0.78;
|
||||
|
||||
@ -44,9 +45,14 @@ export class BeltComponent extends Component {
|
||||
|
||||
/**
|
||||
* Returns the effective length of this belt in tile space
|
||||
* @param {enumLayer} layer
|
||||
* @returns {number}
|
||||
*/
|
||||
getEffectiveLengthTiles() {
|
||||
getEffectiveLengthTiles(layer) {
|
||||
assert(layer, "no layer given");
|
||||
if (layer === enumLayer.wires) {
|
||||
return 1.0;
|
||||
}
|
||||
return this.direction === enumDirection.top ? 1.0 : curvedBeltLength;
|
||||
}
|
||||
|
||||
@ -54,9 +60,14 @@ export class BeltComponent extends Component {
|
||||
* Converts from belt space (0 = start of belt ... 1 = end of belt) to the local
|
||||
* belt coordinates (-0.5|-0.5 to 0.5|0.5)
|
||||
* @param {number} progress
|
||||
* @param {enumLayer} layer
|
||||
* @returns {Vector}
|
||||
*/
|
||||
transformBeltToLocalSpace(progress) {
|
||||
transformBeltToLocalSpace(progress, layer) {
|
||||
assert(progress >= 0.0, "Invalid progress ( < 0): " + progress);
|
||||
|
||||
switch (layer) {
|
||||
case enumLayer.regular: {
|
||||
switch (this.direction) {
|
||||
case enumDirection.top:
|
||||
assert(progress <= 1.02, "Invalid progress: " + progress);
|
||||
@ -65,16 +76,46 @@ export class BeltComponent extends Component {
|
||||
case enumDirection.right: {
|
||||
assert(progress <= curvedBeltLength + 0.02, "Invalid progress 2: " + progress);
|
||||
const arcProgress = (progress / curvedBeltLength) * 0.5 * Math.PI;
|
||||
return new Vector(0.5 - 0.5 * Math.cos(arcProgress), 0.5 - 0.5 * Math.sin(arcProgress));
|
||||
return new Vector(
|
||||
0.5 - 0.5 * Math.cos(arcProgress),
|
||||
0.5 - 0.5 * Math.sin(arcProgress)
|
||||
);
|
||||
}
|
||||
case enumDirection.left: {
|
||||
assert(progress <= curvedBeltLength + 0.02, "Invalid progress 3: " + progress);
|
||||
const arcProgress = (progress / curvedBeltLength) * 0.5 * Math.PI;
|
||||
return new Vector(-0.5 + 0.5 * Math.cos(arcProgress), 0.5 - 0.5 * Math.sin(arcProgress));
|
||||
return new Vector(
|
||||
-0.5 + 0.5 * Math.cos(arcProgress),
|
||||
0.5 - 0.5 * Math.sin(arcProgress)
|
||||
);
|
||||
}
|
||||
default:
|
||||
assertAlways(false, "Invalid belt direction: " + this.direction);
|
||||
return new Vector(0, 0);
|
||||
}
|
||||
}
|
||||
case enumLayer.wires: {
|
||||
const pow = 0.5;
|
||||
switch (this.direction) {
|
||||
case enumDirection.top:
|
||||
assert(progress <= 1.02, "Invalid progress: " + progress);
|
||||
return new Vector(0, 0.5 - progress);
|
||||
|
||||
case enumDirection.right: {
|
||||
assert(progress <= 1.02, "Invalid progress 2: " + progress);
|
||||
return progress > 0.5 ? new Vector(progress - 0.5, 0) : new Vector(0, 0.5 - progress);
|
||||
}
|
||||
case enumDirection.left: {
|
||||
assert(progress <= 1.02, "Invalid progress 3: " + progress);
|
||||
return progress > 0.5
|
||||
? new Vector(-progress + 0.5, 0)
|
||||
: new Vector(0, 0.5 - progress);
|
||||
}
|
||||
default:
|
||||
assertAlways(false, "Invalid belt direction: " + this.direction);
|
||||
return new Vector(0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ import { BaseItem } from "../base_item";
|
||||
import { Component } from "../component";
|
||||
import { ShapeItem } from "../items/shape_item";
|
||||
|
||||
const maxQueueSize = 4;
|
||||
const maxQueueSize = 20;
|
||||
|
||||
export const ENERGY_GENERATOR_EJECT_SLOT = 0;
|
||||
export const ENERGY_GENERATOR_ACCEPT_SLOT = 4;
|
||||
|
@ -4,6 +4,7 @@ import { globalConfig } from "../../core/config";
|
||||
import { types } from "../../savegame/serialization";
|
||||
import { gItemRegistry } from "../../core/global_registries";
|
||||
import { Entity } from "../entity";
|
||||
import { enumLayer } from "../root";
|
||||
|
||||
/** @enum {string} */
|
||||
export const enumUndergroundBeltMode = {
|
||||
@ -102,7 +103,8 @@ export class UndergroundBeltComponent extends Component {
|
||||
}
|
||||
|
||||
// Notice: We assume that for all items the travel distance is the same
|
||||
const maxItemsInTunnel = (2 + travelDistance) / globalConfig.itemSpacingOnBelts;
|
||||
const maxItemsInTunnel =
|
||||
(2 + travelDistance) / globalConfig.beltItemSpacingByLayer[enumLayer.regular];
|
||||
if (this.pendingItems.length >= maxItemsInTunnel) {
|
||||
// Simulate a real belt which gets full at some point
|
||||
return false;
|
||||
@ -112,7 +114,8 @@ export class UndergroundBeltComponent extends Component {
|
||||
// This corresponds to the item ejector - it needs 0.5 additional tiles to eject the item.
|
||||
// So instead of adding 1 we add 0.5 only.
|
||||
// Additionally it takes 1 tile for the acceptor which we just add on top.
|
||||
const travelDuration = (travelDistance + 1.5) / beltSpeed / globalConfig.itemSpacingOnBelts;
|
||||
const travelDuration =
|
||||
(travelDistance + 1.5) / beltSpeed / globalConfig.beltItemSpacingByLayer[enumLayer.regular];
|
||||
|
||||
this.pendingItems.push([item, travelDuration]);
|
||||
|
||||
|
@ -4,7 +4,7 @@ import { clamp, findNiceIntegerValue, randomChoice, randomInt } from "../core/ut
|
||||
import { BasicSerializableObject, types } from "../savegame/serialization";
|
||||
import { enumColors } from "./colors";
|
||||
import { enumItemProcessorTypes } from "./components/item_processor";
|
||||
import { GameRoot } from "./root";
|
||||
import { GameRoot, enumLayer } from "./root";
|
||||
import { enumSubShape, ShapeDefinition } from "./shape_definition";
|
||||
import { enumHubGoalRewards, tutorialGoals } from "./tutorial_goals";
|
||||
import { UPGRADES, blueprintShape } from "./upgrades";
|
||||
@ -370,9 +370,13 @@ export class HubGoals extends BasicSerializableObject {
|
||||
|
||||
/**
|
||||
* Belt speed
|
||||
* @param {enumLayer} layer
|
||||
* @returns {number} items / sec
|
||||
*/
|
||||
getBeltBaseSpeed() {
|
||||
getBeltBaseSpeed(layer) {
|
||||
if (layer === enumLayer.wires) {
|
||||
return globalConfig.wiresSpeedItemsPerSecond;
|
||||
}
|
||||
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { GameRoot } from "../root";
|
||||
import { GameRoot, enumLayer } from "../root";
|
||||
import { globalConfig } from "../../core/config";
|
||||
import { Vector, mixVector } from "../../core/vector";
|
||||
import { lerp } from "../../core/utils";
|
||||
@ -92,7 +92,7 @@ export class TrailerMaker {
|
||||
const speed =
|
||||
globalConfig.tileSize *
|
||||
globalConfig.beltSpeedItemsPerSecond *
|
||||
globalConfig.itemSpacingOnBelts;
|
||||
globalConfig.beltItemSpacingByLayer[enumLayer.regular];
|
||||
// let time =
|
||||
// this.currentPlaybackOrigin.distance(Vector.fromSerializedObject(nextMarker.pos)) / speed;
|
||||
const time = nextMarker.time;
|
||||
|
@ -312,7 +312,7 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
drawLayer(parameters, layer) {
|
||||
for (let i = 0; i < this.beltPaths.length; ++i) {
|
||||
const path = this.beltPaths[i];
|
||||
if (path.getLayer() === layer) {
|
||||
if (path.layer === layer) {
|
||||
path.draw(parameters);
|
||||
}
|
||||
}
|
||||
@ -507,13 +507,13 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
}
|
||||
|
||||
// Limit speed to avoid belts going backwards
|
||||
const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(), 10);
|
||||
const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(enumLayer.regular), 10);
|
||||
|
||||
// SYNC with systems/item_acceptor.js:drawEntityUnderlays!
|
||||
// 126 / 42 is the exact animation speed of the png animation
|
||||
const animationIndex = Math.floor(
|
||||
((this.root.time.realtimeNow() * speedMultiplier * BELT_ANIM_COUNT * 126) / 42) *
|
||||
globalConfig.itemSpacingOnBelts
|
||||
globalConfig.beltItemSpacingByLayer[enumLayer.regular]
|
||||
);
|
||||
const contents = chunk.contents;
|
||||
for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
|
||||
@ -546,15 +546,6 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
return;
|
||||
}
|
||||
|
||||
// Limit speed to avoid belts going backwards
|
||||
const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(), 10);
|
||||
|
||||
// SYNC with systems/item_acceptor.js:drawEntityUnderlays!
|
||||
// 126 / 42 is the exact animation speed of the png animation
|
||||
const animationIndex = Math.floor(
|
||||
((this.root.time.realtimeNow() * speedMultiplier * BELT_ANIM_COUNT * 126) / 42) *
|
||||
globalConfig.itemSpacingOnBelts
|
||||
);
|
||||
const contents = chunk.wireContents;
|
||||
for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
|
||||
for (let x = 0; x < globalConfig.mapChunkSize; ++x) {
|
||||
|
@ -22,11 +22,7 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
|
||||
}
|
||||
|
||||
update() {
|
||||
const progress =
|
||||
this.root.dynamicTickrate.deltaSeconds *
|
||||
this.root.hubGoals.getBeltBaseSpeed() *
|
||||
2 * // * 2 because its only a half tile
|
||||
globalConfig.itemSpacingOnBelts;
|
||||
const progress = this.root.dynamicTickrate.deltaSeconds * 2; // * 2 because its only a half tile
|
||||
|
||||
for (let i = 0; i < this.allEntities.length; ++i) {
|
||||
const entity = this.allEntities[i];
|
||||
@ -36,7 +32,11 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
|
||||
// Process item consumption animations to avoid items popping from the belts
|
||||
for (let animIndex = 0; animIndex < animations.length; ++animIndex) {
|
||||
const anim = animations[animIndex];
|
||||
anim.animProgress += progress;
|
||||
const layer = aceptorComp.slots[anim.slotIndex].layer;
|
||||
anim.animProgress +=
|
||||
progress *
|
||||
this.root.hubGoals.getBeltBaseSpeed(layer) *
|
||||
globalConfig.beltItemSpacingByLayer[layer];
|
||||
if (anim.animProgress > 1) {
|
||||
// Original
|
||||
// animations.splice(animIndex, 1);
|
||||
@ -120,7 +120,7 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
|
||||
}
|
||||
|
||||
// Limit speed to avoid belts going backwards
|
||||
const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(), 10);
|
||||
const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(layer), 10);
|
||||
|
||||
const underlays = acceptorComp.beltUnderlays;
|
||||
for (let i = 0; i < underlays.length; ++i) {
|
||||
@ -136,7 +136,7 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
|
||||
// SYNC with systems/belt.js:drawSingleEntity!
|
||||
const animationIndex = Math.floor(
|
||||
((this.root.time.realtimeNow() * speedMultiplier * BELT_ANIM_COUNT * 126) / 42) *
|
||||
globalConfig.itemSpacingOnBelts
|
||||
globalConfig.beltItemSpacingByLayer[layer]
|
||||
);
|
||||
|
||||
drawRotatedSprite({
|
||||
|
@ -185,8 +185,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
|
||||
}
|
||||
|
||||
// Precompute effective belt speed
|
||||
const effectiveBeltSpeed = this.root.hubGoals.getBeltBaseSpeed() * globalConfig.itemSpacingOnBelts;
|
||||
let progressGrowth = (effectiveBeltSpeed / 0.5) * this.root.dynamicTickrate.deltaSeconds;
|
||||
let progressGrowth = 2 * this.root.dynamicTickrate.deltaSeconds;
|
||||
|
||||
if (G_IS_DEV && globalConfig.debug.instantBelts) {
|
||||
progressGrowth = 1;
|
||||
@ -217,7 +216,13 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
|
||||
const targetEntity = sourceSlot.cachedTargetEntity;
|
||||
|
||||
// Advance items on the slot
|
||||
sourceSlot.progress = Math.min(1, sourceSlot.progress + progressGrowth);
|
||||
sourceSlot.progress = Math.min(
|
||||
1,
|
||||
sourceSlot.progress +
|
||||
progressGrowth *
|
||||
this.root.hubGoals.getBeltBaseSpeed(sourceSlot.layer) *
|
||||
globalConfig.beltItemSpacingByLayer[sourceSlot.layer]
|
||||
);
|
||||
|
||||
// Check if we are still in the process of ejecting, can't proceed then
|
||||
if (sourceSlot.progress < 1.0) {
|
||||
|