Fix buildings not working at their advertised speed, closes #440, closes #442, closes #437, closes #449
|
@ -10,7 +10,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_1.png":
|
||||
{
|
||||
"frame": {"x":1814,"y":1070,"w":116,"h":144},
|
||||
"frame": {"x":1815,"y":1070,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -18,7 +18,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_2.png":
|
||||
{
|
||||
"frame": {"x":430,"y":1334,"w":116,"h":144},
|
||||
"frame": {"x":1802,"y":1366,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -26,7 +26,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_3.png":
|
||||
{
|
||||
"frame": {"x":426,"y":1482,"w":116,"h":144},
|
||||
"frame": {"x":1922,"y":1405,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -34,7 +34,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_4.png":
|
||||
{
|
||||
"frame": {"x":3,"y":1884,"w":116,"h":144},
|
||||
"frame": {"x":1796,"y":1514,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -42,7 +42,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_5.png":
|
||||
{
|
||||
"frame": {"x":123,"y":1884,"w":116,"h":144},
|
||||
"frame": {"x":1796,"y":1662,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -50,7 +50,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_6.png":
|
||||
{
|
||||
"frame": {"x":424,"y":1630,"w":116,"h":144},
|
||||
"frame": {"x":1916,"y":1693,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -58,7 +58,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_7.png":
|
||||
{
|
||||
"frame": {"x":243,"y":1881,"w":116,"h":144},
|
||||
"frame": {"x":1795,"y":1810,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -66,7 +66,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_8.png":
|
||||
{
|
||||
"frame": {"x":363,"y":1881,"w":116,"h":144},
|
||||
"frame": {"x":145,"y":1887,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -74,7 +74,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_9.png":
|
||||
{
|
||||
"frame": {"x":483,"y":1778,"w":116,"h":144},
|
||||
"frame": {"x":265,"y":1887,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -82,7 +82,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_10.png":
|
||||
{
|
||||
"frame": {"x":1545,"y":1139,"w":116,"h":144},
|
||||
"frame": {"x":1537,"y":1139,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -90,7 +90,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_11.png":
|
||||
{
|
||||
"frame": {"x":1812,"y":1218,"w":116,"h":144},
|
||||
"frame": {"x":1804,"y":1218,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -98,7 +98,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_12.png":
|
||||
{
|
||||
"frame": {"x":433,"y":1038,"w":116,"h":144},
|
||||
"frame": {"x":1924,"y":1257,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -106,7 +106,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_13.png":
|
||||
{
|
||||
"frame": {"x":431,"y":1186,"w":116,"h":144},
|
||||
"frame": {"x":439,"y":1038,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -114,7 +114,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_0.png":
|
||||
{
|
||||
"frame": {"x":151,"y":1035,"w":130,"h":130},
|
||||
"frame": {"x":961,"y":1033,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -122,7 +122,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_1.png":
|
||||
{
|
||||
"frame": {"x":151,"y":1169,"w":130,"h":130},
|
||||
"frame": {"x":1523,"y":1287,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -130,7 +130,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_2.png":
|
||||
{
|
||||
"frame": {"x":148,"y":1571,"w":130,"h":130},
|
||||
"frame": {"x":137,"y":1700,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -138,7 +138,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_3.png":
|
||||
{
|
||||
"frame": {"x":146,"y":1705,"w":130,"h":130},
|
||||
"frame": {"x":271,"y":1700,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -146,7 +146,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_4.png":
|
||||
{
|
||||
"frame": {"x":687,"y":1584,"w":130,"h":130},
|
||||
"frame": {"x":545,"y":1736,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -154,7 +154,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_5.png":
|
||||
{
|
||||
"frame": {"x":821,"y":1584,"w":130,"h":130},
|
||||
"frame": {"x":927,"y":1578,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -162,7 +162,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_6.png":
|
||||
{
|
||||
"frame": {"x":904,"y":1864,"w":130,"h":130},
|
||||
"frame": {"x":786,"y":1649,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -170,7 +170,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_7.png":
|
||||
{
|
||||
"frame": {"x":1003,"y":1704,"w":130,"h":130},
|
||||
"frame": {"x":645,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -178,7 +178,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_8.png":
|
||||
{
|
||||
"frame": {"x":1087,"y":1508,"w":130,"h":130},
|
||||
"frame": {"x":779,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -186,7 +186,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_9.png":
|
||||
{
|
||||
"frame": {"x":1038,"y":1838,"w":130,"h":130},
|
||||
"frame": {"x":913,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -194,7 +194,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_10.png":
|
||||
{
|
||||
"frame": {"x":960,"y":1033,"w":130,"h":130},
|
||||
"frame": {"x":1519,"y":1421,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -202,7 +202,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_11.png":
|
||||
{
|
||||
"frame": {"x":960,"y":1167,"w":130,"h":130},
|
||||
"frame": {"x":1519,"y":1555,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -210,7 +210,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_12.png":
|
||||
{
|
||||
"frame": {"x":151,"y":1303,"w":130,"h":130},
|
||||
"frame": {"x":1915,"y":1841,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -218,7 +218,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_13.png":
|
||||
{
|
||||
"frame": {"x":149,"y":1437,"w":130,"h":130},
|
||||
"frame": {"x":3,"y":1700,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -226,7 +226,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_0.png":
|
||||
{
|
||||
"frame": {"x":1137,"y":1642,"w":130,"h":130},
|
||||
"frame": {"x":1047,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -234,7 +234,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_1.png":
|
||||
{
|
||||
"frame": {"x":1221,"y":1508,"w":130,"h":130},
|
||||
"frame": {"x":1181,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -242,7 +242,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_2.png":
|
||||
{
|
||||
"frame": {"x":1803,"y":1428,"w":130,"h":130},
|
||||
"frame": {"x":920,"y":1712,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -250,7 +250,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_3.png":
|
||||
{
|
||||
"frame": {"x":1623,"y":1461,"w":130,"h":130},
|
||||
"frame": {"x":1054,"y":1735,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -258,7 +258,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_4.png":
|
||||
{
|
||||
"frame": {"x":1489,"y":1555,"w":130,"h":130},
|
||||
"frame": {"x":1188,"y":1735,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -266,7 +266,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_5.png":
|
||||
{
|
||||
"frame": {"x":1271,"y":1670,"w":130,"h":130},
|
||||
"frame": {"x":1322,"y":1703,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -274,7 +274,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_6.png":
|
||||
{
|
||||
"frame": {"x":1172,"y":1804,"w":130,"h":130},
|
||||
"frame": {"x":405,"y":1315,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -282,7 +282,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_7.png":
|
||||
{
|
||||
"frame": {"x":1306,"y":1804,"w":130,"h":130},
|
||||
"frame": {"x":405,"y":1449,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -290,7 +290,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_8.png":
|
||||
{
|
||||
"frame": {"x":1757,"y":1562,"w":130,"h":130},
|
||||
"frame": {"x":405,"y":1583,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -298,7 +298,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_9.png":
|
||||
{
|
||||
"frame": {"x":1623,"y":1595,"w":130,"h":130},
|
||||
"frame": {"x":3,"y":1182,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -306,7 +306,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_10.png":
|
||||
{
|
||||
"frame": {"x":1528,"y":1287,"w":130,"h":130},
|
||||
"frame": {"x":1315,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -314,7 +314,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_11.png":
|
||||
{
|
||||
"frame": {"x":1355,"y":1402,"w":130,"h":130},
|
||||
"frame": {"x":1449,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -322,7 +322,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_12.png":
|
||||
{
|
||||
"frame": {"x":1489,"y":1421,"w":130,"h":130},
|
||||
"frame": {"x":1583,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -330,7 +330,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_13.png":
|
||||
{
|
||||
"frame": {"x":1355,"y":1536,"w":130,"h":130},
|
||||
"frame": {"x":1061,"y":1601,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -338,7 +338,7 @@
|
|||
},
|
||||
"sprites/blueprints/belt_left.png":
|
||||
{
|
||||
"frame": {"x":1891,"y":1562,"w":130,"h":130},
|
||||
"frame": {"x":137,"y":1182,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -346,7 +346,7 @@
|
|||
},
|
||||
"sprites/blueprints/belt_right.png":
|
||||
{
|
||||
"frame": {"x":1440,"y":1689,"w":130,"h":130},
|
||||
"frame": {"x":271,"y":1182,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -354,7 +354,7 @@
|
|||
},
|
||||
"sprites/blueprints/belt_top.png":
|
||||
{
|
||||
"frame": {"x":603,"y":1720,"w":116,"h":144},
|
||||
"frame": {"x":385,"y":1887,"w":116,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
|
||||
|
@ -386,7 +386,7 @@
|
|||
},
|
||||
"sprites/blueprints/display.png":
|
||||
{
|
||||
"frame": {"x":955,"y":1564,"w":128,"h":136},
|
||||
"frame": {"x":1916,"y":1553,"w":128,"h":136},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":8,"y":8,"w":128,"h":136},
|
||||
|
@ -418,7 +418,7 @@
|
|||
},
|
||||
"sprites/blueprints/logic_gate-or.png":
|
||||
{
|
||||
"frame": {"x":1249,"y":989,"w":144,"h":123},
|
||||
"frame": {"x":1249,"y":996,"w":144,"h":123},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":123},
|
||||
|
@ -434,7 +434,7 @@
|
|||
},
|
||||
"sprites/blueprints/logic_gate-xor.png":
|
||||
{
|
||||
"frame": {"x":290,"y":890,"w":144,"h":143},
|
||||
"frame": {"x":291,"y":890,"w":144,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":143},
|
||||
|
@ -442,7 +442,7 @@
|
|||
},
|
||||
"sprites/blueprints/logic_gate.png":
|
||||
{
|
||||
"frame": {"x":1249,"y":852,"w":144,"h":133},
|
||||
"frame": {"x":1397,"y":852,"w":144,"h":133},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
|
||||
|
@ -450,7 +450,7 @@
|
|||
},
|
||||
"sprites/blueprints/miner-chainable.png":
|
||||
{
|
||||
"frame": {"x":624,"y":1868,"w":136,"h":143},
|
||||
"frame": {"x":151,"y":1035,"w":136,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
|
||||
|
@ -458,7 +458,7 @@
|
|||
},
|
||||
"sprites/blueprints/miner.png":
|
||||
{
|
||||
"frame": {"x":723,"y":1718,"w":136,"h":143},
|
||||
"frame": {"x":1513,"y":1689,"w":136,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
|
||||
|
@ -506,15 +506,15 @@
|
|||
},
|
||||
"sprites/blueprints/reader.png":
|
||||
{
|
||||
"frame": {"x":1241,"y":1253,"w":142,"h":144},
|
||||
"frame": {"x":1086,"y":1313,"w":141,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":142,"h":144},
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":144},
|
||||
"sourceSize": {"w":144,"h":144}
|
||||
},
|
||||
"sprites/blueprints/rotater-ccw.png":
|
||||
{
|
||||
"frame": {"x":1665,"y":1198,"w":143,"h":144},
|
||||
"frame": {"x":1243,"y":1123,"w":143,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
|
||||
|
@ -522,7 +522,7 @@
|
|||
},
|
||||
"sprites/blueprints/rotater-fl.png":
|
||||
{
|
||||
"frame": {"x":560,"y":1036,"w":142,"h":144},
|
||||
"frame": {"x":940,"y":1167,"w":142,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":142,"h":144},
|
||||
|
@ -530,7 +530,7 @@
|
|||
},
|
||||
"sprites/blueprints/rotater.png":
|
||||
{
|
||||
"frame": {"x":813,"y":1033,"w":143,"h":144},
|
||||
"frame": {"x":1390,"y":1126,"w":143,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
|
||||
|
@ -538,7 +538,7 @@
|
|||
},
|
||||
"sprites/blueprints/splitter-compact-inverse.png":
|
||||
{
|
||||
"frame": {"x":285,"y":1182,"w":142,"h":138},
|
||||
"frame": {"x":791,"y":1254,"w":142,"h":138},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
|
||||
|
@ -546,7 +546,7 @@
|
|||
},
|
||||
"sprites/blueprints/splitter-compact-merge-inverse.png":
|
||||
{
|
||||
"frame": {"x":3,"y":1326,"w":142,"h":138},
|
||||
"frame": {"x":1086,"y":1171,"w":142,"h":138},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
|
||||
|
@ -554,7 +554,7 @@
|
|||
},
|
||||
"sprites/blueprints/splitter-compact-merge.png":
|
||||
{
|
||||
"frame": {"x":551,"y":1324,"w":139,"h":138},
|
||||
"frame": {"x":1376,"y":1421,"w":139,"h":138},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
|
||||
|
@ -562,7 +562,7 @@
|
|||
},
|
||||
"sprites/blueprints/splitter-compact.png":
|
||||
{
|
||||
"frame": {"x":283,"y":1472,"w":139,"h":138},
|
||||
"frame": {"x":1227,"y":1558,"w":139,"h":138},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
|
||||
|
@ -602,7 +602,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_entry-tier2.png":
|
||||
{
|
||||
"frame": {"x":3,"y":1755,"w":138,"h":125},
|
||||
"frame": {"x":405,"y":1186,"w":138,"h":125},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":19,"w":138,"h":125},
|
||||
|
@ -610,7 +610,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_entry.png":
|
||||
{
|
||||
"frame": {"x":893,"y":1448,"w":138,"h":112},
|
||||
"frame": {"x":3,"y":1836,"w":138,"h":112},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":32,"w":138,"h":112},
|
||||
|
@ -618,7 +618,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_exit-tier2.png":
|
||||
{
|
||||
"frame": {"x":550,"y":1466,"w":139,"h":112},
|
||||
"frame": {"x":1653,"y":1632,"w":139,"h":112},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":139,"h":112},
|
||||
|
@ -626,7 +626,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_exit.png":
|
||||
{
|
||||
"frame": {"x":739,"y":1468,"w":138,"h":112},
|
||||
"frame": {"x":645,"y":1377,"w":138,"h":112},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":138,"h":112},
|
||||
|
@ -642,7 +642,7 @@
|
|||
},
|
||||
"sprites/blueprints/virtual_processor-rotater.png":
|
||||
{
|
||||
"frame": {"x":438,"y":890,"w":118,"h":144},
|
||||
"frame": {"x":1545,"y":991,"w":118,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":118,"h":144},
|
||||
|
@ -650,7 +650,7 @@
|
|||
},
|
||||
"sprites/blueprints/virtual_processor-shapecompare.png":
|
||||
{
|
||||
"frame": {"x":1397,"y":852,"w":144,"h":133},
|
||||
"frame": {"x":1397,"y":989,"w":144,"h":133},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
|
||||
|
@ -666,7 +666,7 @@
|
|||
},
|
||||
"sprites/blueprints/virtual_processor.png":
|
||||
{
|
||||
"frame": {"x":285,"y":1037,"w":144,"h":141},
|
||||
"frame": {"x":291,"y":1037,"w":144,"h":141},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":3,"w":144,"h":141},
|
||||
|
@ -682,7 +682,7 @@
|
|||
},
|
||||
"sprites/blueprints/wire-split.png":
|
||||
{
|
||||
"frame": {"x":1397,"y":989,"w":144,"h":82},
|
||||
"frame": {"x":1098,"y":1000,"w":144,"h":82},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":62,"w":144,"h":82},
|
||||
|
@ -690,7 +690,7 @@
|
|||
},
|
||||
"sprites/blueprints/wire-turn.png":
|
||||
{
|
||||
"frame": {"x":1932,"y":1257,"w":82,"h":82},
|
||||
"frame": {"x":707,"y":1036,"w":82,"h":82},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":62,"y":62,"w":82,"h":82},
|
||||
|
@ -706,15 +706,15 @@
|
|||
},
|
||||
"sprites/blueprints/wire_tunnel-coating.png":
|
||||
{
|
||||
"frame": {"x":255,"y":677,"w":33,"h":135},
|
||||
"frame": {"x":255,"y":677,"w":33,"h":134},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":55,"y":4,"w":33,"h":135},
|
||||
"spriteSourceSize": {"x":56,"y":5,"w":33,"h":134},
|
||||
"sourceSize": {"w":144,"h":144}
|
||||
},
|
||||
"sprites/blueprints/wire_tunnel.png":
|
||||
{
|
||||
"frame": {"x":282,"y":1614,"w":138,"h":135},
|
||||
"frame": {"x":1653,"y":1748,"w":138,"h":135},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":138,"h":135},
|
||||
|
@ -722,7 +722,7 @@
|
|||
},
|
||||
"sprites/buildings/belt_left.png":
|
||||
{
|
||||
"frame": {"x":151,"y":1035,"w":130,"h":130},
|
||||
"frame": {"x":961,"y":1033,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
|
||||
|
@ -730,7 +730,7 @@
|
|||
},
|
||||
"sprites/buildings/belt_right.png":
|
||||
{
|
||||
"frame": {"x":1137,"y":1642,"w":130,"h":130},
|
||||
"frame": {"x":1047,"y":1887,"w":130,"h":130},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
|
||||
|
@ -810,7 +810,7 @@
|
|||
},
|
||||
"sprites/buildings/logic_gate-or.png":
|
||||
{
|
||||
"frame": {"x":1388,"y":1160,"w":143,"h":123},
|
||||
"frame": {"x":559,"y":1173,"w":143,"h":123},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":123},
|
||||
|
@ -826,7 +826,7 @@
|
|||
},
|
||||
"sprites/buildings/logic_gate-xor.png":
|
||||
{
|
||||
"frame": {"x":1094,"y":1085,"w":143,"h":143},
|
||||
"frame": {"x":1657,"y":1198,"w":143,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":143},
|
||||
|
@ -834,7 +834,7 @@
|
|||
},
|
||||
"sprites/buildings/logic_gate.png":
|
||||
{
|
||||
"frame": {"x":1094,"y":1232,"w":143,"h":132},
|
||||
"frame": {"x":793,"y":1118,"w":143,"h":132},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":132},
|
||||
|
@ -842,7 +842,7 @@
|
|||
},
|
||||
"sprites/buildings/miner-chainable.png":
|
||||
{
|
||||
"frame": {"x":764,"y":1865,"w":136,"h":142},
|
||||
"frame": {"x":505,"y":1887,"w":136,"h":142},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
|
||||
|
@ -850,7 +850,7 @@
|
|||
},
|
||||
"sprites/buildings/miner.png":
|
||||
{
|
||||
"frame": {"x":863,"y":1718,"w":136,"h":142},
|
||||
"frame": {"x":405,"y":1736,"w":136,"h":142},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
|
||||
|
@ -898,7 +898,7 @@
|
|||
},
|
||||
"sprites/buildings/reader.png":
|
||||
{
|
||||
"frame": {"x":285,"y":1324,"w":141,"h":144},
|
||||
"frame": {"x":937,"y":1315,"w":141,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":144},
|
||||
|
@ -906,7 +906,7 @@
|
|||
},
|
||||
"sprites/buildings/rotater-ccw.png":
|
||||
{
|
||||
"frame": {"x":3,"y":1468,"w":141,"h":143},
|
||||
"frame": {"x":1378,"y":1274,"w":141,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
|
||||
|
@ -914,7 +914,7 @@
|
|||
},
|
||||
"sprites/buildings/rotater-fl.png":
|
||||
{
|
||||
"frame": {"x":791,"y":1181,"w":141,"h":143},
|
||||
"frame": {"x":1231,"y":1411,"w":141,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":141,"h":143},
|
||||
|
@ -922,7 +922,7 @@
|
|||
},
|
||||
"sprites/buildings/rotater.png":
|
||||
{
|
||||
"frame": {"x":936,"y":1301,"w":141,"h":143},
|
||||
"frame": {"x":1657,"y":1345,"w":141,"h":143},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
|
||||
|
@ -930,7 +930,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact-inverse.png":
|
||||
{
|
||||
"frame": {"x":1081,"y":1368,"w":141,"h":136},
|
||||
"frame": {"x":1082,"y":1461,"w":141,"h":136},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":3,"w":141,"h":136},
|
||||
|
@ -938,7 +938,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact-merge-inverse.png":
|
||||
{
|
||||
"frame": {"x":553,"y":1184,"w":142,"h":136},
|
||||
"frame": {"x":1232,"y":1271,"w":142,"h":136},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":3,"w":142,"h":136},
|
||||
|
@ -946,7 +946,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact-merge.png":
|
||||
{
|
||||
"frame": {"x":3,"y":1615,"w":139,"h":136},
|
||||
"frame": {"x":1653,"y":1492,"w":139,"h":136},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
|
||||
|
@ -954,7 +954,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact.png":
|
||||
{
|
||||
"frame": {"x":750,"y":1328,"w":139,"h":136},
|
||||
"frame": {"x":1370,"y":1563,"w":139,"h":136},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
|
||||
|
@ -994,7 +994,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_entry-tier2.png":
|
||||
{
|
||||
"frame": {"x":280,"y":1753,"w":137,"h":124},
|
||||
"frame": {"x":645,"y":1493,"w":137,"h":124},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":20,"w":137,"h":124},
|
||||
|
@ -1002,7 +1002,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_entry.png":
|
||||
{
|
||||
"frame": {"x":483,"y":1926,"w":137,"h":111},
|
||||
"frame": {"x":928,"y":1463,"w":137,"h":111},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":33,"w":137,"h":111},
|
||||
|
@ -1010,7 +1010,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_exit-tier2.png":
|
||||
{
|
||||
"frame": {"x":1387,"y":1287,"w":137,"h":111},
|
||||
"frame": {"x":786,"y":1534,"w":137,"h":111},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
|
||||
|
@ -1018,7 +1018,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_exit.png":
|
||||
{
|
||||
"frame": {"x":1662,"y":1346,"w":137,"h":111},
|
||||
"frame": {"x":645,"y":1621,"w":137,"h":111},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
|
||||
|
@ -1034,7 +1034,7 @@
|
|||
},
|
||||
"sprites/buildings/virtual_processor-rotater.png":
|
||||
{
|
||||
"frame": {"x":1545,"y":991,"w":117,"h":144},
|
||||
"frame": {"x":439,"y":890,"w":117,"h":144},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":14,"y":0,"w":117,"h":144},
|
||||
|
@ -1042,7 +1042,7 @@
|
|||
},
|
||||
"sprites/buildings/virtual_processor-shapecompare.png":
|
||||
{
|
||||
"frame": {"x":1241,"y":1116,"w":143,"h":133},
|
||||
"frame": {"x":560,"y":1036,"w":143,"h":133},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":133},
|
||||
|
@ -1058,7 +1058,7 @@
|
|||
},
|
||||
"sprites/buildings/virtual_processor.png":
|
||||
{
|
||||
"frame": {"x":3,"y":1182,"w":144,"h":140},
|
||||
"frame": {"x":1249,"y":852,"w":144,"h":140},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":144,"h":140},
|
||||
|
@ -1074,7 +1074,7 @@
|
|||
},
|
||||
"sprites/buildings/wire-split.png":
|
||||
{
|
||||
"frame": {"x":1098,"y":1000,"w":144,"h":81},
|
||||
"frame": {"x":1667,"y":1028,"w":144,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
|
||||
|
@ -1098,15 +1098,15 @@
|
|||
},
|
||||
"sprites/buildings/wire_tunnel-coating.png":
|
||||
{
|
||||
"frame": {"x":255,"y":816,"w":31,"h":134},
|
||||
"frame": {"x":255,"y":815,"w":32,"h":134},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":56,"y":5,"w":31,"h":134},
|
||||
"spriteSourceSize": {"x":56,"y":5,"w":32,"h":134},
|
||||
"sourceSize": {"w":144,"h":144}
|
||||
},
|
||||
"sprites/buildings/wire_tunnel.png":
|
||||
{
|
||||
"frame": {"x":546,"y":1582,"w":137,"h":134},
|
||||
"frame": {"x":787,"y":1396,"w":137,"h":134},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":5,"w":137,"h":134},
|
||||
|
@ -1138,7 +1138,7 @@
|
|||
},
|
||||
"sprites/misc/processor_disabled.png":
|
||||
{
|
||||
"frame": {"x":699,"y":1206,"w":78,"h":81},
|
||||
"frame": {"x":3,"y":1958,"w":78,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":10,"y":10,"w":78,"h":81},
|
||||
|
@ -1178,7 +1178,7 @@
|
|||
},
|
||||
"sprites/misc/storage_overlay.png":
|
||||
{
|
||||
"frame": {"x":1934,"y":1209,"w":89,"h":44},
|
||||
"frame": {"x":1935,"y":1209,"w":89,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":1,"w":89,"h":44},
|
||||
|
@ -1186,7 +1186,7 @@
|
|||
},
|
||||
"sprites/misc/waypoint.png":
|
||||
{
|
||||
"frame": {"x":893,"y":1328,"w":38,"h":48},
|
||||
"frame": {"x":292,"y":1834,"w":38,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":38,"h":48},
|
||||
|
@ -1194,7 +1194,7 @@
|
|||
},
|
||||
"sprites/wires/boolean_false.png":
|
||||
{
|
||||
"frame": {"x":255,"y":954,"w":31,"h":41},
|
||||
"frame": {"x":255,"y":953,"w":31,"h":41},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":9,"y":5,"w":31,"h":41},
|
||||
|
@ -1250,7 +1250,7 @@
|
|||
},
|
||||
"sprites/wires/display/white.png":
|
||||
{
|
||||
"frame": {"x":699,"y":1291,"w":47,"h":47},
|
||||
"frame": {"x":145,"y":1836,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
|
||||
|
@ -1258,7 +1258,7 @@
|
|||
},
|
||||
"sprites/wires/display/yellow.png":
|
||||
{
|
||||
"frame": {"x":694,"y":1342,"w":47,"h":47},
|
||||
"frame": {"x":196,"y":1836,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
|
||||
|
@ -1290,7 +1290,7 @@
|
|||
},
|
||||
"sprites/wires/network_conflict.png":
|
||||
{
|
||||
"frame": {"x":694,"y":1393,"w":47,"h":44},
|
||||
"frame": {"x":85,"y":1952,"w":47,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":2,"w":47,"h":44},
|
||||
|
@ -1298,7 +1298,7 @@
|
|||
},
|
||||
"sprites/wires/network_empty.png":
|
||||
{
|
||||
"frame": {"x":694,"y":1441,"w":41,"h":48},
|
||||
"frame": {"x":247,"y":1834,"w":41,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":5,"y":0,"w":41,"h":48},
|
||||
|
@ -1306,7 +1306,7 @@
|
|||
},
|
||||
"sprites/wires/overlay_tile.png":
|
||||
{
|
||||
"frame": {"x":1934,"y":1109,"w":96,"h":96},
|
||||
"frame": {"x":1935,"y":1109,"w":96,"h":96},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
|
||||
|
@ -1330,7 +1330,7 @@
|
|||
},
|
||||
"sprites/wires/sets/color_split.png":
|
||||
{
|
||||
"frame": {"x":1397,"y":1075,"w":144,"h":81},
|
||||
"frame": {"x":1667,"y":1113,"w":144,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
|
||||
|
@ -1338,7 +1338,7 @@
|
|||
},
|
||||
"sprites/wires/sets/color_turn.png":
|
||||
{
|
||||
"frame": {"x":1932,"y":1343,"w":81,"h":81},
|
||||
"frame": {"x":707,"y":1122,"w":81,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
|
||||
|
@ -1362,7 +1362,7 @@
|
|||
},
|
||||
"sprites/wires/sets/conflict_split.png":
|
||||
{
|
||||
"frame": {"x":1666,"y":1028,"w":144,"h":81},
|
||||
"frame": {"x":813,"y":1033,"w":144,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
|
||||
|
@ -1370,7 +1370,7 @@
|
|||
},
|
||||
"sprites/wires/sets/conflict_turn.png":
|
||||
{
|
||||
"frame": {"x":706,"y":1036,"w":81,"h":81},
|
||||
"frame": {"x":706,"y":1207,"w":81,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
|
||||
|
@ -1394,7 +1394,7 @@
|
|||
},
|
||||
"sprites/wires/sets/regular_split.png":
|
||||
{
|
||||
"frame": {"x":1098,"y":1000,"w":144,"h":81},
|
||||
"frame": {"x":1667,"y":1028,"w":144,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
|
||||
|
@ -1426,7 +1426,7 @@
|
|||
},
|
||||
"sprites/wires/sets/shape_split.png":
|
||||
{
|
||||
"frame": {"x":1666,"y":1113,"w":144,"h":81},
|
||||
"frame": {"x":1095,"y":1086,"w":144,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
|
||||
|
@ -1434,7 +1434,7 @@
|
|||
},
|
||||
"sprites/wires/sets/shape_turn.png":
|
||||
{
|
||||
"frame": {"x":706,"y":1121,"w":81,"h":81},
|
||||
"frame": {"x":706,"y":1292,"w":81,"h":81},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
|
||||
|
@ -1455,6 +1455,6 @@
|
|||
"format": "RGBA8888",
|
||||
"size": {"w":2048,"h":2048},
|
||||
"scale": "0.75",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
@ -10,7 +10,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_1.png":
|
||||
{
|
||||
"frame": {"x":405,"y":817,"w":40,"h":48},
|
||||
"frame": {"x":3,"y":939,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -18,7 +18,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_2.png":
|
||||
{
|
||||
"frame": {"x":3,"y":930,"w":40,"h":48},
|
||||
"frame": {"x":179,"y":969,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -26,7 +26,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_3.png":
|
||||
{
|
||||
"frame": {"x":95,"y":960,"w":40,"h":48},
|
||||
"frame": {"x":407,"y":864,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -34,7 +34,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_4.png":
|
||||
{
|
||||
"frame": {"x":139,"y":960,"w":40,"h":48},
|
||||
"frame": {"x":352,"y":869,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -42,7 +42,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_5.png":
|
||||
{
|
||||
"frame": {"x":183,"y":954,"w":40,"h":48},
|
||||
"frame": {"x":300,"y":883,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -50,7 +50,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_6.png":
|
||||
{
|
||||
"frame": {"x":449,"y":823,"w":40,"h":48},
|
||||
"frame": {"x":249,"y":893,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -58,7 +58,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_7.png":
|
||||
{
|
||||
"frame": {"x":400,"y":869,"w":40,"h":48},
|
||||
"frame": {"x":451,"y":864,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -66,7 +66,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_8.png":
|
||||
{
|
||||
"frame": {"x":352,"y":913,"w":40,"h":48},
|
||||
"frame": {"x":223,"y":945,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -74,7 +74,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_9.png":
|
||||
{
|
||||
"frame": {"x":300,"y":925,"w":40,"h":48},
|
||||
"frame": {"x":267,"y":945,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -82,7 +82,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_10.png":
|
||||
{
|
||||
"frame": {"x":201,"y":901,"w":40,"h":48},
|
||||
"frame": {"x":47,"y":961,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -90,7 +90,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_11.png":
|
||||
{
|
||||
"frame": {"x":150,"y":902,"w":40,"h":48},
|
||||
"frame": {"x":91,"y":961,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -98,7 +98,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_12.png":
|
||||
{
|
||||
"frame": {"x":99,"y":908,"w":40,"h":48},
|
||||
"frame": {"x":135,"y":941,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -106,7 +106,7 @@
|
|||
},
|
||||
"sprites/belt/built/forward_13.png":
|
||||
{
|
||||
"frame": {"x":51,"y":927,"w":40,"h":48},
|
||||
"frame": {"x":179,"y":917,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -154,7 +154,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_5.png":
|
||||
{
|
||||
"frame": {"x":261,"y":749,"w":44,"h":44},
|
||||
"frame": {"x":275,"y":707,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
|
||||
|
@ -162,7 +162,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_6.png":
|
||||
{
|
||||
"frame": {"x":208,"y":757,"w":44,"h":44},
|
||||
"frame": {"x":323,"y":739,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
|
||||
|
@ -170,7 +170,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_7.png":
|
||||
{
|
||||
"frame": {"x":363,"y":769,"w":44,"h":44},
|
||||
"frame": {"x":208,"y":759,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
|
||||
|
@ -178,7 +178,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_8.png":
|
||||
{
|
||||
"frame": {"x":309,"y":781,"w":44,"h":44},
|
||||
"frame": {"x":156,"y":773,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
|
||||
|
@ -186,7 +186,7 @@
|
|||
},
|
||||
"sprites/belt/built/left_9.png":
|
||||
{
|
||||
"frame": {"x":256,"y":797,"w":44,"h":44},
|
||||
"frame": {"x":105,"y":797,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
|
||||
|
@ -226,7 +226,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_0.png":
|
||||
{
|
||||
"frame": {"x":208,"y":805,"w":44,"h":44},
|
||||
"frame": {"x":54,"y":817,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -234,7 +234,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_1.png":
|
||||
{
|
||||
"frame": {"x":156,"y":806,"w":44,"h":44},
|
||||
"frame": {"x":3,"y":843,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -242,7 +242,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_2.png":
|
||||
{
|
||||
"frame": {"x":304,"y":829,"w":44,"h":44},
|
||||
"frame": {"x":102,"y":845,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -250,7 +250,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_3.png":
|
||||
{
|
||||
"frame": {"x":256,"y":845,"w":44,"h":44},
|
||||
"frame": {"x":51,"y":865,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -258,7 +258,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_4.png":
|
||||
{
|
||||
"frame": {"x":204,"y":853,"w":44,"h":44},
|
||||
"frame": {"x":3,"y":891,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -266,7 +266,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_5.png":
|
||||
{
|
||||
"frame": {"x":153,"y":854,"w":44,"h":44},
|
||||
"frame": {"x":359,"y":821,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -274,7 +274,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_6.png":
|
||||
{
|
||||
"frame": {"x":102,"y":860,"w":44,"h":44},
|
||||
"frame": {"x":304,"y":835,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -282,7 +282,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_7.png":
|
||||
{
|
||||
"frame": {"x":51,"y":879,"w":44,"h":44},
|
||||
"frame": {"x":252,"y":845,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -290,7 +290,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_8.png":
|
||||
{
|
||||
"frame": {"x":3,"y":882,"w":44,"h":44},
|
||||
"frame": {"x":201,"y":855,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -298,7 +298,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_9.png":
|
||||
{
|
||||
"frame": {"x":352,"y":865,"w":44,"h":44},
|
||||
"frame": {"x":150,"y":869,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -306,7 +306,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_10.png":
|
||||
{
|
||||
"frame": {"x":105,"y":812,"w":44,"h":44},
|
||||
"frame": {"x":311,"y":787,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -314,7 +314,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_11.png":
|
||||
{
|
||||
"frame": {"x":54,"y":831,"w":44,"h":44},
|
||||
"frame": {"x":256,"y":797,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -322,7 +322,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_12.png":
|
||||
{
|
||||
"frame": {"x":3,"y":834,"w":44,"h":44},
|
||||
"frame": {"x":204,"y":807,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -330,7 +330,7 @@
|
|||
},
|
||||
"sprites/belt/built/right_13.png":
|
||||
{
|
||||
"frame": {"x":357,"y":817,"w":44,"h":44},
|
||||
"frame": {"x":153,"y":821,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -338,7 +338,7 @@
|
|||
},
|
||||
"sprites/blueprints/belt_left.png":
|
||||
{
|
||||
"frame": {"x":304,"y":877,"w":44,"h":44},
|
||||
"frame": {"x":99,"y":893,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
|
||||
|
@ -346,7 +346,7 @@
|
|||
},
|
||||
"sprites/blueprints/belt_right.png":
|
||||
{
|
||||
"frame": {"x":252,"y":893,"w":44,"h":44},
|
||||
"frame": {"x":51,"y":913,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -354,7 +354,7 @@
|
|||
},
|
||||
"sprites/blueprints/belt_top.png":
|
||||
{
|
||||
"frame": {"x":344,"y":965,"w":40,"h":48},
|
||||
"frame": {"x":311,"y":935,"w":40,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
|
||||
|
@ -418,7 +418,7 @@
|
|||
},
|
||||
"sprites/blueprints/logic_gate-or.png":
|
||||
{
|
||||
"frame": {"x":371,"y":723,"w":48,"h":42},
|
||||
"frame": {"x":423,"y":818,"w":48,"h":42},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":42},
|
||||
|
@ -442,7 +442,7 @@
|
|||
},
|
||||
"sprites/blueprints/logic_gate.png":
|
||||
{
|
||||
"frame": {"x":55,"y":555,"w":48,"h":45},
|
||||
"frame": {"x":171,"y":622,"w":48,"h":45},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
|
||||
|
@ -450,7 +450,7 @@
|
|||
},
|
||||
"sprites/blueprints/miner-chainable.png":
|
||||
{
|
||||
"frame": {"x":55,"y":682,"w":47,"h":48},
|
||||
"frame": {"x":107,"y":648,"w":47,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
|
||||
|
@ -458,7 +458,7 @@
|
|||
},
|
||||
"sprites/blueprints/miner.png":
|
||||
{
|
||||
"frame": {"x":3,"y":689,"w":47,"h":48},
|
||||
"frame": {"x":55,"y":672,"w":47,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
|
||||
|
@ -554,7 +554,7 @@
|
|||
},
|
||||
"sprites/blueprints/splitter-compact-merge.png":
|
||||
{
|
||||
"frame": {"x":54,"y":734,"w":47,"h":47},
|
||||
"frame": {"x":106,"y":700,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
|
||||
|
@ -562,7 +562,7 @@
|
|||
},
|
||||
"sprites/blueprints/splitter-compact.png":
|
||||
{
|
||||
"frame": {"x":3,"y":741,"w":47,"h":47},
|
||||
"frame": {"x":54,"y":724,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
|
||||
|
@ -602,7 +602,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_entry-tier2.png":
|
||||
{
|
||||
"frame": {"x":223,"y":659,"w":48,"h":43},
|
||||
"frame": {"x":447,"y":771,"w":48,"h":43},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":5,"w":48,"h":43},
|
||||
|
@ -610,7 +610,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_entry.png":
|
||||
{
|
||||
"frame": {"x":3,"y":605,"w":48,"h":38},
|
||||
"frame": {"x":55,"y":556,"w":48,"h":38},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":10,"w":48,"h":38},
|
||||
|
@ -618,7 +618,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_exit-tier2.png":
|
||||
{
|
||||
"frame": {"x":3,"y":647,"w":48,"h":38},
|
||||
"frame": {"x":55,"y":598,"w":48,"h":38},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
|
||||
|
@ -626,7 +626,7 @@
|
|||
},
|
||||
"sprites/blueprints/underground_belt_exit.png":
|
||||
{
|
||||
"frame": {"x":107,"y":604,"w":48,"h":38},
|
||||
"frame": {"x":107,"y":606,"w":48,"h":38},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
|
||||
|
@ -650,7 +650,7 @@
|
|||
},
|
||||
"sprites/blueprints/virtual_processor-shapecompare.png":
|
||||
{
|
||||
"frame": {"x":3,"y":556,"w":48,"h":45},
|
||||
"frame": {"x":223,"y":659,"w":48,"h":45},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
|
||||
|
@ -698,7 +698,7 @@
|
|||
},
|
||||
"sprites/blueprints/wire.png":
|
||||
{
|
||||
"frame": {"x":437,"y":722,"w":8,"h":48},
|
||||
"frame": {"x":159,"y":520,"w":8,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
|
||||
|
@ -706,15 +706,15 @@
|
|||
},
|
||||
"sprites/blueprints/wire_tunnel-coating.png":
|
||||
{
|
||||
"frame": {"x":425,"y":638,"w":13,"h":47},
|
||||
"frame": {"x":425,"y":655,"w":12,"h":46},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":17,"y":0,"w":13,"h":47},
|
||||
"spriteSourceSize": {"x":18,"y":1,"w":12,"h":46},
|
||||
"sourceSize": {"w":48,"h":48}
|
||||
},
|
||||
"sprites/blueprints/wire_tunnel.png":
|
||||
{
|
||||
"frame": {"x":55,"y":504,"w":48,"h":47},
|
||||
"frame": {"x":107,"y":504,"w":48,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
|
||||
|
@ -730,7 +730,7 @@
|
|||
},
|
||||
"sprites/buildings/belt_right.png":
|
||||
{
|
||||
"frame": {"x":208,"y":805,"w":44,"h":44},
|
||||
"frame": {"x":54,"y":817,"w":44,"h":44},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
|
||||
|
@ -810,7 +810,7 @@
|
|||
},
|
||||
"sprites/buildings/logic_gate-or.png":
|
||||
{
|
||||
"frame": {"x":55,"y":604,"w":48,"h":42},
|
||||
"frame": {"x":3,"y":556,"w":48,"h":42},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":42},
|
||||
|
@ -834,7 +834,7 @@
|
|||
},
|
||||
"sprites/buildings/logic_gate.png":
|
||||
{
|
||||
"frame": {"x":107,"y":555,"w":48,"h":45},
|
||||
"frame": {"x":371,"y":723,"w":48,"h":45},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
|
||||
|
@ -842,7 +842,7 @@
|
|||
},
|
||||
"sprites/buildings/miner-chainable.png":
|
||||
{
|
||||
"frame": {"x":159,"y":703,"w":47,"h":48},
|
||||
"frame": {"x":3,"y":698,"w":47,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
|
||||
|
@ -850,7 +850,7 @@
|
|||
},
|
||||
"sprites/buildings/miner.png":
|
||||
{
|
||||
"frame": {"x":106,"y":710,"w":47,"h":48},
|
||||
"frame": {"x":158,"y":671,"w":47,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
|
||||
|
@ -930,7 +930,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact-inverse.png":
|
||||
{
|
||||
"frame": {"x":107,"y":504,"w":48,"h":47},
|
||||
"frame": {"x":107,"y":555,"w":48,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
|
||||
|
@ -946,7 +946,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact-merge.png":
|
||||
{
|
||||
"frame": {"x":210,"y":706,"w":47,"h":47},
|
||||
"frame": {"x":3,"y":750,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
|
||||
|
@ -954,7 +954,7 @@
|
|||
},
|
||||
"sprites/buildings/splitter-compact.png":
|
||||
{
|
||||
"frame": {"x":157,"y":755,"w":47,"h":47},
|
||||
"frame": {"x":209,"y":708,"w":47,"h":47},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
|
||||
|
@ -994,7 +994,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_entry-tier2.png":
|
||||
{
|
||||
"frame": {"x":54,"y":785,"w":47,"h":42},
|
||||
"frame": {"x":105,"y":751,"w":47,"h":42},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":6,"w":47,"h":42},
|
||||
|
@ -1002,7 +1002,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_entry.png":
|
||||
{
|
||||
"frame": {"x":3,"y":792,"w":47,"h":38},
|
||||
"frame": {"x":54,"y":775,"w":47,"h":38},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":10,"w":47,"h":38},
|
||||
|
@ -1010,7 +1010,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_exit-tier2.png":
|
||||
{
|
||||
"frame": {"x":261,"y":707,"w":47,"h":38},
|
||||
"frame": {"x":3,"y":801,"w":47,"h":38},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
|
||||
|
@ -1018,7 +1018,7 @@
|
|||
},
|
||||
"sprites/buildings/underground_belt_exit.png":
|
||||
{
|
||||
"frame": {"x":312,"y":739,"w":47,"h":38},
|
||||
"frame": {"x":260,"y":755,"w":47,"h":38},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
|
||||
|
@ -1042,7 +1042,7 @@
|
|||
},
|
||||
"sprites/buildings/virtual_processor-shapecompare.png":
|
||||
{
|
||||
"frame": {"x":171,"y":622,"w":48,"h":45},
|
||||
"frame": {"x":371,"y":772,"w":48,"h":45},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
|
||||
|
@ -1066,7 +1066,7 @@
|
|||
},
|
||||
"sprites/buildings/wire-cross.png":
|
||||
{
|
||||
"frame": {"x":459,"y":667,"w":48,"h":48},
|
||||
"frame": {"x":457,"y":667,"w":48,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
|
||||
|
@ -1074,7 +1074,7 @@
|
|||
},
|
||||
"sprites/buildings/wire-split.png":
|
||||
{
|
||||
"frame": {"x":107,"y":646,"w":48,"h":28},
|
||||
"frame": {"x":3,"y":602,"w":48,"h":28},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
|
||||
|
@ -1090,7 +1090,7 @@
|
|||
},
|
||||
"sprites/buildings/wire.png":
|
||||
{
|
||||
"frame": {"x":501,"y":771,"w":8,"h":48},
|
||||
"frame": {"x":159,"y":572,"w":8,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
|
||||
|
@ -1098,7 +1098,7 @@
|
|||
},
|
||||
"sprites/buildings/wire_tunnel-coating.png":
|
||||
{
|
||||
"frame": {"x":442,"y":672,"w":12,"h":46},
|
||||
"frame": {"x":441,"y":655,"w":12,"h":46},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":18,"y":1,"w":12,"h":46},
|
||||
|
@ -1106,7 +1106,7 @@
|
|||
},
|
||||
"sprites/buildings/wire_tunnel.png":
|
||||
{
|
||||
"frame": {"x":105,"y":762,"w":47,"h":46},
|
||||
"frame": {"x":157,"y":723,"w":47,"h":46},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":46},
|
||||
|
@ -1162,7 +1162,7 @@
|
|||
},
|
||||
"sprites/misc/slot_bad_arrow.png":
|
||||
{
|
||||
"frame": {"x":442,"y":638,"w":13,"h":13},
|
||||
"frame": {"x":425,"y":638,"w":13,"h":13},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
|
||||
|
@ -1170,7 +1170,7 @@
|
|||
},
|
||||
"sprites/misc/slot_good_arrow.png":
|
||||
{
|
||||
"frame": {"x":442,"y":655,"w":13,"h":13},
|
||||
"frame": {"x":442,"y":638,"w":13,"h":13},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
|
||||
|
@ -1194,7 +1194,7 @@
|
|||
},
|
||||
"sprites/wires/boolean_false.png":
|
||||
{
|
||||
"frame": {"x":424,"y":689,"w":12,"h":15},
|
||||
"frame": {"x":424,"y":705,"w":12,"h":15},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":2,"y":1,"w":12,"h":15},
|
||||
|
@ -1202,7 +1202,7 @@
|
|||
},
|
||||
"sprites/wires/boolean_true.png":
|
||||
{
|
||||
"frame": {"x":424,"y":708,"w":9,"h":15},
|
||||
"frame": {"x":440,"y":705,"w":9,"h":15},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":3,"y":1,"w":9,"h":15},
|
||||
|
@ -1314,7 +1314,7 @@
|
|||
},
|
||||
"sprites/wires/sets/color_cross.png":
|
||||
{
|
||||
"frame": {"x":458,"y":719,"w":48,"h":48},
|
||||
"frame": {"x":453,"y":719,"w":48,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
|
||||
|
@ -1322,7 +1322,7 @@
|
|||
},
|
||||
"sprites/wires/sets/color_forward.png":
|
||||
{
|
||||
"frame": {"x":159,"y":520,"w":8,"h":48},
|
||||
"frame": {"x":423,"y":724,"w":8,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
|
||||
|
@ -1330,7 +1330,7 @@
|
|||
},
|
||||
"sprites/wires/sets/color_split.png":
|
||||
{
|
||||
"frame": {"x":55,"y":650,"w":48,"h":28},
|
||||
"frame": {"x":3,"y":634,"w":48,"h":28},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
|
||||
|
@ -1346,7 +1346,7 @@
|
|||
},
|
||||
"sprites/wires/sets/conflict_cross.png":
|
||||
{
|
||||
"frame": {"x":449,"y":771,"w":48,"h":48},
|
||||
"frame": {"x":3,"y":504,"w":48,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
|
||||
|
@ -1354,7 +1354,7 @@
|
|||
},
|
||||
"sprites/wires/sets/conflict_forward.png":
|
||||
{
|
||||
"frame": {"x":159,"y":572,"w":8,"h":48},
|
||||
"frame": {"x":435,"y":724,"w":8,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
|
||||
|
@ -1362,7 +1362,7 @@
|
|||
},
|
||||
"sprites/wires/sets/conflict_split.png":
|
||||
{
|
||||
"frame": {"x":159,"y":671,"w":48,"h":28},
|
||||
"frame": {"x":55,"y":640,"w":48,"h":28},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
|
||||
|
@ -1378,7 +1378,7 @@
|
|||
},
|
||||
"sprites/wires/sets/regular_cross.png":
|
||||
{
|
||||
"frame": {"x":459,"y":667,"w":48,"h":48},
|
||||
"frame": {"x":457,"y":667,"w":48,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
|
||||
|
@ -1386,7 +1386,7 @@
|
|||
},
|
||||
"sprites/wires/sets/regular_forward.png":
|
||||
{
|
||||
"frame": {"x":501,"y":771,"w":8,"h":48},
|
||||
"frame": {"x":159,"y":572,"w":8,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
|
||||
|
@ -1394,7 +1394,7 @@
|
|||
},
|
||||
"sprites/wires/sets/regular_split.png":
|
||||
{
|
||||
"frame": {"x":107,"y":646,"w":48,"h":28},
|
||||
"frame": {"x":3,"y":602,"w":48,"h":28},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
|
||||
|
@ -1410,7 +1410,7 @@
|
|||
},
|
||||
"sprites/wires/sets/shape_cross.png":
|
||||
{
|
||||
"frame": {"x":3,"y":504,"w":48,"h":48},
|
||||
"frame": {"x":55,"y":504,"w":48,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
|
||||
|
@ -1418,7 +1418,7 @@
|
|||
},
|
||||
"sprites/wires/sets/shape_forward.png":
|
||||
{
|
||||
"frame": {"x":423,"y":727,"w":8,"h":48},
|
||||
"frame": {"x":499,"y":771,"w":8,"h":48},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
|
||||
|
@ -1426,7 +1426,7 @@
|
|||
},
|
||||
"sprites/wires/sets/shape_split.png":
|
||||
{
|
||||
"frame": {"x":107,"y":678,"w":48,"h":28},
|
||||
"frame": {"x":3,"y":666,"w":48,"h":28},
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
|
||||
|
@ -1455,6 +1455,6 @@
|
|||
"format": "RGBA8888",
|
||||
"size": {"w":512,"h":1024},
|
||||
"scale": "0.25",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 277 KiB |
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 658 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
@ -61,7 +61,7 @@ export const globalConfig = {
|
|||
|
||||
undergroundBeltMaxTilesByTier: [5, 8],
|
||||
|
||||
readerAnalyzeIntervalSeconds: 10,
|
||||
readerAnalyzeIntervalSeconds: G_IS_DEV ? 3 : 10,
|
||||
|
||||
buildingSpeeds: {
|
||||
cutter: 1 / 4,
|
||||
|
|
|
@ -459,67 +459,6 @@ export function removeAllChildren(elem) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fixes lockstep simulation by converting times like 34.0000000003 to 34.00.
|
||||
* We use 3 digits of precision, this allows us to store precision of 1 ms without
|
||||
* the risking simulation errors due to resync issues
|
||||
* @param {number} value
|
||||
*/
|
||||
export function quantizeFloat(value) {
|
||||
return Math.round(value * 1000.0) / 1000.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Safe check to check if a timer is expired. quantizes numbers
|
||||
* @param {number} now Current time
|
||||
* @param {number} lastTick Last tick of the timer
|
||||
* @param {number} tickRate Interval of the timer
|
||||
*/
|
||||
export function checkTimerExpired(now, lastTick, tickRate) {
|
||||
if (G_IS_DEV) {
|
||||
if (quantizeFloat(now) !== now) {
|
||||
console.error("Got non-quantizied time:" + now + " vs " + quantizeFloat(now));
|
||||
now = quantizeFloat(now);
|
||||
}
|
||||
if (quantizeFloat(lastTick) !== lastTick) {
|
||||
// FIXME: REENABLE
|
||||
// console.error("Got non-quantizied timer:" + lastTick + " vs " + quantizeFloat(lastTick));
|
||||
lastTick = quantizeFloat(lastTick);
|
||||
}
|
||||
} else {
|
||||
// just to be safe
|
||||
now = quantizeFloat(now);
|
||||
lastTick = quantizeFloat(lastTick);
|
||||
}
|
||||
/*
|
||||
Ok, so heres the issue (Died a bit while debugging it):
|
||||
|
||||
In multiplayer lockstep simulation, client A will simulate everything at T, but client B
|
||||
will simulate it at T + 3. So we are running into the following precision issue:
|
||||
Lets say on client A the time is T = 30. Then on clientB the time is T = 33.
|
||||
Now, our timer takes 0.1 seconds and ticked at 29.90 - What does happen now?
|
||||
Client A computes the timer and checks T > lastTick + interval. He computes
|
||||
|
||||
30 >= 29.90 + 0.1 <=> 30 >= 30.0000 <=> True <=> Tick performed
|
||||
|
||||
However, this is what it looks on client B:
|
||||
|
||||
33 >= 32.90 + 0.1 <=> 33 >= 32.999999999999998 <=> False <=> No tick performed!
|
||||
|
||||
This means that Client B will only tick at the *next* frame, which means it from now is out
|
||||
of sync by one tick, which means the game will resync further or later and be not able to recover,
|
||||
since it will run into the same issue over and over.
|
||||
*/
|
||||
|
||||
// The next tick, in our example it would be 30.0000 / 32.99999999998. In order to fix it, we quantize
|
||||
// it, so its now 30.0000 / 33.0000
|
||||
const nextTick = quantizeFloat(lastTick + tickRate);
|
||||
|
||||
// This check is safe, but its the only check where you may compare times. You always need to use
|
||||
// this method!
|
||||
return now >= nextTick;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the game supports this browser
|
||||
*/
|
||||
|
|
|
@ -109,6 +109,11 @@ export class ItemProcessorComponent extends Component {
|
|||
* How long it takes until we are done with the current items
|
||||
*/
|
||||
this.secondsUntilEject = 0;
|
||||
|
||||
/**
|
||||
* How much processing time we have lest from the last tick
|
||||
*/
|
||||
this.bonusFromLastTick = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,58 +1,58 @@
|
|||
import { types } from "../../savegame/serialization";
|
||||
import { BaseItem } from "../base_item";
|
||||
import { Component } from "../component";
|
||||
import { typeItemSingleton } from "../item_resolver";
|
||||
|
||||
const chainBufferSize = 3;
|
||||
|
||||
export class MinerComponent extends Component {
|
||||
static getId() {
|
||||
return "Miner";
|
||||
}
|
||||
|
||||
static getSchema() {
|
||||
// cachedMinedItem is not serialized.
|
||||
return {
|
||||
lastMiningTime: types.ufloat,
|
||||
itemChainBuffer: types.array(typeItemSingleton),
|
||||
};
|
||||
}
|
||||
|
||||
duplicateWithoutContents() {
|
||||
return new MinerComponent({
|
||||
chainable: this.chainable,
|
||||
});
|
||||
}
|
||||
|
||||
constructor({ chainable = false }) {
|
||||
super();
|
||||
this.lastMiningTime = 0;
|
||||
this.chainable = chainable;
|
||||
|
||||
/**
|
||||
* Stores items from other miners which were chained to this
|
||||
* miner.
|
||||
* @type {Array<BaseItem>}
|
||||
*/
|
||||
this.itemChainBuffer = [];
|
||||
|
||||
/**
|
||||
* @type {BaseItem}
|
||||
*/
|
||||
this.cachedMinedItem = null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {BaseItem} item
|
||||
*/
|
||||
tryAcceptChainedItem(item) {
|
||||
if (this.itemChainBuffer.length > chainBufferSize) {
|
||||
// Well, this one is full
|
||||
return false;
|
||||
}
|
||||
|
||||
this.itemChainBuffer.push(item);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
import { types } from "../../savegame/serialization";
|
||||
import { BaseItem } from "../base_item";
|
||||
import { Component } from "../component";
|
||||
import { typeItemSingleton } from "../item_resolver";
|
||||
|
||||
const chainBufferSize = 6;
|
||||
|
||||
export class MinerComponent extends Component {
|
||||
static getId() {
|
||||
return "Miner";
|
||||
}
|
||||
|
||||
static getSchema() {
|
||||
// cachedMinedItem is not serialized.
|
||||
return {
|
||||
lastMiningTime: types.ufloat,
|
||||
itemChainBuffer: types.array(typeItemSingleton),
|
||||
};
|
||||
}
|
||||
|
||||
duplicateWithoutContents() {
|
||||
return new MinerComponent({
|
||||
chainable: this.chainable,
|
||||
});
|
||||
}
|
||||
|
||||
constructor({ chainable = false }) {
|
||||
super();
|
||||
this.lastMiningTime = 0;
|
||||
this.chainable = chainable;
|
||||
|
||||
/**
|
||||
* Stores items from other miners which were chained to this
|
||||
* miner.
|
||||
* @type {Array<BaseItem>}
|
||||
*/
|
||||
this.itemChainBuffer = [];
|
||||
|
||||
/**
|
||||
* @type {BaseItem}
|
||||
*/
|
||||
this.cachedMinedItem = null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {BaseItem} item
|
||||
*/
|
||||
tryAcceptChainedItem(item) {
|
||||
if (this.itemChainBuffer.length > chainBufferSize) {
|
||||
// Well, this one is full
|
||||
return false;
|
||||
}
|
||||
|
||||
this.itemChainBuffer.push(item);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,10 +25,14 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
|
|||
const ejectorComp = entity.components.ItemEjector;
|
||||
|
||||
// First of all, process the current recipe
|
||||
processorComp.secondsUntilEject = Math.max(
|
||||
0,
|
||||
processorComp.secondsUntilEject - this.root.dynamicTickrate.deltaSeconds
|
||||
);
|
||||
const newSecondsUntilEject =
|
||||
processorComp.secondsUntilEject - this.root.dynamicTickrate.deltaSeconds;
|
||||
|
||||
processorComp.secondsUntilEject = Math.max(0, newSecondsUntilEject);
|
||||
|
||||
if (newSecondsUntilEject < 0) {
|
||||
processorComp.bonusFromLastTick -= newSecondsUntilEject;
|
||||
}
|
||||
|
||||
if (G_IS_DEV && globalConfig.debug.instantProcessors) {
|
||||
processorComp.secondsUntilEject = 0;
|
||||
|
@ -233,7 +237,10 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
|
|||
}
|
||||
|
||||
const baseSpeed = this.root.hubGoals.getProcessorBaseSpeed(processorComp.type);
|
||||
processorComp.secondsUntilEject = 1 / baseSpeed;
|
||||
|
||||
// Substract one tick because we already process it this frame
|
||||
processorComp.secondsUntilEject = Math.max(0, 1 / baseSpeed - processorComp.bonusFromLastTick);
|
||||
processorComp.bonusFromLastTick = 0;
|
||||
|
||||
/** @type {Array<{item: BaseItem, requiredSlot?: number, preferredSlot?: number}>} */
|
||||
const outItems = [];
|
||||
|
|
|
@ -1,140 +1,144 @@
|
|||
import { globalConfig } from "../../core/config";
|
||||
import { DrawParameters } from "../../core/draw_parameters";
|
||||
import { enumDirectionToVector } from "../../core/vector";
|
||||
import { BaseItem } from "../base_item";
|
||||
import { MinerComponent } from "../components/miner";
|
||||
import { Entity } from "../entity";
|
||||
import { GameSystemWithFilter } from "../game_system_with_filter";
|
||||
import { MapChunkView } from "../map_chunk_view";
|
||||
|
||||
export class MinerSystem extends GameSystemWithFilter {
|
||||
constructor(root) {
|
||||
super(root, [MinerComponent]);
|
||||
}
|
||||
|
||||
update() {
|
||||
let miningSpeed = this.root.hubGoals.getMinerBaseSpeed();
|
||||
if (G_IS_DEV && globalConfig.debug.instantMiners) {
|
||||
miningSpeed *= 100;
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.allEntities.length; ++i) {
|
||||
const entity = this.allEntities[i];
|
||||
|
||||
// Check if miner is above an actual tile
|
||||
|
||||
const minerComp = entity.components.Miner;
|
||||
|
||||
if (!minerComp.cachedMinedItem) {
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
const tileBelow = this.root.map.getLowerLayerContentXY(
|
||||
staticComp.origin.x,
|
||||
staticComp.origin.y
|
||||
);
|
||||
if (!tileBelow) {
|
||||
continue;
|
||||
}
|
||||
minerComp.cachedMinedItem = tileBelow;
|
||||
}
|
||||
|
||||
// First, try to get rid of chained items
|
||||
if (minerComp.itemChainBuffer.length > 0) {
|
||||
if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) {
|
||||
minerComp.itemChainBuffer.shift();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) {
|
||||
if (this.tryPerformMinerEject(entity, minerComp.cachedMinedItem)) {
|
||||
// Analytics hook
|
||||
this.root.signals.itemProduced.dispatch(minerComp.cachedMinedItem);
|
||||
|
||||
// Actually mine
|
||||
minerComp.lastMiningTime = this.root.time.now();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Entity} entity
|
||||
* @param {BaseItem} item
|
||||
*/
|
||||
tryPerformMinerEject(entity, item) {
|
||||
const minerComp = entity.components.Miner;
|
||||
const ejectComp = entity.components.ItemEjector;
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
|
||||
// Check if we are a chained miner
|
||||
if (minerComp.chainable) {
|
||||
const ejectingSlot = ejectComp.slots[0];
|
||||
const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos);
|
||||
const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction);
|
||||
|
||||
const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]);
|
||||
const targetContents = this.root.map.getTileContent(targetTile, "regular");
|
||||
|
||||
// Check if we are connected to another miner and thus do not eject directly
|
||||
if (targetContents) {
|
||||
const targetMinerComp = targetContents.components.Miner;
|
||||
if (targetMinerComp) {
|
||||
if (targetMinerComp.tryAcceptChainedItem(item)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Seems we are a regular miner or at the end of a row, try actually ejecting
|
||||
if (ejectComp.tryEject(0, item)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {DrawParameters} parameters
|
||||
* @param {MapChunkView} chunk
|
||||
*/
|
||||
drawChunk(parameters, chunk) {
|
||||
const contents = chunk.containedEntitiesByLayer.regular;
|
||||
|
||||
for (let i = 0; i < contents.length; ++i) {
|
||||
const entity = contents[i];
|
||||
const minerComp = entity.components.Miner;
|
||||
if (!minerComp) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
if (!minerComp.cachedMinedItem) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Draw the item background - this is to hide the ejected item animation from
|
||||
// the item ejecto
|
||||
|
||||
const padding = 3;
|
||||
const destX = staticComp.origin.x * globalConfig.tileSize + padding;
|
||||
const destY = staticComp.origin.y * globalConfig.tileSize + padding;
|
||||
const dimensions = globalConfig.tileSize - 2 * padding;
|
||||
|
||||
if (parameters.visibleRect.containsRect4Params(destX, destY, dimensions, dimensions)) {
|
||||
parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource();
|
||||
parameters.context.fillRect(destX, destY, dimensions, dimensions);
|
||||
}
|
||||
|
||||
minerComp.cachedMinedItem.drawItemCenteredClipped(
|
||||
(0.5 + staticComp.origin.x) * globalConfig.tileSize,
|
||||
(0.5 + staticComp.origin.y) * globalConfig.tileSize,
|
||||
parameters,
|
||||
globalConfig.defaultItemDiameter
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
import { globalConfig } from "../../core/config";
|
||||
import { DrawParameters } from "../../core/draw_parameters";
|
||||
import { enumDirectionToVector } from "../../core/vector";
|
||||
import { BaseItem } from "../base_item";
|
||||
import { MinerComponent } from "../components/miner";
|
||||
import { Entity } from "../entity";
|
||||
import { GameSystemWithFilter } from "../game_system_with_filter";
|
||||
import { MapChunkView } from "../map_chunk_view";
|
||||
|
||||
export class MinerSystem extends GameSystemWithFilter {
|
||||
constructor(root) {
|
||||
super(root, [MinerComponent]);
|
||||
}
|
||||
|
||||
update() {
|
||||
let miningSpeed = this.root.hubGoals.getMinerBaseSpeed();
|
||||
if (G_IS_DEV && globalConfig.debug.instantMiners) {
|
||||
miningSpeed *= 100;
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.allEntities.length; ++i) {
|
||||
const entity = this.allEntities[i];
|
||||
|
||||
// Check if miner is above an actual tile
|
||||
|
||||
const minerComp = entity.components.Miner;
|
||||
|
||||
if (!minerComp.cachedMinedItem) {
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
const tileBelow = this.root.map.getLowerLayerContentXY(
|
||||
staticComp.origin.x,
|
||||
staticComp.origin.y
|
||||
);
|
||||
if (!tileBelow) {
|
||||
continue;
|
||||
}
|
||||
minerComp.cachedMinedItem = tileBelow;
|
||||
}
|
||||
|
||||
// First, try to get rid of chained items
|
||||
if (minerComp.itemChainBuffer.length > 0) {
|
||||
if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) {
|
||||
minerComp.itemChainBuffer.shift();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
const mineDuration = 1 / miningSpeed;
|
||||
const timeSinceMine = this.root.time.now() - minerComp.lastMiningTime;
|
||||
if (timeSinceMine > mineDuration) {
|
||||
// Store how much we overflowed
|
||||
const buffer = Math.min(timeSinceMine - mineDuration, this.root.dynamicTickrate.deltaSeconds);
|
||||
|
||||
if (this.tryPerformMinerEject(entity, minerComp.cachedMinedItem)) {
|
||||
// Analytics hook
|
||||
this.root.signals.itemProduced.dispatch(minerComp.cachedMinedItem);
|
||||
// Store mining time
|
||||
minerComp.lastMiningTime = this.root.time.now() - buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Entity} entity
|
||||
* @param {BaseItem} item
|
||||
*/
|
||||
tryPerformMinerEject(entity, item) {
|
||||
const minerComp = entity.components.Miner;
|
||||
const ejectComp = entity.components.ItemEjector;
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
|
||||
// Check if we are a chained miner
|
||||
if (minerComp.chainable) {
|
||||
const ejectingSlot = ejectComp.slots[0];
|
||||
const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos);
|
||||
const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction);
|
||||
|
||||
const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]);
|
||||
const targetContents = this.root.map.getTileContent(targetTile, "regular");
|
||||
|
||||
// Check if we are connected to another miner and thus do not eject directly
|
||||
if (targetContents) {
|
||||
const targetMinerComp = targetContents.components.Miner;
|
||||
if (targetMinerComp) {
|
||||
if (targetMinerComp.tryAcceptChainedItem(item)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Seems we are a regular miner or at the end of a row, try actually ejecting
|
||||
if (ejectComp.tryEject(0, item)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {DrawParameters} parameters
|
||||
* @param {MapChunkView} chunk
|
||||
*/
|
||||
drawChunk(parameters, chunk) {
|
||||
const contents = chunk.containedEntitiesByLayer.regular;
|
||||
|
||||
for (let i = 0; i < contents.length; ++i) {
|
||||
const entity = contents[i];
|
||||
const minerComp = entity.components.Miner;
|
||||
if (!minerComp) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
if (!minerComp.cachedMinedItem) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Draw the item background - this is to hide the ejected item animation from
|
||||
// the item ejecto
|
||||
|
||||
const padding = 3;
|
||||
const destX = staticComp.origin.x * globalConfig.tileSize + padding;
|
||||
const destY = staticComp.origin.y * globalConfig.tileSize + padding;
|
||||
const dimensions = globalConfig.tileSize - 2 * padding;
|
||||
|
||||
if (parameters.visibleRect.containsRect4Params(destX, destY, dimensions, dimensions)) {
|
||||
parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource();
|
||||
parameters.context.fillRect(destX, destY, dimensions, dimensions);
|
||||
}
|
||||
|
||||
minerComp.cachedMinedItem.drawItemCenteredClipped(
|
||||
(0.5 + staticComp.origin.x) * globalConfig.tileSize,
|
||||
(0.5 + staticComp.origin.y) * globalConfig.tileSize,
|
||||
parameters,
|
||||
globalConfig.defaultItemDiameter
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,214 +1,200 @@
|
|||
/* typehints:start */
|
||||
import { GameRoot } from "../root";
|
||||
/* typehints:end */
|
||||
|
||||
import { types, BasicSerializableObject } from "../../savegame/serialization";
|
||||
import { RegularGameSpeed } from "./regular_game_speed";
|
||||
import { BaseGameSpeed } from "./base_game_speed";
|
||||
import { PausedGameSpeed } from "./paused_game_speed";
|
||||
import { FastForwardGameSpeed } from "./fast_forward_game_speed";
|
||||
import { gGameSpeedRegistry } from "../../core/global_registries";
|
||||
import { globalConfig } from "../../core/config";
|
||||
import { checkTimerExpired, quantizeFloat } from "../../core/utils";
|
||||
import { createLogger } from "../../core/logging";
|
||||
|
||||
const logger = createLogger("game_time");
|
||||
|
||||
export class GameTime extends BasicSerializableObject {
|
||||
/**
|
||||
* @param {GameRoot} root
|
||||
*/
|
||||
constructor(root) {
|
||||
super();
|
||||
this.root = root;
|
||||
|
||||
// Current ingame time seconds, not incremented while paused
|
||||
this.timeSeconds = 0;
|
||||
|
||||
// Current "realtime", a timer which always is incremented no matter whether the game is paused or no
|
||||
this.realtimeSeconds = 0;
|
||||
|
||||
// The adjustment, used when loading savegames so we can continue where we were
|
||||
this.realtimeAdjust = 0;
|
||||
|
||||
/** @type {BaseGameSpeed} */
|
||||
this.speed = new RegularGameSpeed(this.root);
|
||||
|
||||
// Store how much time we have in bucket
|
||||
this.logicTimeBudget = 0;
|
||||
}
|
||||
|
||||
static getId() {
|
||||
return "GameTime";
|
||||
}
|
||||
|
||||
static getSchema() {
|
||||
return {
|
||||
timeSeconds: types.float,
|
||||
speed: types.obj(gGameSpeedRegistry),
|
||||
realtimeSeconds: types.float,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the new "real" time, called from the core once per frame, since performance now() is kinda slow
|
||||
*/
|
||||
updateRealtimeNow() {
|
||||
this.realtimeSeconds = performance.now() / 1000.0 + this.realtimeAdjust;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ingame time in milliseconds
|
||||
*/
|
||||
getTimeMs() {
|
||||
return this.timeSeconds * 1000.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Safe check to check if a timer is expired. quantizes numbers
|
||||
* @param {number} lastTick Last tick of the timer
|
||||
* @param {number} tickRateSeconds Interval of the timer in seconds
|
||||
*/
|
||||
isIngameTimerExpired(lastTick, tickRateSeconds) {
|
||||
return checkTimerExpired(this.timeSeconds, lastTick, tickRateSeconds);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns how many seconds we are in the grace period
|
||||
* @returns {number}
|
||||
*/
|
||||
getRemainingGracePeriodSeconds() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if we are currently in the grace period
|
||||
* @returns {boolean}
|
||||
*/
|
||||
getIsWithinGracePeriod() {
|
||||
return this.getRemainingGracePeriodSeconds() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal method to generate new logic time budget
|
||||
* @param {number} deltaMs
|
||||
*/
|
||||
internalAddDeltaToBudget(deltaMs) {
|
||||
// Only update if game is supposed to update
|
||||
if (this.root.hud.shouldPauseGame()) {
|
||||
this.logicTimeBudget = 0;
|
||||
} else {
|
||||
const multiplier = this.getSpeed().getTimeMultiplier();
|
||||
this.logicTimeBudget += deltaMs * multiplier;
|
||||
}
|
||||
|
||||
// Check for too big pile of updates -> reduce it to 1
|
||||
let maxLogicSteps = Math.max(
|
||||
3,
|
||||
(this.speed.getMaxLogicStepsInQueue() * this.root.dynamicTickrate.currentTickRate) / 60
|
||||
);
|
||||
if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) {
|
||||
maxLogicSteps *= 1 + globalConfig.debug.framePausesBetweenTicks;
|
||||
}
|
||||
|
||||
if (this.logicTimeBudget > this.root.dynamicTickrate.deltaMs * maxLogicSteps) {
|
||||
this.logicTimeBudget = this.root.dynamicTickrate.deltaMs * maxLogicSteps;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs update ticks based on the queued logic budget
|
||||
* @param {number} deltaMs
|
||||
* @param {function():boolean} updateMethod
|
||||
*/
|
||||
performTicks(deltaMs, updateMethod) {
|
||||
this.internalAddDeltaToBudget(deltaMs);
|
||||
|
||||
const speedAtStart = this.root.time.getSpeed();
|
||||
|
||||
let effectiveDelta = this.root.dynamicTickrate.deltaMs;
|
||||
if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) {
|
||||
effectiveDelta += globalConfig.debug.framePausesBetweenTicks * this.root.dynamicTickrate.deltaMs;
|
||||
}
|
||||
|
||||
// Update physics & logic
|
||||
while (this.logicTimeBudget >= effectiveDelta) {
|
||||
this.logicTimeBudget -= effectiveDelta;
|
||||
|
||||
if (!updateMethod()) {
|
||||
// Gameover happened or so, do not update anymore
|
||||
return;
|
||||
}
|
||||
|
||||
// Step game time
|
||||
this.timeSeconds = quantizeFloat(this.timeSeconds + this.root.dynamicTickrate.deltaSeconds);
|
||||
|
||||
// Game time speed changed, need to abort since our logic steps are no longer valid
|
||||
if (speedAtStart.getId() !== this.speed.getId()) {
|
||||
logger.warn(
|
||||
"Skipping update because speed changed from",
|
||||
speedAtStart.getId(),
|
||||
"to",
|
||||
this.speed.getId()
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns ingame time in seconds
|
||||
* @returns {number} seconds
|
||||
*/
|
||||
now() {
|
||||
return this.timeSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns "real" time in seconds
|
||||
* @returns {number} seconds
|
||||
*/
|
||||
realtimeNow() {
|
||||
return this.realtimeSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns "real" time in seconds
|
||||
* @returns {number} seconds
|
||||
*/
|
||||
systemNow() {
|
||||
return (this.realtimeSeconds - this.realtimeAdjust) * 1000.0;
|
||||
}
|
||||
|
||||
getIsPaused() {
|
||||
return this.speed.getId() === PausedGameSpeed.getId();
|
||||
}
|
||||
|
||||
getSpeed() {
|
||||
return this.speed;
|
||||
}
|
||||
|
||||
setSpeed(speed) {
|
||||
assert(speed instanceof BaseGameSpeed, "Not a valid game speed");
|
||||
if (this.speed.getId() === speed.getId()) {
|
||||
logger.warn("Same speed set than current one:", speed.constructor.getId());
|
||||
}
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
deserialize(data) {
|
||||
const errorCode = super.deserialize(data);
|
||||
if (errorCode) {
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
// Adjust realtime now difference so they match
|
||||
this.realtimeAdjust = this.realtimeSeconds - performance.now() / 1000.0;
|
||||
this.updateRealtimeNow();
|
||||
|
||||
// Make sure we have a quantizied time
|
||||
this.timeSeconds = quantizeFloat(this.timeSeconds);
|
||||
|
||||
this.speed.initializeAfterDeserialize(this.root);
|
||||
}
|
||||
}
|
||||
/* typehints:start */
|
||||
import { GameRoot } from "../root";
|
||||
/* typehints:end */
|
||||
|
||||
import { types, BasicSerializableObject } from "../../savegame/serialization";
|
||||
import { RegularGameSpeed } from "./regular_game_speed";
|
||||
import { BaseGameSpeed } from "./base_game_speed";
|
||||
import { PausedGameSpeed } from "./paused_game_speed";
|
||||
import { gGameSpeedRegistry } from "../../core/global_registries";
|
||||
import { globalConfig } from "../../core/config";
|
||||
import { createLogger } from "../../core/logging";
|
||||
|
||||
const logger = createLogger("game_time");
|
||||
|
||||
export class GameTime extends BasicSerializableObject {
|
||||
/**
|
||||
* @param {GameRoot} root
|
||||
*/
|
||||
constructor(root) {
|
||||
super();
|
||||
this.root = root;
|
||||
|
||||
// Current ingame time seconds, not incremented while paused
|
||||
this.timeSeconds = 0;
|
||||
|
||||
// Current "realtime", a timer which always is incremented no matter whether the game is paused or no
|
||||
this.realtimeSeconds = 0;
|
||||
|
||||
// The adjustment, used when loading savegames so we can continue where we were
|
||||
this.realtimeAdjust = 0;
|
||||
|
||||
/** @type {BaseGameSpeed} */
|
||||
this.speed = new RegularGameSpeed(this.root);
|
||||
|
||||
// Store how much time we have in bucket
|
||||
this.logicTimeBudget = 0;
|
||||
}
|
||||
|
||||
static getId() {
|
||||
return "GameTime";
|
||||
}
|
||||
|
||||
static getSchema() {
|
||||
return {
|
||||
timeSeconds: types.float,
|
||||
speed: types.obj(gGameSpeedRegistry),
|
||||
realtimeSeconds: types.float,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the new "real" time, called from the core once per frame, since performance now() is kinda slow
|
||||
*/
|
||||
updateRealtimeNow() {
|
||||
this.realtimeSeconds = performance.now() / 1000.0 + this.realtimeAdjust;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ingame time in milliseconds
|
||||
*/
|
||||
getTimeMs() {
|
||||
return this.timeSeconds * 1000.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns how many seconds we are in the grace period
|
||||
* @returns {number}
|
||||
*/
|
||||
getRemainingGracePeriodSeconds() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if we are currently in the grace period
|
||||
* @returns {boolean}
|
||||
*/
|
||||
getIsWithinGracePeriod() {
|
||||
return this.getRemainingGracePeriodSeconds() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal method to generate new logic time budget
|
||||
* @param {number} deltaMs
|
||||
*/
|
||||
internalAddDeltaToBudget(deltaMs) {
|
||||
// Only update if game is supposed to update
|
||||
if (this.root.hud.shouldPauseGame()) {
|
||||
this.logicTimeBudget = 0;
|
||||
} else {
|
||||
const multiplier = this.getSpeed().getTimeMultiplier();
|
||||
this.logicTimeBudget += deltaMs * multiplier;
|
||||
}
|
||||
|
||||
// Check for too big pile of updates -> reduce it to 1
|
||||
let maxLogicSteps = Math.max(
|
||||
3,
|
||||
(this.speed.getMaxLogicStepsInQueue() * this.root.dynamicTickrate.currentTickRate) / 60
|
||||
);
|
||||
if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) {
|
||||
maxLogicSteps *= 1 + globalConfig.debug.framePausesBetweenTicks;
|
||||
}
|
||||
|
||||
if (this.logicTimeBudget > this.root.dynamicTickrate.deltaMs * maxLogicSteps) {
|
||||
this.logicTimeBudget = this.root.dynamicTickrate.deltaMs * maxLogicSteps;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs update ticks based on the queued logic budget
|
||||
* @param {number} deltaMs
|
||||
* @param {function():boolean} updateMethod
|
||||
*/
|
||||
performTicks(deltaMs, updateMethod) {
|
||||
this.internalAddDeltaToBudget(deltaMs);
|
||||
|
||||
const speedAtStart = this.root.time.getSpeed();
|
||||
|
||||
let effectiveDelta = this.root.dynamicTickrate.deltaMs;
|
||||
if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) {
|
||||
effectiveDelta += globalConfig.debug.framePausesBetweenTicks * this.root.dynamicTickrate.deltaMs;
|
||||
}
|
||||
|
||||
// Update physics & logic
|
||||
while (this.logicTimeBudget >= effectiveDelta) {
|
||||
this.logicTimeBudget -= effectiveDelta;
|
||||
|
||||
if (!updateMethod()) {
|
||||
// Gameover happened or so, do not update anymore
|
||||
return;
|
||||
}
|
||||
|
||||
// Step game time
|
||||
this.timeSeconds += this.root.dynamicTickrate.deltaSeconds;
|
||||
|
||||
// Game time speed changed, need to abort since our logic steps are no longer valid
|
||||
if (speedAtStart.getId() !== this.speed.getId()) {
|
||||
logger.warn(
|
||||
"Skipping update because speed changed from",
|
||||
speedAtStart.getId(),
|
||||
"to",
|
||||
this.speed.getId()
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns ingame time in seconds
|
||||
* @returns {number} seconds
|
||||
*/
|
||||
now() {
|
||||
return this.timeSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns "real" time in seconds
|
||||
* @returns {number} seconds
|
||||
*/
|
||||
realtimeNow() {
|
||||
return this.realtimeSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns "real" time in seconds
|
||||
* @returns {number} seconds
|
||||
*/
|
||||
systemNow() {
|
||||
return (this.realtimeSeconds - this.realtimeAdjust) * 1000.0;
|
||||
}
|
||||
|
||||
getIsPaused() {
|
||||
return this.speed.getId() === PausedGameSpeed.getId();
|
||||
}
|
||||
|
||||
getSpeed() {
|
||||
return this.speed;
|
||||
}
|
||||
|
||||
setSpeed(speed) {
|
||||
assert(speed instanceof BaseGameSpeed, "Not a valid game speed");
|
||||
if (this.speed.getId() === speed.getId()) {
|
||||
logger.warn("Same speed set than current one:", speed.constructor.getId());
|
||||
}
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
deserialize(data) {
|
||||
const errorCode = super.deserialize(data);
|
||||
if (errorCode) {
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
// Adjust realtime now difference so they match
|
||||
this.realtimeAdjust = this.realtimeSeconds - performance.now() / 1000.0;
|
||||
this.updateRealtimeNow();
|
||||
|
||||
this.speed.initializeAfterDeserialize(this.root);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,6 +126,9 @@ export const autosaveIntervals = [
|
|||
const refreshRateOptions = ["60", "75", "100", "120", "144", "165", "250", "500"];
|
||||
|
||||
if (G_IS_DEV) {
|
||||
refreshRateOptions.unshift("30");
|
||||
refreshRateOptions.unshift("10");
|
||||
refreshRateOptions.unshift("5");
|
||||
refreshRateOptions.push("1000");
|
||||
refreshRateOptions.push("2000");
|
||||
refreshRateOptions.push("5000");
|
||||
|
|