From e848fd8b8a0612d4fe04d94ae163d809d16a4147 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 27 Nov 2018 12:50:18 -0500 Subject: [PATCH] Updated Phaser to 2.11, Added magnetic tile sprite --- .../main/resources/static/images/sprites.json | 3024 ++-- .../main/resources/static/images/sprites.png | Bin 702046 -> 594579 bytes Server/src/main/resources/static/js/mar.js | 27 +- Server/src/main/resources/static/js/phaser.js | 12837 +++++++++------- Server/src/main/typescript/World.ts | 30 +- Server/src/main/typescript/mar.ts | 2 + 6 files changed, 8376 insertions(+), 7544 deletions(-) diff --git a/Server/src/main/resources/static/images/sprites.json b/Server/src/main/resources/static/images/sprites.json index 1c70a1c..44c8381 100644 --- a/Server/src/main/resources/static/images/sprites.json +++ b/Server/src/main/resources/static/images/sprites.json @@ -2,8 +2,8 @@ "frames": { "cubot/dig_e/0001": { "frame": { - "x": 3712, - "y": 630, + "x": 0, + "y": 0, "w": 128, "h": 70 }, @@ -26,8 +26,8 @@ }, "cubot/dig_e/0002": { "frame": { - "x": 3584, - "y": 630, + "x": 128, + "y": 0, "w": 128, "h": 70 }, @@ -50,8 +50,8 @@ }, "cubot/dig_e/0003": { "frame": { - "x": 3840, - "y": 630, + "x": 256, + "y": 0, "w": 128, "h": 70 }, @@ -74,8 +74,8 @@ }, "cubot/dig_e/0004": { "frame": { - "x": 3456, - "y": 630, + "x": 384, + "y": 0, "w": 128, "h": 70 }, @@ -98,8 +98,8 @@ }, "cubot/dig_e/0005": { "frame": { - "x": 3200, - "y": 630, + "x": 512, + "y": 0, "w": 128, "h": 70 }, @@ -122,8 +122,8 @@ }, "cubot/dig_e/0006": { "frame": { - "x": 3072, - "y": 630, + "x": 640, + "y": 0, "w": 128, "h": 70 }, @@ -146,8 +146,8 @@ }, "cubot/dig_e/0007": { "frame": { - "x": 3968, - "y": 630, + "x": 768, + "y": 0, "w": 128, "h": 70 }, @@ -170,8 +170,8 @@ }, "cubot/dig_e/0008": { "frame": { - "x": 256, - "y": 700, + "x": 896, + "y": 0, "w": 128, "h": 70 }, @@ -194,8 +194,8 @@ }, "cubot/dig_e/0009": { "frame": { - "x": 640, - "y": 700, + "x": 1024, + "y": 0, "w": 128, "h": 70 }, @@ -218,8 +218,8 @@ }, "cubot/dig_e/0010": { "frame": { - "x": 512, - "y": 700, + "x": 1152, + "y": 0, "w": 128, "h": 70 }, @@ -242,8 +242,8 @@ }, "cubot/dig_e/0011": { "frame": { - "x": 768, - "y": 700, + "x": 1280, + "y": 0, "w": 128, "h": 70 }, @@ -266,8 +266,8 @@ }, "cubot/dig_e/0012": { "frame": { - "x": 384, - "y": 700, + "x": 1408, + "y": 0, "w": 128, "h": 70 }, @@ -290,8 +290,8 @@ }, "cubot/dig_e/0013": { "frame": { - "x": 128, - "y": 700, + "x": 1536, + "y": 0, "w": 128, "h": 70 }, @@ -314,8 +314,8 @@ }, "cubot/dig_e/0014": { "frame": { - "x": 0, - "y": 700, + "x": 1664, + "y": 0, "w": 128, "h": 70 }, @@ -338,8 +338,8 @@ }, "cubot/dig_e/0015": { "frame": { - "x": 3328, - "y": 630, + "x": 1792, + "y": 0, "w": 128, "h": 70 }, @@ -362,8 +362,8 @@ }, "cubot/dig_e/0016": { "frame": { - "x": 2944, - "y": 630, + "x": 1920, + "y": 0, "w": 128, "h": 70 }, @@ -386,8 +386,8 @@ }, "cubot/dig_e/0017": { "frame": { - "x": 1664, - "y": 630, + "x": 2048, + "y": 0, "w": 128, "h": 70 }, @@ -410,8 +410,8 @@ }, "cubot/dig_e/0018": { "frame": { - "x": 1536, - "y": 630, + "x": 2176, + "y": 0, "w": 128, "h": 70 }, @@ -434,8 +434,8 @@ }, "cubot/dig_e/0019": { "frame": { - "x": 1792, - "y": 630, + "x": 2304, + "y": 0, "w": 128, "h": 70 }, @@ -458,8 +458,8 @@ }, "cubot/dig_e/0020": { "frame": { - "x": 1408, - "y": 630, + "x": 2432, + "y": 0, "w": 128, "h": 70 }, @@ -482,8 +482,8 @@ }, "cubot/dig_e/0021": { "frame": { - "x": 1152, - "y": 630, + "x": 2560, + "y": 0, "w": 128, "h": 70 }, @@ -506,8 +506,8 @@ }, "cubot/dig_e/0022": { "frame": { - "x": 1920, - "y": 630, + "x": 2688, + "y": 0, "w": 128, "h": 70 }, @@ -530,8 +530,8 @@ }, "cubot/dig_e/0023": { "frame": { - "x": 2304, - "y": 630, + "x": 2816, + "y": 0, "w": 128, "h": 70 }, @@ -554,8 +554,8 @@ }, "cubot/dig_e/0024": { "frame": { - "x": 2688, - "y": 630, + "x": 2944, + "y": 0, "w": 128, "h": 70 }, @@ -578,8 +578,8 @@ }, "cubot/dig_e/0025": { "frame": { - "x": 2560, - "y": 630, + "x": 3072, + "y": 0, "w": 128, "h": 70 }, @@ -602,8 +602,8 @@ }, "cubot/dig_e/0026": { "frame": { - "x": 2816, - "y": 630, + "x": 3200, + "y": 0, "w": 128, "h": 70 }, @@ -626,8 +626,8 @@ }, "cubot/dig_e/0027": { "frame": { - "x": 2432, - "y": 630, + "x": 3328, + "y": 0, "w": 128, "h": 70 }, @@ -650,8 +650,8 @@ }, "cubot/dig_e/0028": { "frame": { - "x": 2176, - "y": 630, + "x": 3456, + "y": 0, "w": 128, "h": 70 }, @@ -674,8 +674,8 @@ }, "cubot/dig_e/0029": { "frame": { - "x": 2048, - "y": 630, + "x": 3584, + "y": 0, "w": 128, "h": 70 }, @@ -698,8 +698,8 @@ }, "cubot/dig_e/0030": { "frame": { - "x": 896, - "y": 700, + "x": 3712, + "y": 0, "w": 128, "h": 70 }, @@ -722,8 +722,8 @@ }, "cubot/dig_e/0031": { "frame": { - "x": 1152, - "y": 700, + "x": 3840, + "y": 0, "w": 128, "h": 70 }, @@ -746,8 +746,8 @@ }, "cubot/dig_e/0032": { "frame": { - "x": 3584, - "y": 700, + "x": 0, + "y": 70, "w": 128, "h": 70 }, @@ -770,8 +770,8 @@ }, "cubot/dig_e/0033": { "frame": { - "x": 3456, - "y": 700, + "x": 128, + "y": 70, "w": 128, "h": 70 }, @@ -794,8 +794,8 @@ }, "cubot/dig_e/0034": { "frame": { - "x": 3712, - "y": 700, + "x": 256, + "y": 70, "w": 128, "h": 70 }, @@ -818,8 +818,8 @@ }, "cubot/dig_e/0035": { "frame": { - "x": 3328, - "y": 700, + "x": 384, + "y": 70, "w": 128, "h": 70 }, @@ -842,8 +842,8 @@ }, "cubot/dig_e/0036": { "frame": { - "x": 3072, - "y": 700, + "x": 512, + "y": 70, "w": 128, "h": 70 }, @@ -866,8 +866,8 @@ }, "cubot/dig_e/0037": { "frame": { - "x": 2944, - "y": 700, + "x": 640, + "y": 70, "w": 128, "h": 70 }, @@ -890,8 +890,8 @@ }, "cubot/dig_e/0038": { "frame": { - "x": 3840, - "y": 700, + "x": 768, + "y": 70, "w": 128, "h": 70 }, @@ -914,8 +914,8 @@ }, "cubot/dig_e/0039": { "frame": { - "x": 128, - "y": 770, + "x": 896, + "y": 70, "w": 128, "h": 70 }, @@ -938,8 +938,8 @@ }, "cubot/dig_e/0040": { "frame": { - "x": 512, - "y": 770, + "x": 1024, + "y": 70, "w": 128, "h": 70 }, @@ -962,8 +962,8 @@ }, "cubot/dig_e/0041": { "frame": { - "x": 384, - "y": 770, + "x": 1152, + "y": 70, "w": 128, "h": 70 }, @@ -986,8 +986,8 @@ }, "cubot/dig_n/0001": { "frame": { - "x": 640, - "y": 770, + "x": 1280, + "y": 70, "w": 128, "h": 70 }, @@ -1010,8 +1010,8 @@ }, "cubot/dig_n/0002": { "frame": { - "x": 256, - "y": 770, + "x": 1408, + "y": 70, "w": 128, "h": 70 }, @@ -1034,8 +1034,8 @@ }, "cubot/dig_n/0003": { "frame": { - "x": 0, - "y": 770, + "x": 1536, + "y": 70, "w": 128, "h": 70 }, @@ -1058,8 +1058,8 @@ }, "cubot/dig_n/0004": { "frame": { - "x": 3968, - "y": 700, + "x": 1664, + "y": 70, "w": 128, "h": 70 }, @@ -1082,8 +1082,8 @@ }, "cubot/dig_n/0005": { "frame": { - "x": 3200, - "y": 700, + "x": 1792, + "y": 70, "w": 128, "h": 70 }, @@ -1106,8 +1106,8 @@ }, "cubot/dig_n/0006": { "frame": { - "x": 2816, - "y": 700, + "x": 1920, + "y": 70, "w": 128, "h": 70 }, @@ -1130,8 +1130,8 @@ }, "cubot/dig_n/0007": { "frame": { - "x": 1536, - "y": 700, + "x": 2048, + "y": 70, "w": 128, "h": 70 }, @@ -1154,8 +1154,8 @@ }, "cubot/dig_n/0008": { "frame": { - "x": 1408, - "y": 700, + "x": 2176, + "y": 70, "w": 128, "h": 70 }, @@ -1178,8 +1178,8 @@ }, "cubot/dig_n/0009": { "frame": { - "x": 1664, - "y": 700, + "x": 2304, + "y": 70, "w": 128, "h": 70 }, @@ -1202,8 +1202,8 @@ }, "cubot/dig_n/0010": { "frame": { - "x": 1280, - "y": 700, + "x": 2432, + "y": 70, "w": 128, "h": 70 }, @@ -1226,8 +1226,8 @@ }, "cubot/dig_n/0011": { "frame": { - "x": 1024, - "y": 700, + "x": 2560, + "y": 70, "w": 128, "h": 70 }, @@ -1250,8 +1250,8 @@ }, "cubot/dig_n/0012": { "frame": { - "x": 1792, - "y": 700, + "x": 2688, + "y": 70, "w": 128, "h": 70 }, @@ -1274,8 +1274,8 @@ }, "cubot/dig_n/0013": { "frame": { - "x": 2176, - "y": 700, + "x": 2816, + "y": 70, "w": 128, "h": 70 }, @@ -1298,8 +1298,8 @@ }, "cubot/dig_n/0014": { "frame": { - "x": 2560, - "y": 700, + "x": 2944, + "y": 70, "w": 128, "h": 70 }, @@ -1322,8 +1322,8 @@ }, "cubot/dig_n/0015": { "frame": { - "x": 2432, - "y": 700, + "x": 3072, + "y": 70, "w": 128, "h": 70 }, @@ -1346,8 +1346,8 @@ }, "cubot/dig_n/0016": { "frame": { - "x": 2688, - "y": 700, + "x": 3200, + "y": 70, "w": 128, "h": 70 }, @@ -1370,8 +1370,8 @@ }, "cubot/dig_n/0017": { "frame": { - "x": 2304, - "y": 700, + "x": 3328, + "y": 70, "w": 128, "h": 70 }, @@ -1394,8 +1394,8 @@ }, "cubot/dig_n/0018": { "frame": { - "x": 2048, - "y": 700, + "x": 3456, + "y": 70, "w": 128, "h": 70 }, @@ -1418,8 +1418,8 @@ }, "cubot/dig_n/0019": { "frame": { - "x": 1920, - "y": 700, + "x": 3584, + "y": 70, "w": 128, "h": 70 }, @@ -1442,8 +1442,8 @@ }, "cubot/dig_n/0020": { "frame": { - "x": 1280, - "y": 630, + "x": 3712, + "y": 70, "w": 128, "h": 70 }, @@ -1466,8 +1466,8 @@ }, "cubot/dig_n/0021": { "frame": { - "x": 1024, - "y": 630, + "x": 3840, + "y": 70, "w": 128, "h": 70 }, @@ -1490,8 +1490,8 @@ }, "cubot/dig_n/0022": { "frame": { - "x": 3968, - "y": 490, + "x": 0, + "y": 140, "w": 128, "h": 70 }, @@ -1514,8 +1514,8 @@ }, "cubot/dig_n/0023": { "frame": { - "x": 3840, - "y": 490, + "x": 128, + "y": 140, "w": 128, "h": 70 }, @@ -1538,8 +1538,8 @@ }, "cubot/dig_n/0024": { "frame": { - "x": 0, - "y": 560, + "x": 256, + "y": 140, "w": 128, "h": 70 }, @@ -1562,8 +1562,8 @@ }, "cubot/dig_n/0025": { "frame": { - "x": 3712, - "y": 490, + "x": 384, + "y": 140, "w": 128, "h": 70 }, @@ -1586,8 +1586,8 @@ }, "cubot/dig_n/0026": { "frame": { - "x": 3456, - "y": 490, + "x": 512, + "y": 140, "w": 128, "h": 70 }, @@ -1610,8 +1610,8 @@ }, "cubot/dig_n/0027": { "frame": { - "x": 3328, - "y": 490, + "x": 640, + "y": 140, "w": 128, "h": 70 }, @@ -1634,8 +1634,8 @@ }, "cubot/dig_n/0028": { "frame": { - "x": 128, - "y": 560, + "x": 768, + "y": 140, "w": 128, "h": 70 }, @@ -1658,8 +1658,8 @@ }, "cubot/dig_n/0029": { "frame": { - "x": 512, - "y": 560, + "x": 896, + "y": 140, "w": 128, "h": 70 }, @@ -1682,8 +1682,8 @@ }, "cubot/dig_n/0030": { "frame": { - "x": 896, - "y": 560, + "x": 1024, + "y": 140, "w": 128, "h": 70 }, @@ -1706,8 +1706,8 @@ }, "cubot/dig_n/0031": { "frame": { - "x": 768, - "y": 560, + "x": 1152, + "y": 140, "w": 128, "h": 70 }, @@ -1730,8 +1730,8 @@ }, "cubot/dig_n/0032": { "frame": { - "x": 1024, - "y": 560, + "x": 1280, + "y": 140, "w": 128, "h": 70 }, @@ -1754,8 +1754,8 @@ }, "cubot/dig_n/0033": { "frame": { - "x": 640, - "y": 560, + "x": 1408, + "y": 140, "w": 128, "h": 70 }, @@ -1778,8 +1778,8 @@ }, "cubot/dig_n/0034": { "frame": { - "x": 384, - "y": 560, + "x": 1536, + "y": 140, "w": 128, "h": 70 }, @@ -1802,8 +1802,8 @@ }, "cubot/dig_n/0035": { "frame": { - "x": 256, - "y": 560, + "x": 1664, + "y": 140, "w": 128, "h": 70 }, @@ -1826,8 +1826,8 @@ }, "cubot/dig_n/0036": { "frame": { - "x": 3584, - "y": 490, + "x": 1792, + "y": 140, "w": 128, "h": 70 }, @@ -1850,8 +1850,8 @@ }, "cubot/dig_n/0037": { "frame": { - "x": 3200, - "y": 490, + "x": 1920, + "y": 140, "w": 128, "h": 70 }, @@ -1874,8 +1874,8 @@ }, "cubot/dig_n/0038": { "frame": { - "x": 1920, - "y": 490, + "x": 2048, + "y": 140, "w": 128, "h": 70 }, @@ -1898,8 +1898,8 @@ }, "cubot/dig_n/0039": { "frame": { - "x": 1792, - "y": 490, + "x": 2176, + "y": 140, "w": 128, "h": 70 }, @@ -1922,8 +1922,8 @@ }, "cubot/dig_n/0040": { "frame": { - "x": 2048, - "y": 490, + "x": 2304, + "y": 140, "w": 128, "h": 70 }, @@ -1946,8 +1946,8 @@ }, "cubot/dig_n/0041": { "frame": { - "x": 1664, - "y": 490, + "x": 2432, + "y": 140, "w": 128, "h": 70 }, @@ -1970,8 +1970,8 @@ }, "cubot/dig_s/0001": { "frame": { - "x": 1408, - "y": 490, + "x": 2560, + "y": 140, "w": 128, "h": 70 }, @@ -1994,8 +1994,8 @@ }, "cubot/dig_s/0002": { "frame": { - "x": 2176, - "y": 490, + "x": 2688, + "y": 140, "w": 128, "h": 70 }, @@ -2018,8 +2018,8 @@ }, "cubot/dig_s/0003": { "frame": { - "x": 2560, - "y": 490, + "x": 2816, + "y": 140, "w": 128, "h": 70 }, @@ -2043,7 +2043,7 @@ "cubot/dig_s/0004": { "frame": { "x": 2944, - "y": 490, + "y": 140, "w": 128, "h": 70 }, @@ -2066,8 +2066,8 @@ }, "cubot/dig_s/0005": { "frame": { - "x": 2816, - "y": 490, + "x": 3072, + "y": 140, "w": 128, "h": 70 }, @@ -2090,8 +2090,8 @@ }, "cubot/dig_s/0006": { "frame": { - "x": 3072, - "y": 490, + "x": 3200, + "y": 140, "w": 128, "h": 70 }, @@ -2114,8 +2114,8 @@ }, "cubot/dig_s/0007": { "frame": { - "x": 2688, - "y": 490, + "x": 3328, + "y": 140, "w": 128, "h": 70 }, @@ -2138,8 +2138,8 @@ }, "cubot/dig_s/0008": { "frame": { - "x": 2432, - "y": 490, + "x": 3456, + "y": 140, "w": 128, "h": 70 }, @@ -2162,8 +2162,8 @@ }, "cubot/dig_s/0009": { "frame": { - "x": 2304, - "y": 490, + "x": 3584, + "y": 140, "w": 128, "h": 70 }, @@ -2186,8 +2186,8 @@ }, "cubot/dig_s/0010": { "frame": { - "x": 1152, - "y": 560, + "x": 3712, + "y": 140, "w": 128, "h": 70 }, @@ -2210,8 +2210,8 @@ }, "cubot/dig_s/0011": { "frame": { - "x": 1408, - "y": 560, + "x": 3840, + "y": 140, "w": 128, "h": 70 }, @@ -2234,8 +2234,8 @@ }, "cubot/dig_s/0012": { "frame": { - "x": 3840, - "y": 560, + "x": 0, + "y": 210, "w": 128, "h": 70 }, @@ -2258,8 +2258,8 @@ }, "cubot/dig_s/0013": { "frame": { - "x": 3712, - "y": 560, + "x": 128, + "y": 210, "w": 128, "h": 70 }, @@ -2282,8 +2282,8 @@ }, "cubot/dig_s/0014": { "frame": { - "x": 3968, - "y": 560, + "x": 256, + "y": 210, "w": 128, "h": 70 }, @@ -2306,8 +2306,8 @@ }, "cubot/dig_s/0015": { "frame": { - "x": 3584, - "y": 560, + "x": 384, + "y": 210, "w": 128, "h": 70 }, @@ -2330,8 +2330,8 @@ }, "cubot/dig_s/0016": { "frame": { - "x": 3328, - "y": 560, + "x": 512, + "y": 210, "w": 128, "h": 70 }, @@ -2354,8 +2354,8 @@ }, "cubot/dig_s/0017": { "frame": { - "x": 3200, - "y": 560, + "x": 640, + "y": 210, "w": 128, "h": 70 }, @@ -2378,8 +2378,8 @@ }, "cubot/dig_s/0018": { "frame": { - "x": 0, - "y": 630, + "x": 768, + "y": 210, "w": 128, "h": 70 }, @@ -2402,8 +2402,8 @@ }, "cubot/dig_s/0019": { "frame": { - "x": 384, - "y": 630, + "x": 896, + "y": 210, "w": 128, "h": 70 }, @@ -2426,8 +2426,8 @@ }, "cubot/dig_s/0020": { "frame": { - "x": 768, - "y": 630, + "x": 1024, + "y": 210, "w": 128, "h": 70 }, @@ -2450,8 +2450,8 @@ }, "cubot/dig_s/0021": { "frame": { - "x": 640, - "y": 630, + "x": 1152, + "y": 210, "w": 128, "h": 70 }, @@ -2474,8 +2474,8 @@ }, "cubot/dig_s/0022": { "frame": { - "x": 896, - "y": 630, + "x": 1280, + "y": 210, "w": 128, "h": 70 }, @@ -2498,8 +2498,8 @@ }, "cubot/dig_s/0023": { "frame": { - "x": 512, - "y": 630, + "x": 1408, + "y": 210, "w": 128, "h": 70 }, @@ -2522,8 +2522,8 @@ }, "cubot/dig_s/0024": { "frame": { - "x": 256, - "y": 630, + "x": 1536, + "y": 210, "w": 128, "h": 70 }, @@ -2546,8 +2546,8 @@ }, "cubot/dig_s/0025": { "frame": { - "x": 128, - "y": 630, + "x": 1664, + "y": 210, "w": 128, "h": 70 }, @@ -2570,8 +2570,8 @@ }, "cubot/dig_s/0026": { "frame": { - "x": 3456, - "y": 560, + "x": 1792, + "y": 210, "w": 128, "h": 70 }, @@ -2594,8 +2594,8 @@ }, "cubot/dig_s/0027": { "frame": { - "x": 3072, - "y": 560, + "x": 1920, + "y": 210, "w": 128, "h": 70 }, @@ -2618,8 +2618,8 @@ }, "cubot/dig_s/0028": { "frame": { - "x": 1792, - "y": 560, + "x": 2048, + "y": 210, "w": 128, "h": 70 }, @@ -2642,8 +2642,8 @@ }, "cubot/dig_s/0029": { "frame": { - "x": 1664, - "y": 560, + "x": 2176, + "y": 210, "w": 128, "h": 70 }, @@ -2666,8 +2666,8 @@ }, "cubot/dig_s/0030": { "frame": { - "x": 1920, - "y": 560, + "x": 2304, + "y": 210, "w": 128, "h": 70 }, @@ -2690,8 +2690,8 @@ }, "cubot/dig_s/0031": { "frame": { - "x": 1536, - "y": 560, + "x": 2432, + "y": 210, "w": 128, "h": 70 }, @@ -2714,8 +2714,8 @@ }, "cubot/dig_s/0032": { "frame": { - "x": 1280, - "y": 560, + "x": 2560, + "y": 210, "w": 128, "h": 70 }, @@ -2738,8 +2738,8 @@ }, "cubot/dig_s/0033": { "frame": { - "x": 2048, - "y": 560, + "x": 2688, + "y": 210, "w": 128, "h": 70 }, @@ -2762,8 +2762,8 @@ }, "cubot/dig_s/0034": { "frame": { - "x": 768, - "y": 770, + "x": 2816, + "y": 210, "w": 128, "h": 70 }, @@ -2786,8 +2786,8 @@ }, "cubot/dig_s/0035": { "frame": { - "x": 2816, - "y": 560, + "x": 2944, + "y": 210, "w": 128, "h": 70 }, @@ -2810,8 +2810,8 @@ }, "cubot/dig_s/0036": { "frame": { - "x": 2688, - "y": 560, + "x": 3072, + "y": 210, "w": 128, "h": 70 }, @@ -2834,8 +2834,8 @@ }, "cubot/dig_s/0037": { "frame": { - "x": 2944, - "y": 560, + "x": 3200, + "y": 210, "w": 128, "h": 70 }, @@ -2858,8 +2858,8 @@ }, "cubot/dig_s/0038": { "frame": { - "x": 2560, - "y": 560, + "x": 3328, + "y": 210, "w": 128, "h": 70 }, @@ -2882,8 +2882,8 @@ }, "cubot/dig_s/0039": { "frame": { - "x": 2304, - "y": 560, + "x": 3456, + "y": 210, "w": 128, "h": 70 }, @@ -2906,8 +2906,8 @@ }, "cubot/dig_s/0040": { "frame": { - "x": 2176, - "y": 560, + "x": 3584, + "y": 210, "w": 128, "h": 70 }, @@ -2930,8 +2930,8 @@ }, "cubot/dig_s/0041": { "frame": { - "x": 1536, - "y": 490, + "x": 3712, + "y": 210, "w": 128, "h": 70 }, @@ -2954,8 +2954,8 @@ }, "cubot/dig_w/0001": { "frame": { - "x": 3072, - "y": 770, + "x": 3840, + "y": 210, "w": 128, "h": 70 }, @@ -2978,8 +2978,8 @@ }, "cubot/dig_w/0002": { "frame": { - "x": 3712, - "y": 910, + "x": 0, + "y": 280, "w": 128, "h": 70 }, @@ -3002,8 +3002,8 @@ }, "cubot/dig_w/0003": { "frame": { - "x": 3584, - "y": 910, + "x": 128, + "y": 280, "w": 128, "h": 70 }, @@ -3026,8 +3026,8 @@ }, "cubot/dig_w/0004": { "frame": { - "x": 3840, - "y": 910, + "x": 256, + "y": 280, "w": 128, "h": 70 }, @@ -3050,8 +3050,8 @@ }, "cubot/dig_w/0005": { "frame": { - "x": 3456, - "y": 910, + "x": 384, + "y": 280, "w": 128, "h": 70 }, @@ -3074,8 +3074,8 @@ }, "cubot/dig_w/0006": { "frame": { - "x": 3200, - "y": 910, + "x": 512, + "y": 280, "w": 128, "h": 70 }, @@ -3098,8 +3098,8 @@ }, "cubot/dig_w/0007": { "frame": { - "x": 3072, - "y": 910, + "x": 640, + "y": 280, "w": 128, "h": 70 }, @@ -3122,8 +3122,8 @@ }, "cubot/dig_w/0008": { "frame": { - "x": 3968, - "y": 910, + "x": 768, + "y": 280, "w": 128, "h": 70 }, @@ -3146,8 +3146,8 @@ }, "cubot/dig_w/0009": { "frame": { - "x": 256, - "y": 980, + "x": 896, + "y": 280, "w": 128, "h": 70 }, @@ -3170,8 +3170,8 @@ }, "cubot/dig_w/0010": { "frame": { - "x": 640, - "y": 980, + "x": 1024, + "y": 280, "w": 128, "h": 70 }, @@ -3194,8 +3194,8 @@ }, "cubot/dig_w/0011": { "frame": { - "x": 512, - "y": 980, + "x": 1152, + "y": 280, "w": 128, "h": 70 }, @@ -3218,8 +3218,8 @@ }, "cubot/dig_w/0012": { "frame": { - "x": 768, - "y": 980, + "x": 1280, + "y": 280, "w": 128, "h": 70 }, @@ -3242,8 +3242,8 @@ }, "cubot/dig_w/0013": { "frame": { - "x": 384, - "y": 980, + "x": 1408, + "y": 280, "w": 128, "h": 70 }, @@ -3266,8 +3266,8 @@ }, "cubot/dig_w/0014": { "frame": { - "x": 128, - "y": 980, + "x": 1536, + "y": 280, "w": 128, "h": 70 }, @@ -3290,8 +3290,8 @@ }, "cubot/dig_w/0015": { "frame": { - "x": 0, - "y": 980, + "x": 1664, + "y": 280, "w": 128, "h": 70 }, @@ -3314,8 +3314,8 @@ }, "cubot/dig_w/0016": { "frame": { - "x": 3328, - "y": 910, + "x": 1792, + "y": 280, "w": 128, "h": 70 }, @@ -3338,8 +3338,8 @@ }, "cubot/dig_w/0017": { "frame": { - "x": 2944, - "y": 910, + "x": 1920, + "y": 280, "w": 128, "h": 70 }, @@ -3362,8 +3362,8 @@ }, "cubot/dig_w/0018": { "frame": { - "x": 1664, - "y": 910, + "x": 2048, + "y": 280, "w": 128, "h": 70 }, @@ -3386,8 +3386,8 @@ }, "cubot/dig_w/0019": { "frame": { - "x": 1536, - "y": 910, + "x": 2176, + "y": 280, "w": 128, "h": 70 }, @@ -3410,8 +3410,8 @@ }, "cubot/dig_w/0020": { "frame": { - "x": 1792, - "y": 910, + "x": 2304, + "y": 280, "w": 128, "h": 70 }, @@ -3434,8 +3434,8 @@ }, "cubot/dig_w/0021": { "frame": { - "x": 1408, - "y": 910, + "x": 2432, + "y": 280, "w": 128, "h": 70 }, @@ -3458,8 +3458,8 @@ }, "cubot/dig_w/0022": { "frame": { - "x": 1152, - "y": 910, + "x": 2560, + "y": 280, "w": 128, "h": 70 }, @@ -3482,8 +3482,8 @@ }, "cubot/dig_w/0023": { "frame": { - "x": 1024, - "y": 910, + "x": 2688, + "y": 280, "w": 128, "h": 70 }, @@ -3506,8 +3506,8 @@ }, "cubot/dig_w/0024": { "frame": { - "x": 1920, - "y": 910, + "x": 2816, + "y": 280, "w": 128, "h": 70 }, @@ -3530,8 +3530,8 @@ }, "cubot/dig_w/0025": { "frame": { - "x": 2304, - "y": 910, + "x": 2944, + "y": 280, "w": 128, "h": 70 }, @@ -3554,8 +3554,8 @@ }, "cubot/dig_w/0026": { "frame": { - "x": 2688, - "y": 910, + "x": 3072, + "y": 280, "w": 128, "h": 70 }, @@ -3578,8 +3578,8 @@ }, "cubot/dig_w/0027": { "frame": { - "x": 896, - "y": 980, + "x": 3200, + "y": 280, "w": 128, "h": 70 }, @@ -3602,8 +3602,8 @@ }, "cubot/dig_w/0028": { "frame": { - "x": 2816, - "y": 910, + "x": 3328, + "y": 280, "w": 128, "h": 70 }, @@ -3626,8 +3626,8 @@ }, "cubot/dig_w/0029": { "frame": { - "x": 2432, - "y": 910, + "x": 3456, + "y": 280, "w": 128, "h": 70 }, @@ -3650,8 +3650,8 @@ }, "cubot/dig_w/0030": { "frame": { - "x": 2176, - "y": 910, + "x": 3584, + "y": 280, "w": 128, "h": 70 }, @@ -3674,8 +3674,8 @@ }, "cubot/dig_w/0031": { "frame": { - "x": 2048, - "y": 910, + "x": 3712, + "y": 280, "w": 128, "h": 70 }, @@ -3698,8 +3698,8 @@ }, "cubot/dig_w/0032": { "frame": { - "x": 1280, - "y": 910, + "x": 3840, + "y": 280, "w": 128, "h": 70 }, @@ -3722,8 +3722,8 @@ }, "cubot/dig_w/0033": { "frame": { - "x": 2944, - "y": 980, + "x": 0, + "y": 350, "w": 128, "h": 70 }, @@ -3746,8 +3746,8 @@ }, "cubot/dig_w/0034": { "frame": { - "x": 3840, - "y": 980, + "x": 128, + "y": 350, "w": 128, "h": 70 }, @@ -3770,8 +3770,8 @@ }, "cubot/dig_w/0035": { "frame": { - "x": 0, - "y": 1050, + "x": 256, + "y": 350, "w": 128, "h": 70 }, @@ -3794,8 +3794,8 @@ }, "cubot/dig_w/0036": { "frame": { - "x": 3712, - "y": 980, + "x": 384, + "y": 350, "w": 128, "h": 70 }, @@ -3818,8 +3818,8 @@ }, "cubot/dig_w/0037": { "frame": { - "x": 3072, - "y": 980, + "x": 512, + "y": 350, "w": 128, "h": 70 }, @@ -3842,8 +3842,8 @@ }, "cubot/dig_w/0038": { "frame": { - "x": 3584, - "y": 980, + "x": 640, + "y": 350, "w": 128, "h": 70 }, @@ -3866,8 +3866,8 @@ }, "cubot/dig_w/0039": { "frame": { - "x": 3456, - "y": 980, + "x": 768, + "y": 350, "w": 128, "h": 70 }, @@ -3890,8 +3890,8 @@ }, "cubot/dig_w/0040": { "frame": { - "x": 3328, - "y": 980, + "x": 896, + "y": 350, "w": 128, "h": 70 }, @@ -3914,8 +3914,8 @@ }, "cubot/dig_w/0041": { "frame": { - "x": 3200, - "y": 980, + "x": 1024, + "y": 350, "w": 128, "h": 70 }, @@ -3938,8 +3938,8 @@ }, "cubot/walk_e/0001": { "frame": { - "x": 128, - "y": 1050, + "x": 1152, + "y": 350, "w": 128, "h": 70 }, @@ -3962,8 +3962,8 @@ }, "cubot/walk_e/0002": { "frame": { - "x": 3968, - "y": 980, + "x": 1280, + "y": 350, "w": 128, "h": 70 }, @@ -3986,8 +3986,8 @@ }, "cubot/walk_e/0003": { "frame": { - "x": 1280, - "y": 980, + "x": 1408, + "y": 350, "w": 128, "h": 70 }, @@ -4010,8 +4010,8 @@ }, "cubot/walk_e/0004": { "frame": { - "x": 1664, - "y": 980, + "x": 1536, + "y": 350, "w": 128, "h": 70 }, @@ -4034,8 +4034,8 @@ }, "cubot/walk_e/0005": { "frame": { - "x": 1536, - "y": 980, + "x": 1664, + "y": 350, "w": 128, "h": 70 }, @@ -4059,7 +4059,7 @@ "cubot/walk_e/0006": { "frame": { "x": 1792, - "y": 980, + "y": 350, "w": 128, "h": 70 }, @@ -4082,8 +4082,8 @@ }, "cubot/walk_e/0007": { "frame": { - "x": 1408, - "y": 980, + "x": 1920, + "y": 350, "w": 128, "h": 70 }, @@ -4106,8 +4106,8 @@ }, "cubot/walk_e/0008": { "frame": { - "x": 1152, - "y": 980, + "x": 2048, + "y": 350, "w": 128, "h": 70 }, @@ -4130,8 +4130,8 @@ }, "cubot/walk_e/0009": { "frame": { - "x": 1024, - "y": 980, + "x": 2176, + "y": 350, "w": 128, "h": 70 }, @@ -4154,8 +4154,8 @@ }, "cubot/walk_e/0010": { "frame": { - "x": 1920, - "y": 980, + "x": 2304, + "y": 350, "w": 128, "h": 70 }, @@ -4178,8 +4178,8 @@ }, "cubot/walk_e/0011": { "frame": { - "x": 2304, - "y": 980, + "x": 2432, + "y": 350, "w": 128, "h": 70 }, @@ -4202,8 +4202,8 @@ }, "cubot/walk_e/0012": { "frame": { - "x": 2688, - "y": 980, + "x": 2560, + "y": 350, "w": 128, "h": 70 }, @@ -4226,8 +4226,8 @@ }, "cubot/walk_e/0013": { "frame": { - "x": 2560, - "y": 980, + "x": 2688, + "y": 350, "w": 128, "h": 70 }, @@ -4251,7 +4251,7 @@ "cubot/walk_e/0014": { "frame": { "x": 2816, - "y": 980, + "y": 350, "w": 128, "h": 70 }, @@ -4274,8 +4274,8 @@ }, "cubot/walk_e/0015": { "frame": { - "x": 2432, - "y": 980, + "x": 2944, + "y": 350, "w": 128, "h": 70 }, @@ -4298,8 +4298,8 @@ }, "cubot/walk_e/0016": { "frame": { - "x": 2176, - "y": 980, + "x": 3072, + "y": 350, "w": 128, "h": 70 }, @@ -4322,8 +4322,8 @@ }, "cubot/walk_e/0017": { "frame": { - "x": 2048, - "y": 980, + "x": 3200, + "y": 350, "w": 128, "h": 70 }, @@ -4346,8 +4346,8 @@ }, "cubot/walk_e/0018": { "frame": { - "x": 2560, - "y": 910, + "x": 3328, + "y": 350, "w": 128, "h": 70 }, @@ -4370,8 +4370,8 @@ }, "cubot/walk_e/0019": { "frame": { - "x": 1152, - "y": 770, + "x": 3456, + "y": 350, "w": 128, "h": 70 }, @@ -4395,7 +4395,7 @@ "cubot/walk_e/0020": { "frame": { "x": 3584, - "y": 770, + "y": 350, "w": 128, "h": 70 }, @@ -4418,8 +4418,8 @@ }, "cubot/walk_e/0021": { "frame": { - "x": 3456, - "y": 770, + "x": 3712, + "y": 350, "w": 128, "h": 70 }, @@ -4442,8 +4442,8 @@ }, "cubot/walk_e/0022": { "frame": { - "x": 3712, - "y": 770, + "x": 3840, + "y": 350, "w": 128, "h": 70 }, @@ -4466,8 +4466,8 @@ }, "cubot/walk_e/0023": { "frame": { - "x": 3328, - "y": 770, + "x": 0, + "y": 420, "w": 128, "h": 70 }, @@ -4490,8 +4490,8 @@ }, "cubot/walk_e/0024": { "frame": { - "x": 896, - "y": 910, + "x": 128, + "y": 420, "w": 128, "h": 70 }, @@ -4514,8 +4514,8 @@ }, "cubot/walk_e/0025": { "frame": { - "x": 2944, - "y": 770, + "x": 256, + "y": 420, "w": 128, "h": 70 }, @@ -4538,8 +4538,8 @@ }, "cubot/walk_e/0026": { "frame": { - "x": 3840, - "y": 770, + "x": 384, + "y": 420, "w": 128, "h": 70 }, @@ -4562,8 +4562,8 @@ }, "cubot/walk_e/0027": { "frame": { - "x": 128, - "y": 840, + "x": 512, + "y": 420, "w": 128, "h": 70 }, @@ -4586,8 +4586,8 @@ }, "cubot/walk_e/0028": { "frame": { - "x": 512, - "y": 840, + "x": 640, + "y": 420, "w": 128, "h": 70 }, @@ -4610,8 +4610,8 @@ }, "cubot/walk_e/0029": { "frame": { - "x": 384, - "y": 840, + "x": 768, + "y": 420, "w": 128, "h": 70 }, @@ -4634,8 +4634,8 @@ }, "cubot/walk_e/0030": { "frame": { - "x": 640, - "y": 840, + "x": 896, + "y": 420, "w": 128, "h": 70 }, @@ -4658,8 +4658,8 @@ }, "cubot/walk_n/0001": { "frame": { - "x": 256, - "y": 840, + "x": 1024, + "y": 420, "w": 128, "h": 70 }, @@ -4682,8 +4682,8 @@ }, "cubot/walk_n/0002": { "frame": { - "x": 0, - "y": 840, + "x": 1152, + "y": 420, "w": 128, "h": 70 }, @@ -4706,8 +4706,8 @@ }, "cubot/walk_n/0003": { "frame": { - "x": 3968, - "y": 770, + "x": 1280, + "y": 420, "w": 128, "h": 70 }, @@ -4730,8 +4730,8 @@ }, "cubot/walk_n/0004": { "frame": { - "x": 3200, - "y": 770, + "x": 1408, + "y": 420, "w": 128, "h": 70 }, @@ -4754,8 +4754,8 @@ }, "cubot/walk_n/0005": { "frame": { - "x": 2816, - "y": 770, + "x": 1536, + "y": 420, "w": 128, "h": 70 }, @@ -4778,8 +4778,8 @@ }, "cubot/walk_n/0006": { "frame": { - "x": 1536, - "y": 770, + "x": 1664, + "y": 420, "w": 128, "h": 70 }, @@ -4802,8 +4802,8 @@ }, "cubot/walk_n/0007": { "frame": { - "x": 1408, - "y": 770, + "x": 1792, + "y": 420, "w": 128, "h": 70 }, @@ -4826,8 +4826,8 @@ }, "cubot/walk_n/0008": { "frame": { - "x": 1664, - "y": 770, + "x": 1920, + "y": 420, "w": 128, "h": 70 }, @@ -4850,8 +4850,8 @@ }, "cubot/walk_n/0009": { "frame": { - "x": 1280, - "y": 770, + "x": 2048, + "y": 420, "w": 128, "h": 70 }, @@ -4874,8 +4874,8 @@ }, "cubot/walk_n/0010": { "frame": { - "x": 1024, - "y": 770, + "x": 2176, + "y": 420, "w": 128, "h": 70 }, @@ -4898,8 +4898,8 @@ }, "cubot/walk_n/0011": { "frame": { - "x": 896, - "y": 770, + "x": 2304, + "y": 420, "w": 128, "h": 70 }, @@ -4922,8 +4922,8 @@ }, "cubot/walk_n/0012": { "frame": { - "x": 1792, - "y": 770, + "x": 2432, + "y": 420, "w": 128, "h": 70 }, @@ -4946,8 +4946,8 @@ }, "cubot/walk_n/0013": { "frame": { - "x": 2176, - "y": 770, + "x": 2560, + "y": 420, "w": 128, "h": 70 }, @@ -4970,8 +4970,8 @@ }, "cubot/walk_n/0014": { "frame": { - "x": 2560, - "y": 770, + "x": 2688, + "y": 420, "w": 128, "h": 70 }, @@ -4994,8 +4994,8 @@ }, "cubot/walk_n/0015": { "frame": { - "x": 2432, - "y": 770, + "x": 2816, + "y": 420, "w": 128, "h": 70 }, @@ -5018,8 +5018,8 @@ }, "cubot/walk_n/0016": { "frame": { - "x": 2688, - "y": 770, + "x": 2944, + "y": 420, "w": 128, "h": 70 }, @@ -5042,8 +5042,8 @@ }, "cubot/walk_n/0017": { "frame": { - "x": 2304, - "y": 770, + "x": 3072, + "y": 420, "w": 128, "h": 70 }, @@ -5066,8 +5066,8 @@ }, "cubot/walk_n/0018": { "frame": { - "x": 2048, - "y": 770, + "x": 3200, + "y": 420, "w": 128, "h": 70 }, @@ -5090,8 +5090,8 @@ }, "cubot/walk_n/0019": { "frame": { - "x": 1920, - "y": 770, + "x": 3328, + "y": 420, "w": 128, "h": 70 }, @@ -5114,8 +5114,8 @@ }, "cubot/walk_n/0020": { "frame": { - "x": 768, - "y": 840, + "x": 3456, + "y": 420, "w": 128, "h": 70 }, @@ -5138,8 +5138,8 @@ }, "cubot/walk_n/0021": { "frame": { - "x": 1152, - "y": 840, + "x": 3584, + "y": 420, "w": 128, "h": 70 }, @@ -5162,8 +5162,8 @@ }, "cubot/walk_n/0022": { "frame": { - "x": 3584, - "y": 840, + "x": 3712, + "y": 420, "w": 128, "h": 70 }, @@ -5186,8 +5186,8 @@ }, "cubot/walk_n/0023": { "frame": { - "x": 3456, - "y": 840, + "x": 3840, + "y": 420, "w": 128, "h": 70 }, @@ -5210,8 +5210,8 @@ }, "cubot/walk_n/0024": { "frame": { - "x": 3712, - "y": 840, + "x": 0, + "y": 490, "w": 128, "h": 70 }, @@ -5234,8 +5234,8 @@ }, "cubot/walk_n/0025": { "frame": { - "x": 3328, - "y": 840, + "x": 128, + "y": 490, "w": 128, "h": 70 }, @@ -5258,8 +5258,8 @@ }, "cubot/walk_n/0026": { "frame": { - "x": 3072, - "y": 840, + "x": 256, + "y": 490, "w": 128, "h": 70 }, @@ -5282,8 +5282,8 @@ }, "cubot/walk_n/0027": { "frame": { - "x": 2944, - "y": 840, + "x": 384, + "y": 490, "w": 128, "h": 70 }, @@ -5306,8 +5306,8 @@ }, "cubot/walk_n/0028": { "frame": { - "x": 3840, - "y": 840, + "x": 512, + "y": 490, "w": 128, "h": 70 }, @@ -5330,8 +5330,8 @@ }, "cubot/walk_n/0029": { "frame": { - "x": 128, - "y": 910, + "x": 640, + "y": 490, "w": 128, "h": 70 }, @@ -5354,8 +5354,8 @@ }, "cubot/walk_n/0030": { "frame": { - "x": 512, - "y": 910, + "x": 768, + "y": 490, "w": 128, "h": 70 }, @@ -5378,8 +5378,8 @@ }, "cubot/walk_s/0001": { "frame": { - "x": 768, - "y": 910, + "x": 896, + "y": 490, "w": 128, "h": 70 }, @@ -5402,8 +5402,8 @@ }, "cubot/walk_s/0002": { "frame": { - "x": 640, - "y": 910, + "x": 1024, + "y": 490, "w": 128, "h": 70 }, @@ -5426,8 +5426,8 @@ }, "cubot/walk_s/0003": { "frame": { - "x": 384, - "y": 910, + "x": 1152, + "y": 490, "w": 128, "h": 70 }, @@ -5450,8 +5450,8 @@ }, "cubot/walk_s/0004": { "frame": { - "x": 256, - "y": 910, + "x": 1280, + "y": 490, "w": 128, "h": 70 }, @@ -5474,8 +5474,8 @@ }, "cubot/walk_s/0005": { "frame": { - "x": 0, - "y": 910, + "x": 1408, + "y": 490, "w": 128, "h": 70 }, @@ -5498,8 +5498,8 @@ }, "cubot/walk_s/0006": { "frame": { - "x": 3968, - "y": 840, + "x": 1536, + "y": 490, "w": 128, "h": 70 }, @@ -5522,8 +5522,8 @@ }, "cubot/walk_s/0007": { "frame": { - "x": 3200, - "y": 840, + "x": 1664, + "y": 490, "w": 128, "h": 70 }, @@ -5546,8 +5546,8 @@ }, "cubot/walk_s/0008": { "frame": { - "x": 2816, - "y": 840, + "x": 1792, + "y": 490, "w": 128, "h": 70 }, @@ -5570,8 +5570,8 @@ }, "cubot/walk_s/0009": { "frame": { - "x": 1536, - "y": 840, + "x": 1920, + "y": 490, "w": 128, "h": 70 }, @@ -5594,8 +5594,8 @@ }, "cubot/walk_s/0010": { "frame": { - "x": 1408, - "y": 840, + "x": 2048, + "y": 490, "w": 128, "h": 70 }, @@ -5618,8 +5618,8 @@ }, "cubot/walk_s/0011": { "frame": { - "x": 1664, - "y": 840, + "x": 2176, + "y": 490, "w": 128, "h": 70 }, @@ -5642,8 +5642,8 @@ }, "cubot/walk_s/0012": { "frame": { - "x": 1280, - "y": 840, + "x": 2304, + "y": 490, "w": 128, "h": 70 }, @@ -5666,8 +5666,8 @@ }, "cubot/walk_s/0013": { "frame": { - "x": 1024, - "y": 840, + "x": 2432, + "y": 490, "w": 128, "h": 70 }, @@ -5690,8 +5690,8 @@ }, "cubot/walk_s/0014": { "frame": { - "x": 896, - "y": 840, + "x": 2560, + "y": 490, "w": 128, "h": 70 }, @@ -5714,8 +5714,8 @@ }, "cubot/walk_s/0015": { "frame": { - "x": 1792, - "y": 840, + "x": 2688, + "y": 490, "w": 128, "h": 70 }, @@ -5738,8 +5738,8 @@ }, "cubot/walk_s/0016": { "frame": { - "x": 2176, - "y": 840, + "x": 2816, + "y": 490, "w": 128, "h": 70 }, @@ -5762,8 +5762,8 @@ }, "cubot/walk_s/0017": { "frame": { - "x": 2560, - "y": 840, + "x": 2944, + "y": 490, "w": 128, "h": 70 }, @@ -5786,8 +5786,8 @@ }, "cubot/walk_s/0018": { "frame": { - "x": 2432, - "y": 840, + "x": 3072, + "y": 490, "w": 128, "h": 70 }, @@ -5810,8 +5810,8 @@ }, "cubot/walk_s/0019": { "frame": { - "x": 2688, - "y": 840, + "x": 3200, + "y": 490, "w": 128, "h": 70 }, @@ -5834,8 +5834,8 @@ }, "cubot/walk_s/0020": { "frame": { - "x": 2304, - "y": 840, + "x": 3328, + "y": 490, "w": 128, "h": 70 }, @@ -5858,8 +5858,8 @@ }, "cubot/walk_s/0021": { "frame": { - "x": 2048, - "y": 840, + "x": 3456, + "y": 490, "w": 128, "h": 70 }, @@ -5882,8 +5882,8 @@ }, "cubot/walk_s/0022": { "frame": { - "x": 1920, - "y": 840, + "x": 3584, + "y": 490, "w": 128, "h": 70 }, @@ -5905,6 +5905,510 @@ } }, "cubot/walk_s/0023": { + "frame": { + "x": 3712, + "y": 490, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0024": { + "frame": { + "x": 3840, + "y": 490, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0025": { + "frame": { + "x": 0, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0026": { + "frame": { + "x": 128, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0027": { + "frame": { + "x": 256, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0028": { + "frame": { + "x": 384, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0029": { + "frame": { + "x": 512, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_s/0030": { + "frame": { + "x": 640, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0001": { + "frame": { + "x": 768, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0002": { + "frame": { + "x": 896, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0003": { + "frame": { + "x": 1024, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0004": { + "frame": { + "x": 1152, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0005": { + "frame": { + "x": 1280, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0006": { + "frame": { + "x": 1408, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0007": { + "frame": { + "x": 1536, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0008": { + "frame": { + "x": 1664, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0009": { + "frame": { + "x": 1792, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0010": { + "frame": { + "x": 1920, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0011": { + "frame": { + "x": 2048, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0012": { + "frame": { + "x": 2176, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0013": { + "frame": { + "x": 2304, + "y": 560, + "w": 128, + "h": 70 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 128, + "h": 70 + }, + "sourceSize": { + "w": 128, + "h": 70 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "cubot/walk_w/0014": { "frame": { "x": 2432, "y": 560, @@ -5928,514 +6432,10 @@ "y": 0.5 } }, - "cubot/walk_s/0024": { - "frame": { - "x": 1152, - "y": 420, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_s/0025": { - "frame": { - "x": 2304, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_s/0026": { - "frame": { - "x": 2176, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_s/0027": { - "frame": { - "x": 2432, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_s/0028": { - "frame": { - "x": 2048, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_s/0029": { - "frame": { - "x": 1792, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_s/0030": { - "frame": { - "x": 2560, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0001": { - "frame": { - "x": 2944, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0002": { - "frame": { - "x": 1280, - "y": 490, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0003": { - "frame": { - "x": 3328, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0004": { - "frame": { - "x": 3200, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0005": { - "frame": { - "x": 3456, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0006": { - "frame": { - "x": 3072, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0007": { - "frame": { - "x": 2816, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0008": { - "frame": { - "x": 2688, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0009": { - "frame": { - "x": 1920, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0010": { - "frame": { - "x": 1664, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0011": { - "frame": { - "x": 512, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0012": { - "frame": { - "x": 384, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0013": { - "frame": { - "x": 640, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "cubot/walk_w/0014": { - "frame": { - "x": 256, - "y": 140, - "w": 128, - "h": 70 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 70 - }, - "sourceSize": { - "w": 128, - "h": 70 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, "cubot/walk_w/0015": { "frame": { - "x": 0, - "y": 140, + "x": 2560, + "y": 560, "w": 128, "h": 70 }, @@ -6458,8 +6458,8 @@ }, "cubot/walk_w/0016": { "frame": { - "x": 768, - "y": 140, + "x": 2688, + "y": 560, "w": 128, "h": 70 }, @@ -6482,8 +6482,8 @@ }, "cubot/walk_w/0017": { "frame": { - "x": 1024, - "y": 140, + "x": 2816, + "y": 560, "w": 128, "h": 70 }, @@ -6506,8 +6506,8 @@ }, "cubot/walk_w/0018": { "frame": { - "x": 1408, - "y": 140, + "x": 2944, + "y": 560, "w": 128, "h": 70 }, @@ -6530,8 +6530,8 @@ }, "cubot/walk_w/0019": { "frame": { - "x": 1280, - "y": 140, + "x": 3072, + "y": 560, "w": 128, "h": 70 }, @@ -6554,8 +6554,8 @@ }, "cubot/walk_w/0020": { "frame": { - "x": 1536, - "y": 140, + "x": 3200, + "y": 560, "w": 128, "h": 70 }, @@ -6578,8 +6578,8 @@ }, "cubot/walk_w/0021": { "frame": { - "x": 1152, - "y": 140, + "x": 3328, + "y": 560, "w": 128, "h": 70 }, @@ -6602,8 +6602,8 @@ }, "cubot/walk_w/0022": { "frame": { - "x": 896, - "y": 140, + "x": 3456, + "y": 560, "w": 128, "h": 70 }, @@ -6627,7 +6627,7 @@ "cubot/walk_w/0023": { "frame": { "x": 3584, - "y": 140, + "y": 560, "w": 128, "h": 70 }, @@ -6650,8 +6650,8 @@ }, "cubot/walk_w/0024": { "frame": { - "x": 3840, - "y": 140, + "x": 3712, + "y": 560, "w": 128, "h": 70 }, @@ -6674,8 +6674,8 @@ }, "cubot/walk_w/0025": { "frame": { - "x": 1920, - "y": 210, + "x": 3840, + "y": 560, "w": 128, "h": 70 }, @@ -6698,8 +6698,8 @@ }, "cubot/walk_w/0026": { "frame": { - "x": 1792, - "y": 210, + "x": 0, + "y": 630, "w": 128, "h": 70 }, @@ -6722,8 +6722,8 @@ }, "cubot/walk_w/0027": { "frame": { - "x": 2048, - "y": 210, + "x": 128, + "y": 630, "w": 128, "h": 70 }, @@ -6746,8 +6746,8 @@ }, "cubot/walk_w/0028": { "frame": { - "x": 1664, - "y": 210, + "x": 256, + "y": 630, "w": 128, "h": 70 }, @@ -6770,8 +6770,8 @@ }, "cubot/walk_w/0029": { "frame": { - "x": 1408, - "y": 210, + "x": 384, + "y": 630, "w": 128, "h": 70 }, @@ -6794,8 +6794,8 @@ }, "cubot/walk_w/0030": { "frame": { - "x": 2176, - "y": 210, + "x": 512, + "y": 630, "w": 128, "h": 70 }, @@ -6818,8 +6818,8 @@ }, "effects/A_icon": { "frame": { - "x": 312, - "y": 0, + "x": 640, + "y": 630, "w": 48, "h": 48 }, @@ -6842,8 +6842,8 @@ }, "effects/beam": { "frame": { - "x": 144, - "y": 0, + "x": 688, + "y": 630, "w": 24, "h": 24 }, @@ -6866,8 +6866,8 @@ }, "effects/err_icon": { "frame": { - "x": 360, - "y": 0, + "x": 712, + "y": 630, "w": 48, "h": 48 }, @@ -6890,8 +6890,8 @@ }, "effects/spark": { "frame": { - "x": 120, - "y": 0, + "x": 760, + "y": 630, "w": 24, "h": 24 }, @@ -6914,8 +6914,8 @@ }, "effects/warn_icon": { "frame": { - "x": 264, - "y": 0, + "x": 784, + "y": 630, "w": 48, "h": 48 }, @@ -6938,8 +6938,8 @@ }, "harvester/walk_e/0001": { "frame": { - "x": 2560, - "y": 210, + "x": 832, + "y": 630, "w": 128, "h": 70 }, @@ -6962,8 +6962,8 @@ }, "harvester/walk_e/0002": { "frame": { - "x": 2944, - "y": 210, + "x": 960, + "y": 630, "w": 128, "h": 70 }, @@ -6986,8 +6986,8 @@ }, "harvester/walk_e/0003": { "frame": { - "x": 2816, - "y": 210, + "x": 1088, + "y": 630, "w": 128, "h": 70 }, @@ -7010,8 +7010,8 @@ }, "harvester/walk_e/0004": { "frame": { - "x": 3072, - "y": 210, + "x": 1216, + "y": 630, "w": 128, "h": 70 }, @@ -7034,8 +7034,8 @@ }, "harvester/walk_e/0005": { "frame": { - "x": 2688, - "y": 210, + "x": 1344, + "y": 630, "w": 128, "h": 70 }, @@ -7058,8 +7058,8 @@ }, "harvester/walk_e/0006": { "frame": { - "x": 2432, - "y": 210, + "x": 1472, + "y": 630, "w": 128, "h": 70 }, @@ -7082,8 +7082,8 @@ }, "harvester/walk_e/0007": { "frame": { - "x": 2304, - "y": 210, + "x": 1600, + "y": 630, "w": 128, "h": 70 }, @@ -7106,8 +7106,8 @@ }, "harvester/walk_e/0008": { "frame": { - "x": 1536, - "y": 210, + "x": 1728, + "y": 630, "w": 128, "h": 70 }, @@ -7130,8 +7130,8 @@ }, "harvester/walk_e/0009": { "frame": { - "x": 1280, - "y": 210, + "x": 1856, + "y": 630, "w": 128, "h": 70 }, @@ -7154,8 +7154,8 @@ }, "harvester/walk_e/0010": { "frame": { - "x": 128, - "y": 210, + "x": 1984, + "y": 630, "w": 128, "h": 70 }, @@ -7178,8 +7178,8 @@ }, "harvester/walk_e/0011": { "frame": { - "x": 0, - "y": 210, + "x": 2112, + "y": 630, "w": 128, "h": 70 }, @@ -7202,8 +7202,8 @@ }, "harvester/walk_e/0012": { "frame": { - "x": 256, - "y": 210, + "x": 2240, + "y": 630, "w": 128, "h": 70 }, @@ -7226,8 +7226,8 @@ }, "harvester/walk_e/0013": { "frame": { - "x": 3968, - "y": 140, + "x": 2368, + "y": 630, "w": 128, "h": 70 }, @@ -7250,8 +7250,8 @@ }, "harvester/walk_e/0014": { "frame": { - "x": 3968, - "y": 70, + "x": 2496, + "y": 630, "w": 128, "h": 70 }, @@ -7274,8 +7274,8 @@ }, "harvester/walk_e/0015": { "frame": { - "x": 384, - "y": 210, + "x": 2624, + "y": 630, "w": 128, "h": 70 }, @@ -7298,8 +7298,8 @@ }, "harvester/walk_e/0016": { "frame": { - "x": 640, - "y": 210, + "x": 2752, + "y": 630, "w": 128, "h": 70 }, @@ -7322,8 +7322,8 @@ }, "harvester/walk_e/0017": { "frame": { - "x": 1024, - "y": 210, + "x": 2880, + "y": 630, "w": 128, "h": 70 }, @@ -7346,8 +7346,8 @@ }, "harvester/walk_e/0018": { "frame": { - "x": 896, - "y": 210, + "x": 3008, + "y": 630, "w": 128, "h": 70 }, @@ -7370,8 +7370,8 @@ }, "harvester/walk_e/0019": { "frame": { - "x": 1152, - "y": 210, + "x": 3136, + "y": 630, "w": 128, "h": 70 }, @@ -7394,8 +7394,8 @@ }, "harvester/walk_e/0020": { "frame": { - "x": 768, - "y": 210, + "x": 3264, + "y": 630, "w": 128, "h": 70 }, @@ -7418,8 +7418,8 @@ }, "harvester/walk_e/0021": { "frame": { - "x": 512, - "y": 210, + "x": 3392, + "y": 630, "w": 128, "h": 70 }, @@ -7442,8 +7442,8 @@ }, "harvester/walk_e/0022": { "frame": { - "x": 128, - "y": 140, + "x": 3520, + "y": 630, "w": 128, "h": 70 }, @@ -7466,8 +7466,8 @@ }, "harvester/walk_e/0023": { "frame": { - "x": 2048, - "y": 70, + "x": 3648, + "y": 630, "w": 128, "h": 70 }, @@ -7490,8 +7490,8 @@ }, "harvester/walk_e/0024": { "frame": { - "x": 2888, - "y": 0, + "x": 3776, + "y": 630, "w": 128, "h": 70 }, @@ -7514,8 +7514,8 @@ }, "harvester/walk_e/0025": { "frame": { - "x": 3016, - "y": 0, + "x": 0, + "y": 700, "w": 128, "h": 70 }, @@ -7538,8 +7538,8 @@ }, "harvester/walk_e/0026": { "frame": { - "x": 2760, - "y": 0, + "x": 128, + "y": 700, "w": 128, "h": 70 }, @@ -7562,8 +7562,8 @@ }, "harvester/walk_e/0027": { "frame": { - "x": 3144, - "y": 0, + "x": 256, + "y": 700, "w": 128, "h": 70 }, @@ -7586,8 +7586,8 @@ }, "harvester/walk_e/0028": { "frame": { - "x": 3400, - "y": 0, + "x": 384, + "y": 700, "w": 128, "h": 70 }, @@ -7610,8 +7610,8 @@ }, "harvester/walk_e/0029": { "frame": { - "x": 3656, - "y": 0, + "x": 512, + "y": 700, "w": 128, "h": 70 }, @@ -7634,8 +7634,8 @@ }, "harvester/walk_e/0030": { "frame": { - "x": 3784, - "y": 0, + "x": 640, + "y": 700, "w": 128, "h": 70 }, @@ -7658,8 +7658,8 @@ }, "harvester/walk_n/0001": { "frame": { - "x": 3528, - "y": 0, + "x": 768, + "y": 700, "w": 128, "h": 70 }, @@ -7682,8 +7682,8 @@ }, "harvester/walk_n/0002": { "frame": { - "x": 3272, - "y": 0, + "x": 896, + "y": 700, "w": 128, "h": 70 }, @@ -7706,8 +7706,8 @@ }, "harvester/walk_n/0003": { "frame": { - "x": 2632, - "y": 0, + "x": 1024, + "y": 700, "w": 128, "h": 70 }, @@ -7730,8 +7730,8 @@ }, "harvester/walk_n/0004": { "frame": { - "x": 2504, - "y": 0, + "x": 1152, + "y": 700, "w": 128, "h": 70 }, @@ -7754,8 +7754,8 @@ }, "harvester/walk_n/0005": { "frame": { - "x": 1864, - "y": 0, + "x": 1280, + "y": 700, "w": 128, "h": 70 }, @@ -7778,8 +7778,8 @@ }, "harvester/walk_n/0006": { "frame": { - "x": 2120, - "y": 0, + "x": 1408, + "y": 700, "w": 128, "h": 70 }, @@ -7802,8 +7802,8 @@ }, "harvester/walk_n/0007": { "frame": { - "x": 2248, - "y": 0, + "x": 1536, + "y": 700, "w": 128, "h": 70 }, @@ -7826,8 +7826,8 @@ }, "harvester/walk_n/0008": { "frame": { - "x": 1992, - "y": 0, + "x": 1664, + "y": 700, "w": 128, "h": 70 }, @@ -7850,8 +7850,8 @@ }, "harvester/walk_n/0009": { "frame": { - "x": 2376, - "y": 0, + "x": 1792, + "y": 700, "w": 128, "h": 70 }, @@ -7874,8 +7874,8 @@ }, "harvester/walk_n/0010": { "frame": { - "x": 256, - "y": 70, + "x": 1920, + "y": 700, "w": 128, "h": 70 }, @@ -7898,8 +7898,8 @@ }, "harvester/walk_n/0011": { "frame": { - "x": 2688, - "y": 70, + "x": 2048, + "y": 700, "w": 128, "h": 70 }, @@ -7922,8 +7922,8 @@ }, "harvester/walk_n/0012": { "frame": { - "x": 2560, - "y": 70, + "x": 2176, + "y": 700, "w": 128, "h": 70 }, @@ -7946,8 +7946,8 @@ }, "harvester/walk_n/0013": { "frame": { - "x": 2816, - "y": 70, + "x": 2304, + "y": 700, "w": 128, "h": 70 }, @@ -7971,7 +7971,7 @@ "harvester/walk_n/0014": { "frame": { "x": 2432, - "y": 70, + "y": 700, "w": 128, "h": 70 }, @@ -7994,8 +7994,8 @@ }, "harvester/walk_n/0015": { "frame": { - "x": 2176, - "y": 70, + "x": 2560, + "y": 700, "w": 128, "h": 70 }, @@ -8018,8 +8018,8 @@ }, "harvester/walk_n/0016": { "frame": { - "x": 3912, - "y": 0, + "x": 2688, + "y": 700, "w": 128, "h": 70 }, @@ -8042,8 +8042,8 @@ }, "harvester/walk_n/0017": { "frame": { - "x": 2944, - "y": 70, + "x": 2816, + "y": 700, "w": 128, "h": 70 }, @@ -8066,8 +8066,8 @@ }, "harvester/walk_n/0018": { "frame": { - "x": 3328, - "y": 70, + "x": 2944, + "y": 700, "w": 128, "h": 70 }, @@ -8090,8 +8090,8 @@ }, "harvester/walk_n/0019": { "frame": { - "x": 3712, - "y": 70, + "x": 3072, + "y": 700, "w": 128, "h": 70 }, @@ -8114,8 +8114,8 @@ }, "harvester/walk_n/0020": { "frame": { - "x": 3584, - "y": 70, + "x": 3200, + "y": 700, "w": 128, "h": 70 }, @@ -8138,8 +8138,8 @@ }, "harvester/walk_n/0021": { "frame": { - "x": 3840, - "y": 70, + "x": 3328, + "y": 700, "w": 128, "h": 70 }, @@ -8163,7 +8163,7 @@ "harvester/walk_n/0022": { "frame": { "x": 3456, - "y": 70, + "y": 700, "w": 128, "h": 70 }, @@ -8186,8 +8186,8 @@ }, "harvester/walk_n/0023": { "frame": { - "x": 3200, - "y": 70, + "x": 3584, + "y": 700, "w": 128, "h": 70 }, @@ -8210,8 +8210,8 @@ }, "harvester/walk_n/0024": { "frame": { - "x": 3072, - "y": 70, + "x": 3712, + "y": 700, "w": 128, "h": 70 }, @@ -8234,8 +8234,8 @@ }, "harvester/walk_n/0025": { "frame": { - "x": 2304, - "y": 70, + "x": 3840, + "y": 700, "w": 128, "h": 70 }, @@ -8258,8 +8258,8 @@ }, "harvester/walk_n/0026": { "frame": { - "x": 1920, - "y": 70, + "x": 0, + "y": 770, "w": 128, "h": 70 }, @@ -8282,8 +8282,8 @@ }, "harvester/walk_n/0027": { "frame": { - "x": 640, - "y": 70, + "x": 128, + "y": 770, "w": 128, "h": 70 }, @@ -8306,8 +8306,8 @@ }, "harvester/walk_n/0028": { "frame": { - "x": 512, - "y": 70, + "x": 256, + "y": 770, "w": 128, "h": 70 }, @@ -8330,8 +8330,8 @@ }, "harvester/walk_n/0029": { "frame": { - "x": 768, - "y": 70, + "x": 384, + "y": 770, "w": 128, "h": 70 }, @@ -8354,8 +8354,8 @@ }, "harvester/walk_n/0030": { "frame": { - "x": 384, - "y": 70, + "x": 512, + "y": 770, "w": 128, "h": 70 }, @@ -8378,8 +8378,8 @@ }, "harvester/walk_s/0001": { "frame": { - "x": 128, - "y": 70, + "x": 640, + "y": 770, "w": 128, "h": 70 }, @@ -8402,8 +8402,8 @@ }, "harvester/walk_s/0002": { "frame": { - "x": 0, - "y": 70, + "x": 768, + "y": 770, "w": 128, "h": 70 }, @@ -8427,7 +8427,7 @@ "harvester/walk_s/0003": { "frame": { "x": 896, - "y": 70, + "y": 770, "w": 128, "h": 70 }, @@ -8450,8 +8450,8 @@ }, "harvester/walk_s/0004": { "frame": { - "x": 1280, - "y": 70, + "x": 1024, + "y": 770, "w": 128, "h": 70 }, @@ -8474,8 +8474,8 @@ }, "harvester/walk_s/0005": { "frame": { - "x": 1664, - "y": 70, + "x": 1152, + "y": 770, "w": 128, "h": 70 }, @@ -8498,8 +8498,8 @@ }, "harvester/walk_s/0006": { "frame": { - "x": 1536, - "y": 70, + "x": 1280, + "y": 770, "w": 128, "h": 70 }, @@ -8522,8 +8522,8 @@ }, "harvester/walk_s/0007": { "frame": { - "x": 1792, - "y": 70, + "x": 1408, + "y": 770, "w": 128, "h": 70 }, @@ -8546,8 +8546,8 @@ }, "harvester/walk_s/0008": { "frame": { - "x": 1408, - "y": 70, + "x": 1536, + "y": 770, "w": 128, "h": 70 }, @@ -8570,8 +8570,8 @@ }, "harvester/walk_s/0009": { "frame": { - "x": 1152, - "y": 70, + "x": 1664, + "y": 770, "w": 128, "h": 70 }, @@ -8594,8 +8594,8 @@ }, "harvester/walk_s/0010": { "frame": { - "x": 1024, - "y": 70, + "x": 1792, + "y": 770, "w": 128, "h": 70 }, @@ -8618,8 +8618,8 @@ }, "harvester/walk_s/0011": { "frame": { - "x": 3712, - "y": 140, + "x": 1920, + "y": 770, "w": 128, "h": 70 }, @@ -8642,8 +8642,8 @@ }, "harvester/walk_s/0012": { "frame": { - "x": 3456, - "y": 210, + "x": 2048, + "y": 770, "w": 128, "h": 70 }, @@ -8666,8 +8666,8 @@ }, "harvester/walk_s/0013": { "frame": { - "x": 512, - "y": 420, + "x": 2176, + "y": 770, "w": 128, "h": 70 }, @@ -8690,8 +8690,8 @@ }, "harvester/walk_s/0014": { "frame": { - "x": 384, - "y": 420, + "x": 2304, + "y": 770, "w": 128, "h": 70 }, @@ -8714,8 +8714,8 @@ }, "harvester/walk_s/0015": { "frame": { - "x": 640, - "y": 420, + "x": 2432, + "y": 770, "w": 128, "h": 70 }, @@ -8738,8 +8738,8 @@ }, "harvester/walk_s/0016": { "frame": { - "x": 256, - "y": 420, + "x": 2560, + "y": 770, "w": 128, "h": 70 }, @@ -8762,8 +8762,8 @@ }, "harvester/walk_s/0017": { "frame": { - "x": 0, - "y": 420, + "x": 2688, + "y": 770, "w": 128, "h": 70 }, @@ -8786,8 +8786,8 @@ }, "harvester/walk_s/0018": { "frame": { - "x": 768, - "y": 420, + "x": 2816, + "y": 770, "w": 128, "h": 70 }, @@ -8810,8 +8810,8 @@ }, "harvester/walk_s/0019": { "frame": { - "x": 1024, - "y": 420, + "x": 2944, + "y": 770, "w": 128, "h": 70 }, @@ -8834,8 +8834,8 @@ }, "harvester/walk_s/0020": { "frame": { - "x": 1408, - "y": 420, + "x": 3072, + "y": 770, "w": 128, "h": 70 }, @@ -8858,8 +8858,8 @@ }, "harvester/walk_s/0021": { "frame": { - "x": 1280, - "y": 420, + "x": 3200, + "y": 770, "w": 128, "h": 70 }, @@ -8882,8 +8882,8 @@ }, "harvester/walk_s/0022": { "frame": { - "x": 1536, - "y": 420, + "x": 3328, + "y": 770, "w": 128, "h": 70 }, @@ -8906,8 +8906,8 @@ }, "harvester/walk_s/0023": { "frame": { - "x": 3200, - "y": 210, + "x": 3456, + "y": 770, "w": 128, "h": 70 }, @@ -8930,8 +8930,8 @@ }, "harvester/walk_s/0024": { "frame": { - "x": 896, - "y": 420, + "x": 3584, + "y": 770, "w": 128, "h": 70 }, @@ -8954,8 +8954,8 @@ }, "harvester/walk_s/0025": { "frame": { - "x": 128, - "y": 420, + "x": 3712, + "y": 770, "w": 128, "h": 70 }, @@ -8978,8 +8978,8 @@ }, "harvester/walk_s/0026": { "frame": { - "x": 3968, - "y": 350, + "x": 3840, + "y": 770, "w": 128, "h": 70 }, @@ -9002,8 +9002,8 @@ }, "harvester/walk_s/0027": { "frame": { - "x": 2816, - "y": 350, + "x": 0, + "y": 840, "w": 128, "h": 70 }, @@ -9026,8 +9026,8 @@ }, "harvester/walk_s/0028": { "frame": { - "x": 2688, - "y": 350, + "x": 128, + "y": 840, "w": 128, "h": 70 }, @@ -9050,8 +9050,8 @@ }, "harvester/walk_s/0029": { "frame": { - "x": 2944, - "y": 350, + "x": 256, + "y": 840, "w": 128, "h": 70 }, @@ -9074,8 +9074,8 @@ }, "harvester/walk_s/0030": { "frame": { - "x": 2560, - "y": 350, + "x": 384, + "y": 840, "w": 128, "h": 70 }, @@ -9098,8 +9098,8 @@ }, "harvester/walk_w/0001": { "frame": { - "x": 2304, - "y": 350, + "x": 512, + "y": 840, "w": 128, "h": 70 }, @@ -9122,8 +9122,8 @@ }, "harvester/walk_w/0002": { "frame": { - "x": 3072, - "y": 350, + "x": 640, + "y": 840, "w": 128, "h": 70 }, @@ -9146,8 +9146,8 @@ }, "harvester/walk_w/0003": { "frame": { - "x": 3328, - "y": 350, + "x": 768, + "y": 840, "w": 128, "h": 70 }, @@ -9170,8 +9170,8 @@ }, "harvester/walk_w/0004": { "frame": { - "x": 3712, - "y": 350, + "x": 896, + "y": 840, "w": 128, "h": 70 }, @@ -9194,8 +9194,8 @@ }, "harvester/walk_w/0005": { "frame": { - "x": 3584, - "y": 350, + "x": 1024, + "y": 840, "w": 128, "h": 70 }, @@ -9218,8 +9218,8 @@ }, "harvester/walk_w/0006": { "frame": { - "x": 3840, - "y": 350, + "x": 1152, + "y": 840, "w": 128, "h": 70 }, @@ -9242,8 +9242,8 @@ }, "harvester/walk_w/0007": { "frame": { - "x": 3456, - "y": 350, + "x": 1280, + "y": 840, "w": 128, "h": 70 }, @@ -9266,8 +9266,8 @@ }, "harvester/walk_w/0008": { "frame": { - "x": 3200, - "y": 350, + "x": 1408, + "y": 840, "w": 128, "h": 70 }, @@ -9290,8 +9290,8 @@ }, "harvester/walk_w/0009": { "frame": { - "x": 1664, - "y": 420, + "x": 1536, + "y": 840, "w": 128, "h": 70 }, @@ -9314,8 +9314,8 @@ }, "harvester/walk_w/0010": { "frame": { - "x": 1920, - "y": 420, + "x": 1664, + "y": 840, "w": 128, "h": 70 }, @@ -9338,8 +9338,8 @@ }, "harvester/walk_w/0011": { "frame": { - "x": 0, - "y": 490, + "x": 1792, + "y": 840, "w": 128, "h": 70 }, @@ -9362,8 +9362,8 @@ }, "harvester/walk_w/0012": { "frame": { - "x": 3968, - "y": 420, + "x": 1920, + "y": 840, "w": 128, "h": 70 }, @@ -9386,8 +9386,8 @@ }, "harvester/walk_w/0013": { "frame": { - "x": 128, - "y": 490, + "x": 2048, + "y": 840, "w": 128, "h": 70 }, @@ -9410,8 +9410,8 @@ }, "harvester/walk_w/0014": { "frame": { - "x": 3840, - "y": 420, + "x": 2176, + "y": 840, "w": 128, "h": 70 }, @@ -9434,8 +9434,8 @@ }, "harvester/walk_w/0015": { "frame": { - "x": 3584, - "y": 420, + "x": 2304, + "y": 840, "w": 128, "h": 70 }, @@ -9458,8 +9458,8 @@ }, "harvester/walk_w/0016": { "frame": { - "x": 256, - "y": 490, + "x": 2432, + "y": 840, "w": 128, "h": 70 }, @@ -9482,8 +9482,8 @@ }, "harvester/walk_w/0017": { "frame": { - "x": 640, - "y": 490, + "x": 2560, + "y": 840, "w": 128, "h": 70 }, @@ -9506,8 +9506,8 @@ }, "harvester/walk_w/0018": { "frame": { - "x": 1024, - "y": 490, + "x": 2688, + "y": 840, "w": 128, "h": 70 }, @@ -9530,8 +9530,8 @@ }, "harvester/walk_w/0019": { "frame": { - "x": 896, - "y": 490, + "x": 2816, + "y": 840, "w": 128, "h": 70 }, @@ -9554,8 +9554,8 @@ }, "harvester/walk_w/0020": { "frame": { - "x": 1152, - "y": 490, + "x": 2944, + "y": 840, "w": 128, "h": 70 }, @@ -9578,8 +9578,8 @@ }, "harvester/walk_w/0021": { "frame": { - "x": 768, - "y": 490, + "x": 3072, + "y": 840, "w": 128, "h": 70 }, @@ -9602,8 +9602,8 @@ }, "harvester/walk_w/0022": { "frame": { - "x": 512, - "y": 490, + "x": 3200, + "y": 840, "w": 128, "h": 70 }, @@ -9626,8 +9626,8 @@ }, "harvester/walk_w/0023": { "frame": { - "x": 384, - "y": 490, + "x": 3328, + "y": 840, "w": 128, "h": 70 }, @@ -9650,8 +9650,8 @@ }, "harvester/walk_w/0024": { "frame": { - "x": 3712, - "y": 420, + "x": 3456, + "y": 840, "w": 128, "h": 70 }, @@ -9674,8 +9674,8 @@ }, "harvester/walk_w/0025": { "frame": { - "x": 3456, - "y": 420, + "x": 3584, + "y": 840, "w": 128, "h": 70 }, @@ -9698,8 +9698,8 @@ }, "harvester/walk_w/0026": { "frame": { - "x": 2304, - "y": 420, + "x": 3712, + "y": 840, "w": 128, "h": 70 }, @@ -9722,8 +9722,8 @@ }, "harvester/walk_w/0027": { "frame": { - "x": 2176, - "y": 420, + "x": 3840, + "y": 840, "w": 128, "h": 70 }, @@ -9746,8 +9746,8 @@ }, "harvester/walk_w/0028": { "frame": { - "x": 2432, - "y": 420, + "x": 0, + "y": 910, "w": 128, "h": 70 }, @@ -9770,8 +9770,8 @@ }, "harvester/walk_w/0029": { "frame": { - "x": 2048, - "y": 420, + "x": 128, + "y": 910, "w": 128, "h": 70 }, @@ -9794,8 +9794,8 @@ }, "harvester/walk_w/0030": { "frame": { - "x": 1792, - "y": 420, + "x": 256, + "y": 910, "w": 128, "h": 70 }, @@ -9818,8 +9818,8 @@ }, "inventory/inv1x1": { "frame": { - "x": 200, - "y": 0, + "x": 384, + "y": 910, "w": 32, "h": 32 }, @@ -9842,8 +9842,8 @@ }, "inventory/item": { "frame": { - "x": 232, - "y": 0, + "x": 416, + "y": 910, "w": 32, "h": 32 }, @@ -9866,8 +9866,8 @@ }, "objects/biomass/idle/0001": { "frame": { - "x": 2560, - "y": 420, + "x": 448, + "y": 910, "w": 128, "h": 70 }, @@ -9890,8 +9890,8 @@ }, "objects/biomass/idle/0002": { "frame": { - "x": 2816, - "y": 420, + "x": 576, + "y": 910, "w": 128, "h": 70 }, @@ -9914,8 +9914,8 @@ }, "objects/biomass/idle/0003": { "frame": { - "x": 3200, - "y": 420, + "x": 704, + "y": 910, "w": 128, "h": 70 }, @@ -9938,8 +9938,8 @@ }, "objects/biomass/idle/0004": { "frame": { - "x": 3072, - "y": 420, + "x": 832, + "y": 910, "w": 128, "h": 70 }, @@ -9962,8 +9962,8 @@ }, "objects/biomass/idle/0005": { "frame": { - "x": 3328, - "y": 420, + "x": 960, + "y": 910, "w": 128, "h": 70 }, @@ -9986,8 +9986,8 @@ }, "objects/biomass/idle/0006": { "frame": { - "x": 2944, - "y": 420, + "x": 1088, + "y": 910, "w": 128, "h": 70 }, @@ -10010,8 +10010,8 @@ }, "objects/biomass/idle/0007": { "frame": { - "x": 2688, - "y": 420, + "x": 1216, + "y": 910, "w": 128, "h": 70 }, @@ -10034,8 +10034,8 @@ }, "objects/biomass/idle/0008": { "frame": { - "x": 2432, - "y": 350, + "x": 1344, + "y": 910, "w": 128, "h": 70 }, @@ -10058,8 +10058,8 @@ }, "objects/biomass/idle/0009": { "frame": { - "x": 2176, - "y": 350, + "x": 1472, + "y": 910, "w": 128, "h": 70 }, @@ -10082,8 +10082,8 @@ }, "objects/biomass/idle/0010": { "frame": { - "x": 1536, - "y": 280, + "x": 1600, + "y": 910, "w": 128, "h": 70 }, @@ -10106,8 +10106,8 @@ }, "objects/biomass/idle/0011": { "frame": { - "x": 1408, - "y": 280, + "x": 1728, + "y": 910, "w": 128, "h": 70 }, @@ -10130,8 +10130,8 @@ }, "objects/biomass/idle/0012": { "frame": { - "x": 1664, - "y": 280, + "x": 1856, + "y": 910, "w": 128, "h": 70 }, @@ -10154,8 +10154,8 @@ }, "objects/biomass/idle/0013": { "frame": { - "x": 1280, - "y": 280, + "x": 1984, + "y": 910, "w": 128, "h": 70 }, @@ -10178,8 +10178,8 @@ }, "objects/biomass/idle/0014": { "frame": { - "x": 1024, - "y": 280, + "x": 2112, + "y": 910, "w": 128, "h": 70 }, @@ -10202,8 +10202,8 @@ }, "objects/biomass/idle/0015": { "frame": { - "x": 1792, - "y": 280, + "x": 2240, + "y": 910, "w": 128, "h": 70 }, @@ -10226,8 +10226,8 @@ }, "objects/biomass/idle/0016": { "frame": { - "x": 2048, - "y": 280, + "x": 2368, + "y": 910, "w": 128, "h": 70 }, @@ -10250,8 +10250,8 @@ }, "objects/biomass/idle/0017": { "frame": { - "x": 2432, - "y": 280, + "x": 2496, + "y": 910, "w": 128, "h": 70 }, @@ -10274,8 +10274,8 @@ }, "objects/biomass/idle/0018": { "frame": { - "x": 2304, - "y": 280, + "x": 2624, + "y": 910, "w": 128, "h": 70 }, @@ -10298,8 +10298,8 @@ }, "objects/biomass/idle/0019": { "frame": { - "x": 2560, - "y": 280, + "x": 2752, + "y": 910, "w": 128, "h": 70 }, @@ -10322,8 +10322,8 @@ }, "objects/biomass/idle/0020": { "frame": { - "x": 2176, - "y": 280, + "x": 2880, + "y": 910, "w": 128, "h": 70 }, @@ -10346,8 +10346,8 @@ }, "objects/biomass/idle/0021": { "frame": { - "x": 1920, - "y": 280, + "x": 3008, + "y": 910, "w": 128, "h": 70 }, @@ -10370,8 +10370,8 @@ }, "objects/biomass/idle/0022": { "frame": { - "x": 1152, - "y": 280, + "x": 3136, + "y": 910, "w": 128, "h": 70 }, @@ -10394,8 +10394,8 @@ }, "objects/biomass/idle/0023": { "frame": { - "x": 896, - "y": 280, + "x": 3264, + "y": 910, "w": 128, "h": 70 }, @@ -10418,8 +10418,8 @@ }, "objects/biomass/idle/0024": { "frame": { - "x": 3840, - "y": 210, + "x": 3392, + "y": 910, "w": 128, "h": 70 }, @@ -10442,8 +10442,8 @@ }, "objects/biomass/idle/0025": { "frame": { - "x": 3712, - "y": 210, + "x": 3520, + "y": 910, "w": 128, "h": 70 }, @@ -10466,8 +10466,8 @@ }, "objects/biomass/idle/0026": { "frame": { - "x": 3968, - "y": 210, + "x": 3648, + "y": 910, "w": 128, "h": 70 }, @@ -10490,8 +10490,8 @@ }, "objects/biomass/idle/0027": { "frame": { - "x": 3584, - "y": 210, + "x": 3776, + "y": 910, "w": 128, "h": 70 }, @@ -10514,8 +10514,8 @@ }, "objects/biomass/idle/0028": { "frame": { - "x": 3328, - "y": 210, + "x": 0, + "y": 980, "w": 128, "h": 70 }, @@ -10538,8 +10538,8 @@ }, "objects/biomass/idle/0029": { "frame": { - "x": 0, - "y": 280, + "x": 128, + "y": 980, "w": 128, "h": 70 }, @@ -10563,7 +10563,7 @@ "objects/biomass/idle/0030": { "frame": { "x": 256, - "y": 280, + "y": 980, "w": 128, "h": 70 }, @@ -10586,8 +10586,8 @@ }, "objects/biomass/idle/0031": { "frame": { - "x": 640, - "y": 280, + "x": 384, + "y": 980, "w": 128, "h": 70 }, @@ -10611,7 +10611,7 @@ "objects/biomass/idle/0032": { "frame": { "x": 512, - "y": 280, + "y": 980, "w": 128, "h": 70 }, @@ -10634,8 +10634,8 @@ }, "objects/biomass/idle/0033": { "frame": { - "x": 768, - "y": 280, + "x": 640, + "y": 980, "w": 128, "h": 70 }, @@ -10658,8 +10658,8 @@ }, "objects/biomass/idle/0034": { "frame": { - "x": 384, - "y": 280, + "x": 768, + "y": 980, "w": 128, "h": 70 }, @@ -10682,8 +10682,8 @@ }, "objects/biomass/idle/0035": { "frame": { - "x": 128, - "y": 280, + "x": 896, + "y": 980, "w": 128, "h": 70 }, @@ -10706,8 +10706,8 @@ }, "objects/biomass/idle/0036": { "frame": { - "x": 2688, - "y": 280, + "x": 1024, + "y": 980, "w": 128, "h": 70 }, @@ -10730,8 +10730,8 @@ }, "objects/biomass/idle/0037": { "frame": { - "x": 2944, - "y": 280, + "x": 1152, + "y": 980, "w": 128, "h": 70 }, @@ -10754,8 +10754,8 @@ }, "objects/biomass/idle/0038": { "frame": { - "x": 1024, - "y": 350, + "x": 1280, + "y": 980, "w": 128, "h": 70 }, @@ -10778,8 +10778,8 @@ }, "objects/biomass/idle/0039": { "frame": { - "x": 896, - "y": 350, + "x": 1408, + "y": 980, "w": 128, "h": 70 }, @@ -10802,8 +10802,8 @@ }, "objects/biomass/idle/0040": { "frame": { - "x": 1152, - "y": 350, + "x": 1536, + "y": 980, "w": 128, "h": 70 }, @@ -10826,8 +10826,8 @@ }, "objects/biomass/idle/0041": { "frame": { - "x": 768, - "y": 350, + "x": 1664, + "y": 980, "w": 128, "h": 70 }, @@ -10850,8 +10850,8 @@ }, "objects/biomass/idle/0042": { "frame": { - "x": 512, - "y": 350, + "x": 1792, + "y": 980, "w": 128, "h": 70 }, @@ -10874,8 +10874,8 @@ }, "objects/biomass/idle/0043": { "frame": { - "x": 1280, - "y": 350, + "x": 1920, + "y": 980, "w": 128, "h": 70 }, @@ -10898,8 +10898,8 @@ }, "objects/biomass/idle/0044": { "frame": { - "x": 1536, - "y": 350, + "x": 2048, + "y": 980, "w": 128, "h": 70 }, @@ -10922,8 +10922,8 @@ }, "objects/biomass/idle/0045": { "frame": { - "x": 1920, - "y": 350, + "x": 2176, + "y": 980, "w": 128, "h": 70 }, @@ -10946,8 +10946,8 @@ }, "objects/biomass/idle/0046": { "frame": { - "x": 1792, - "y": 350, + "x": 2304, + "y": 980, "w": 128, "h": 70 }, @@ -10970,8 +10970,8 @@ }, "objects/biomass/idle/0047": { "frame": { - "x": 2048, - "y": 350, + "x": 2432, + "y": 980, "w": 128, "h": 70 }, @@ -10994,8 +10994,8 @@ }, "objects/biomass/idle/0048": { "frame": { - "x": 1664, - "y": 350, + "x": 2560, + "y": 980, "w": 128, "h": 70 }, @@ -11018,8 +11018,8 @@ }, "objects/biomass/idle/0049": { "frame": { - "x": 1408, - "y": 350, + "x": 2688, + "y": 980, "w": 128, "h": 70 }, @@ -11042,8 +11042,8 @@ }, "objects/biomass/idle/0050": { "frame": { - "x": 640, - "y": 350, + "x": 2816, + "y": 980, "w": 128, "h": 70 }, @@ -11066,8 +11066,8 @@ }, "objects/biomass/idle/0051": { "frame": { - "x": 384, - "y": 350, + "x": 2944, + "y": 980, "w": 128, "h": 70 }, @@ -11090,8 +11090,8 @@ }, "objects/biomass/idle/0052": { "frame": { - "x": 3328, - "y": 280, + "x": 3072, + "y": 980, "w": 128, "h": 70 }, @@ -11115,7 +11115,7 @@ "objects/biomass/idle/0053": { "frame": { "x": 3200, - "y": 280, + "y": 980, "w": 128, "h": 70 }, @@ -11138,8 +11138,8 @@ }, "objects/biomass/idle/0054": { "frame": { - "x": 3456, - "y": 280, + "x": 3328, + "y": 980, "w": 128, "h": 70 }, @@ -11162,8 +11162,8 @@ }, "objects/biomass/idle/0055": { "frame": { - "x": 3072, - "y": 280, + "x": 3456, + "y": 980, "w": 128, "h": 70 }, @@ -11186,8 +11186,8 @@ }, "objects/biomass/idle/0056": { "frame": { - "x": 2816, - "y": 280, + "x": 3584, + "y": 980, "w": 128, "h": 70 }, @@ -11210,8 +11210,8 @@ }, "objects/biomass/idle/0057": { "frame": { - "x": 3584, - "y": 280, + "x": 3712, + "y": 980, "w": 128, "h": 70 }, @@ -11235,7 +11235,7 @@ "objects/biomass/idle/0058": { "frame": { "x": 3840, - "y": 280, + "y": 980, "w": 128, "h": 70 }, @@ -11258,8 +11258,8 @@ }, "objects/biomass/idle/0059": { "frame": { - "x": 128, - "y": 350, + "x": 0, + "y": 1050, "w": 128, "h": 70 }, @@ -11282,8 +11282,8 @@ }, "objects/biomass/idle/0060": { "frame": { - "x": 0, - "y": 350, + "x": 128, + "y": 1050, "w": 128, "h": 70 }, @@ -11307,7 +11307,7 @@ "objects/blankCubot": { "frame": { "x": 256, - "y": 350, + "y": 1050, "w": 128, "h": 70 }, @@ -11330,7 +11330,7 @@ }, "objects/ElectricBox": { "frame": { - "x": 512, + "x": 384, "y": 1050, "w": 128, "h": 110 @@ -11354,7 +11354,7 @@ }, "objects/factory": { "frame": { - "x": 2170, + "x": 512, "y": 1050, "w": 256, "h": 192 @@ -11378,8 +11378,8 @@ }, "objects/GOURD_PLANT": { "frame": { - "x": 168, - "y": 0, + "x": 768, + "y": 1050, "w": 32, "h": 32 }, @@ -11402,7 +11402,7 @@ }, "objects/kiln": { "frame": { - "x": 1012, + "x": 800, "y": 1050, "w": 116, "h": 117 @@ -11426,7 +11426,7 @@ }, "objects/kiln_s": { "frame": { - "x": 896, + "x": 916, "y": 1050, "w": 116, "h": 117 @@ -11450,8 +11450,8 @@ }, "objects/plant1": { "frame": { - "x": 1544, - "y": 0, + "x": 1032, + "y": 1050, "w": 64, "h": 64 }, @@ -11474,8 +11474,8 @@ }, "objects/plant1_s": { "frame": { - "x": 1224, - "y": 0, + "x": 1096, + "y": 1050, "w": 64, "h": 64 }, @@ -11496,9 +11496,9 @@ "y": 0.5 } }, - "objects/Portal": { + "objects/portal": { "frame": { - "x": 640, + "x": 1160, "y": 1050, "w": 128, "h": 110 @@ -11522,7 +11522,7 @@ }, "objects/RadioTower": { "frame": { - "x": 2426, + "x": 1288, "y": 1050, "w": 168, "h": 237 @@ -11546,7 +11546,7 @@ }, "objects/rocket": { "frame": { - "x": 2035, + "x": 1456, "y": 1050, "w": 135, "h": 189 @@ -11570,8 +11570,8 @@ }, "objects/shieldBack": { "frame": { - "x": 3968, - "y": 280, + "x": 1591, + "y": 1050, "w": 128, "h": 70 }, @@ -11594,8 +11594,8 @@ }, "objects/shieldFront": { "frame": { - "x": 3712, - "y": 280, + "x": 1719, + "y": 1050, "w": 128, "h": 70 }, @@ -11618,7 +11618,7 @@ }, "objects/VaultDoor": { "frame": { - "x": 1822, + "x": 1847, "y": 1050, "w": 213, "h": 170 @@ -11642,7 +11642,7 @@ }, "objects/VaultDoor1": { "frame": { - "x": 1555, + "x": 2060, "y": 1050, "w": 139, "h": 150 @@ -11666,7 +11666,7 @@ }, "objects/VaultDoorCrop": { "frame": { - "x": 1418, + "x": 2199, "y": 1050, "w": 137, "h": 150 @@ -11690,8 +11690,8 @@ }, "objects/VaultDoorScreen/1": { "frame": { - "x": 60, - "y": 0, + "x": 2336, + "y": 1050, "w": 20, "h": 18 }, @@ -11714,8 +11714,8 @@ }, "objects/VaultDoorScreen/2": { "frame": { - "x": 0, - "y": 0, + "x": 2356, + "y": 1050, "w": 20, "h": 18 }, @@ -11738,8 +11738,8 @@ }, "objects/VaultDoorScreen/3": { "frame": { - "x": 20, - "y": 0, + "x": 2376, + "y": 1050, "w": 20, "h": 18 }, @@ -11762,8 +11762,8 @@ }, "objects/VaultDoorScreen/4": { "frame": { - "x": 40, - "y": 0, + "x": 2396, + "y": 1050, "w": 20, "h": 18 }, @@ -11786,8 +11786,8 @@ }, "objects/VaultDoorScreen/5": { "frame": { - "x": 80, - "y": 0, + "x": 2416, + "y": 1050, "w": 20, "h": 18 }, @@ -11810,8 +11810,8 @@ }, "objects/VaultDoorScreen/6": { "frame": { - "x": 100, - "y": 0, + "x": 2436, + "y": 1050, "w": 20, "h": 18 }, @@ -11834,7 +11834,7 @@ }, "tiles/bigTile": { "frame": { - "x": 1128, + "x": 2456, "y": 1050, "w": 128, "h": 140 @@ -11858,7 +11858,7 @@ }, "tiles/bigTile2": { "frame": { - "x": 1694, + "x": 2584, "y": 1050, "w": 128, "h": 153 @@ -11880,12 +11880,12 @@ "y": 0.5 } }, - "tiles/copper": { + "tiles/magneticTile": { "frame": { - "x": 1288, - "y": 0, + "x": 2712, + "y": 1050, "w": 128, - "h": 64 + "h": 114 }, "rotated": false, "trimmed": false, @@ -11893,83 +11893,11 @@ "x": 0, "y": 0, "w": 128, - "h": 64 + "h": 114 }, "sourceSize": { "w": 128, - "h": 64 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "tiles/iron": { - "frame": { - "x": 1736, - "y": 0, - "w": 128, - "h": 64 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 64 - }, - "sourceSize": { - "w": 128, - "h": 64 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "tiles/plain": { - "frame": { - "x": 1416, - "y": 0, - "w": 128, - "h": 64 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 64 - }, - "sourceSize": { - "w": 128, - "h": 64 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "tiles/plain_s": { - "frame": { - "x": 1608, - "y": 0, - "w": 128, - "h": 64 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 64 - }, - "sourceSize": { - "w": 128, - "h": 64 + "h": 114 }, "pivot": { "x": 0.5, @@ -11978,7 +11906,7 @@ }, "tiles/tile": { "frame": { - "x": 768, + "x": 2840, "y": 1050, "w": 128, "h": 114 @@ -12000,58 +11928,10 @@ "y": 0.5 } }, - "tiles/wall": { - "frame": { - "x": 256, - "y": 1050, - "w": 128, - "h": 103 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 103 - }, - "sourceSize": { - "w": 128, - "h": 103 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, - "tiles/wall_s": { - "frame": { - "x": 384, - "y": 1050, - "w": 128, - "h": 103 - }, - "rotated": false, - "trimmed": false, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 128, - "h": 103 - }, - "sourceSize": { - "w": 128, - "h": 103 - }, - "pivot": { - "x": 0.5, - "y": 0.5 - } - }, "ui/arrow_east": { "frame": { - "x": 510, - "y": 0, + "x": 2968, + "y": 1050, "w": 102, "h": 51 }, @@ -12074,8 +11954,8 @@ }, "ui/arrow_east_s": { "frame": { - "x": 714, - "y": 0, + "x": 3070, + "y": 1050, "w": 102, "h": 51 }, @@ -12098,8 +11978,8 @@ }, "ui/arrow_north": { "frame": { - "x": 612, - "y": 0, + "x": 3172, + "y": 1050, "w": 102, "h": 51 }, @@ -12122,8 +12002,8 @@ }, "ui/arrow_north_s": { "frame": { - "x": 816, - "y": 0, + "x": 3274, + "y": 1050, "w": 102, "h": 51 }, @@ -12146,8 +12026,8 @@ }, "ui/arrow_south": { "frame": { - "x": 1122, - "y": 0, + "x": 3376, + "y": 1050, "w": 102, "h": 51 }, @@ -12170,8 +12050,8 @@ }, "ui/arrow_south_s": { "frame": { - "x": 918, - "y": 0, + "x": 3478, + "y": 1050, "w": 102, "h": 51 }, @@ -12194,8 +12074,8 @@ }, "ui/arrow_west": { "frame": { - "x": 1020, - "y": 0, + "x": 3580, + "y": 1050, "w": 102, "h": 51 }, @@ -12218,8 +12098,8 @@ }, "ui/arrow_west_s": { "frame": { - "x": 408, - "y": 0, + "x": 3682, + "y": 1050, "w": 102, "h": 51 }, @@ -12242,7 +12122,7 @@ }, "ui/compass": { "frame": { - "x": 1256, + "x": 3784, "y": 1050, "w": 162, "h": 147 @@ -12271,10 +12151,10 @@ "image": "sprites.png", "format": "RGBA8888", "size": { - "w": 4096, + "w": 3968, "h": 1287 }, "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:63945109f3503a19ee51080920f01a79:51f58e61762088de26da118038c2c793:1eabdf11f75e3a4fe3147baf7b5be24b$" + "smartupdate": "$TexturePacker:SmartUpdate:73c963294f55ee095af7f9f7c60b9d3d:93610d7ee804aa39ff18e2974a508abb:1eabdf11f75e3a4fe3147baf7b5be24b$" } } diff --git a/Server/src/main/resources/static/images/sprites.png b/Server/src/main/resources/static/images/sprites.png index b87b8e094e213308b4323d5127d9181a54be6737..8d1e5c06f580e350476ededfbe80dc077a5d717b 100644 GIT binary patch literal 594579 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

I z^tl-zrF6LQS{+S~E)Y=A*gVY>V?-l!t~cSp_n#;lh40E#1?uBKef5Q(!+^G` z9$=SV`~f$uA|ZtCzrBQx&egI%gj5{egi&))f4ovdqhcigoN-!M+!`W_GW-bn$F1$C z=<`o?`+vzP?`_arKH^5y2}2*UwyGr$y1Qw44uJ7N@b|o*g?y;b%d{=ZuK%hx_|q9g z>)C^D`;@kIZD>X&I_OGJ2OlQ!QZNR{ctZP0rj+Ld@ylJp3!Bg$dWIM=uorysqbT_d zNPJgkgyfi{_FummYJS0+TESJX_uG5~vMiRI^jkO?e~LBx2kb%qTKVuLYlzqqP%Y*3 z@bHNF@ZlxIEJ4h9)$1+o%Gw#Cu*Q;-Fw=kqU@8s7tWvUg-4#0#Qc{1}xRcGIz^YT@ zs0|KRRU%x$YnH~ky6Q-I;540m`2-DG4$UI)9Yy(q4beMHVrd_o$}3?viL|sUVh*9F+@z;#N+M-BW9lPZ~^1vp=Z#* zPj7JKEez5#Jsw4W=>;oWeBi+2c$G(=jwL{Go#T|EMA|}G8RN;1-M#X^A|?XD`O#sg z_Nx&xSflfdytn%o+@5nRpQk;9W+38Cw`Tvv)BX?B|Ie48YXf4Fk#KkEc=*?#YsrwH zt-ULuNyEosE|&ELixmPvZS3o1;@dY-2@!fFb54x0?|~{tujxuYx!mX+J8-Yf?H4@& zfB~zA+!R}VAb}+P0d0GmuBgahD*Hq=8^)h8X3(Jf-4V$qjB`L4BcKSh4Fa(pbGQS; zH=hqR#99y!$9*yjt1dn_A5aYAJa+nBixW^gsnKB!&*=Sq%KmWFD4}_h$`3$%bXIFe z&(!aB`Fm>j(|j$SoPA>WycyGWiY?M_WqecXV22BRnmjoUyAsRbyBaird=|w-?@&PrWJ756%8Iw2c0?NB}O*!+sR;-OLcb_c#kbH z4b)8yG` zZCX>@fClyqo4m7Sx}JDE~diD6B(eU^^ix znMr(fU*`pjWT+%pN3!cvg;w5|uoTyK8(egmNsp4B<@k{3Duh!W2^R%SSh~cQ4mj2! zO0z^GA3wORTOGStStM=p)A95-a+;FE^(DXF`8TpUwCdl04%=4Hk$V>b`XupA^!+S9 zczD3p(}rahd%-O{2P+a(682S#LT3rJ(}TZ;Fub6*BY*_=4F1<+Dq4C<-nw-6gR%do zULH3hPL1!neErHqx%_xgilGJ9d5JRHQu>UVPtwnmmN~3}lY9U!nfNn?A)`_R7%Nda z4&?pLKS3#T1ha~Y>L*+J5nIr>+Bmcqtb!LjVwfpftQFlB=!Er&9N>$q$#fE#q8Y4r zEw~0X;c~k7Rb=lR}=5YAtlsa!gZ;Q zIY`DuO~qsUmRhHCmhQo=uU)&Qh>+dDF^sxLDXji3&iz~h^>RZEr|?W+(NE<~^Di)f)YM{P zv)GliY(A{gayUFoe$-uM$*p2&IHT)%A823mFq8~ywH5!=gtOW5bJG>w{Z++;fo3?) zC+zp=gD->S&Lyxz@cTE$hbc~<#MGXSDbx_wD+rb10Ebqw!LrB+_=cE4E}H3~`Fu7N z7k-El{}>$*-`J?rj&vo1d9Y2b6%CsC)R)6@56T*q_?0EY)iOVB{iru8ilaUrTS9v| z!1us}|C%yvxo{h`g?FU*JZKdIhatf}i8EW3(RWhgJ<9k)35~bScxdSOHTs4ElEF|A zE;z^036QH>SJ$M@=P`q8xWo{6RPE2TR#wbgC)_NhNKcMKesSbzv=_XW2B$2l;qC^$ zRdS#^pR?t~uNfU*|Li zoQxN0Utk1corPcHwfK;)76K5)MPMW)f3uUPhNf0c%u0uss#qUtb!5jOEcmUJ(r%xv*5kCzYHG)$r%Y{hn_)~f|95MN{rlsXyE{-m%AD**6Z%;8a zvJ5ru4&vQ#V9A^lC6xL%hHOPnh$L!BA6LZ%@7zq(UW_d!5(1~^#|(ZlmM+n6)MD(+ ze%R^v9C4~_$HYm_ane z_f?SRb=k-HZ<>t0a?147YMXQjfMI4|;BFD!!Wc4E4p4U&8kM3yKH4MQv!NCIhXV?s ztziGxqdK9KvHl7xrhN9*6V5*aYht&|Y6NXvzcmZ94l`s}YEmiEeT7>_{Ftx#`u~{S zjXMCA@9LiW5tkwkh@x+04ouT&BB*?n{iCpZJJ@zQ_hDR>aK(GHS0C33qLk3~ka-Up z>5}u$^ZCcXjEU~zIW&&TckSita0y>^xP+8QLiABuW|2wo{+;F->>F5&1qa~uyxm>B zd}dX{6&_OuhUJ7I9Ys0;LcVh66T{nsH6 zkat#JmQ)anO~95^;|i?u^?Ga1pBuMDSgK?!g?R}ZT3Uu5`Op1ALsO9)x1sWJM?`N7 zhu`8nG}x{%Vd=R1&GhITl~tQbaut_zE@o)Ei0Gz5DmdAB!C0nyY7Wf1Og^fnky0Wh?v1S@b1e4<5iy=;+UILxa$R@@+YisSsAZ) zfwbq{am++O;u64eM?&6X(_tQk0C^Od2xO}1_x1eL16+VEF_L_K$8Rg5h40l76Y|JB(VcDSJ!@c{k=)=KcdmAvx7vyi>0O|*Zy#~0$F7YPBC4;8yz^2IER|!kkA@Suj^;Fx* za5vzq3t+7Rta?;>j3WR?_@ps4zX6fu-^W;2RQX(7lX%{JVJug{WpZT}n>!BFJIZkN z1CLe)axSF-EQix3`U_jOuj<7GCZzs|6yt%=rkQ|!4MACU;ZI9bf z7Z$EF%2jJS(i368M|YOKj}54p87L&L;Dcz7|LiicvIBeF$YsRGw)tLI{^;bpVy#k(bZ-0Tv2wjsm2;8!DQ&uLu0 zK)N3LU+CF*{d#_NzW!z}=Q58gUFLKfgAR6STC0u$>B!wTrvJWoI5(ToT)4bVgn0i8 zto|V!v(T9^h-Q0730uOXU3MP^wPr1G((FD$`fYwlbGR{O!iKVy441@l%=dhkO?3Ck z?#yD`h$vgD-dy-H8Q_qB&acL0t26eYiDWFHV(>#NXTk zt4|xO+IhPF@Y;(>lpbkfZd-5lq@k>>+qY2qndmE3+JQzs@S^jMZ^mIggXfzD&u9IT z&1#Wt+EU}hTo0@W80*WsR*!V-H__MEZ>H_l_wC!a z*;DY$Ozad=0iM_PE!_kQ?qu}&F zwJQB1KERKA_rCgOQ<2Go#6g&Z)WMrEs*cUnfdhfp0 z)J@6^&~gG4hM~Tp2jY%)4T6KJnaIiMz@`!9yrd$+n|EBl~>nlKhuVV+%Mf| z+_cTC;(ylV{H!Xq-F|P$zkfCwPwDVIM)t}@OANuzZ(bB>Lwv;LAvPUyR>j&k2qsn3 z08OzKHC)sdg71wO=nvL9(YaSo-J7Z!iKA&%){%9qs43B)fz1$oIbj<$52YR*9UaT4 zzOsyuAaQ##bO|k|`%K3Z_q+@CQP%uSKiX+i*vI6$)?(7{B4|e%ljeQwbZxHD^_%w< zz8oR|o6+F&l{MrnM{qkTApTUa=i{N?y-|?8n&Pf@)IWYwx0_*DUBMYRIJwBG!T*i2 zSduCRSD(LqjvVa;nsg=#SJe@f3nNIDXQn|04-lRakMD?O2CpNq%0Gl+C1+zKQBI)g5@X-44kN!_CRi+eU2`p;SF(ctzGT3Eje2W}YJT@!@6H#JnlP*0)52Om zi!t;kmEs+9vw_#>NMGvjle@{n;rtT=@o)|bgm|eRw049ugz#)SwuWjXpW*}T9sQ3Ib`vhj^PLUTNd8)zlLM;5n&}uT6Yv6@nx`%BBlVvwP1i>Kx~1YmQxb!+^29 zBNQ2Z7&irZFM~D_!vIP?zAKnw?5mk>R&ZOz1{?=rmKyYD)~4qxn5Yg>AitP63*hLb zOE#&EAm9Zl=|<&+M(x|!HK-UsH+XTW(BOI#By5x?0+2EL5lXwC1X4#{Er|<<{QZ*? z@j287Zs1KzXcWQh#h{@}UnAM>7!Fr+_uj5%xXCxoPqRN!cP*%vKkH1zZ7QoH&@80a z2OfX)nll`1Sfi*ZqF`&mH@Pfmwp+hV?P=&Q=daZ9VH0|^ow>tHWB~%a_ zv=dBnE@1>3tQ9hsE*v9&havxT1vqQFR=NCGSksl(JY0{MEg}}Khy7GtW0&Y^rBem; z2(`P1?$mJosXyrT>^_yLxMymD_+I_*u+X23%ZO*7i6x?SVBhu|9(NeHN2lOL+~UB= zOhV1Z7}^{ecXZURUmZOPJlbUKrwvcxqA43@Pj-73IY%f`O6gMbXzx8O4KE^Ash4`Q z5ezcs4<0~Jd5)y^43@F~$MSiOdaqhcZJ*?=|JmFjxv~{>R0zMG0V~|W~N;{3CCm#|c`HErHb;fD={z4zT zfC;b(?D`-{!TK$lb*PM5M6$})7$!oVoswDeL#(Ow3oC0CA11%X9gh4 zAwr<6sZc)!99Jy2{XGG(5D8X9jQii%kY_%s-nsD^E&YI~Melh=GsEI}|Fzh&;L$ed zqpP8~Tll_W?}#Zh60EXjYC}g1?eT1Zr5~>B;?|^`_~YMV!IsMDTriXZidzYyaXYyP zs(vD0Y z8B0)V2i^@KPaZ6Veb2Tp8yhPAyccAEw_jOjvvKv7Yyd1w$s2{blK zb!6_$WdFOZpYI}fimKe)_UmWeuc`o%1lIxJI4$oxrVY)ODkn8QF>%dT_wL>IvCEKe z2$Yno*l8^W4dIx+sMuqGZjN~OZJ3076=PsH2Rc8G9e7S;7NDqlj&3#xyUE`9Rr{XE z)Ozs7fBn9^mz5{q&p!sE&s7+-ptWTE>#O=-Xkz{2UDI{U;1jW#;nyIn9zA9_A4L9Y z0|%xqg?L%lH!`r^KMKg|BSNWRD-ZRyA90ypmVMIy=po=)<59PNZ@cy z`6(w%^YxGRot_vwA%x@aN}|JQ1#8u($QqQhXS)o(!a{@Zv@>%3dIv^uJ?CTgE4=D# zeF#oRk?IO=U)R^q2D1xo+4+K~GzzkUh3(BV&gFtbcixYusXkCCrw^5MCf|3G{lSOd zj?{$Ui**ZsbowrKVatJ@7qPDUU=QW@=S^52f;#xWA4}gr*TbPdFFElEj99I!W~IKF zeZb88U1}B|rnav5W@Ea){MA|sewvxX%BuR4_8HH(R}p;7`{+>@>L&`WGH(qdCnpfD zwV!gY5cV2*pNJr>H*|bzi3mMHtnFFd{hQHc7VD1w$xvoQ>e2aXZuqV&To+B5` zvDd;exx?_>&oIngo|te^F^v>tqA~<-x>uz#H?xeNnbG>f2t?m-gx@sTRf_Zn9Q8M*-F&SMS1BB^`vv%LcrCb2Ipe{ zA_Xbw!4YFm3VgH$>+)0gCyugw=v3aNX*&{K2D-1E1QCl~`3)~PvlzL?g_ezYkg4QX zKlkyoCBdBaXZOfQCI8{BVKXLSTfz(Y8*t_I-9TU`)yCM z%AZfLJX&%+#MCg+WmwRQtpPiJisY7rcpT;MkLzBvJNtTd@0lT&bGLpWt^gz3zBRtI zSN!p~&%u=5TLohONd02K?TNpXH80O7D7f8xzx&p==_(cA2Kda;#ifB&zGp=hJn4jC z4PZzIHEMi=y@^K#IgHENqBPX6a2QPj+Q(9K;GqJW!b9>xBHij9c zXTTV3ikBM|dL<`r+_3FWKU&HK4uen%QB z!mK4%Q7E`^Mu1}6$B%zrC0MN;jFvrQ+LQa3b2H(FSai9rmBw$O;^p8ovTX-j8_SiV z);t9v$D;y{qUWIPgW5@RxPk(9*YbdmuLx??Hes-~?j5mr8=-YE?M~^NO4<@do^{*5 zHgUJr+-x>o1!|v#X;T(^16eh?vlsa;lW6G8%(wR5hQY1o+$2 zpcA`0n;zS**R}>=4HyW{>q>-hQTQf%=?QpRMPI}z9kVguYfU-;ibkqM)pleY~fpL zRinJbp4kgk2)9dm)N4&#QhAtsFx|jMIm`2+wEUAfxmJjN^$g-(|LSzo$da4uw>w`T ze^y&s>65d6Xg;a(u?<$$OPfQagQjh0Xv)jCkWw*F1l;HtMWJQckA}aeg1_TboJaJ+ z_)X3yt*5KREUw{D;zf2<0VBvGiuj2!oIgm6zCvlNDd8As8ZUFssfl&Ugp^s%o!?NR zb#5*xK1#q0HeoNCP~_!S1_PXtZ1}+4$mgV@Xr5WLfbt1KY-5P8H%H&%ROmQvljqXX z@^h>5N-j)U0Oxob)s*R6?B^1+{w%W8Pwko}HQB4$eHq%`>+zJ_x`sqq>jy@Snjah& z-c`xIN~CV-OlswbxJ=)Uk<8F~6MSl02(UhkAe?e)bBpboEjk;skP)-AdMt!rn=Q18 zvZYoZ@#aHkQ*@HL?DI(z6aL0QrVR?humELQzP~~i-2H`^%Kr$?p58!9D1XNc>g3CPl!vf{ac#o{M z@Hg1|YJEovEu|~p=7-9`G0; z=6%DgAi%)rBo8wqG9cVqA>1L|@A@Gb56ZC&aArvjM1$K-$QZJXvWT$R$7hQ%tZ_bk zbx9+?JT$>^Awu{>{6`wkMVe9r?toLnXYyeG1tAl`z0>GYD{H(R23 zN6|t{=so-t4W_(V*c@x*Rnl{@tmdbUPfkuHq6k*Sbd6h+CJhvUCGEIGdh1ate&T4f z?)%x}^d`9S)ike|AX;wJRQ16^B~pL(KkvoexQE=EX7DG{K&Gb05@vi!CrKudn00|Q zoI;TrUgTs8jyNrDHQRf*cN5B$Bof0J0mylZa9&8P&W+2rrMj!IS(KmlKT)5_^w62^ z50SiY3u{XMxC9>44)m$(3qbQoCCtU6BO5aYuUoHXAG?(*a^&a8KNd3k7-(S_L0v(? z*@De;r>7*>D>cP>3Hx}WAL&b&>-8u4usXat-`p9mLpLHU>x}PROH1aANx~(Is6J9U z1l4A6Gq=6Set-2SVFZm!*y+kr%gR#_N4Sa$PqR-7kG=acSjrSs3O*1t!s-q#|1dOdtZ+l?h~MnUZi|BWaAd+qK3o8kk&)%>EX8vu7hgpzAZgOmj{!fM(ykw4#h zpcaT@t)G(!gcV0sM(ob93$0iHcff5%VMW+XxTy6zYd})zy}h6V8?AO{^HXK4J9y&} zZQrXNa3n&LE(!RhC1x#Jig5mSJEN&@9}Hw}`+qNLn@c*~hj?=Z;s<-Q_8TeE$NI(} zy!;P?d>*JTi=XXkU3uQPw#Kz2j?Awf1X)ghi~_5?_6E}Cz;h0%`PmiB7aP&6ZQ!@d zv689&i+&wUTU|V=;C*2r&HtX6%a2WlUQkbjUIn9&3QDtBfr6IsAF!)Li9ARu2ySfP z@@m{nLUA=s-5Cd?LP~p5ina`2^N2^6W z1H5?l?N~IlV_~h&hGN^Rp9i9bDp>~xqqn&KSf2jH2<$<$1SgC@WohF>1RlHzPW8RV zgh>t~4t0J7XCdO8(;2M4K{7XiZ#Sk#_qji{khAGz7lXO){*sE*)SS--tjsS8`b6b5 zz7`h|8g&{BGh|kXX9QRnaVt2oFMWMCK)@%!aA0QN{xvJJQ1A-p`b(8HZ=1QtYqWh8 zE?XJs8~SRB%_qb|>1wXk1BKm6ZqiaqfNet?tr(i1c9u|jpnnt2EO&I1;k(P_q)drx!R^P=*Ln%$u_EfvjU%q-D{?N&*4rzO#QGXyp$B*HFE9^FbW!8 z1bNv|2*LQFf+SA8l<6dm;%GS*p4}>qjJ=BGDsz1ygHCQW&LXQmXBJWBa5l_yaVYPp zUKI}2UXlidUO^jiIRp%~Je)<=#qo*3G!*b&OO8IcQeY`>2aY^hf3U+XkTb z0T_XIr<5z5^uc@r*BhZ8|K|Hl(%8Uay|I0KXUX;1`nhl2AcHC<1EhC!cINS`>88i< ze~u3AT*#|+Z4@1AS_9u*w+3X^(SH*8M1BzW#!VKdUaIk(##1i8A_677U^S}LdWRn3 zO2^|nBM3Vd&fVgs@ZT%omrE0h;M@cZ@QGSBA&+Q`K*9M(lnwA$n>?Ue0Yvfohk6ZhRmn{S@b|L5%vlYn};5KZpf zx&Cx00^0R$7hQNv*@fnRj?o6NcN0w*fUyd*z`sV(sR=^=r-0fv1C;#U67gYq%X(gg zR?RhwRf+k84xfPOo#tYGL`hrOFG^vBV2OWO!GC4*$-r9Wzq9~(B=_1o^Y zL-cCe6x7WDgN!5oZM;tP_OnWh#BJ=-iB)PL-Yi6)SpFwg_ zP_b^p^le77;;}Ev}B@)rqSfqr+5cpA6Rv=jS)N6cyxC3h9eQCgc089l5PN@+&aZ5A~L3GtT z?CI3Ni_z(6c8Op(P~f9=ZU{ytV!#)gERcmL5{iEj{NbNzbAJ4WOnX?sD%xazQ0vD5 zlRar%JZ|=sD_O1e9s15b!eS}7LWt3Tv3x>H^G&^!54aI5b~gy`Pev;|*2zZaPnVUJ zm3_%XZPL;kXw+at>m6UQhKv`GPktTY&Usbl=#3g*AG$Hz1t_*NN*n6$hvD$iW*|-A zrtz@8ShVhruO>Htim@>Axhm{^1;GGws9YLsNq%|qkQz*)2H#5Ddo+flJ^Mo15`mk- z&xs%YVV$WKA6&xP0{=I_b@IOr3#~d>tAVMuxcFz8CoUd^K0gm_F7@&xEb)>Z;Zhl* z05!(5CC(o#sRW!omL9mtYtvhPz;sRM!n_E>F~Z={tFv->pFy@WrSR-xhMA`EniOZI zO&`V{tu2wR)L@>stiBWn^%r!Q)c_QkRFWd0kF?3m52#M+!5bgg+ZYyc;4cgL8rw7?Cu-L-r6p+A4%-wWRd2cUn;;dZYQX`kD6(*Qw# z8`kuB5>{&z^G8Rb2^i|}4_2~}V@kcll$r|Kw`c*GyP$(A4EXx>Sim3b6;R*s!2^0T z3ua#d%sASLs<2tH#t0yvU1p#zTuq@|ZsBWFHxT_(0CzmH$TlpOkeA+rL zethM7o7jD5i)g~~m8Mvla+Z?74RFePhkxsDR8PO;x!5)SgcB7}^P;)dCq3FJB+lFa zGbqVb3!mR{d-;!{T1nIB-GI)#T=!vwJU0HFj~3r5hV~(&SdSz^FYLM5OOc@M??_bI?4Eo&^qkJH9B|_BVDYE3q)lCW z->;h=L|B&*N!z$$uA8`{2PDgJNLW>2A(!gj$P(Lw8(KkqU&gZ1=>P2c&3f?W&O+1P zIy+xB&2lY5rOxY4#5Ha|P;G-Y{0ghA`yV{p|L{B|+$KJ_jOA+*z-tD&ka1_X&N~zK;+WVjm&*wvsGOT^gwrXZAt|?M7DKfHvH6 z6(@_(Xyv#8G-HX!!i`xqkYCnSPoUlR z<4q(NATkWt!+rx7R<^;B8o#ooRG;8`(;;!fKp#5xo9XwHvNY&fJDs@180 zUi`ztR=s%ss9Z1vBOWW+&_QQCf;^bp_Km?}@oDTxs0`EpOd|S2b3~%Kv(g*m_psaH z93g&MV)F}2w#^#`a~;yO%b;M->S+}7eo+*7>bh2>G??TKKF6MvuH&nQoBC34R7Axp zHeq+HT#zFS4!Z;t_2wSUQW3)6-TUcQzLoSC2kyC<+nF&^ClWG5nkfuhk{fs(IB?X9 zcyTqP5c(Jez4_!@&8Bu_4ik( zE9F~2-Jg7eSGa}{B=A-#BRJnO`@|zfF8&~9y9LPC5Vtr9*@ zey!O)6OA@M0++9>4BfwTe|&sm1^+sb)E_qRB{%(Z=^*Yl6)lnGy}ELvTFM0)5B`CQ zCWSm7f0CQeKC@To3re;5k<(fRR&vuaA-LrfYR?Tmk9k+VDEk>*eUxA?V@i^vPK=;| z*!!Q+!s6f=T8Mzn486^=k}!qIUdchRsa`Ca>DdcBbS<BOXF zTm9E_-fEvdy{2v4xMBL{|06M${H?(NvqKWk4?(T{-VJ6U(a(v zx5Ya*^GnjEOCV*-)iFCD9xs7fk^6Ez$=I}ibYlAlcRS&ju(ZXcT zR~SF4gF$lgr292BOeQ*I#?>S1d=*TzMjL?76F&Q68YP=UG-kousk&p znu^?Wv#rtQ9Jgb_Gegq9AA`MWjh~gvl^eE}XM}BRy(=aT&-^>;^KT@2_J>r`(1TdX z*MQ4AN&P^cr?>R=S@872bI&gwo*Da%`v5UAW4uM9ooXSpH@ENpKis|dTT@ZDExbdh z(xnOr0TocBsWd486v2vEuuugR1tciar0h@xMQIjnR8c|cBGO6dC{h#v5u%vLGN%Tx`ywv2XfpSYM#g# zkOg^8H|tO{rN7JcX$RMH%a0DS^114G0+i7A;uFKcU;k69@_%sX!K0m@I_xX>2R;YY zj&@q%n?83F!fe@(xMP5)?8cTTy?y(31s8%e6;4h~EgmmkU&Y44#x5JD&6K0X8kVso zTbay^4FL`OK#$q#5Oc-@TG#Tw;NtVPPw3l8xaitEJTBt+B{Y8sSlR%VRS0}QoxtZc%ET*kr0E?U zI9ZP)M~)Do+^{i`?&ysRsOXLRENYO6BXaovB^T}|qzm{-3vw7JKBb5Kb32;Tw3Kov=TSV^U8*n}TO6 zT@##Ho?s&9TE7$GjmBptW&xaSGhs`9Fv0&n{Kp2I{-}xhzh14f;fY$O9pu{ECrCGX zetaaan0F?FvWYX6sfhUhISQ9GnB=Jcb7YKo(3rKg!dQP-7g|2*zm^-OtDDx9O3n#) zn-(Dg|6?q-KO@K6{_jgp?sJ3={bL!N3vE|EiUH)(z>x7A9;7$_ch)WySseN3@$X9a zYyaR!|G&%G6gJ4a{MXAk5P6{6fWeB3LViLlFIEwQd2@<5QRuEorK{-!GRg#t20q0L z%Uixiv^r_*m;5}JrFOVoF2MZZ?B zxIAzswDe;_nX3#~n`Lms5{Z~b09`wZI^?R(WtgtV(UEX`4PLV zh1u`(NA`($T}%*P8qSaUh8?B6n2AxC-xz%4M3C5!%a8cBCJF`G`o?yy_Am|qj!T>h zAFZ|yjVuvOw?Qt9BZZ4Tih#S|)`EET-9pzdR=r~XwMUDN_CFkLmMFP2Z5ULusSanH zvT&mzF~hV_J&wx?wOwFfaKE^k&}bvCnEn*QR`Ilm(IT%t9&;%OdDip+eWx4;Chxy& zAjvUCruN@p2s0u4XuPcdD%bT6>z*eEZ0nL&UH8&gZ_^^D)^ZclL6sRZz9ZUA8necT9kjcNsvUy#AI<0mvC@egFx#QWOH(FV{x zO%AH(XPvsbEvCtM_o6GB1K+CcwnD__veR4G-|T3$c_IpL|!ffT@&g98VMPDSwo#gvQUQmG|nHG+v{=4fnK7InshUZ@Q*! zq9zF$&7GQn?wQdGV!>x?u*F~GEvrm5ktx~H(UBh|w5(INOeo~A}Gh{3cMI1ZxFQ z_7WQJdQyZ%P}q2?(Pc$3I`(l6o*7N|H>a!t9m+wzF~`d1qYKo`QlTHF+U%Khkm}tf z!wl6CF&ew`GoqtrZp)nkBP!oz=4uQd7eEnf2y&wh&{=jmQ|6og#ctc3HUcHb@%4v!6M|DJ_g z#?U>7LD{~C=v%~l1$>-$4NZ1pgJ9;0FG_s`tt*Y6izFo}RJpWQx$NanzrpSpZWRol zyD!D<0c{WIq}l8KLfOl+PhH~Qy*x}A_!V6jLOU{8DGs_+t82#B#JCDyPCyD?4Uc6| zOp7gZ87V0#)cz}1uB>E4u*eKnh|Da z;Gkaj$d`Y3z&(1_0qUk?bjdPv} z8M|}T{`)uPQB{AK}X_G(ppO7>5ByHHk- zlez&pHkxKnlTFEQw+keJd%(bs%%Eij0-#udZiId)-) zHhV5TrP2jds6m-;-b63>QRU2)n7@Zf>HQHKi+Ew;o>xIMSVACtPFFB;8I%?E<1cKL zKFGk(Y;G3~k0J8=Qn_$DZdsU&LLT6XHVNSLfl$0TJkukQY z*InK5J67aL7EFpNxzf71YTBQxwv=~fv<1xDN>^Yk`)~BY#ogQ-f$+VyXypFqwX0|P zp2)ICQfEnfn6IK1oK795&mE$DruHAQpq_+eIhku8h1PEC&q~XjSp(g`MI(z^{%(8e zONy$MWq+}xY>>-ez)$}(Ki|0Uhw5?Az=+tbjOl&OI?@{aopNov6HJzDt~AC7L(mQ3 zrcGcH1RwE7E^lB;hx1&#yfDe+^7PA*WDc)p*iems!Q-6Co;S*{setyi536lqCa{+a z=ZN1MM-N@Na3LCKkl$6d0LP+Sw{PF(tzTXiRswOd5TyeYHGNw8%6t>nx+yHk#A!L^ z_3O6ayZfif4b=3TI7#+TH%abtIcCrJ?EuZ~=ZcJs)aJvHt7ACLUzng>^^|*FJh9vU zgrix31muPQos#heF69LJ>2Nl+Tsj+5ac>dHj1q}tr*C7?jtS?2AKvG#e=GnD<7a^b zFbt(o-=<;QH?&%Jm}tLw{a^ny^7Yfj=P0c2 z!)%G#<%`K2xc*zq{k*6>c%i1cUNEB^9kOb`&b-#Sg1fm$L07C6YAT4``WE)U_*3rC z+$tAzho-r=AOedhz?xqXh9-;bY_O9q&weWS`el;az)eBe#@S%tG z{}~MJmmGby2#&`(*WsGFIwDDS%iO&6r9VxfGiT3cWht*%ERb+Q@u(B5{1ZL#bW~!#?rU5fMYK33rpVq5%WY4wYM!St{zv*`1#XbNN%4xbMK9rM7^X7 z3s!uDRau_;zByq$ik!Yw$Z-%nZeU7gd?5%2OiY$kfZms!oa6-fmcQgOn1Dz^29A z!NI{h`3Ty5bW#R8fQm^LeJi9WJy%KQPxpUT`tw%vacehX z*RI*RSTA$=e@2k*O_hiAZ~T(fL;9W3-C%)y1}Af_&0M@ooQ^YmV*p z6PJ6e$$fo-uAyn&dN+pi0{hofEqob{+bZV3X1cdmvPwu#DQ`pM`-tgjSzW=K9$0#r z9&Jy%jRPHaraxbml>VK4?yPcR*sBd~^|k|6{>e93M*}1&J~R6V88uE1V#j&vUDD^= z=-TZgdBEgX-_^xk5F0M@=W!0*_Nh2YFDdQ631o-8SSq`;tJaR{(5wy>x=C~AAm18y zL*CMWP)rx}fCw#G=R3%;JcY{%fvhfl?*V+fR<%%T`jr~P_IY0IDDogh5lS%Ixb~^M zeBu*!UTV>=6bu?~{oV}F$-nuUbth|WNSo>J=eL&~v|cB`N67vy3_NrGKRZ5i)+#({ zsJk1#I@j+$AEkCNToe4#F9G*yn{{yTN=2>r;2x;h5eBXR7zjZ6 z)yA7&?e&Z#zvl%_N2|UQP|(Wkxt2vD+{MzcD6 zf04zy97)38q=#&TDWM>J+_h}PXGwIsG&cgwxTMPrbh$kvd~Z{D58Oq!-OkT0;!ANQ z;!!bdD;~luHVlX!oNci{+qa!A?qp)b&UnO=Dz767+Y%_-HYln{b-+F~rb5`pQ$fM- zJXszhs6r@Yx!om{U5onnpqXo*UC{h`PsvPzhZoWPR_>0?+_tLp0)q6n_V$TYn77Yj zKS1}2g)gX(%-=62&ivUQNung~|6Qgdlp5@A@gai`Tq;l~L>}aqbS~n|X{PPE)>|`& z1CFA@uVH^uX(b%Lao5noS08FS_ReWl#anLpuzq_i{5hrl}rkLoN(yxqH`Xj!TxiJOhc0ESw8A=B?jhe7~QUaP||5N`0eqNKC;M+9y9U z7e(5&0aYBy-&#M5-Mdp;``n6B3j_|9l*)!GfNiHrM1E^jhZHpE1)DX18B215;QGJK z6>LfoYZcXBE8_hp6Glc+; zLr7WAbq9al_(<%N_E>Bj*aJL+J>I|e*g8BeY;BNFPcPZ8_V@4K>d5@SQr6RJIGn8)^%aUZIf6C5VaN`cXrz;tR!`+mxG-v;Vk*G&*+t=1z`(C$R3Oti zqOC5VB@Nb9@t?_~Fba@p*H~2Ya_pHX(h8}R?aotQ2Ig$V?tZHMJ2~b%*lRi*5@3|e zai2qz?OTw8;A^;A-i3_eXbI4l=E7ozjTp1!3(^?Q_!~Pu?$$_pz#ra2(EADN9#{m? z3hBPVc2fj5@c2A`=!U6Fzcks$CcWNnLH(fV4@Gc31*W?R_{nCLJD)m4 z-LRaH>*gbzT|rTOoq%q2>PH98_vp1zXo8Kc*P;lQkh|aK_HW_tT9UJAAOL;fmV*g8 z!HW9El?n7Bu=t>$Th}&oPn#zNKmQAPNdtTe;`5&K)L%fqm~v)abU*_v?<(OUb3hr( zpz01)8$jfF?5Y8)8vjvkoRRX5E@%U;pYK=uU3kzv!ARB3u|I|glmkZ}kPnAX^I}y0 zz!KbXZ^%mq4e<)gUEV;|=E|LnOrC}h$A#B!p}`N^yR@wjmq>V|?NjJjGBsq+o33Pt zAZdC!cLs*W?#f-&OY#(R{C?MJ`{U*vdlwK{zIkCGqms=Y>H8FRG~ZP~Z=Ni-R?K8F zBIbOXX3G!OoGS^yOWc&%`+^);vvCRPtqOsj8-5m#iq+pfkJZ-RU_ZomtM-Ng`FYSV ze{F5sF?oD9L63%nO{y{{ep?GinJ;o-zHry~Y+>4GAx*Vd+JNTCCzv|Y9>qL+=}X_j zhTJv`@=%xnG3J+8``0*9UE1_Q+cPmK<~wBaJkl&=l@fKnJj`UFCg;aK?p&Hup2)*U z@&+|9=tPbHJ`R8Y9uH;IXCDc#6P){;*!bkSS!&3U9fwZ*dh`*-?B_28dvPDgK{A}{ zZD+#t+(#MHO;vv<4v>m=x3pC^(fj%8;~Pl7CS1;d9XKf zZMgSu%5ToHXb)vp4*jW`&Na?i==-&b*wfMsS&?^6BUjzSUt3Ub^AQFi;{JA0@X4JT znhii@d(DvA!h*lBbu;$biwy(rgV;BFveNW+Yyp|m2d%s5rsguELseeEKf2OvG;?VQ zFJD?Nw`&uan@^`3s{Og?i2hNlC-$-}r(8ULH#o;7FT5q!#qSu+)Pe8)Ka}#E4O+i1 zJkyuwRabt)VI{@_#G|h2`=UHCFMt-w#?WPO{bDRFDF{|%)?CGy6K>*T=MKnld!X+LffF>=c1SUW z83z1-7kN08#A@Bo*R+I_gwE-1ikyClq|#%b^O(Ey5YD>s5YGZsi2#+ZuA$L5Ww2G6 zMw$5U522G6FUGaB9C8eOy52DyIo>9J=l<>Ft70a8I-4Lb?C?2kZ+|Rt^*=17f7O`y zp&rK?2xpRCMgv~R=dGXcFI9UV-2d@iq)$ZIGmgpjf5wpkJ0mai`xqCiL|TEXZSZsqt$SE{LNP(Z=LIi59y&-j zD2Uj{S1$o5^NfuBM3)TrA{_NgXKZ25hHW|0DQ9CXW&$PzoD)&8g_cl6q*qrjY%S*f zw*EJnPrcORA?WQa<43B*x+(jr7!xm4zS_B;UeLgU|2Z5|vo(m)6YIMiecTR31+@>t zkvZGw$B{3~EVUjfy?eBJ8PTxaLoa(~D#zaMRFB)RWmh0wQT-E* z+KTl@1p}4Ivr6SC^BOtmbrjjw?9*oReii4xrYch6obPtlZunoC6$x@+j5qj&Rs3Dh z6ksHtY9B0rDb*9Wv#t7(SN0kS<4?PTFw3RNUC&HzN3+3Ja1b|8+%&W$fA-@3FMsjY*Gp>28en zvgV@5e-=oG*r=P}H|6$d+Q`(Q(|%&KQJ1G+Rr{J|>q>}ahQMqq6jrR!2c9V>fQ5|7 zh+gvH>PPG&$)z4_{D%*_dh}dWI8PJ?8uPew*Nlod-fVZbb2qPH!2j`J?_k~OsGH>m zfoDZKB^{*6K>aZ(oNtn4~By8ghx z>d&NH@gDjtd=AJc?~=5wiko*z;w`A&zC{c3C0_l7&r#HmacyXrme8asBos+A0nu?> zxDKynJ?<$0CUkF81W=zGVoVn_0}U(xyw8y{`&>| zy{ubUW`h(qnB%9S6ox{kp1EuifE)xOMNQ`w9B&IpWxT#uhMoyo4sWVn4kv;x`_MsB zCJ$yG|H2%9nnSPX{nc+3h`R~nn({`9ZFKvrD|9{yNDGiK!bn2?m5%SauDq4LY$Uc= zdx2^k>eJ@c_{MmbFYQU87w=EJEOJ$^+lUX1(dSP;Ms;{wRV+94G^Bf2wi5qb57R=p zF3c|ysRm->4N4NHK~xgEx(D_UzQ-TwAi$Ac4T6M22ICC9=AbJ+7ELO|%b-!hWZ~5+ zFy@X>N=*n<;aV(HI=x_?Q5(0&j@3+IwhBh(>;)+NIpV?$QA!WK!MDkY(c%cD+JK~7 zJt3%C@$TKbbZVohaEA3k4jWZc_F#~?74oBcLNNNf@y45f%95?UpA>6^yUSFQfQ~jHPTR~55yDxo z!|T9G?maIw2gT(xh>6ngZ*$HFC}48@ckcwmxkjI$!z?r7PQM428WHL8q`gA0d^`eT z!CBHB;cG>xRSsMO|6bD{W;uk2bU!}Ad1ywUwD;ZlA^GX_LB%q`il^&@0L|C{8cx#_ za^!IA=}I<*xVH#rowavy4hUTi`XDIx!-u$vwH`J$=??hLT6qM0A1~fVQw7g(1Z}GYK(BTy}0rYYLGq93zN7&>h z;(twGILayHGIR0cp~I`V-y^dRonzJbj5mjO9Q0JiVzJ{F$66MxEh4Iw{v{$(+2Z6uW=PyhUm_}+FsKFJ|=S@a9abiQ?IhPw73>aaMAQe!b7S`2g0n&T9 z!IwS69ED-8@4WS8$1woWUYNoEaOs>a?qHE~RtN-2NbCrt;!EgP*vmG;Aa*Gn)L2UW z{>wXE@Xpm=aw`iX#^d41(!3FSy@YJ^y9OmavdLoxFoQM-34g3ZKH^IL=wN@za9c?9XB9_|N&vFo2 ziGxIMq7tzRw-I}Q>=M3yrPuu+Uwu?uYjMaEIo>-PSzHfmvY+T-1_&2~Atwv!w#0on z=Hnw<>BdaR4d{0fIZW22z<#%=5Y^A*`7GglGzu7N#0*G{1K;t-a-um(L9l5(QBV3m z2=ije^AInf-B_=Fn#WoAf^fJ1aXuT;-D{4RjuT3G^FcQ|UP9o$fK1$#@B!G$-*kAj zZ$*iZWl0`iO1p*|6>Od|UK~>^7~?U&3TGS>GZ_KlfEM)exAV~&UTBdCI0L9uW9CYa z?RBtu7j(YS@LU6p<#?s^LR11!rE-v66xovw)FZdd77(G$Ep%arqRORZthO@lZy0=t zs6G^`;8z1yxhUJ}K*|{4x;69$|L_O+#@5^gQ4^{;logYC@z0+>4YXSaL1Kecg`8LR z6$e`)GI@zs07O_GMAwo$OCF&bZUIB5iI z?W+y)OEv`Cn{<9P<0e|-#WO@f8m@;x_d?G6Mj)Npl*D85=A8EtC*^REugiX1%TAQx zJ{O4m%ywRWz)84x`k%C~6x56ld)JX$3*^1z?8{7-(M-< zf)t6_5qJC*zugESHzpNq*J^C++G5*KZ zuhB67qJ5lvOW)xS@HU#ojvuj&W5+i1Bt}?atADzyIvH2fZd44_Ttu&EzY}3IW{%U> z4;vgg&Azgko$`><10Eg#?Rrj{^r9>{SlzwrLrcomqe2-`M$qDI5R1C-Me&IyfGkVR zVvD@p7+ghpA!h^Z-C8)3v!Eg;C#TYY+$NRkxpF>K;)VgbAbvh#nI8%-jM;Nt$VQKF zU6LCfk2qN>dINpw?|#dTuC2&b3+jc_&n{7FX(Dh@mt?M9Qv7lAH{LSX;K>}_YK9k@ zlmGaBw<#i%A+m8jFve$cZMH}4PvC!n3B;yb*Vsh#;3rXE6_{25`0=(cjzTTnr)T*A!L(+LcCyTl;u`zU>C1w==u zggN}=g~l@$c4U{mPrNR?JE-!A(X^XBx7Zl==XsEB@!3JI&DOo`)6Hw{ULPa&4`Poj zs33z45o`B$Z5qKG)}g26Bb;8M7i50GzgU4k&B5B!4Ug#%kMy)NREHgQ2<`Z$5f{Vd z#I?eR^AF4;3a#+(=OMoLjDPg!)&cu5cvnc(k_GW$CofiN)CdBjb_ojgn|YqUuwPYP zUVfY6wp{=-2<@yIAy- z2%1~@4whw+3AsT12`<6uqT47(ija<11{0Ki78kw(eEdKT*%pW@A14?Rir$9+1wj~Z zafyMoRKR1pG3Pjcf`{Jy%w2a03F)`I1nPnJfWN%&BUXBRc4r$m@9aY2Jw|*k%B`r=C4Gzlb1IkiU^0!eKUas#x|y>G_<00D}=!NW#trOC0Wb>osXz8zl)xtNNXe~+P5 zL#6Zg{@oJ$v^`FDSqlEePC_t^@~)pwn@ppL3O-qeRBc4yci_;nS;Luo`- zoaLqap1!bMJ1qc}m))^DbxO9U8pOUqznmDm z3=-T;-~7RXRS_TIzN^vlzZbOT#9q!S1wy_rx zxSBx9?fs23VYl`E>i!L^D^7NSUC`XAOl>Z*-zl+BxQ|sEE<-(o&fK_52JQc4A*n{= zqH{YT9iLNIhFev8AajZfWih>O6u*X4|Ez_sIZCn8XUb##etn~_y--XMn@gRHsp59;8|C9K%99%~Y z!;#M=>z6I!Z_Pb-7BID!=aTsgcf9QGG&`5b&jbG>LVcx!UAuOT_`4(PH=e`UN*RI9MW;HM?opTZ zWpsY=nDj9S2VzC^6cf$jR$h7nT~htj-X~BE7E{s- zIiSvq3R$>4QD@D%<}(uy;2NC}tYP7s{GT6jQU^M@)6k8(h}5Q@d#)XKQ4}c4bC8pE7v$ zckeW<^|F3x>E7zSrKN`hJktBypPB35Aa!x}_XK0Rl4=I<^EdSQHgBFd1G^XnpFDf^ z?#-!wzHg`~f_|_LyvBdSU{nV~-K|iuByz!Vm`Y4*&F@>*pc|}g&a%2%3cqk@&=V_+Yp=LS-W!}3D++N68 z$zSuw!IzulnPnMh#o%S_*GhsrkdGxK2%igu|LNUXqx*aRn?NywNc014MSCtonnww` z?)2z-r#08KBAa)Jb@mwdv(1D`F$r_pjZPJVVfWkIB0S(Qm<@~e7GXk9th5nPrk-`5 z$u-6uJ=N#TVB97EXbB}@{3=NE#bf^h(7fsfJ=gNaGR1I;9oBStlHd2o3- z5pu5t(AtXWvi}{8~a;vf-0$;^%iuPdcV3NFqw2XY9i6OxL`CX+TtOyVwa?}xTaxpC#bWSAd-`m`p$lD=%2uC2m* z4Wg1H>b*QYO-7)y%>-dKdt3Jy?vigTu}s>W&8891&>hE)fY={LnELdivCo+u9TaAi zi<=Ws7^TBJkN}AU9VK5}oNfS}Pe}czf88>mKWH88xWElXb5)#Q_eJWTKHCzE)YZ(G9E*9Au)D9Go00?7#DNRNFBb>1C7k*p|+&*rJ`?(!?zFn?Pf zgM!8_za_? zC4T&`CGc}gaYtE8UB?1QeK+XHfS~gEeQe0TmT3kuzAA>#(5KSI;PojP5UPp7@H}gg zRHO3vVMdbMH&nqlmpy!3x4EYW{QB>@($U`Kl;lePd+`gGs5nt(uu;;JC);;z@?%y{ zHhpoUBx3vjhB#Wp6|OUk=aoTGnw8rhqtp*4?3uM({`hS5BYumo1Se2c%9nZ*>SsF&tpw|T3++=?e(~1AGyrLH#=Gmc=N0;wFfV?jRM)$h!KJH#p?j*)J~ge+ zkZrcL2?=nWcp26#!cIb%oxGo&bKHj*zj*>CNAu*e#snVj(x=Y_vONH+et{haS6}zT zntntwrJeBl6ACy9Z`Rh>@NJKnm0Dz8gev-ef#fy^pWp(wmgm7YVBbvQU>b5!5>(Z5h&^TOh`=6 z-++IJpK4yyd(kv(ll0P3Ina_^X?_GsaqCJfK~JTvc3T41)Sj3&w?8QgInmM}_5D$i zz;--iLgd~9a+V|qmTp(=M7f}&_N|#UZ&2>bKO__3GL<0pCR`L@>A7x}aj;i|05-&2 z|C>X*x?53`ch4zsNsYwXS0DMO4;-Gt577HR^5cIRxl+$5g@w2rdG}N=Na{gKJ2Jeb z^y+xgzy@_N%T$Q1d@ruX=ko0@hrb(KQmcV zC>L%%%tc9a4HUH%eYUsd%8TuU^BWuPHsq`c3Qh}J3_JPFqpL&o=2o{WVM;sM(9rtN zB;wnN83VtzxBa58E$acef&jmgOZy)oDNkQarddY8ArqoOT_{WTyEE(OnTw>VU5{%_ zoe5SD^9#u;*uP@BL!Z+E>sI5I;<*2`kYTQ&$`!-!u9RN#+*g*q?Ti1-&d9A>g(!X!bS0bf#*e|9D5{^PxN z&mGiu;RPQ+)M|W&hy`jOCnH=AW|IybZw7Ec20reIl9cq=#WvCFf;YQ28|&Rtp%0dN zn0nNG;^>2jsKShIMap=2J=S;Lu|EPL*28KO zUqSi79J3&RDcFqB;@d4PSe;^XSl~Z2>w;@jfv7#A^Nux_%WmhaskZ7GzE6l7^i!6s zKd=+Hkg3-6ue+Cu;Ey!_qy0_1dhEV7;y(iY>PC6DdugP6afT6C?cs8MC*pdLdXl3o zo#%&At?C9_^)EP6SG_A5-rQ+D4Lp-#x(5rd? z64gZjuSL*10D4j%3`!jb>P;NLF7qHavYwGs;xl^*q9)^`r0^MGPh7tr!41bSbG9Pp z!DL%*gI66k$8Wq>oUnyb9--EmMuicRw%hm)w!AUt{qYfHrTz^}GCdoz)s z%(#n{n5ZWw7G0jUB@qV)oL*QRdU)8<>OD_6_PoSCz;!6KNHsOJ*nG6QL1DjEC&udW zsdyuzZD?5?ddvEWk24|SgXST z`Pnx3LG42P{Rh-b^`$TQ$>u`>nd~_E8D-{HHaBJ$9_=mDmZ)l?w8l)F56f^=-BUFC zlm*cGQ2Q87fh`?!!t84K z^zrICE#33agjBT+_?Bz=P|5WU%PucPm>97oV+(WJBdjf(?Y-)JYplPvj>%`J<6a1) z=QL93wFb6nX)&wL=^#V8URvFnLu94GZkBo@=k4{-atB)ZCYTP=CR~p3?^aybTgoX9 zQuxQCOKucZeZD$I%2VvKq6dO637fa<>jk7pQ)1|sGL6>dPio^CQ%aFsV!ZHQI@(-^ ztKww|NzMEs1j!nKYP5Av)%)@H>!%Dv-hJAPXWb_Y_3=wAnx%G4na7^sZ*y)# zI5f4=pmqO|HvLqgTIMa=bK0mI|;14LC zkw`mot8Mr#aVfENe6hdXlyX#kKe5Wmr^aDJbNAJj(!)*Dojk2rSya$eq!1T$N~NM+ z2?z$h%Bnz#I{~TuIS*Q%vSO~Q;2CLxmb)QQt#z(XuYf_~ZdxVYqCY0CrlL>Zs!r|* znbW;`ZTFq4G7((V=~uCyUtRWzg72Fx4r4eWAVJZL_vmSf;rO$>aPmx#My%wt!T6&G zsu+EJxtuvc-=45O;76ntQ%d7XffU{(O0uZlW%hPZ`1vdMyn)$x11{A-_JjkDhfX`yLj zbuRhIyD&cU%vEkYN8z1#&l7aL$=j&|#crt^+%WbbgcyE{k2k!vBASv&X3tFWgf#Kv zIT}s6Ys>u{zT-W|Md%aA^eD@BvQ4Stq{H-j`M2{FAIHSCK-Z}l!&Kc@;xaNkahqJ& zcfO%u=J78^xrKSl`H5Q^FdCiXt1nxXd|lV849}$HSs%IcupZk$N4xsrA#U!iZneQC zX2gi8x%kB*(mE;Osr>l11Z44L=LI$GdQwKr_xL1DhnJ2 zrmRza#J_K)p2UKser9j<*QUb`mGta;H3(-wKhjyrL3gP8M*gC{?qt&k|I|)Cjm52q z<6Sygl1TZK;5_?k)NiJPA3}LRBem>}%9*=`oZH1`D3JP?(Cpmqj}q4!fG-%m*CL7C+v7mf5@sf;3g=pzi7Qd-~QH zwk@Up3rLDQCH6f;dRjGK$A>j_hWv{j&>ZUD<7x5=eNm9?ShI&&^RAzvZj- zZ)098R_au%j=itfKThZSiYgf(z=Uy;Vg(rE%SXN-b-d!s4A+9x+_TG%L|&*mKG`Fl zNN_InWHQ=Ob^N0P1L}iP7X?x06S#dIA}Jhbn}ik#vV8ns`~5oT7|@8>CCQ}&;mubL z*{MUV{`a1)hD9^6PGzy(pX3veI{pJ(&sxo@{Y+a#9`F+6eI5MqJiUU%14pDMm@q99 zwEV%&Bh5w3_krxasw)`5b0=q#oE~HqS-D$Y|Ii<@xsa>a8WO@Fv!;9-D_@mQY#6F0 z*jgVB{?Nq`|IC%Smq*JBeIngN*~>K7nmx=|JP#Y#d*71|)3&Tvf{wjQDX;!>&uY!z zSqt8o9>YCvyvAoXf?iIkCl_UNoJamIS+rW1LW!N}cG82NWbGWHXa-V0(i-*?;)NHJ z_A~2Esf78jqtTwD36hFjIpZJghUl^5ltD!i{Mz5JoiB{tWfRh0;FkjbR?vP6O+L*4 zQHvsM7NW~m(;jGCgLG&iguNf6txoU0r?;vj0tvRT-=1@vTfJGw{XG3_{KlXBVrlaV z5>nYZOusz4v&ni|cC%q3A+`S;z^mI4$=BJ(FSTYc(xmGc(%u0w0rRgCu6VimYeFvz z2ov47gZha3^q=JC-j>IXojJe6heyI$S}300^ACzW0u}TrH;9EJ(qG9%qU=;=@VhLi znvl@^t3yB>%O}fpaHF;C{-Njox}NkL@y8-_H&}edOXaWLmH2oW+2<$rgo$GoXkA~v zD4#uh_K_3O!27rmgG-DMs`sF&>0rH2;HBxh*#W9Q`ZHzU+)D!RW%&t;_YQxhZUlyl zgIqs0RS;r&v>tmTri9MviQme2=l(tJ+60?msJ?NUKg+EG1ilFCW!#$; zswU)no1`#)tH<#6Yv{`9z40oUHR|6A4ovmiqM`i(^Y@~oxieJ6SPS7odHr4esj!zM zME9qKM8C#2<_J>T;mtblCZE_r=3)T+H?@2;-Cny>$3g87a3dWV58{|=`zA;ic_5L$ zFOR#qy{0lMxfGbTDu*P~K{cNZw;Fu3);VvEFyce={G+-L^XY5E@r)CemZ1*|T!QnH7LOw&3j5OkvI};=dOR2*cGi@(+LI-0 zSgPrPH$1SOkt;vhqUE>Li#Oh%(W1k@P=TXN>CF=3-IT%aAL>$0iKhyl;F^Ebv&ZO* zl(`X#-gCD4aEGXEV-oSHRfe|1uIbF`s~utBtvf`TQSJ2m}TGw~$G0kaz;}NjPMU zC4u%a;m?++sJTgbbKym#b~Jb6C{B@E3=c%oDXwdXwKH)v3~5qQv)%a1yiUbk5;Z@= z`y-BEt7vl@|Fm5(3G7mJ+^M*DZl1P}&ZtxCGCfr6%QLl{9-R&4pJD&-67i+9J{J9P ze%E=m*i#Unr3SPyaqSz*`g;Ncn_&FQ=5AI41<-8=DAO@Db#P-KB2`_!&4I4y4E6^#S*PVvG>2JITm_b%+}0k@9=c6O>o zA!}<*q^aA=s`|WIIf5Rx`**%4slkq056Se-x@l(eAb{U9$0g*)C9+-jh!6UiJ5Xu! zJJ!d#2qLn~D^w-2d2Mvt2$)=iI-TNEH8f9K)(Yk8`zA=Xt_2&rY zOr?s}82?uiNlyY4jR`)zJK!BW7*2E^BA6y#!p?Z^5}O<>Y!f$kT@va(jN;dR@x|$G z^o#;{QTGQTAf-00RLBFZ6COM^N;rR7RH&jore+17diRl9Eu+kDu};D zp!I$cZqqDj_};rEajksr6qo1|^fQ;>t+NBl;Qs*KM-mf@MPaW@L0z;-{PODcm&>A8 zP$i!O+hO&-_b9gv4k_E3G?gEqs&A! zMl4RV(@#Wn?ECaBVpU1no&20;XYZK!rF8gOZs(6$ZY^te0;`>?si}$lmaizMp$sCP z6V!kp54la$)&7!-Kc4c6;h#GV`$b**V|MS+x4ok{J&7wx{T>OI`;62~!Q$-t-^4;I zDIEvzfzKiP3umr0B=P-*+b}Jtpx#*-4i~xB?D7HP zo@QLz5w>vg3@WeV{yFP9FUc^w=jc#@8a+D0F=U?@AyD%Ju_x+X7AJFL>h>_qipel8 zb~}*TuON1U$GoBvJ4`QcSGu(vcWh5M*HCi*@e?X9J+}~F9?k67+49VMeMv3z1k|BX zbg<9Xp@i}ZX)HONlPvC@vbqk4P?PJ#&adX9O;7Zvir%5;{})Z)0ZsM)|Np+%CR->g zWF@1J?cS)&LW}HB$R;D}UJ=|99Wt`Ja<> zI>-CIU2pgGdOn|z^}=TNzJqG9J?1wH(urglhf1Mx0+$=p=IEklBl|>I4S@qW^lW5r zE%`2}^0BgFj}OU7vDCS(G;qp+G~QBkzv^1G9g)<>zy`Ceq$+k}jG|aZw6lo4{urz4 zd-?4}^*_$^Nd{*h-Wl*Zi;nE6FJ|zxu(0^XDye-ut%_vh!H}b`)*UeF+&3 zbURi6NfrZ^xd5UYcIHAk{`sj5k|sG4<)jq~9ooVLEz#~C-y~*K0aPuaWvPDCV_lZz z#dirhIq@AJe{dvMQk3|gfxVD+@lE<}uLSz7cCiKpVzekn`3$gAlKT#q!eU2dQ0!Wf z9SD%TR9kJYBWXZ6+crDpP8gpgXIN@;M7qg!mAvjAkNn&1ytNNiS5ErYOU%fj3J>ZX z5dV1}WpQk@5<0&34jBCG`6J1NX7mPy?z~Bw)5-hy9|iD5>K+sqJW;I(oTARKOyBD~ ztmvUvy%wEAIT=E@J$o&@x`PH9A5GN+8MRbSuw*e%acnOE@iTP8155qQuIHmQP3{s; z5ukn_RK9CWPXO}nJrPCO<7NPt21+ur@<+bYq+(xee^pDm`@Q?cxH_Bg<7ieU&`JQ9 ztCi6FB)BLyCapo_OBK0Q7Rlz2PW3VyY7ZHwGU-SBMfPH*pJvFl@bJ+WzlV!q9^HIA z2ulZ-lJ;M2}%1qR7l1${0|w*AfY%>yOMI7fpI^GDw+$UiT-cDC<8!zCBWDl zW9FqFL&jV>YtNt3F|A_+w^3!$qoW!6S_S9QP}3hufq~2N9LR^JTk(|ID=z)xHwf#$ zhD}npyiDfUDToW$*whWd#ZhBFE^U-0muDAh{4M*0*tN}RO|g{QUBY|~-!-sqG%;bv zpkE$4Ev-VpT}pFxF#b#R0)9IN*+$j(GL&vWL>50#iru{)bgg^bNel_whkJ&Og&6G0 zxqL&#J_hM81k@w?@D+oI9IomQA5)0ERiO0gt5U|hPMy2g$p>tSgPr}2!Ik2wd46Q`&)2Mnu@GB1*A}pIx zdwBj7?mLegjkR`j4jDu61+CE zXkuaUr5!O~*sxx<^oA7-?pz1t?+QP>y0bviVA%dDSw;P_&4p&}M>yyJ%nMc7%Frai z(qRs;{l%JdJ7V`coGpM`zlqp6l?;SX>~3)#nPVB@M@^y89ZtV5j2n!y?pj5UQQx`A zclB7qDE0$>6M1Wy1i5(h2R5iL4QM{WlW=>$Sp}*&X`t0E3s9ebj$AK^()I@2=ouDt zS^g&<A<;}iitPpWZ*P=I44$S@85=kA1b^EGy(Rn6^n)Bv`{HC2hqbFS2*gSHo! zf?&X%Ba9BjevZR=T$x-Nf7}oXP=e+z?1|bFfq~Y^$-oyO*lUT1O?c&HuJ|%wC}UMT z%+18_CDisYgZ)*TSI@iIPsB5zB##2$J+Qu@F}&x|YBm?dfefE;4iW47{ta*|Wmf=g z62RldU$Q~iDSrngv+w8iQDe=F%9<<_QatMo+j)wFPEC8m9_I}>PZa%0V~G5jK>~F$ z6T7?<=Nz*fa=OG@XgX#p&9-)P7|P^m0vL;;tz*PyBT9zk58pmU06EVii%FwCygXTb z@wd#OT14+=3i(!)Gf%0Nj4fM4ZB=9}LZ9&~UNY!l-emZx`2qY$VN4G6`MFJWnp9T# z5qzfYfVH?#Q}*R^859RN&<#e{C-QyA1CiKl5U=Q;PNX)^$|WIp!@P;yT~1sm1&VzR zgIKe}U4pR-MFh~1z3)}X5Or|N`0VG2qkg8wcA~h}!xo!sYtLFmDY_$pUx!L<>4I6n z%Ux(oJ-*-J?e9j;xo$*%m5H%W!8|7p)nxOh`U{5t!LL~iX0}`+x8h?vcR49jmJRmLFqpd5 z>DN{r&p&vzTu`^Pp_=!G5G}~DO=x2sRKi_C(-1j3bxX>ee!wWnJA^pDilQ@Q-hC&> zykA!?$gC_hql~i59$u#4@beg0*wh3qedXHRGw~>T9A5cY9^$In)++=FRj(V6?l=AF zY0^7g{x$h85yHR4gOT#UQRLjqSKWeYi#o9oDxWxfaW3d5tcpP}cx@~to~L2PhpTBO zwF)@xb`#qDS%B$Tl_$c~Wz6gYuMbiJyKEk zs=}ICS^0AiR})=qpRH^(_j7jq2+#l}fV@0m?l5gC>??;BFdgK^caGdI0s8h7)ent7 zMhMkUyAy15z-EVs`8d#E!@!O1|8ifVGZVdmu_6jpf)2{rYavoR;CuB@+W1JOFLW_W zzb#mQ`zf@5pfQC3D^~yC$qiI)Rh|8M=uxvmBWUU023Czv(lF2UGMf$(JE3wxLsarN zh)`wOUb=F!}d@# zC>Xo(+rPwqkGJ{*ae8sn>2JsK&+saBTC#WE-@!K;eg6KtqhZp%N_Gh7m^-Qx8x@O-TYKwyA2<=55{Yf#G2XoaD*)<~5 zF=N_RH}hhl-5*z^nC)?L^WH4Kr~#S3E_&+9gY6ELyJp+G*AE;#a~Ym=pAe^rxR78M zATFwZF!tYFq9K9b$n<4r*NuajyS)gMD|0f(A3fA;(|4Du1n>)+bl_0|$%{VQ-PILd zGp@tZk%nsK#V&ux+nE&VV9z(5@+mLX6=f9sUt7LBD!0?{Jb?3{0Qywc~#q{IIn- ztko{KrWMjr#G$ZmZ}E7U-0YyNdaN^a=0Pvj>j}&8*Vjt?dJx#}_}71xUSO7YS0y^q zkI|n+(!dzd`p@Vaii_|S;%ZVGW(%qX&l97F`HGKu)`>LwyO9l}Uhl6xzB|<5&rL_s zG+LM)teUSud;%I-jgb=QdkLsOJ=*?4tUIkK3Kaz%fy9I>ZS|23GKa0g-M? zdlJ-8Nl2*sp^xhCy+|o~T7I-V0CxNsrXtoV;L!P;r`Pr|0km?iYPk}xPgkvxks?Z&S?@QV3;hzi&o`|{j|i^K zcaehbYtns#yA~I|FB=<7b&hcR@<$3eZv`OD=*|s#cH?|nMUA4+LK_HC#%$0IP9`vJ z4<1h1T={qg;7#wAIL0;&=BZk7#ha7dYaThv$8OxMsFFcd@*w3==~ja1Ipe#5%zu?* zQ;t7gSbfY5I>)>X^_dcWMSa3oeeU2E0Rb&VH+z}mW(RN10DRZ@!t>eZ@@?GtwlQOC z)Gd_})?(nXAace}^Mc>Uk>&SRje1!(m2sziB~dBFY!O%LD6?caV|l$TMm?+CInVU> zzZLU^2L*H4YN`{s+8ol0+JAfObHuarlx7W?ITu~*8MeF+A>H)WU!uECUg_g4_}c}T zmn%qlMwdJYnCiUmxQrbasny$jvRj|SI3`nZqb!KjYhTt_l)@=;!PRK_wqromw~cFO zcANOG9mecl{GHfp1*}M2XTpYTjJ*pQ4xLG*(dnzx*=NL;CE^@PNx{q?KH?;y;yMbnGNP&G9*0RNWEW1VuP8MINib3<i#dL*ZJUR zDhk(TDSRAgvU`jGcOo|6+W}e-4z7*?vy;D`1!O(AP5d3PqnjY(4WPQ>0JY4BIST6& zjuwE`{Vqr@8c%eC+0IWuas|?%t}}HkOPH`b=g^Jojt-JP#tx8EWXjxHPX}O+L~ow% z^)}k8i5Sf*Ze#AWs<=*25s-X=g}JQ$=4v_v53nXV{i$kXjUG;PF*KvI9AkUE2rgi) zCmQa)`?P^+G|=M!OibrQUfusw$=ao86!a`Fr1TT6ermm15suBqQZ`zz>TI&o|82PW z{z7lu#uabP20tO~_?ygOi=TCy3^v`o#hVkbh|5OrhgQiQk25|lt+By3L-fa827X%r z_?C{a^CNcj*}9KX?g-3nJ}V!eV}Iq*w|50E$~;Ni1n+&r2g&^K-IJBpHHDt^DM}U& zk>hac)K=SPN0T_X8Hb2QHl}`{KtLTF<3sQF6k%Y`5kqIsppLRG!n?;BHz!tCz$(FO z*7^tb?-_5+kAf(mt)h+{I?fjrOMu`wl&5ACbzu$)N85VHP^@D z^>Z7~!o`b+1M3C%*w7sJyWLhFD@K38yKfW4%-Z$3p-SWuAc^< zTn3cQh6L~E*6tLPNGA?Ic{IFO;})a+6@pWN2?LDY#}Le~5HU%{Yt85BFJIDFK=6p#+iJy(e`AgO52L@k|3j0;az3Sg=Iob|by798T{oD!*P$U3n9 zeS1|=^Y)*WLvBDM)S|oPL}zppD)?N(1OjC)z4Z@u3!sJ#cvR7*LHjJk)`z=(0Vk+W zFpDcaHvsa|DVE)GM1S4`q0C^v*R>Q9HCCKT0QmHSU;jj`>~#;M5X>}$YG&Enf>)p_x_)I1f7<8BrA+Gs;)|7vm18>y+ zVa2B&1W4mw0TdnT20#bsID+2}{N(Qc8s=8Q9}Av%;pR-a_dy;M>Ww~~%Mq~#?CV-~ z3r0=}S|c zu0dlcss{S`evuW`;EQ)?*9ta|bL#OKfJd1LT}ccEN-5!Qy>w`bSxWcP#iQLemJgi`Anqa7$ZeidmkzT7Bp5;KZ z{{uWQEHnR9*T*R{QZbAx^uDb$#1m_6ySzC<-Jf zkdrQd^h*r4m`Tr(&L8F>)pjEHDjbMn(^L2vui@;Tso}h4&WOL+c;X=s zr!K2xGH$HyGHXg3t4zQ(`dB_=n_s8k=w%nt3$kbR+1@Y?_2DC4V8zai0fpyo?XXWZ zV&sdKoo!#oDk-Y5k&0%?x&>U9E?+J^obFLQ3p_{sJi24`kKU{(J8v4f%_{brxN|dl z=$r!uQcC$a&cs4rG3#&m;{Ny>i_v`LEDuKImN?qm`k_ zkC(&_r86>u2t$hfC;s=ZwLYIbZ|z&Hgg zX4$`3kVXZ&Is0r7K=!k<`f{egEU(9%lpA6=Mu0w2g1&p;hJYokv}sn}RrivRUz&+m5y2keD}`B+ZW(#}6k zdhqzBG?Zhx2sE}E)xm}s@qRjbvx!yX+<>w#zWPM z;QGbm7m1{723PNk39{3sh03m%%?=)vjond;+>jg9Zi%Li6D=bF$cy;4z{lr8+e z@Y_kUzZ!l27qyBKEcCPL)}l%Kr@H+26wS~M>ZCNm+Uri&-uMG*{W6t1i2_3M(@VkF z9Iz3h`m%zRJNAnL%mSOe2D#Xe^qgsKrxC)e}7EV-l9t)AcMP_+|=)^fspH>E-C zv2Lu|vA7WLG4Bhj!6a~c*6|pX z(eO6RN`d0+vk7V3(%0{ClJ84Q@#_7OAzZZ&eH*m+p%|0?(uUez#8Z3=hOYD~Xcg+HKmJng+A}&ckG*5`3!Atl1hCrBsZv1qlYJ%XR1%~3 z%x}Dv1zm9CP%IT9SQa^M%(-7#sFQ16z}ehUZBu2MG`*vRzbQrteggMYojJwOJ?3j) zY7l+6cKS(&5VvR%g}b`$_J2|(&}ptP=1O1x{mee==iz^ zuYAM2!r5o{civ~b+u2uHEZM2w6GU$s;Xlf=zvxQ;#getC`eBZ-Q2ac*3gRb|`E5na zn&@=&bf=RR3*&;NViYj*!>Wqoz!mZV9O1^J&8Pi@Rs{4`_XFn>yl*}f@YGDpnGmk3 z@(vO0?YMUap9mxN$h`pi;Hmd$=E??^ydR{zuvOWN@^fKp;c#3_Qk84||tx)T@> zn}lY0ffXZqe!;mg1;TPdFraK0ny7Ud@lJRL=@|Ru?u`cPM+-}RPd!v#V7j|@Si~dQ zpxAXi%6loH)lc5Q`%}_if9?^L*9!uh=*P~cslRoVZ`fokU2h9MD!n0iOpKw0=%YEh z=roig~aPuHhX5+Y7| zwP?HCj1kibb(bi=kgLnAK`MLX=;o*{f95tX$S;>}WLfj+SJ>1%t;NG?)vR3tBTh(V zkOU1{gZ|wGK)MDA=yH$L5i~U$Rlin?i|JG+p7D9*Gl)7sdczj3U8icOIA~QV(mRHB z076V#1U)cNV1eI4)!so^_l#2SEm^6uR`by_Zst(eNAOI=UjPQ!f=awW{QzmFtsuaQ?ph=D&j3NtVU zhtYZgVf`ECy`hqg%O%o5VsoLxPp>}$;uj@E`a^MZt3ZEIh1++1(Xlfu!U@F5ey=$( zfW=M+NEV}4hMsnNFmE3||DVmbZta<$wBJ+EZBwAzUihQ`7n4#iasGo^Ur~^(6ont+ zYZ(y|Da&Y8oVv)-c_tU&c>(x9^yu4HN4(3A;*0;@mu+qNf2WW}A%aeijvU{6NG`-l zGERN<8{ga@?qR(=ctrdSUC-xp7%J#ZXiESQ_rrRHcG9{=!#J7d1EGF2^94A;;9_j; zXm1>2Kv3M>+cT~A_UoMfWusqJGvX21hp)%y8HPrU3I_(Gr>?qnCZy%XT%C8oR&rcT z<{|H=kW#m~b1IzOil{VqB?3iEYQ8_Ab zpd}aNf=)8e&+4;jR^si&FNfZxWGkwJP35e|EW^(EaS>3Ca;mxVNqYA#O)_Brsq{!U zTaC%OhlA?C|9E1n_j_u+pgcP7Fyfbnq8L==Wp`TkxJK(q{}rBgR6SBUHXz0UtcBg+ zo2)BQkfK!Cww;%vfT22;U-mS6K@)%u5Uy-Du&(ahmOClT=fpo2b;Z4=4<-1mF-LPiUDV@hN?Hn&KIIa6dXWUJkRcqbBvLb zllXe*pl^=mx(3d>L3!>qH98U_@Y&5~sRHy&XdhFWGQ6-&3C74WoqDajc}GV~HjC{- zJ_GbGSXOR+Qgg8I2!$fWQ1`*4y}I|2p|WP?=B9prmE+ThaxIC7a6%`~<2B)sUQWsp z%JAS)z~HzU&syFrTgq&-$ThjhSBsNxhH0~)-07$NQ7Ja%M!jN@R<^b#O^(4L21+rL z&|JSw$GqbrtEK*-6@8rmXX-w7WSJ*k6F4QU&t%#5Q@#=O=2y_Uxnb5led0-u>RtGH z)Toj$nOx!IRx|_FJ#v!x2?ZfAm_2FPher6DPy^2Ql^mxP2|P{u>4(R7N5~C8oiHTi zpoTU9iPx6qX{M&adTne-b4hvNY1+FM_Mdz2b~vl%`aGJlw#R27;U%bzOvw9pYRkMw+TETUC3tV=B!tsjE>C0+zS|WaZj>*-i(LLc5Amy43?@VYh zor&1+y;u|s0kF9JS?JbE?M}Y`E5fRfiA$%%;?k|F2G>Re7Z!K5S`1!^mBjN{UUac~ z;a+zq_=eDHosi^(RaH_=82d1hx;X1`2@gs7|lb36v?p3JTd%9e?F4DhQ%L(71H1Wy)rC+4OERnvE}&xzsjQq^*+I3jdFrFTmu zwHs1@RR0$J82n-(SMox)b1&2xmnLPCsm;~W>TBgmTCdAWFFs$_BJ({R z*IFE`n|@8W`-m^OAKld;Uaj*YayG}&tHCZ#P&hW) zd8kXx=)?TP6aMEc$nJ%I#9AlNHdzY^s6xcv%D;W1{-F6* zmWbP3F4a_$}HZ z!$XN*fyX?1pau@;IR&B8h=4nk7a4sg9C$pRZa~FEQg^!$7 z_Q0>-e-OqaXb|5t_km4$W10bXEH`0QJfw3h3b*sHn^F!g4S>d6Gz+o$F;w%x{9bM+ zapCEm!tpjOSHb7Q(gom|Pk5#J=TI66ZhPI^%EWSX?5ka{JcjnAYj$E)P3q&@FhV2W|a7F+B+I_zU7EE z0`KaE=uDRc%p5l*ABv;#lkk*J%$q(Ue@DZwt*P6G@r>ao@Y$hx9W5F zlSdfGVV(J0$zj6ZPQQnkiPYz%f?YWgz|D7W;ppkSov5oyZ>pK0kR{nF#6txq30m8# zMh6XV@)GOyo73zb2~i3!4s3xJ+X;bD>sxoeiP$G5huxuUwAr7BsrM-Z55CgVajRng zDPwkZ9^dmOESOh4Pl*gQUjD=M9A7Ji5jo))bzX`)&Tq2edDHx%h>7Z=QwxA*OI57q z`J_IOcICkxWmRn9QzKD&PGUeG+t_nG zsK8l(D&|i;5-d8&KkKvzYW8?UOIL|a{7zNK4&{Pt8BBzj?_~NKPldrp>#m}7LC0%-Zh^VCK^NHfIBt= z#o^~81w#xKnr#Mz+V`bmhy6}!XpFX_3U~z3T6b*FC@9i@)dbtSoLWLo`CZ2W;@Okc zqD}|2G7kRuSXSm+Pc4$Tz~J1Hjjpr*4gk)T<_yJ~K4Y!i`ib{aQlLJ!jjv&rJe~jp zL+tO+`^T79RO-noi5Mi@f5S72Yi?2Qz00roE7nk1niT_2yWWUgaJb3|kWJ7I-7;@j z2ZWHY164BR!-G_no8z=e9%Nlc%UgjL0vF669gXUG!9^vMBr>7vjdl%JwZqFh*Wiju zK9~G>ZxV(2VcOJ}vr&8n>dXCI6Y@8D)F+ zk%76pMQXyZoHt3XFk6*#VQhrm8^3nzt>9*jk6p`R_9|)mx;0eoJ|}qq=g4j=)*GE1 z^X(Zh^@*X}iLn^jo{edYT3asR@H7k(I6}Uvh7)wFoa34LKs~Sb1+jNe)jSnK5SAY$jHm_NooHt%k ze^+$RS}(>kT#LgH3jMz;Bxhl}n^5N6u}1NKhB*wV+?zQGz0N8g95BL4>@5+u@Qs-4 zx84{5dzsDAEAPj_?@GE?1Nj;twOR#vZ=7aGFZnZs6*#^ewrIscH|uQ^hiC`VX=Pvc zaVrU6D|beWE0JSL$fEtw_g?t!MeK4D>k~E0ejVV9EZQM*)skmQV8!@!SZs~@9d%m7 zb?xHIEXc}5|E!nM9e|a(Yh!ANVGAI^HF@7LKkT}>Xu58|Js^&$$ zeJB5SU^{(xf%$!RYVY^&rVWR7S6%|Yo--U>mS7*X@sQLnJNZl$u{m{dABtJ~0zdVh zJ7EvXH3;7-idcXq3Bq3^Kie%LfY!)g%*>pNrtxJVLE47b&z*iTR&I5cOAm5H1|?~S z*9#=0HKiw7J@f9*g*Nhv@pC2+x0imYN17tua z%(PW~6iSdF&HHOO$3wbvK&qZ&^T`#DZ@QW;Vg1g&;)UaOH$%NWM zC=wEsW$FeA?X(f7B9RI88li@U>_^d3bsP`fp7x?l$U8~hpZE3X(OHBoQacfKcfukL zC4vK|bA{9Yd+4Yi)|e)JygnoOSM`HRRGUK&*nr+y|@SN zLhOeV54ZB(HUXK5pbFMJr1xPx9emK=lnF6*Zvo-@1DujsVyEM>hUG^Ephx1Us>N|R z5=2RItcyt>(NU|f>hiY1_#kk+)~Ti;)A@Vh;!{%~!Jy#DFA`2+7Ss<4z?87gVGby> zM;mWg*U|@n6IUm6^Q!iVNwTx#|K_WiD8702df@KPrIC@5SRTRu6wa^*aiBkoVblM$ zOnH+jJG4q$iPcdiz2`Ck`Hqh1=EtGAO!HAlykBm~C??u*c!GgujJn$17%Z1JPQy;v z=)R#2*Q%Ne06bUj`$)GzxQWg&7yPzZ1NHl?`{F0{qH#7Ef=RkdVK6%fP`#LO(ePhs zIJTA@%Z<_E;(_efUro4e0Kg>$Fc~}#?c`+Pk$ZLjUkl*3v!nG_BvWJWd6`*3{oQfos_b`uX&Hu1oSSzwc+|uO)WVb&(U1bnnXAx`)v$EgXOq@>=5d zEJ?_EeD2*NXLQHHN+U7~AEy$#@rFT*X$}wmHZPsu2@$JNEw%voCLgQVi51PQ!~nL_ zEs$expRdLFddkH{F4cJA08F5Z<1zzQ?#5nV=U^BQKptKeTAbt7jdtqH#}pJhsa19{LP!RZFI@UPqKMFmSUj3nMJzJaIieZG*Y; z^kZJ6mu7`6Afs~*t)1IhL{$>FXiJ}E0{#b2cIjec?07S#-_Ct6Wf_OPx^g4y*O~Xv zaH#(?&+rk(Uk5k>qdW7XVox*=xImC$F{=rF9w zON`N@0uHEfxYv%(Ni#Ue7O)V_1B1H=A(48y4%efZP6@4&h|P^?F4bI%hJP*kP*tc^#RYDyf*8u)YP7jDXF`G| zD3+uLwKy!=^eGu|g{bl!1*Plg(oMJS(^to0Iw+Wns^AWF_Sg?=lWRjTG*V9Y9u6zMlix9x+uFoj{k4(@5*&&wp!Ge8zpF)rC`w>Ek15JE)qvZ6+t>9I* zvS@cp87A!C7*HaaD3MHaRvz;=M+Q-4oFuqIK^q*kZWdgg7`M?xMBGG-g8NBuw6=QxJ6sRMZ=6CBy$fbXK4P2vv+DU-EPU zT&`c1J^A{YisWl&06QJEGVNd~ePM`n)HH|+C+|!t4YoCuUsiU+2)JXjbmZa1L7Z6U zsbHo;zO1XoGsoV(twY#kPPeSyaA1zoYUHX)^-*xzxdj-WrZ<-G{S#*`FIBI;(z*8( zx8uC@(H^St4Wq=wzc5>s5wpy7rn$&64~HqwVK!NX04gBL8!m zvK3;0&>-GfYsj7mU3=NuPg+l^!Hj-^W9!5LXUJ@psxw*n`*7QWdQs~{OYsK=pZ7LE z*|&}DXPCX7yf|0fHK4}nmZr!bFDqGgiB~L$ZAj`Hb>LcctGVw)pS8}{vJY&9nVDz^ z-H#nKjNCJ^*qnGV~ck;ZAmJjlzBvoJ+bnYRbEcryNv zC}Gvb^CYBG+^xp^KDYBRP)b(z%Kj1m`UZG>aJMRt<+a%=vtP^62DA86%*lgxLfCa8 z?_g0DN@8p0`Tz+l`Sw9TzzjBSlEstrAR-6U7KA*H>=9Ak$LTBRu@%eQzd<;3QrATIW^ZV!-huQiwfY zwVyfMtS2;SVi3qyIQQP!Ih2c42Vkc}vYi5bur14S?W&9`O`F9!Sjr;iuD8?$pQ~M6 zKMSN^p*}JJce%(MZNNgPn$tML8^92m`2s7>+A#0`^V8%}%HfL9%Ci>!we$zA(Sgd` zo_Wkyhoz|9Ojd7zY4PoyMicb%v)Qfu0 ztP5(^or(N!52FeJ1CN&c-RRuU5%)RwwQGUK?x9~JjUG=ysvSb^2gq2UX~TALqnHS|Zep4_BY-7KGaKKC-48MVB*Q8x3j zifcNmZ&YtQ@A7Rb~zu>@KVrTpdb}Q8OOfLnAkZs*<}GZq?X+))7=oX)->Gsz`5q8n`;a@LK?| z{c_&!VHMgiB?yZ^2_J)`E@R$zd1Q7(ids9j2Md}%aBv)X@e0a3kJo6@Zhe8b0R#Z|O^k5#?|FVjCeRk)lo2w@6X&{&? z%|g0i%uUZXCXQQ|?xk-M4bv~s;MeZSr~=Y;o_ zFOdi?32KrKG;%o89fSzfq!Uf^RbK!k^tZRloA1P2l!c5Ds0Spf{r=MW*BLeHcl>i9 z)I}Cm6kJ~Dc5k4?nFn3u4uPwvL@UL);6oJv%-U<3zt z(ll0coD+8QXf1^4GMxx;)^>j|qYJXTKwC%QRV_cm4;BIj1+UI(3w=v-k+IT%d%ovz zfpklRHJb8Lnubw1M|g3K$`UtVjLBV;c|1P;)rVSiuE@Xbnfa~1!CzkjqU%%}zto<; z=Q*5W_&)WtWg?)aR0Wti`z4z&7_CB|$d-=zwCwi~IFPtucJ}QwLmKVhw(Pp-9Il_E zQ4=|*&zK9ZzD~?P#}8SZpL$1LewJE((n9$`d^JadC>>I7nw4`j+@unU&On%j{tUK} zh}Y<}=kd3MyPW30+BkbjdF77U9=3aCuvW%nenrN)$t_&gO;en&dO?fhuEtyXieK8* zH>y&!aCeQ7{+A8aq5LDL@ys$VsVCaM39o`G6}8gYj+@8V`#baX?V+j^<9LXjU z2uB995cch*>P7S}=l&jq1>9vpVyKVcb63ZW6XQWz*k{)z$TiB_j~HPBx`IyG!n%HC zD%sOtid^S@@~5o!hm}|(3sxbEZQLo+x6ELT{RN95?C;5oBn;Bc(Hu5%J)6_q@q*t@ zHeU^Q9IjCJ-Jd<^@LglCXAFQI%asbjgE!~Haysw7iEcu`k*?phZOc)N0}RSO7xF(9 zjXr2&y}fsNEi5?b(k?jOw)JA>?u|jjgy(h3>_=dbAKgCVO0;sC2%1>?Rr0c zY@(F%TcC6UoFlVDidlUx64^^CrT1b2W`xwir;ae5*ZN^!X9hsPeGoJ)tKZv^!g<#&<{TZNTt8u7`~3d{ZIj>-ZUi z!sm=PZoXJy0{+kQBq(w9MEvv577Tu9Qo71x{&w5dO99!6WcVq{qTP~18_&>|kSXUc zNPi?C1hduiIBifV{P?osTj|38^58%$JCZQzZ4JEjyw1$tJDwC%9@|?aPo{K}g)W4_ zoT1ALqrN@S^}BkG9guIR54O$C6ac)|>6;={_$ki)_CXqjU(L$FDzOnlpX6|wTcvx?Fbt-E>#ij<ose?&&S= zWQCoS(5q8BULGIg$_ejXob}Jf%_K3R2YG-K=Z3^TONW)iet7Qq*4PrdZqgi2(nF{I z7UR;60l_R26OX{wt`6s#F=R0}UQUHxyvZz{?hY^hbD`>>(33O#36+z!IU&P7$f-{x z=s9=L7avu0ySDpk7QH>H^En2jt?=7M2{1Kn0s4WSN2;G>Xz@8JlG(}HZ?*ct+ zw&=tHxR`+u42^n@qsz><^_7w^4{v=0`7QO%eZ!1cGf1w&sx;l`P-ubFCV9y*_%wDn zywY49I2j6WxDoSF$d~0~&Q$Bl2g0s~;Mpi2;U4^WYB0tzvj{qZ9^Jeg{yWA=iXU4? z-x}QI3YeEg8z1V4->%$vyiw`ZJ7ImbLCT-u)Fdx3^a^VIW@`T zlKKg@Z{&W@(4*O?>p$8NQ!AZtE^KbGDQ?%Da4=?I+RVL*|3wp_L~lm#hEnBDHNL6j z)hM31`gTUrkk8zZIwe*>diLiXIYX0Nv5G0DdTZH3hcyMd&K`y}I-CfWr~(CFg2bG#)hpCZARtWoiL5Uc!!{>TFigzE5SvhUmLq9&*}k zh6uW|o!w)vEZ?=;A)>1>_QfD$Yws5TZG(aVGJt3$rYHnoYApoFf4wBmBEP-=VD5i=@L^3uw5PP*mYnqi(d~Ja z^N{aO<9j9kPg`;0PyU9;t%pz1wvWw~kF|LSCks80JZIR0c|Bt%& zj%wnI!bK;9A{|Ag7c2Nf0YyM*K~S*+7C@1%pdd}8mxLl!ih!ab1O!E;ORotaMSAa$ zAiX640tqCUdE>q7zWeU`qP9wnq?h?3o6rsZ z$8I}f*DbaX_%q&cK`zu_u1@8THErfF=9$yB*q*;(x=GaHLULAyauvtg(OvYyyJOFs zb&ik~@K%r02i@;s$@hwZ$bN#M_{7HteC#0{VK8_;kFh~B{TtJiWL&p&Gx7_H%mA`j zPCeUK&j3kp&~>Z0@1Pa)K#f<-b1c`Va?O`zH3B?Vf%E%zD?Vrt-7|Ar9FZA3f_Ge+ zLzB!m+NkZ7-ca{_ptQVPjVuR@kTm4a%aA`NK%3GHNmqN;z1h0gz4eTQ9^0(^Ho28H z8hvr#zfdovVc4sGY@tw8B^TylJeQ%kaU)K5(H6Lw{sRLLLHB$gzi%9Zo_PgZ6R7Dv z-&wgh!0qS}qdmcRwcld7kVVaj2AdeBE_EKAGLwJh-3K?UlrX7ec0NZVbirTe(cuv` z*^O#LFPfDKy>QCY$gM_L5Ob9mK%K7_l-);fmEj1eCyRQK-?7D6N1s!|2NE zY%`O{eRM8N#rs3ej}7d9%R@7w>i0?J$<3&P@AJ)ssa1Xrm1h48UjEZ76u-J_+oTqI z2}W!C=#f1T>%Z~90!my75OT#CLVw;au~RNbsRKW+j3IuKbeC>hWFa%q(pp@!ThCfZ zbzrTe;EP@Bx*`X1dKl<>)etacDhM|py$x^)!4@%{VJ3%hVii6f;mA5U4tIia_8r@) z2r9aC?FollGrAfnt8+=(^u1}e9MIq2%S-EdIp<8k&4+I5{i3zM5e)VuEqvj}Ol_uc z-CwubA=s;*1b&(#1tz#J)pXAtyCKo}Ufk&9D}mlh?^1GWVbGSQ{zSle=#IaP7OOXd zxnt$nDPVe)qv6PVylpYD(IZsuWqCQdH5Rw)+&;Ow>wWRgZ|1|@b=;RPM`uZP8|277 z+}m}+ke@AB0exP9^jWKE&=}Nu$0jjJ{+=o*(TlU{rT6sJ%Zyk+F$rW>{*nvv`~TT0 zVYd#~O`7!Pd%%%P8?OS0(<9D!l-9hzS~{aw@Ouo+-Inb5sB3RmZa ze(hU&#A~m!(rykdTP|t!9|hXk0L2t|Qw8zObPh*7$b#z1wx$hR>(EaP+{&P9*w$5O z`_NNSwQpiOS{A_ZRM@`h;S-NHtZwU3qb`Ak%-t>klj=%sDeLgaQ_Wa}ee|2XR+J36*-@h~s~Ffv^d7Ai2^Yre({_@v3T22PurmDiswEM(nXwsLoMqFnJT zWY165(Y;y80UYjHmHyx=9rrQ5+V&BkXO0|@`Kd=!bht8k>VhCA=0{CVwlKTk#MP|F zp(Mtmbm-zjdN&7=@RocOCUE>OfH7)uV7`M&X^rfKGt}8!|3;yRv5<2(c4sIO+^dDzNyM z1U)W(B;)4ta+=cNo5WX<39>YVbo@axgw|o&G_;#mfNl)=Z5YLTcqMJY5z z&PJH%0hEc=T2aD&c2h5;w;Gvu6WzBPh*Wn;el0r}0cC0jUs*d~Hh9y$kUp}r8|@Di zjlF_I3V%uXJb3PO8Oo<(y>vkOY#u-6ryS-#O$?xWWoRRN_59jK z?iaE+a)rJpsY4YPjM5`QmQgQZ{4QZjme0u9`S32{Fiw#kI_w@M+oF+ zXBB}ji-h&f`R&U<*2!Rr2VCu2S>{|_0y~rSGK>|$?CdUsO=!)@V5^$t$6I6nz$!ya zvp){V^?PU274H2C=ZbHB9nDyI0vi;WmoT@^&Ob^xeMWhl`1d)@6mHm;$Run;7cN;9AiPDNq*LzA3*5W z%~41$+L#wFrVS2k;g-rO`gK5mCw&h~M#Zb*C$WrcyfE7w)sF5u1tyT4`?wdys`ho> z?1-N)gX;WgJY#OL6ng(;G|XVhlrZ>Dnmc zFT9xWEu4R0a>b>D@p!eb+t8us2!JEyCXX0X^YM1I$Hio+hBDF+R<7wMzs2U>v}-l9 z^%sEgOVNFb0JQVa8rmmdD0Nw&X*z*n7=hlVEBSd+odk&y+w}%E;J0Dnt%%&7X|>^qALxmYJocI)M> zL&1zIhhsQW9*@R@Ta!@mtd;F%rTsqN6;wXLtzsf}f-5!-hBk3y>dWM*Y|gJ*Ndytg zO%+y>ZWtho%=obd6<)HN1?!(_ww2om;x`ybztd~KR`8eNULL?av9N4owK@~g0{_`nod?+~H@Q2o^XS7zg zTvSWRtU3~3>~WW{mBfQ?nYEai8foEN2e8+G51ROshQ`MGL7O@`8)!!Q=bvD*wWZJP zpdTf^RtXR}-PchT;Q1{BnDka#ZC2Mt7iq9xoqdE>oK&MsXER&(tUWjSyDhE;p1VPdvMo=U-*6l0^FX{L@W@wCwM;-*m=-m;;pX2$s**Hn= zbG~%+>Tv#55LyV_>QW!N%BA}bATE|kgji3S>feHCJ35oxNAEyVi=o+$x`B9(OM3URg!9)Kp-cn% zZc7=uHHwOz*@+i`c-Hr7baJv;HIKF?;C>s+kb$9#02P9L{xv8`j)NB?dJYV=XR5Ed zo8oa^OgOHIzN-d0IbA%0o4^InLQke5%z?%}%XoBLy$IIXqL2}Ys;)KjUw8O`#;!g| zhg95Hg_c0)OkV4#f9l3c|NN1E(UZd05vVm@a~V}lOP+>2D_7ia6dp+4xgeoSDS)9~ zUT*KEeR>o8F^`#Nw@GQvw$=zET}$A84S?@991ahFTnjw)0p*9nZ0gmVk@buxb+DGg z4(?w;=@glrxMuv&X|q~(U56#cf|Z~9mQvjZwV&$WVtIl%pA51A=(<4mD-zefz%<-= zjvFqzfPJhcq5|v|p!wgE#>&Cyu~N#8%Q(pwY{HvFUV!fvf+&Qb`pCa}dQ&;T)oyQxWCwFp8|CTu@C@+0@KkC|WtO3k&z93l$X&Owzn`vuP*h<=}?LT225~pTI{b_|^*$h~7 zdlx4WY94tH>kdz|b5)N^S=(*n(By)Q9`hHOY4vJ=WQ_j__G?h_vFM|d*B>t}T}1B^ z-YQk9*B|tIIW)b-@9kl7w293N`=D6vBB5HcdPn+UZh(q65H# z5CYu&&U)WzHVL%?!*O)2Dju-jDRLj+v}xXa7hY>>z<)XImC7Edws!H{kv3elfb9E> zvgY`|AuiRVvV-W8sDmao&lbqq*x1pS z8J-|rtw?vc`(my0<~%z^+u$TIiS~Xuh#;t>&|i&B$%AmyI&ANw2cD}6Kv$_qKY4_Z z;Z2KPoB|@DL+Q-9SAS`(6RTmG;cu=y#k%%6hIe!MA#@E4fYPpMxdp#lgSgGJa+p>E zm#8svLUX)4D-Z>iJkXm8{*{530bZDEt57yX$XfQdU!%iO2WZ$^{OnB4Rb%fAK2NT8 zBXrSu$~Hno#CBrkqnYxeip2J~Xnb?{#lVmaeP&0}a0rsi#c3$NEL<6)xn zTFXc&EbIdLEH>qHLz9>HfQpIR5NC~{JtC5(L%%FdGt7O%aA>UoeiOi#xkZli|J_ij zoHF1=D1dd+u8~k7?l}P5@{=8e`bCZ@0ey8H58YYyiXsz1<-6V&Bmqp621qzRj+@|5 z>3CN>`yjbnX5r;UxJEx3|HgZ<$E|eq@_nj2-(H1Ti2sVRkZc70{lP*T;JmZ zIJR8}rHW^~*MJF&2gu?zAlIvKN6?LH)Q4HauQPV$q0m1sL;{Za201aMfx6j%+XWhr zBkhJf<}!usB}c7mzpWb6e86*dnvvr@U2DvRL9}TGy%TA45jGzF3cP+@|6$4>TJ)9& zUtCXsP88k*DjBY~0t=O@z_aP%MzB9{jk$u=XTx^P81By0vuBhJ^7_XJ%9GXvlVuYm z(!Xose@?4C&4E2PjnDF@m;!@# zkIJ)Oty$g@v`$~i^dA-9Cj#CZ(RB~j`comlDJ~mKDZG=K!{DQvZX<12>T1=>j<$0# zt6xG2s@E-haN~hjlw<@*9``3+P{m8og~ec2U++?gHIdxyghiw7Co?p)6+M<6<6HTuBtDav$jk-2mA2wA;@( zH1r*16vBFm6GXFPB!Pz&#bx92kZaxU;qmeDQ|JDiwf^E+RF~zffG~PZPE&va$4VrDo-d(xkxv52WObi4+g#}YR-UQ-al%}7(iI4JAI@ZiT=Yf)q)!*b zEi_%u5LDeuGa<3nqCaNLzr0k}URCR(swGXJ!dx*Di?ca8NE>O_8#T$78Sd^fo0FIbYQAe!Q$tX9uReJ1QWc0 z_SatVO7VPy)F`Ay7)oLNAT7v&xks4E<6;{_@9tSmZ`Yhz+D^Lq`B~a|hEr1kG%-Ft zLyI~1(VpxlPeUKm))LjMI)AEVdJ@-#el8U1C?m$&t}{iV)q=b3Sgd* z5OQPS1o4%|Db?H42>k43+ZN)?;m1CtKf&TYcAy=A!SSUD4=}`vh1%d1OLku^OQyM| zcgEtzuqKe4d`LG$OYVMGeyF`1m2skEUzq$kgM`C0X~7r#I?2hN=}zlvaDqZbW7yY+ zG1NyNuz1Pe=~MaN6B@aBtHZ5hU9rg#KmW36F$=n%=_Lrbwxw@5pE{%uh7<9w5A|?_=m)FB=d+i8-LFwPeR}Y@|AF@QkkmCaiV&Voh_4q- z`U{4TKj+=!ExvcJUS_SAOOTtl3!&45^Ac*`E>axU<|yDh zDeHIDQO(*yfm~+W?CzWh7(1+!m-i4`gsu~(PZ2&R0BCg`D!Ug(*imzA0AS?UD|0OtdR-uL;q@0;=ZREtfv%n-xAZ?@RrM;s`Kt=Yc=ytYR={N<vb597aGb?6naK6ATnBMVY!p>Va@ z(L*;c6R{QpQ;u`!wj^TXGpg$?{#PWxEdCp(NcF>Ro^b>vBIVF5JhJ@f-2t{Bzjwvp zl=PnAF#4Qo2Ho|67ocq>evlo+A+CtNgv{WA3g7;P<*u8PI4*J>q)3)Iv5fktFpT zOMiZ6D)!wvN(!dDc0M(M`^dso9~3Z<`1-V$6*pyI47(;@XZtDZ(Cu)5Poq1koFP>c z|Al1z@G5iS#ThD=V*~=`R-ri5@+Pz=(ZQc8V{;X{PJq@cxBj~Qp`j%n(9ouNN;h}W zOI=TMdxyKX&_}@}&%$lgs(T8&#ptE8iLl1W$kJmzNAn)lrL)kVTH$I1FzWFngj9Pr zl(c{8uW;a{O!mY_Y4io{%ZeNw2St4NZnV_5$_ctS^J_m>X{>j zooVIc;_%&Lyz{5es%~V305b^PSS70RFICdtGA;$;W#T&o{S6Kuhx;A&i2(RyE`1Ti zqs;)yw@@tUqWD2(%mi*J!s^Ms3lG3Uv>Os0nkVE}^W`-;xXu8XpK=N+c-=#$M! z>;h1!G{c*A4VimZxF!=$)&ZER0R??8=7W;}G817`IMM+;`$UPdy_=gBmW%Kt`gfOF zLw*RO9R1%T5!wjoEn9{obSV@cCuOY~tXv(hd+(lIzlg>-Kyl(d{o(ughWSLITwHMk z-PAE->PX}8+Uu+bZIywxC)^F< ztB9>Or7_;gR+bDMFa<_exBs5V>*d5n^trrxai*(sVO)a0repn;M(&a8K07D42aJ$HoV57uU`)vbc}?0%%a}h6R{B62PA%1*Itr2E16SH3)hO!ph>4uvZ_^f1; z?4VL5;H|QgN&fkO;K$YKZiu3Tvm1VHYjpL4DVb`8b&xr>g@FTz+k3tJ{d&P-E947`VEvHi+w4ZQA2sHA6h7 z7E}NjIN$d#`oU&tF2>eZX3Nj{JH%=>P&j~Vk4X_?a58rxG*_R{gF44&XVAQ(W%4oN zb0>5~02n~OnNE5H=(-D{jja(tb+3y4fdZ?nk?tAYk^%51_KK$R*$*H{B>cF#jNy85JdY_8TQ59qG(*decBk=}(OEahQ_Ze^PusCuOq4fw^^2|YijVCzHDZp9i^kZOf zb^D9Kh;%U8j;^BN<{)5Z4Vu4NEBP1Y@Q(jT<)w-`gJMrKB` zjEJCpM(b8}$kVmNID-4peIYiXY27g{9g<(yvF@J~vDJ^@ zzihsZ4(`cTa2kAixvojO33s;t>&=v8elNkGhvD@(RmxBOyi2PDGo6-~gQu*vnNCrM zftH;V;uWLR9NLAq$GL5zO*9yPad)?c?=c=>10RCSt-w~wRLQ)D9$_Fc)hugZL5%%I zFAl*Mws7g@$ghE7&&38u-Ctg$`R`%%$q|*UiC%`}KQlCj`*sidRK8VRXVJ!8__!jU zQ@sm&2Oy?CT|zyI6Bt{FZCZZycLht3&$nW|KLXLV}aNj2v=Smdy=iJe2b=V{J6I!oi) zo`|$>->$a*`MYBXtwHz3A$3(-IMMgnz`B3KO5YBt!=m2X>j`nf-x|bkgxgVF`&ZEb z#b0t1-oeCj=w-wyo%4W10HUY$;+=BnR=F?mvllW3p3qL{& zj`heqf8mx1T8nkB)W}R#fBwPPb2z-}qNS|dN0=IJWS~D%3S{@C9ienn(Aw=C-8_D2 zzxvu7tmynw$HuGZ246@Ko|V|7PR4f`+|MQmP@bLn4^DW6x!-$gaIeKgcC5ETypPN! z0vO`F>)^=Wy0h+A%ny}0%1G(Q2hTi7f&r`s?n5i9VcDy?2gQJ%Fn>BC@AbvIxiCY)&)%lA7Swdbs z@7do-%4z;r@j2?c9o%INr5S3Oc#FRm?X^3i2ps)7j??ylZ5#=(eDuh1^gr(#{nIlE zFn*)y-_U3zz646A0{5xNc-kyvDNb2fzk7#`=B>{Bo^kV54K93)Be_PWmBhD#dB0!P zs3J$=aA%!Fp^hrgOVP(W|$N5?CCHVOj&#P6lT_Qf|eNLO)y?BTH5~ha;P?DFYkRmn%a_uexuuk^Sq+m9+ zYR?+x_+@X*P^qti57sz0*ACgahhkNID?KjFBQgthOXoSH&4ou7R*0A(B^J-s> z=i()O6Z`o%Ld)Iz_n-V`6AF%aAsCBNrQjE1ATON+W2S^L@|COP{QNxS1Oeh=8p?Rw zFoUG*Lc*Lf^7HxCQuD`GxBKgYXHkZmf*NdK&b0SSJhaop97=3~-9fw;R(#U3&<2zd zy#gIS_k0?0I+I)Xwwi<~qWg>ZHQULA1StHZMC~71%x{c%+iy~QhiU#i8z5E?`fPgQ z(OwvH;(=+h!~p?%vyyA#xhkGl0_S?$#3Sc|Je)05Ww~_qnb2=hXk?1+AGHWkcTGoh zOTFOgUDE|feE|Kw0=mD415K$|ILDx|2<7r?K&YL|Wpi#9o~iPKvr^D0(A-%rtae1z z)Jx^GsI`7lrW{cCAR_Dkoe zwS#()n75J=AoLhHK2l2=AMwfhb}+GF_P`GG(RE9+{z7y$^67V!yb@a`lfNz46=qK8 zh%R<2jPK#x`mHIe1Y{U_XPlN!IpF6(#@}rMC zBG)osM%MtK&itp3rrmdrzD$nV#co&fmPmVZ?3(HkZcM1#F4FL$gc)7Cd&sBuZFQ57 zS5WO@TUf>w*~V>J_z*@mW2}V(BTT_k3-Eq$;@I7XttBo|BpBAo_&KXW~y#@;uwW zA*iirsAw8uc}f6tj+v^ zWmDFl{!h<8ockrWvXjikgn>?cT!JYadia%~BY(VP6alT2msxft6R|$2WB?zpNIth% zG2*{5v0CSY_AI=(?O(&G*jY+Qi1Y_G*m29K70&{Uy&V&ofW)XX2V)~-UJ=s{Y3KjE z^w9=Ej8l`jDf-+)GVLcEcaWRU(OZ5M+qg!``53#OMkHWB{}U;2DRc`rWrWTsXmv9wZ&rUJ$=_lztmBmjCa+ zbB;_A>y4x|kYM&ua{21*TdE0{DJfu~)&xEma7*r@B-nZ~9E8%l>icL1eSz6YIRxCsR!S6sr8=T6(XFKqO zHS44u6IW)d+TMPFTX~9PCk8ENKIYAv7>t%~c{&b9&<$-tbs5&lS;9Wr%0E}rMc_1$NylES zGQdO0%kTWeLaU-Ca-b*I)cAgG!-Xh4ZZzur*8ynm`8(xv)Q7SMjchrmoQxStrc6{X z(o+hQyPbdjJl)(#7aE&`uvui)ScnSF9sImFJ{6(tH>vj~wNf-f(EE=)eVg`UtBz|0giUuhoUH zKERPPzwh*8e z@T3(-su5AJ{PF9jH_|X0_L&Ak--7Bc<+J6+G~4Em2PWGtM52QgNKCRlXNHU-0aae1XTcM9z#cRH<9_kFiLYQuPZwrA297qI)jj#lX&HG9 zAKnX?g@9GSWi^IrH{!-pMb|Xf)$WmZ$GQD?NSTo2rt6aGTSC0H{}O7Ib?gdwf*WoZ z_Z5cw7dy_u_)42Rx-D}wAkjQkB4Z56&3`ZXAbxJa#YYI@O`J{>YP zU|!^Es4l&x1;bNJjg(*^=E8J!eEa+3qxVe3h_Bm_Vf&)!P7E(!u*4i{M)~_V+AfrL zdMAl(ksbIxF~BdQgbh!1p%A}GXjSe-yM*(PvR}e;z|{*bjMz&h%>-x|hM?>~f1;mP z?p{@Lsqc$%DmdSbGbl2$E@u!X_@V1>(dy^C$rbV=&E#nXZp%W`O$O_O4|J2>Bm>F< zm}Xn<1If>T`@s!_wI{3Hp&=uy?^^DdMfUgKoqRQL8)3L2e!-{mv<>vimG4fD@QHbg zSihPofHYmbMJ(drJ=}TfzyBHs8PJ=2O+kTG`oks-N7*02es5;1NZ{w71=6&FIvJ*h z_q+4(q1ZyVqzI+(XI0pWY+-5T{rMI*3|q-A(xFu)`Ac{GstX{qRoN&&l+}ud=_A6(7R+N= zik~^7b#P^0f5^d_ZDe*I)8E)02_75LO`JjP#qUSTyb{pz`)$L4*>5*tY-FwfaO1f# z%gHI@ONt;D?cz`8^0^?9Pq9Nd8=Hz?tH2?94$SK{p_l&)3*g_pdg_ zN+|NuciM&#)emb-rByo7QLwl2q!C@aZY2Qx0Xr1p#JmKEY(ire$Q2OXG!ggjOvUX- zbR*7!to8FB=L0eCcT8rPA~BP!zCmydgqs_utrI%ISS@I4PpN{bF|jK^ zoQUGpolk&7WF&&kxq3LQ)qkUJ=7t99##It%4Z`(BY|sg$G=Tj zAgb#AWI5G2MU?_!f6=T|?R*s(&2ZEAY1ZG-iojb9sIS%_H?(VF<);!W2(>zBoMUEi z2Mc$)49c4_f}TEo49MSEV5`*Rq%~tyX|Zy z?@PANqG1Qv*9US8C;4+d5DCObJ{#LdJJHuI>CI&I$~qo4{3`BEHKCp%uc$?PLcfAq z5eVNw@TMHJ0sp=gy61+yBQ#1cX@F?mQADUr0J7y_I=FFBN;&Z-uHX0*s|X`?{{H=& z5uW{`r+`1CmA47kVpD8JyxtHi5Z@Zw*r+$@x0)YfPf5Se-&?lcal;CCwl5g_x-o&r4PX8SNsmSK27!cQul7miIAfInp z(PolNaymlMaRHr0?f`2s4ziF~FdL~;=PEp{(DDwYSm6@TYJ3~sE|2qQl3d-R%^B>I zwt8E(bI+p#s*d z^8AtApef%)o?#fXjjZJsifMnY(!p|Nj>eVAO!C4N%d`vRNw(F3DKML5^=kLQ-PH}H z=PF&`tOdJuQ>$0rE#NL^$jkcx=i52YeuyfFGk!+;~U1}VRx1RgHs7ybtE}d$}fg!^| zEkpe!0uw&FF6vG$p)&|jK|q%f^hN$l?dMr^7E5l$(j1vuF*MUprllUcejq%SsqRv< zUT*UVi#^ZjeECuctMw4)124vdi~H|`U;AbcH!Q!Jk%8znnW3r(He&HTGtMbwJDcp& zBXIg3=Q)w`c=XWjjC>T@!8d2%VcPFlkv+pU$UmGRa;0x?;n#z+WYBT2=W7@J z6je;xOF}+cXBB_M(7G)Hh9q^2m2K-cP2hSKOQtVUuk+PA$+A+((f})|^fp@%YxjnN zEO~gVEg)ulO7Qdbk>Fl2OeQB+eC1Za`z-s)qT=9Tjo4Ae`}8 zx8%g%ouoi&MK6 zYT}*yp$Y;1ha5T=A!I?qac^G!g%EVjBpACx&VfEt2=?UA#rKk!9*55m_OVCZ;5hXV z{{jXwnc()>DGR0eT}d|Y4rzMm+NLV&jqc`${#AqK8vOv>s`=CB)rTZD>#0}?Fjd0O zW^&MPQirntv?XO zHHC0Ke;&(15$`EakqM_bM!YuyC^Y?@U}Jdc;1xc}3%y3r0dLH$)PItVId0uXajcwj z5iOzcvLr6wstNY49N~X`l_yByjbxpWw5cYkayHIJ*#}g@BEAiyfAIn@rcKn>2t7Ke z)>Y43^tU4~CYa^DI5gS|IJGI`D)hLJQ_VG3qTIS6@nEp?4|;O_9-1^6BBzUlk>8LM?kVAFXgGjt!G9whs+A3SZo9F2g0T zX95bQ`H_22UpVIG&6}b1-4s`sJtcX0eDpg7+m|^7h%$6_&jV=0lWtW&uh9$_|B$uQ zBZc!wQ7Eju@n89?)=v*^aLI|NH<1 z{+M(~>%guMekn@!cnzy2kPFe4)UZSd04=7GfY3ffAFc|H?6)tl-dJTUr^0;=fjhq@ z>Z&>YuuK$Xuhy)tx4kfb*DX%=U`ot0RSl84KpMhN{$R%!K8Bc5oUDj!3 zDcD%oSWNq>!+72FymXWSwR#!V%E}ETM#Gp+;*Xs4PqQzplwU0w?e*9U+8D(`k(P@+ zSS6T%ZLdd|_6X{8w1%C@#Maq{j7y<=KQOj(e`l|uKq>nA!DT`o7WZ%=)lPFU2p+0RNH!`+|DLaQ*8ve6;QLwML5 z3{Kf0%duEkK@YYM+$>}f8{WC1rx^y`@nJr7pwvc&x&IxI7S!TN5!XU|&hEt72qV zT?6lPT~pNMLp#(#!GN;Orou1>@7-STB4-;n6d@q>EBcF|^SZNE<4G#nt0q6!X*i>< zF3n){H&|s}_>kqFr&kM%wJ2plcNjm_JJp^znQni%spk$GIgl~xF{BbD${BQdV|E|$+pb+w1liLjaws7+P&Np;P|K#MG_Gyd18>o0Y4p=Ae zS)1{92CZ@2O5Kx10w<}ss`5MZrL6euAA+}D%SZEJ7Rn)C?m^zGaWLQw>l?R@LQMn> zk|op}5tf0zFgh=F5LZ`rNCz9A1l(F7^i6ZZD1}T+PSCwQ@6v|FEcCz*v|~aKu-t)8 zZWBgdL>N*VX1%uBK2i31>{A%%iqv(&8*pM`;>cbA#b*@UqDl&FfQ19gVTK2fU}kYz zl*0Vr?>*>A7xl}1t$-T{mr`ZFIiM9&B)-TuI#Ae@k7t2)_D{PsrWrlje5sImiTyDq z)%6h+gu4v+&OtDHNmQ=dW#cCh)gt)b1~St7lKKY+BVFFfZR&nVF5gj0PVt%zRzB4#5to%0BKWj3x@(v( zvlH7^agO><$xgQ>jdVMP-P}omHGrBLK(UgN2l24ya3oqs-y1kyHBVR+76Vi>{efpL z&tJo{(8W#sM#WL{-%)l0o;jCo?fcXVML%%rd*Rdwhj%_DePN*KaGpU)zLU=EJDcwD_@Xg$U!hyK zZYr=+-xXNYY|4HRRrh|9fwp}F_k8vdTEh0Cj+|;5{*Md{tq|)@s`Ni8Q2`unryrXj zu_H0w(>4J94L#uKi*oz5(c)0>c4X@+?7nIVoors+Mr5E>D$slC-V6uGbzwt>l^Vz- z*t*UHD?33-d%d=<4Lj=-zAOhllYC1-^O#uhcC>su4ISyrQdd>q(ETuqi$}Bs zV=VZh_RwSC_v9k{jJL^HUQ7{dalfyMhl!AnVfSP&?s*q4+cx~9ycibh?1_H`g+3HZ zSQraM{a|@mo@5Cp>Y3y{;({-O&`tXF%O3gS3~bO2aRQyOt*i5wl+Si~X(FvpwhWKo zfT%r48xy!zcKh}{-d51QWp#GWwZsZ4fz*r9Z^30O*u~R?dI5P&L+b7fTGrR*7NpJH z7qF_N{S)5&d`d+HeEZ3VBarJ|v06g*+k_R&oGoMs?dngj0gB3it>Xv8*+348kdSSA zJ=Pg3%zT(XR}Qx6+7<>qu}j0xR25$ z+27e0((XvJ??At^-Ixvw8)yku>WBBkCerM}1Cx4?{kK0Yl$?(?z~@D@tt}+LCCGN< zDyzW>$wyw30YIrL!tzqlU#~Gxx$2}91mQd^QZfpd8&Fu7H__FHg9VqOB2%JZ@ zXSak>%~40-dt7h*CtSt2G_Hn0b>PCzu`r<$OW+J@gV4^Zei|=GO zO}sOPofGJ?0M-~?Q{XaTvI`52LBcBWP-N8%o6tfyFYrMm*iJVN`avj-{DS3b`2AwK z_M>puty`J#nwV5ERBMpE3}RCVo{B%bn@0glIG67B!rpQT`|oU^ud}_S7kRpiuPAD) z+A|lPAN3F;e5fuw^FH_}U;CEWyVC55f0Ov+Fb8Z+L;*E_1m$E_)%H!HD{r|P^FUS* zowbJSgcXs+hxo8dC2ti&>f3M!BZQF0Q8xro(!{{olUOGd+3ao0U+l)?Ib`>pmBR*X za?6Q*`Y;YVK)8=Rkj#q=wD2t49j9=t5c;5!0R=LxF z198KD%zzafs8hCpG3^qhPgKS*PoOf=;Q=)M5Y^RIv7Tz z@M8W;hZyh;{r`E?|33czXRi`Og?#q?ulf5w@4c$+&F;u`KzU{7-Dj>V(7!1@ix|LG zo3LRRr0+Akgly6wGbFVqOAiVIxm(d;LW$&}Sy%)A-!paXP7@#tZ^h^ATuoQig{X%6 zjw}Sj(&<0asG(fw4~RNj@Lx|fL;5ztc>R-UTeA%z>ClyU83Dg_c*TI@$lHV9J8}9z z#=S9E^9E3@=vS`&;u-$171)1R`~N8b|KrjLpTiMG)gz7K@VSS9sS-|D(YlawnEpC8 zCwwjGA#(RRoE*IIZ_9jNE%GIu7wFa`YpqRIC3z-f$!8K^99uGgUp?gB9nZ!4hz3KV zx4JczC>Nb%)s1TvBweKAWvoWz!+3)tauIty7Le719Pu}a)&Zur%(jlG^Y}H8ul1r` zel1S5W|NuEii(`qU;OZ|;*c(k^nlk&c#F|E(|E~yEG=Z3ZdeDfx1x9dpb6;5d&3Za z^sYFDSC_I!xK%XD{r`Tli-JfzwSa5&e?CMroO;NPcU%qgnJnSl>_K0kap-YJN8ccB zXuwms0>NqZ%x^(RDoZ4*C}W>x-*xC@h_LRmrQjW)N9hZPZYc@Dsk_;H5g0X3d$w_> zY2ld2YP|_J@Vv>2Cogo;LlE%zrfFn+juR;IgZwNOA0) zd>eyX$NWrd&_#QTM?CeQstItUPLu2J^F;$^#<;iT3INrdFeV-M>r(rPqMH2~bW*?|C@yY2FVwcJonk9ey^+GpZFv1USW zC(=BP26xYf6068i=JPX4CWA95J&Ji|QHDGPes{OIAlBo=&4=8`jFWmFDU9X4i+4v9 zzq-`~(n*K(!{BX|MVv23pf9ZkU;0!Z>g4$AA!T`>bcW2@#1wEzNEGN6rUA-N0~EXh z9fM!(aa0$^r~7~nw-<>U#==thu z8PKE)6g7-Frwca2vK7iM_F5aaxzzBH5aT;3;(~~@sPXCxj2ptg zIh6*N&R@~FuE#HqlY$-4AUxmm*h zmd+*YT!lZ!Fvj;I!m zeUJFki?$QevSNuuFjF;v0=%pbsUNDX?{74S$jY?iQU>Ttlx7>NLJ{x*agH!aML9Vx zvQq>FSh_UNM61T7;4~7)B`Z}Y*@{Ude$E}9jy{e?u{{J4-NO=$?vuE3^#piy(>=MWmAe0!l}EO^^~Wl!Tf<$iAEJ_nq_q z&bj}4eRxa=JG-nk^Ugc7X3fBBXA$F2Kn@?eZ+3~TAF+=VU7ivGq0%MK_prN(=P_~MYz{l9*oLaorS`qsL!_3L?J?APq< zbc_E!QfaV&dt&Z*&CI=#36g{1=Dzoh^UuTJd%JIo%%*DCXC%r8Si%R9eg!7L!9t(zsr{YE+fMwlY0(3tg79pONt~H7lM4&!LtoVCBAttCL3ezlk zsYT$_eQ>!Lw&w=+6=Y|qB|bnH?2ZQ=q?!;j);9O|Af_GZ^2ufKKgI4J;rpNeFZ%Tf zDJAR|&3P?NRM8bW1b>Ec*Lr&`vw~LJnp%e%S!?!9JQotCenylaeV^CvfFE>&+vSI{ zQ?ZeJdO1um`4Iy&Kyni>ps{4j(?F5A7uqmaMS&8oz7*U?t&K`DpsOyjgqw*_L;>9A z%H9^pf4Bu7pTT!2|6vKfo~54!q7!i z-s2|eb3%4*y+n=}_;EvJWaP=EUh9qt!H9~Qi{SR>uqk5pUvY7Q`2G}PvtK_cIXQAW zE7sTUEsNf#P8;~Gzu>#59R`|%1KjZ2cF|l`%()xe-}{m56pehym>nQ}3s{o%#zD6r zHlJghBL<%csI|(NEa62Xx!uxp+GX&~UyZWSnp5-@-tiOWwzjdNdh&JHj;I63R$u;4 zb?%24)tgCLSEtc+^Babsv@eoMxCt1%yX1#0%}-Nv=Grywn4}Z)U$s3(PCG}OlCc16 zL?C5l!te^v_vtwz^DF}0AKvJ0_Kx&{IYZJGRn2E@bg0w^wlz2nfGn|244iny9~ly- z4Gp!s-_GtUMreeOhN}W;cCHNp;aJ;m=ZG5FIxpqzzSBdxaHo9#BJ^RBIC(SSXN-Z> zjT?C%KVIFf`W*IPQw&Me*_x8Ta#MF7JUc#C@9+KX+qZrsAGZQCvlKsdq~#Zsp`mX} zv?DmakutHa=hzG!G1#exN-l{!&Vq#CTA-OV@bYP*-dYETZGvjArsR?u)K2vUH0Mgp z*$%YfStqsqomJH{>69@3uw-88vu~PyQpel2ABOY~y1(5Pp zsL-f~0n>8E%la|pu-{s=4?&xbOp6iw4GJ??xDmWY#yVnrJ|~nQ#{9p3Hr;<84!#pK z_}Vft&^g7rg^=m=-n61p~(-0?@E`}Xj&v!zHLWM7nHpO3OXeJN{aIs28l~n`O`URh#IO(z_BZk@HaY@t#18qgGQ&*TKv_@23GVe#e( zSk_+J2}`jJ(ElmD8#s&Du9`^dD8IJkw#F*b2vbe3S6m>$7KD zk_Yk~0nAHWwU8Hc=9;P#ysx(mszQ~TBBV|8_Fm28{#|HyY}$?VRGc4($!a(~A?SK7 zndMLH`f{j)9;vdjfH}k+^9u8Cd-Arsl%}CA)@<=rBk((V+(|*A#Bl75_7b+7x+%DFp+-)ngAaY+4+&uy^l`%= z(tl6G97N(nvJSwjAKFL2%PgTK11w?CJ$c~9tV;v7!g@3}yHzhZqLE-IfPtIYzwPfE zWC``W&8fSorgRUN4)r|-X}f5M84Wjk%d>{Njn?8QwM>A)?jH8#esI2ZQ=h%fN>7G9 z0v~hZ9YFsa%V6OB#|?L)>6<3CEvxsU^EII0a4AFd**|RQ5MB>`qpN!d;9pyR`(|&3 zMxZ9#ku#H4IfP96E~Y>hA&N-@Wx4Fol%{9V=Eg~O#_xdu-0^`n{&~kRwZvyz=Ow<- zqw8)Twc_^wBic#S%JC((LuT3CcS!f1dbMumxmEd&%+Z(b@dOtf^R{t|B*f9US7RV^Kh%{hT<6>pp-(Z{?xU&!lE(?Y>|_U(k7n>w}EB(C#5~uCeX% z`F&M}f!4F|Sa4#d-gb{ZWL@<7d+C2G^}60^AT=&rRPy@$47G*qyle06=h1;UeaJ_X_E ztsDX2)a|6bopi2Bs#0?T4k)_Oo)j#{&Ga?o^^df6?g~;kp9jc z35CzLV!a!wvIjC49l0Q*4>$kr!UAb9=P3umlU6LWV^vIL?KcK5lQ|?`gq4KAJlqk; zqz(G7YCw|vat?gG3p!m!POFvW9P&0pMfzS6GSJhx1;HD@kbyW9Wmxkj=ibXS+U3l;!l{pPcws$W_ZMN$ecXRxk9u% zH@;veOmE$Sg*=f-eT%`jxT5ip<9Y#OBYN07{+yFZV)4wG%JB!WD7)kCFMF(@~BWP>-8(W~wC~=g-1g)1erA*V`%9Y%IqwoCNrOO1y=!c->L5(LxnwTkv|FWxK0=v5$z6Lb0KCc(AuL{rjAZziOpjzSMZ{wp zZf$JxLq)ij*Y&b-K}d)TvFuHa43W+#8gc55O3a4Y2oK_vzZOx!Fv|s_^@a^$NE_w|W zvMJX({B(3w=P0r((8!wl)tniR#OWbe1;P8%o{*w6*lBX=Ge5jY%#cE`lMh5xIlZXm zO^oD`>L%Xp#$+vtfpFXx$V)mPYItIb3E*u_@Kb%k4ERnd;KJDMM5P-Cl&J9tbhSRY zRS$)DO3-EebUC!4DvPoy@Yiw%&#W}V4{cIq-!Bn z>`2k)u`vIzT0X2;FH0|t;mZ;yj4 zpgX?}BO#9TTvQx&Cy5sKrYuV3gL599QCFJjQ>NSSi5 zJ+V9RiwV8m>TJXryt6W1v-rY$?yvBcOtueG|BvElr54&BU5?i!+YysP=nSW15bXvNy0z+=+Ljm^DsK&$f{L~2DAG#F<-?q59E12-sd~wP(-GLMoHUSB zknsh-sSvPT`n#XOz=fzdYOp2J95+MCpvBGQZ|)mG+n8V3tpzf38&>1m?H-)35y588ZLXsbteJvo%%b<1Fq?e{rw<&7tWOn}zJ+)pE`Y!4oycQ8Nj&^> z*XIIOW`=qFhV_{V`TA9+Znc@O`Zub?w(? z8tdtO=mZX3qkqSj{+ltW@0Bm5jpgyvBRxiTFdd!Gou6_xG&PAr&PZyz{?>&TO)5+J z1Gwt*)ki5sXh>5a4GP!i*Y=~DOQ)TN5^kyQv~~?45^Gfde2uw`9SJvhR@*>W`H<7e z5o85(9zlgscMoLVhtt6h6zVP0NLEonrVQUEB%{!CY@txCET|vC(i)8g@bdDinSW#K zvu%2^POVeuO6H-F(Ay_+8k~2Q>33WFyH2yQINh?ak!!G&nR^$azq17i`gHxZ`_)|w zE#qJi&!x7!1hZO}JCB2DI|UZzw_)*T%`i_#d0OWbQ@)4%X3m8}JKxKsB9mouPg?cu)ro8Rtl0vgZ1C;5;hm3 zo6E;Glx49IN1j2AR$xE3+S=M?iLY znV48@LA499vv)awf_9CFL0`T{i-ZbSQ|)IfwHqjUpD!(7prYGO{q~3*ym#CF!}|40 zI-!>h;f6hQ&W!43JIbDlpXb)>Kd)%`S?Kcv0Z92^?<@=A+-UUl)Vxg^7YByFGVHSoyda+ojzuBiNm)2X% ze#O8W&g1+)gvR)-PP`KJU+fkHXd>c(E%gG$l9q(vT`;>uu{5Vy{m0w5cL*$V?^BR( zaCz_pe9V&e`mWd~lATfJu}thiM!9k7SZ{gjX5CBuoOYD{pKjPRW6b)FW9X$BYUvPJ zp2v*`%AV7?C{|uvjM*%onpcgrr0w}SZH+MhXiFdPUt+b=ywz*r06sVLDQ)+b_3hst zby}}?fOgJ0Qx|`{JMYef>2Kfvb4&73Uf>C7^n&57Tk;QPQbIdkwS`UhwxiO^*qduM zpU$>0u=cIy|0J7IN(Qsp?n`|TpI&eBAY6Sf^|Yn=f{cKgh(T>U&L|dVR3oPSV%^e&wP38B|f8kP6Wz z$oz{#;vXt%*VWzVcsBTBV5wb^vg-$uIKBB;+~d)s$wFvw^OqKYY2>IXpk6q>4@uF_ zPVcq)o_ClwGK*`jS4V(T)RnyVu{aBAvJg^hCkd@jjoI)>bm%~zDrW@y>qJ0h&{n(Zu#eEqU$EJj0X%lR2y-j_1nws%L z@tIkw@GC2r&3GiPEysuj5t;sm!T`MF19Eiy*(2I#mIO3DGpq6$nr7z_PpPSgAqoVNrpp+={D&agJDMrG?+&YA*RH5M z`OG!=bV}2KcD8_x)Gb^{t;wFTepS2owM_H*qKt=JAyjCO`kO`XPN$qq4xno>w&hif zmOyq_sJR?3{JdlUG@}@-)Q_hJj5eFQERtoZcQ~%Y4NgsAbJTgtAqP!0D6BIr0{w%KN_oDufw^NJik`tb8$vJLw!MB4Tyj9lUx5Fi zIov&f;`Au3WC2dpl=71aO;-07iHGJ@w@Gsk}PDOQQ^$MQw~D+GFKOBta8mLCB)vd!`lNGJvWsaVGk1*Ke&swktiN%F}wW; zK$q%%ptb5m>!oyZZ9>-$y$_Q#buqENOZ8;HEbgojz;PAitW0@^y#1myBYh zdZyaOd^Zwpw}b+7vjA3+asnP`;4lz=N_IPm}8j2X0-r=v>A-e;tD$YZnb2}WqI56av z!ZT;`MQ~e#yFqSmQXP>c&6Fq?NG+Kz#rQPAtr}S4ks^gN95}^Tm=^qH(lPr^ zplpb2$|gRsHP|%%9;{e?lfY7sBHRUdgqkB6edG_HyfIu5Nw#Pa118=xIO19E(c_(j ztz4-o&ete}?i>Og)T79Tm0mU6mpUwjlm&kh@pULjyz1hSXBM!)9%ZolDt2^+)strJ zLXXEIA)KL6ayG0#NbcWz8>+I2$U9=MNINfC(+`xjlTGo+Ssf;3=pMen64Q>^cLQZ@ zhxW?*0DLT#d#CxvB?9ters7@tR27t*TByc08^%SbOHoC>UQf`{suKu{G_aRo0?wpu zvkCKrEAHDlb!DIFRIno4Broqv4u_a8`PE18(JcNa5%>>Iu;D@(T_2i3rh%7Sz6dbO zAVWVChqh`1O9tbF;y%CcQpmjyUhEjs_c8B`07rxFU$23=!p8`5fi`N`%*ui4Dm48KkDdy#neBSQ$1Tp7_<^X zPnxgY=5(X67in5DVZo~68zOKTWB)xH6#|d;lO^1!UZP?z*+FIgk@jNi`z*rmmmNLV z`orI$=iVq_?lpdL?U4 z^s{TIx9SYCU*QXT@yYofXA=x{x+W zd8O)wvqN$jX5 ze;Y~z0q2hNCn^Eqs!NYDwVr#^bH_xeua2!VX-U>h#6vWHd5Na=zOVm&bbL>zcf13^ zfHB_pw6>!F+~QfTSCo~huU^wq+NdTJtvB6czoAa6+{|#rYbTzo+cbj;6=Z{jV@{LV zcl!jJ56M8#>d|}9-K!$unD4{)@3^NJ^V3G{yGC9z$KgD5LI){M?t9B`Z@mYJf^QOh z7rlY8hI|IWYyx{7gk zkAr~R^j%0q{SX2>{3e(r7)0k-E$_IYStTMq6s&Ucl7vSLxWrzOgeWxr-;DTQig2R? z+|;Jo%_)Z%@z(TWjmXCB2K3}EUS>;L^Y(ae3O&Fc`tGpH_uYgWJx;e-pSwbM+gydz z>7pT>DwF;FXS`a+K3kbm7hDWFnMEHS+FHe4h_`o*GGU`M1(3Cxr;Z=UI%W{T#1R!O zmqU=T&7{;{`XqRZ+wP}mmmns21K$x=0slPsi|^%+wzgOLGD(m*M60Zhrx`xp7*q~5 zsdeA=mWAj64M^k}HQWkKjX8LeqZ&>aIJ8$~kf{Isabh`s-D0I`10CE9s~kV>49utb z9*sKudlHWw@U!a^##OJYwM7i&#CjYNdK^epJvjGE?R@c~S*Mc-NL@KfZHz*IKay0& zKG_jka$;cdjmMFCv1rIFQ{P&2I?=CAutYTaJ-8*>E0^@up23KxROMwrfWZJZHeM?+X6tAbYnf=V~;!B*&hh zxhRYCGC?i~0Vw-Er-5KUg?!3Ipso7kG|x&tfBpApaT3}QPZ#H!y}@xpb~8r+Y{?Xw z=TRU1;bf}7tiDKjP}r`k2gjgU1N$p_|qVCXTf-LoeBh%k?(_o(;FxY8ugjj zLb(goI1LRo%~}{1*I_=S!-yWxb`f~Ish6rfVHp~}Y<}28@NOcH zY*vqH8FW#dmK(~ckL9_z{@n1VrqnK8phQ*BQs0hjBOwvAXYzq?zJTam!H&yW_qe(h zAo7u&6X)o_c%dd5EdC$t^*@MgXU;<3JG9oTcWAXX0|AQVPF{>R?cvMg1|6ZTuT+r< zzl<)eyJgwbDznRJv`3y~yvIxB2Z&GB?R@sd$_ho$!ZtY%dc*-Gg%1pSe*SVQNV}{L zz&8sKreHX+Ozj3#%IDJ!x%cm1`Xh5i(5;6Al-X@hbaQVww?l53CeO>%!d{U{vU8{Z z0QsSkha&s-14BBdBSE%9HRK>?ZY!Jgl+L;Y+N&BPgo2uYKBAHzK?%VVB%Sa#sz`in z35L6o&J+jrKfG>bYkL%f1#C8;>>1w+oeoF_Riy8mNqU0>fr`o1?L{-~MPUZWNs?>G zQAH92;Sjb8Xe>0ntVEF7bRW-!ToCAV(n5MZ^<+J5^TOYEA8LyE8{7}M3|ag$XEK#f z;J$c=YWDba`0Q@4E;fH&Xm+x`&!k!SMvgWQc2DzvX6gSvygWa$6IrvIaN(Uh9{f%4 zzCFxi8~-WJ!;o%b#L2gYM;C;FB8v6+s|U%W;e$u{}&> zJ7m@LOwJ}FSsJt8I|BeydpIS~lP72-j;T<~5SsTdS=Hgq398@ju|TPTjG7qaH^ z7dKm=DsoXHHxZpqvs9-aR7fR{Ie_^1@(rlTIbJA{z+85galWo;kb2K4}K#S8D?E7w_-!WB)eEyk0H=Y!1 zC2aKwVz%cw0DPYf6{5TsU2yZP8?e|l z>m#n8eZZx39D-zoW)Mm(%q-*GZ2k0Hn~~wln9mcG={4osHY1I7PpEtzc&f{fj*b)Q zN2xg^)~k0DSVpx$DUqnfLJt@g8c&bWtO1lFOm7vEK_DdQ=#@O3N&PlVs`@| zPj9VuUG2fx#%=CJL@MW>HkMZGVYnqfRDa2hn5o<{$`Cvod#q;8yMQj*Agl-rTUnbd zmtk>Zy<}0<9a8{K{_!pqk)f?#2IDMTY31kf5kzx4rE^F-2|}2-sa6eLK7! z-?kZ1^oOu+W=_+U&)(J!WD60AN=O7~@IY=82OCk0lQEM`ttRt5V4wiLG+pg4C5Ml@ zv@T&u+TI;d%=k); z&x8bB{_3)3vn43xpe(MoliK$TuE)s6FR~Bx7xalY)aQ;RAUd+&rU(G2@1qQ$=xG5Y zt;V_q9cl_>%J;Q8<-CfoMe%@;V&XJ7hJ^ zfn$)W$79qyIcJ|SkTppZJTxt{Kf$Tv25VDhn@BQ6u_OaLxamUM^;nBaJ4?HIm1f(~ zlueCP=6pb_4qg-3647Q8YtTCGASx)5Oik?-jij}@IWMo6pBaoYe7PZZv!SyZhDxEJ z->BujVKewK5@fpwW~6+0-76C9({!2x8T!Y_svOof0=Bq1{<`)27kBmsiR1gS@u^YN zw+B!W^#k;i!(r2JG|$|Xq_G4ym7EkT%UWN?d)^GN!JSRJVb5G2o!t9(^v0eDsPp0s1lF zb_$Z(n9r}|`#)rGOFr)V&0cZhw0{wn+C`z2v6>(2Bs5~0LvFO`gD?o8 zzFDwxLO>(EjKZRL`6)KNoF}-r77GtL{-sZnf~>CROJdJX1rM^3DRxLvbnQU`l#Z)c zx5)%#G)kYz*SvKWNA~_xy4?8F2FtcHKSS2eK6vW zZC=acPrpcb{oVX`t&gaGE}CR{bs$7dE{r5?4$&*%kd}Cb=O1+hKXlyK7is^-<;h>|N&-`Iua&VcMI!I=Ac%XH5aKuE~@oS?7+pw9R_&?8VD=e{9Ab zxz@S>78Kq}6FNz8iiSkf!QOr)1N6e$pl4k}{nTFEtG$Rvvb8yBg8a|oPxT#4+PyKK z%ecL~GN2i9l4G1f)*KDB4jwP)r{o>$4)R1uKs((5;<*6;J6AhbqNF=2vOz^FKLEBi zY1LOB#0tuEeZ8(S8To_ArVLc7MwSOPi2IOJIW+!3Y`uM)IU`DIwHJuK~d9v@g`dOw19)3Bf~arsntDMoU- z^ZqQy|A$WO%Ow@jSA`}ed)VTnSAAbEC*^3n-=jeM}sL2rbZ1y5Ptk@sLYq{FLD89 zsvih>c&rL&-cxwoZjF0|zt4IK>gZfAJTlf?vpBM^jC+Sr2^7X?MNR_LU%x+AjAs@< z=5^g7TcLZ~lN!HuX35s{t8c#4))dzwsN14QrQ(LEDI}!IuKjlqY>n)?42g~l; zRF<;JUd_s%p;zbtae3U`P|tEs)G@U%?MAojgx>yS1gAdSXEJFo&h2YQvg?C~cda@M zly;~&-g~Pe&u^QAN@JjPhEpXb16hYhiX#|RE~ggU39MVf7gF0m(G~?9e`khtjFZ@Z^$(Oki*Tu4Hs2f!dy1|OTQ_RV>BZjEfj zWAYG&x(-)@!uIa*eqOe4;9+eoH-M`z-#PWC{4AqTJh)9S-o(Ogrti`*qDT7K`?*Cm zL{1R$KoqS4gH5l~JlMo%l>j+q)DRxHDL86{`&)RHbt#Tfkon6uG*P(| z%FO5^Y=_?#sPVdC{ucCYzmey2vUlf0ix-EdEmfy_>cSG2EoZ_oTC{9KbyjIrV zE~3{Q(REC9JDX1X%X*-9F`GE~FvP2@P|ig%Pux%bVQ@YsgKn+TS~PXO?-9qgkn?+W z0O|suad!V@Q|%i%jHsEWQc>~QT;|VT_))8N>TG^dEFdjdJEb(H@Dk>~g17%(U;FQ1 z?mrgt{EnG+KXunwX{k2qsT$zxfo*C;1Q{fu`7ZQBYJ&3%s@NaA4~4%{(lKg8+h`4?;|J8^aFgh+Rx4)@UZkoJMdCd}D z!5UPHKg&yN5x~jW)}x|4po+$iFMGXJ0gT!VzCDGFs_e97`{&gOkx2J$DEFt45s;({ z`%94@UXD2obbjbM{d#CBHci0tttbc(hp=AegADe@YZ|9P8L_I{gtd#8a*Xs2_&zaw%cKh)93? zl*PZOvv#7L{1sD5H7==vMPF%e1@Y;4Fw-$0{^BKmA3X|7N7K+V{Y(NVzS%7Og_bZT zEGG-V$4*ozpwYbkxU#_Xk8*AtfCg=c-NnUZX{<@!L*d{!9}Pl`E*Pc`Et{iq*68UF4-y!Dv*A87uG28e_{Cy_(EBvU9oIxuc)R#pk^b&Dj zHr)hg`VP@y-AO){iEM-&7jIfC9~fe=FNIx{MJh0!XmjeNm%0bMmZLFo@;YFuVnbwU zE*{;C{m#^|rB&dQ4Dw56E0Z416L^~auD1tW0y{hx zdeciUYU)YXNS2X$cU$FHn=aa*TOt{7&FTQa$tz8CS3~{eMP9b#_fe)bkCiMa`d!1xNx{Wov`VuKn3V!!ej!WE zP1=-i1c`qUm>uI^WGbb$wFjS~Qli!2?ymDje21(^8bXYw~Lkg+a2c88r z;wVlvWaFOws*Qvc1st0mI2r_J{wUC|O^cghu) zA07JjR?su47i_}!G~pFoG=nGpbjbC_-Jh5+IGZPs90O}QqAP@_V?o%Te^8|+p#8-C z3bp4Rw~2I-`G&ui!`DSc=zs|q=jQyj=Mti<0!o;EMuU@!PU3ZSC^&|R1tIlFS-OGP z!eZ_P98MFUglvwIlIV?viep4|WAC^)t7oK3A)EdgMyh~&HpQWzHZPXyW)#gtzTPz8U6SU@9d!%PvyZLS+jt;I}T9ldPIT4S%UGS;LjMY|cpFKRZY%k=Ucx};R* zAaoHrNFeP-zr<-5%tQa&q9SQ2TBeX4D>EC)=$oIX?o9W6F||1-GnzswlR_%h9%Hc@ z{}cbXzVTBx8Zz&=@s5>Htz4;+tl2rtT1Bfz)r)TIvN$pDYQ%=jbMnXug;cpy$XR^A z-*t6>_>>M@D-dkQdt3K8nHW*5Z`8DOLTT-f88nbA6a?i|R}O(*RQ?aNK>m5+Sjs4# zKlmtHuFH$-Px}wzu=XTHo5RZ=I1s-!mVm0;;L*=M$gSu_>Uf^7J((~+brYW(+vuzMXN$j>MP+mfYg^xCP2)f%Tc9ZF5j` z9gbPaXMfQ|Yn`U~w5dCc>}829iR%z~8nnu0D{tstN=9cy!!%ERe7hojdBBCnh{}s_ zy6d;fI!zu-V?((J120MIl=pC;e_LOt2>)GX&^OMT9{Yvh`e3q7Z+`TPZG-sJR;P!0 zOQgh#uMk4|)J};zsU2oY)MeTQsI+)2B$l79x;c*FWKrd~Iw78c}D68bXAmbE$0;nL06%*t4tPfaBY0bRYf zcr(y|^Rn&RbGQBRCg9y+j;Q#$xokr3cgDxqIm|LYoW41kyBbb4s}HZ z8y@lsS=C`-x01k;+L)8BdApS>ZW-C5*~iDme^*fPAr*|*K3H;tM$KwjJ{#7mYv6jA zI@Adpn$(&nGmIH0uO@+s;k<7k?C#k>s(#R;Jm7~M$#%2=@*@eMiL5;fy8R_XbC)wf z!p?7iSq^sj&^3FrJ|@lgxrvrioCp+1v+UPz=zuIV(TQFd;Nv!$vh-U`$xs|CI(^P_&rMp@I_ zrdco7i^TnhPxyaR81$C~A5GkLV16{hiP{6?570Mxb%@sJKkoFfpIfqD*Y@rJ;kqrC}~i11KG) zi=9A2(CnSyuTM^=^nFZ#HNleNE^V(5LP5}wx?zN(Z7eR(1S@$TnA)G^p$7f3I`b|$ z_a|`5%E&@yU=uS@N=nnOJ<0@Hdef`d9SQD8QDc?(+kx1v_MIT)cvc49t_qkXaR#(} zlN~#Z0h9i41vk{tuUbr!+Z!eq%G^wuF@Smo|3m)fb?>^Fbv4Fo_TiEpHiHRDjM*XG z@edP5g=b?Q(qn6%%3nD9d74ax*bq6W5jD9Qronm-`EU(g9gm(|*jWfff9b72#E{Cr zXa6X97IVoLlj86y06B5pXL0@N+=Ngz+FFM8{-LOIbzo~B*eW{)J?J54EO64x z(Mh*>7X4JC3pweSf`mrrGOJi;ruI{#)=cd19c@%?S^M6!Mvb$eAs_Oncm?w}=f|g` zAA90FTr%uDhWnf0@8&uZJZ*KqHLIFF7$RD$EUwp8pIlo?KP>-ijQ?ExxuTU|a>=lA2<2Kn zkuitsEevqmb{zQ9__#n&)!2iCbXX;?ryfar?bc0zU5=;Gy|{grlyEzpfrwZ4dwCYA zfVJ~lF}#-Ad&}IBF9BY14_7yGB%jLP)7`35vh!wlbd|-q-lI~`+qCr3C}M)Nz<(rQ zFn2T}lsybVl2T76DYm1(w!}kUyb=#8ewT02Df!U>LSA&k4GSm-b>a~bapXm#XuwJ; zcX73~#sL+K+MmSCk#biuPrB1`ly1|#L*GUcsYs>f3Ov+C+RS55^c2@7!teqsb(W@n zhy}oPzuu$OqjK6H)Ko?A(xpomJ=pro>-klsNB^$wr^mB4a#Qy z|8&=LHZ(NBY4FA5U;qVD@wqv)Yv{2Qbm@AkvQ~IJ4*K@g94UXq<;W|fWi#b8Zop($rC?jrlb2M(y6k zf^R&bFNF*U-A)RrGG`e3{p2T{DVY~D%ey;1cGVVtcByX+{A+S*%6UN;6)6np&a7Ud z%K0DT^P+If<}elUS>J}D1fR!n-dxd)+%+jxP8S4#$tw2<=z2s#p>AePS_J8tJe4)q zg%LB!u!sQ2tvR$XsF#BZ^5DZoO@0AA{p5HgFSM%+-k==%40C(C#rWl#aQHXR0mcss zcwFjcEqNgriZ|a7cOzCcjlpdOy>ApU-QX3~6uFoL&L1hCZA+zH+SuIuwNKFBW>^k_ zV#ssx^bf|eIUT64)M-o{S&*Lr z<2tD^pSzFVVY@?_T$Ms00CU>fn1YRxB*%p)_LI=R=c;huz^C2z=$yERbfXyv(g|Iv z_T%$(1by+V9;S6d%KI%dOP^W|AEEs$neWO4+GHkja`LinB|pUn?$Wf(Cjt*PGCTEUE* z%E@;)I`}73b8BkS&P;5Gp#@IKeiK)f(K@||5?1$$n0{z|p!?!g@>vvP7lZBlb|7G9 z)F>&dvV~y6s|E%i9NfRx9L`{JwU;@#>Hp#DtK*vb|F+K<43SchP7738T4GqJUqMhr zkQyPNG$%$q*OXbgXHK9ww>pA*YiBT`+nVjjj`>V?R-Axo!9%i zJWo%VQ{|FzGy|O6)WSUpZN1!B*jX0-~yumsQwDfoor*$;@B4&92zD zjiMxG+_V4vaDmX_7Kd$KB||a*vIft!%eC=)v)Xtt@Y$N;OunLkf-7COtk|96zY_zC zz(3KNN~x^2ONBKrdf)WlVp6}iPnmRdi#P|uu^YD8i!rUu>38MO)W9=#^oQHbSv!PW z33MZ?r3q=L11AXn`#DxSpn!#z9j842shuhg1B%%c^l(6t`^SOc-v;q-cEHbf-Y4Ce z3%C3h%G4BXNw(A*O*tYjx@LL7P)#qh#Apvz!P`s0Sw{pm6`o_t0Oya5 zD>Y{bHIjxyW6QviOY zCl7Ec?|YW|TYHxl^6H-K!HZfs;KjW_X52mfU+4bkV&s2RC_hB)!W z2jEHFDEDVi>>ra;##?!zO1TLCMRjGFHv553H8`KWIpL^Cvg!6w zuEr7O-e-TY`Nj+GOfN1xoBz|q74?fu2t2@kKR}_gNzXmzI-VVzk#3%kguQ3Fefx6r z-2OMgtW7h^-I|AApLS;C{ByTJF4y(4**zW|IWeEf!WsF>u*XBs2FS&)w$KMiZIeoe zFzA#Mo?WMOz84UHr=9#2&?T#VUo3uIJngaq*rmwU(`Va*a++~73+}Y1{R5rE)SfnA za}V!Kx7%ZMXQT{A$0KbVmo~zrCDq`G_`LE@Y@g%_p1xAC(ga#b#gjpV?8xiC?ItYT z;&gg3j%{37vVElRWmd-<)-qT+{?>ekRa6(sbmjnph$KNo>zn|G9N^~nt+jPoUWT%n z7%{TPSAVZ!wD#w@_tzP<5ruQL~N67Ao-7Jsaz@3ANMsXyrY*>qv>3MP^YBkEi$7j`>`Difxo4w zMH>iZ{kX|~-tr*mpAU)SKac*^lVplBTG7cck;yY@{-rny#UE5{@n&ncx z&(HqBjh|qxdob6E1rK>gtE=Dcl=L6G;wW3HI1U};*J|F4Jqns*JC=DGXX||?(- z9s}Ab)~NFc5mlN#9$Qks;mq`0hs8-rKsvo57=TgMi~C7?yjFo4UcC0bSn=+$9-oE5 ztMlVB-anf57rCUq_Xk|!%i1=Q2#>fa$;qr-2(vMBW(oZvWXX&xs`N5bH)5@iHgDGPcLY$1#Ig4xs8Zbb5^1Gc{y2IEcajU zZ&Ou;=e|>!-oANZZ8IQOXicfU5BToRDEh;~N7&eHO_mlgE$U06`B6$#bzjG@0$$Dp zyv}#QJo2p5CvhgF3dPU7C)Bnigmz-O&1=ZpNuQL>pI#^({b9 zg@esq6%QwQsE0E`@pdsKklJzDv~OD_A0R9K_m`T|k?obPyN2vkk2yibo~I8fhV$T; zo1B0wjADdKz4(mAvyCcCh+EYJkN=IIp|1c^2t6Z|bvAJ)rGOIeWkt|{1CH}o;$h2S z)<9uj|M2hoCtBBtJD^>yW@{kQdfsI@yozG@J# zM3>rwaGb0Zsoeu1^ev1ntA-@&Qe!Jm?t+_#xEw0EdfdAF#Gf<_zE#BdsYAGS)<25h z%mKT~mt{|-n4$WZHElql;qnmDlFVRvt?^y`F+e|%a+eNRHEQ5-i$a~0jYvU={@*hA ze^gEX-v?atg4eAW+z?x)O@)D#XU2nWR1Hk)!2=G9Ln9{r>XNS)&>2kXFPGt5hK8?W zW7+>Gsr4TNUx*t zHdrh)DCA^B+|HdwIp=Xny?gimr`EdH$=3GEmO6zq;$rQRhbbR-x)S%Px4Z2!xiFa*@W4*X!XS-hQPx`0;~gSP2GPF=S3I}8m2(dXS|Yx<2T5- z2L(a!_dNOER%KZFV}I>!#rB-+6Mw32S05nB;a5n04=beu{M%)kLdD#&QgM$dW5`cG zfwjHz^i0n8dr)}&a<-Y<$9pvS%8pFxW}{1qYoUj>Rxo}ec5vuDX}jY6-y~mo>ZO`o zvd-;T$CJF`beuj4L?ehCD-mu|?V{V-jY?w@%vHv$*wSgDr-B#nqys=Q=n(RbUHUKz zXC|m3cw>N`dzHp^E9T@P4}jeSd971nOtw#Ulsmu!Z}2UJxVIEN1blY}O0DeG9SR>Q z=rzDPBY=x_Bc%}{8u8{TzGmhe2>yt zN9{E#8T+N4$62)j%fDny3sv6Wo-NYcFS1H{pVN>u0Zg})ZiK=m0o1F#icQ8f8f&C&jo(dR+;b*I^0!FPBh&y+M! z-mUay4*>aIHYZf~y(foGI!+0!*0)dZ`)qwjb};a2F)=B?B0Uf1bTX|~Ejvv(EtWfb zQFc5Qx5Agw6b1k0$g_=P=1#m3;_0DNgs|66oPHFhX+ZDx&((L5ppMFF(}AyxjbOQ- zjJMZu($m&e;0E>foor+FH?;ZRG>(x8=GC50mTW6fx1vU)u)R;tq8}W;RIt{>>l3IS z;kqHC#P}fv3^*WY(Yl6`f0i(+fqn(kS1w;3Hr~O-db?UdUaGOv33xH=EcDBfs316r zWW=TQ*$x9P!R61D2z96)gq9$9=Y8uE=-+5Q5X91@G~^xZ=k07q8!gExhLTqgU9CHR zF^DZL+pLxzn#7$MHsi1TpPs^H%l1IV4z{_UMnP*l#q@~X7|Gbz{CJ51$A>&YH|hW< zYj^(a#R{+@KNox9!UaI0Q+Vc}!gz}v&kcJ%RsoxT>+)NZNeL=y47eUzb$ zefriVD2BBMyy`V%Q*~sM_ozE%?Rt-P-pp0v<6TR(u+n9XKxb6+giD2i9@If@Of+1GKq3>p;gM zYAuIP#*6FT?Z{pb?c<%GFCGM>?Ey9;M&m#><0?(WXh`wRU-dkcD8hq(?yStup=Xyi zZFc~BI#hW(OID;6uWWHj9O@P?qlIfDnGl64J_j9D?B-Ke!GZUHaikjy0( z%r%4^kSS@uhBcL0{+z%D97l+i%Yg0joe%H7=b~`WD==aW_QV{nv7-#QtQb&pFBW9}7%dJ0 zg|^b)-v|6DSOMc;CYyYJ$}8LpRy&#P@8u8#uQG7*NI~tcfib+Z=-%d^R6@znXn({hSeo2;a^~^h+tjqG`|e zh#0@~0$SgnZSl7g&G8bKE?u*hQ6w1DaX+l1Ee!=`wV$7B%b-uylDN;e%=s zZ8xjJCs)aQ$1rw1XIW_w7tkmm0|Jb=(O*SziEHe7r3fr5b7U$8CNrClzy5(!$ULALwAT=h8h-qv0dfw+-#5x_Z6HV56`K zW7Tl=X2Lb*E_Z0-n#bn_rD>*K;?`XoH%{4BMZZ}EOrVoxoI}A%^^xmH&acx35HEuS zz<@c6JZIBdbKI;(pBd1E=ME>oSz?SQb>k>I0=T1U{ReH$5x zZkyNF{l&BZh`AyrIFI|3P9=UtCFHG4*TFpl2Y|Ct_-lexm$LPNE1>c`4^rmj`kgYH z&lyv2Pgl;e+V{pNVN|ijo(9LH1utHJ&i3g3dBGUGq8KvmI_o-@!02j__8Lv-8O`Il zCg65#=(wO?ea}XR2yi^-ah&->hF2{}yMJWJu2WuB-NL_@9#=*zxVCN(0JpkA4vUiN ze={PrTdvyUrQ4{-9q6xD$t6>zy3d7PPf^+yPfyfh`_ND9@~;8?U;9Ir@0m*e@D?-VN7mB6_YFfu25dc{!9DZz21jQnPoq8C9nz1KBVwu5_% zm}K!;O>p*E%geaIzW>iK=H2keCqrm|ns}^Y$d`OBNyDNiXz@zOvS_$`-5{iSIT84V zJh3TenJ=j9fZ+n)?Kk!|cbwp|GZ%F`5hotRN}2KTacAFd8Gbn%`vhhja3KDcAuAKm ziTEsi`0s!gI%s(3I@U#cV&Al4MuzrZD6;=KJ;U+Syb7v2xBH}SU%%?Yzzs1HX!dC{ zqxbq|Xn_zsRA)MER{^sa!=nuBsNp#PTy3$Ts&{D-rJ~BJIwwJ#8u)l2EzOSD%di*7Je1Xu z%2)Ubi(`5Zd-#-&O{^Cv%s%G1moNg%9jxP?30MLNb241;v@JjK#IJBHJhUGutcJzO z2Rujoq?{Z^C<2d6^&Bn(`~L3~wTmbDU5)oq=%z%bMA$!f@-{YwL~}K54T}=o@jWD&2xu7Vglz{*aI107`3_UCoP5#9c!P zNtA2COqxo<=N|w^H$_Ukm!jcXepMM}$-CSp z@;VJRaAWM-jj=-=AnhNSQK}C5BR>EeqSq|=nMB4ycy6nUBr33=W|`; ze~&iQbYqkzTgp zp~`Q$Y*LdYOGo9SpPFaQz(5?IQ5Y-{O5`bK?F-C!jeQcNT*G z*1#qNQVS1NS?>c%as^GmPooo;9spw52KJm!kZ_bL!!uH?g2<+{T4c*D_3(+Up#Rm) z=TIuQc`R_O@kpaJf#aYhHmC$br3p&)bTAh5k*~bJPurgDz)bQd!FQK|E~Dmo1e8FSDB31HV7b`J_U1}p*H+>W z2q$v*Pt3?iVz~RzUmwjeO)jf};QAVr`;x9Nq z{}+dVv^Qf2^o#5y3c$vk9+_K+n<4aT>GaPZE;8COWTMdMl#|?%5FF%MtoX#p_GUr& z0`A#dcIl202i!vl2%8lE+7YKPoTI}JTaaoM$6ezGAYzrlQp#}g6?No0KVMzyz&zQpP|=@GW|UWsJKc( zzML-Wkc|kyaai8|6g|3bJA<2+JD^~cBksl02MWeod982Q|znnZ$E1Gz! zbOD5SZ`(?I`=+U+#69HzL12KIbc?@jz&{>y-|}iQDZ{RjtVe`rgLV~G9cYN#Y=q>< z2l~^ZZ7I*wr=!0k2Us(Ad%?fJquqyG_k?hly0G$?-xQIQ-3j3JT!|MOL~k;)=i{Cq z14`lUT9L7wIHg~!eBRJFOE>7TgZttd+g`rco(9UX!0RWAk5*S|VR8ChD@p+cxlP(1 zRMD(Hd6bkma>+|^&bvdr6@sNd9z?3toar@R%a0mBST-wI-S)>HVsUINVIXGettog* zrRBumdRUz&=GZM*(tt~eNYi->AX|Ha2l*`$G_e0X_g&7KG>iIQyI|OD*Qc~=>2>}? z9k_o^qc3v476e5Cw`G5wfWO>IgcxtG;JF7pZ5ByzCq`q>A6tz-n%$(*Vkp>QKixgmR!EOFWZ7fof5j?gYm*B+n>(q#RrqPfN?g$ zI%m#^oYdMe8uiys6MCZWBXRR!OlL&OnK;*H(UJi_QwhVE3A>FPQ+E+Y1NYS2I(qgf z5{_exL`KZo$!DJ^WcSQ?G-xI7PA+Ff3VopnNPvYiGYd$uYPwr7zN|R5!u%oc;;d@e z!`$<$#^;u#E85cM7@3*1oCCpY_4^;*EC}??y{A5EX}@Y~XxmEay7LvD*~4uKEY<}^ z@&PN%_{aMWy1+HA_|Mj0j(fN;7;nf`*JP24h*PV#Teb#%{if;_9`irQIUm00S~;}x z!y*zk@F!RKG?5iEoPAi*OzN(sl&pH5e5)(!<$sw0n#Tq5UXqaDN@q65t$zG| zY}uohB6!+pMQLjHiUFLoql>MKNdPdOml4yDl)czPS|fHZ^JciaGUlyGEMyDczyg)6 zhBsf5Jc7-HPk4zod5j`TUqODSlJh&0WM4J*u&_d78@=4w#@VUJF-5uvY z;T*I#9Z0$kFvw7zt{p5mLut{V`DsAS7J(sG{T^f*8JoHju>dxc?*>$>!k5R2GAmF>s#_C^>hOmw6H7Z>K@eT7qg|Cf#H zKS;U${|B_q68nHRoIpCgKo}uG1K+Z>6T+P;)2TR*j*5xr;tv6q(!l!;T8zd&a5H3P z8_^`Pd=iZGg-L|uf>kj+;9`Ool0^qQEdDVnxdhU^7J+AV^yW}J-@uE{)}*O`*ff~W z3d_(j;zG4}oNAq*K;jpxHh9LcM;Oe}BiD$w&)tvS6%O*_^AUCb#S0MXaYZ9MHptBx z_#}q-%z~k)TI!_vWb}!|&vdArf@kU*8kzECfXW2_tUo(>Qu(JM;T5&Lt+rc-GOh>cie2)H3lsU)l|ez(X<-uh8?~X&=T_E;kDRPBLF`V2i*}e4G#s0 zluA?UZ18GLreirv##k@8cf7GGigN!DSGiJ+2yt33!=O6;aTwVPWrpAy=2z zoeDsui5_a6wYdB$Oat$QE^0`zGNu_hR(fI#IpBimT6KNHnefS#JsWnQk5!Us8l2R0 zuUK&tMr(}1+t+F4NSaVS_W5B=7{sAgAPf%SAuJpiM-RHiptHQdeQHs@lNH~Q11aR- zp9f?Dlm^Sc(tPt>@wgRD8JaEQX=%6U6a$3Ww^BiOIngR|-<+Ph^kvN!HBjE+!1Z2& zNu&eqO|itEQdnFZy00nZ1}VvQM=N&~S2o%iZVOHt9r2YIA>|vV1Tb5M=6*$+`_qBL zVe77E=D`J?x1+#M*~i*_bfxwg=&(j&3lM2fX1~$Mj1P~xgzvh3`Raco6#Y-CfScjq zS-t(eNgA<8c1Oe<0}JVRfO#7QdmzHNQO8X4hc6Q{mRqJQF=6sl@}_aB^pRSwB1TyK zMes*T3nx@vsbBTL^fOe~H*v}W{*{h=K&Foa|B!#&o5JqHdy_?+f#E!P#x%?@YN$Hv0|_5ByQ&Ff>uw%jpll0QlEfr*G~< zcajh7B2NbT$9X=u32P?Bg$TjUfB%3O1hfFsOo0Y4QcPgTGW~R9bMFPZn8+oo*@+!E?0haoN)o+K&GjFsy?DVoI3=d3z-Zrh$ zGnUm|th221GLHaFSy%TPLzgILruC2&{8tkH#x?n5ab!dF zOcgG^^{Zts_o?)2Ma5UcgWa(K_@jr3)>@lG##MHln8RY+H)+hvssJgkV#-9QO*;xV!(}9Bm+>$GgDH%rIyl;Ug}L(+**p7uB@!o|Arjc>f2&JAjOK& zChVeElR*dv@rjb7S4CP3q}G|Qc7cD55BMD>_W`Hv+uid`2{iD~fW}yEdVW!}q=}~; z9jtmud99C%AC6_ABA6VZDl@vEQpss;Zw&apqSDd}9t7t5OqSTQ@Ft^uZ`Qi3?M(nt zI9m0U-b~$>k{N5XKFpGgMOUaIV#ql%`WU*!S^gsw61IK22W-EglY!J?vt40HlQWn} z7smgIj`!d09xgr_PggNuS&w0^bk9?V0!Yq*t!lMgvb>HQaN8TR&<%#hK{0tyAC3+< zrSpIgbUl*E?WjuVlt~gqH%7TbL;BeZi`)zV!C@yC7dpC2bjM99F&`XcVjr253_0Mc zgi)32)x&+6k8X;dh&ge)hKu3GCoXn+Sna%~#)@;nsZ;kaWnK{V-gx3&QI92vq>gs? z_OA7I_quq=mn_ZAw8TlC9$oU&+(}M`*r8AMG>TuVv?GamPG5&Rcoa}e|HT8>w%^Ej`(k~%y`_dxQ% zeQ=gh?clCAxN!RGriXM}RUEo)!7>!x_!DAdk4-p+8S-mtFOcD~T3VGjOQU_`ig*SD zhISvxArvClZYq@@*8FWXC(AJPvZ8>7B%30tfU3@KB3^ihG`7|bp z6aUGOaLr+abI)X;_u%IKJuo~8;`h(Fm!1-msh0TkFtG!6mL^faep*c&V<=EAT8q5< z!*6@0gYmpLnNVS`XNH4lz-)XW=`LS$bD=1b@^gv=b?LR0Q503SDb7&OU5}Cpi zfcm;(I#2J_kL&TL%#2s{f*&^a7STUeF*-)3PySiY>II*GgE>=lKO2?}J}si}ZG*pV ziQI9o(<9Moc@sRuXk=}rOR0nRPkY^xD>^~Rc|ylZN*|8dXDdCzjo6TkW4#%TMg0%l-;wx<3JT1LA=s&G z`?|^vIB7A}Rfjx0#xTT^s_fj{&YF5b;Zxa)FxB&|ldt+l@0CP}t&9YAur%&=X13sU3(2@XDvP;iM0#AQZDL#QB z(!hHP|1q4f6U}FH#+p)@`*Y1*1dDb(TjetTgWiXE5c3=C7N1BWhmNl$i6ny20?JlL z1>=8k3?0CsUcftOD|Mtv8`nO&GzBi1^lX|dD0Eaga`MG?z+*eE|0;9LR3D<;k)bf% zAi!i_2>Em+*DM%Clcup_2O-SPE0H4RTm8Glus-#97k#ZRO1h#HZ8s zn*QIS->kUg=5B;v(Hs6bEJ86rJlxSWrQ&Lq&)+BFeZ~}LP_BZ;!FvhRVc)t>pXvnI zux^aV{VGO4otVSoWU7A2sssF#nD85S2lP16P+ravK}6l3l$r;dk+znrXAZr8lc47f z)0@}Py{$txdkzrZ&VCO^$afoSe3+=FNnqZjV-E=Fbw=rLlKHs?Cx43N7$t!-=&sh4 zut4>#r*4d^$#Z^VE9jX|iLE~wBcBapz#G!QxjvAm=#YCaqvSdkwUs6!k+Ea5A9dx} z>5s$=CsTAD54SYOfu=%`m#zgk-UuW$kj4qZDqJSOV%P#lf)sHkwwj5ur4%H0uwdC8 zpjstOH_I%VCqP$uSPZXVwFIn{FrD>UqrZSETD!ImbdP~5$q>%4a_y> zu%B8OnvK-~TWL93^;j;{@_o8a*W_VEigDlC09JF**Jsi z#~e}vHxBKJ5ggn=v8M>0x#GP5V1aX&@K>jqerB7WL@fZ8MMr=p@?litt4Pj`M)Fb3 zeN0eABdX;()5DJ2BqKe$5T8l5RsemA+CHtZbTFqNu)D0%356@<3t z-<|jOLJt8AZegK`Jfy8xrVKQ<0^nTc@|56+D(F@}S+kVkS91arG>39M(A$%?y!^|H zet5eC+T-5T42>+d3j2W>M&yew*6FG+4F80SEa2o%(R%_s+1R1w!r~-~cP$rdG8nuL z56J$+Z4>-186^YcvjinGVLF>-Y(-fB;lsPK!2W~{yB3|SbN6V~;lUC74lD4L8+>UK zBuHmoF+{o+V-f@|3H!(iwW3ZGw9Oh?Cu+-oe5SZI1 zsMaI;kW*%GTz%O|4$Q?Y=lzlj41?S}4%+hN4K_w195X0Y#JM$64){S33|Yc361z^b z+w`wixQ**--sUL%v-cRX)&ZI#{+c4JrfJZ&FW`a6&RVd6j)TGH?)WUNn>FlsNuRs( z##gg^7Q2LgPU9>CLOr$^7xoCasXk_^{S(b^WRyoSxNZTkXg!6=egVzZ#!^yZvk&*s zWAu2_e3;X<$3E~8Vp%+|X4QiOLfLPqcB%jW3%C6>(K%>8s^7#REx!J0f)3jO(%S62 zc2vbM4y)F5t`gC(0XSR=$Sq;j0#sgpFQ|tXro5e#kn`~W;=BQqr8qVr!bk7JExduf z%0S47w#1N)Vbj0P$D3?OF=8eIc^vWnLM#<$kFlX;>8~t*sr zah3d~8UTy&6m00SCQc+!iTc%82)DmB{SjO)0^ssyXLf>z2dluYw(dcU|vUiqYq07|@=Lto;lKjxN!7SBfgm z&PEg%HD2p-?=7or58{#tJAbgf*9vMV2ykHb#yOX8<@v`Yj0!(3s8B>Ej08^7SFfNT z5foB?=_nJD_6Moh0cL`#Olq554~>j$+P34r3NBIfx*83^&d4acjzHJw#@+U0esD#0mc?G7y(`b zUZ?g%NM;Ao1O=#(&p0vTv4&2=P*-Gu{fNW$+ zY)ZJyb(DyRXlCRQX~o$>2ap*70dG3i>_nq#eb?_FLzeJ-58io0>7wB*nfXxuq$ zLVIOGt`!I{qkR10sI@N>8VYB8o}%eTpLl^AasP7pngB!(Cj%F`cpqM`iKG)%{(~$T zz6<8*!>@v>QnRRISD&%%ZGJ?{LpnSNApMHxrR9M@n874$gdy6U^gkgLqb(sF<0U0qUX@T9k7B8 zqr$##n=Vc|NnlZ`(r=uu;DnJW8_;-EDFLjh(h^I$z7^r_rGcyh)xU5d9pIio^=~xY zWX>VQb^Wksr0N+QQuk{dbi~_q#KentfhnG;)3f2SRc4?>hoAh0={Buz%rkZ7_&FJ1 zl#4C_7#MhH zV8=WZw0%M{#W<)xhhHCZriW&KMq)mil%}qXU6H1<(PJGchp*v~9L++OP(Kg2m;z~J zNvxYI*OzA_JUu;6jePSgUEMkRaT4hr=yl^HJzM$om$SxIN_U^%BKoM98-|UUYyeZg z6`?oXUi#RAI@Unku7>D^O`+GtBo#4f`JcguY9b0fTi4LuTR&`!8@73eoI2Z5q-rmu zysVkH2TttCRXSvT{P@wV@q5>AqZljdzF8q5gSqp(lR8ZTLN5N18KlZQ_7q<C|!R zQg3XdlOiK^!Tp{u{XUGPSn90Nx5?@38>tRjjYl>OYJeCV+jlF7Ns#fK#w&%pS$(gJ zP=4{sp`0q*t#i}`dhB(`4OwJ?p)m{|7ry_H!}*)fH)8W{+H;L41F{rslsmq6EAYqD zBZ^;x#gB5nBBADW^`&uNN~E?X`(%uHAR$MM_b8gy5ghXGlzsFy<)UcU1Ur(lYS(Q zo68!yOQGN-)7+q?@2qWlDeljVTjzXll~Q1xnY3`(U#<3ku{-bPQEZS;cn$^qKsq^8 z;3lVp{wDR(sbeXsc?QdKcMQ~8dVk_>{m8oUT)p@{yov#%hjqZ`y>FgF@zKRo^)h~q z{_J}~AuR4R`A|Dd8Giso$bVc1FH+HmzLvZ|cT#+;p^Vp~O%`1UbJhqwY6Uz-h)1?TG`MFQm8^l*U{($bihX>^3m@|n!yBGT~U+~ z*rW9EI->e{=;IQ*R4va?O!Hv2B!m6QV)IQ|&_H{9WS0qcvHEP0*mqnqzdj?{matmA z6i%+@JWa1jBiZ!Q8H|8+MZUXO?Q@raIyc{01;dAiXXWMJZ#xyk3Uu+>0(j>zSX^i< zd@D^Rq2bd>fX|*#3Ge{7dyOrJj$$SmJ^PNT5O^p~d@skHlzvuw$5p&TPcSQ&J2%L9 zn6ZAHXtXlD~Fou*1-z zYl@pC=~0Bq<+e?i-Pt9h>WUsDM1?_%+2D9EtEe8v&zaoZhMB#A{CoC z3C8e?`iv$pOW(u;zKZQKa8g_(RrSkp`J9JV;FQ-2PE#QRn;3~X_ZczE26S0v-jt9p zJF4tp=I#@SdG;kfH-Bq%1>1pM83-EMz(N`H(Ufnw<*$hu6SR~x$U^(9&HA*K5o4Gd z9EtO%_0=-S^!kq2fpqnnQ*E%!Fh{Mv#+0y%SEDOPQD{XE#&-$9ik7X^`Rw$mwSBBq z&8prNl8gY?E;uU)1=Bi>eO~K8!Uu#UQ*K^Swv_-?!cohGuBsk3(JO?%bV=eFbZnD3 z%;-)?&>T8f2xsPe9-bNDk1axIaZ;a$#ei@671E{;9-G6J*0*^M`aBon1n4*6;!7&; z9r5i#!gI7*^&p)oMxAd*g>1n&Keo_=edvqJNNPLy%YZF$d=~wk^~~9`A>sW`Y2u;y z@4v5Ck#L9hMv<;KjcYAT+ai5*Crl(Q7J|<)v0!(jrD(8eg(Z-wkyc#?B&9G$;-t|t zwoE6QWBd0GO9p$C<`MXf$@)}>pX21wlV%<>kB^byBWT(3(+6z}$v%f)P7(`J=+?Dn zZ;Je@bRM)TLXSjV+&=|MT;3YEd-lY!b9iJ63i7herMNWgIXtfNb zT*8b*{SW^hU_9Ot`Fs(ejLh?;-(M9zxo#hk1N>Z`J#)hAFgAzn)Km+p|ND$ez?gGA znh6j<>d2qM`-d!rY-jUdkX_bXgAtFwQ4}p}b5F{+!d7hRP)~|2z#uv;O=qult_H{9NO7B0zT;|Kr+xFq$lqYnv;Cuz z!s6zR2KFQcwv7TQMhAmMQb~Ssv-F`Jc?)$c^XbY=9J)R?zvwy}WQ|72s0wg8jo;?fjkTnTS_E7!NkhOP_uT=v!yB@Cy4*95&E@V*$SE1>fA=PrxLbRHtn^*X5?6DVAdY6hTA&uJtf0X1{yKgWv_~&*vNIowR2|97b$`dXen+0G;dgu{52N)A z1^up%S_5~VDGLijQ(>T*7m4xnXC%q-JWE(a`;m_~#=Lz0m`nYf+!{^igWp8pLf;AH zdK#5m0LQV0Dq)M-pwwH>$qA~OMVh*#N3?4nQFdCfX5bHg*%e`cyM)Z$5i>Y5^6SdN zHB0xSCAQMe1DRpW{e$K$(Dc;3TzteFYi{0}T`C%(W!jE=oKUFx=GS>H72n^{b@>}r zWGHi1NJh{Si>cgM;!5O_sy?){R0&nmr}~Dv8s-^;26u6sQ$50xB)>(gbigkc>zxL5 z>jR}M7RvYd-KK4gj#rOguV>mXDTK+_H+9k&=(Q7sE}^#nK_oQ2dzOj@rrGeFTdrYt z;74<0nSW6LO@`cT7z`s0>=FDk?sfN_y@6rIe+~iZsp`Q8Fu?!{BRw@I1iV32zeZ0i zK~p2=aM!7De1?YKGV;!5wLdlS5;FE&Z4L17I0`KACFk9*5&=6cfKP)2=h89y3(8<8 zI`HonC>drh8FoDCy8ttTWzha$|8?EZF;K)mJvOByVnNC)n!#sisW}5E%&@hI+V`}g zothy2Qb8zPMLPM+RQv9S=8b!dol=N|G@^z1Z(#QsO4kvX%kH&EM;`YrfN0Efi?!vD=y=(|1HZ!Wz`rE-vPGe3b zAUl#0N9%t=(F;W@QGX%#+7|o+FN43rB+jvrrq1c4PrjzO;PIPwZ(@;qcM9S5Bt}fY zX19cjTLUjZ{N4~_y}F-YGr4{^oVtre&=!F2w5+)h8g@;z3in8;x;_@9a#M4Hzy(M7 zvaJP5Z~%cjD?psR3g_6T>0owD5?WbfY}nl?_Bay_&dmo4#)vX|$YJ(C-yCe0c6!4x7fz-oVJVhUqLV*2Z4i zgVWN}lQ`p7_?K3srw2USU?HRAGKS~-AG|)KpnK5*4oUHbPjt~79UaT4gU-8HP4!bt z1op51v}b?OH&axY^LX`d94D3FpL)#4!I>Qs7i!(nGV}2&SRIMU38x9IfbE0{Y08F! z(^x|U^pr5HAKhcROvs}N2;`UAcG(?zFO#8vhDn)1*5Z!DuHgG-svi%aWxID;C%KGQ z{)e_z$3{pY<16y!z@9>kU@>a|ZAXUQ5r37YHjh2dptVf!rLAh9;K11Y?zP4x$3ySe z=vsuZum<0?W9mu)f_-4`Hu8lVICX6wJR*P@8-K7WFDNGwb=Gi3LCxvUIZlFI`oc%EMC`FV|rISz;5fB6$Qi2UsNvf{CjC9tnsyeGG027tU~intRw1klP^yDhB5u2lL~8g;0hMfll#L0GL}>Mc zWj3xhEmC^eU0K#mQ0z$-1q=nP234d!Ol=x)*+6)gn*euZIjG>PCU9Lg-U5{C8^+E% zAPs$!i^^eOJi>o*r7hCo;~U;z;9iS%4{lAv7+9bm(U^O!vwhd4CMeY-29~Vg6-+Bh zdw~rBf0Q3OE>+mqpb^ZD5PdpHfV!;x%e!-e6s!($K}kPLyk-D(RQVyTmovmto4frv z5!&SApohc2>No0o3+W{9BPa}GJM&dp2chZ7rY_SbDQ~R&8@#^NE>c=(fk8H~b`Opm zqnuc{6z%#MN0I}Xz_ScWD8g0EwJaTX0uK9E?ce&D1t8f%;LvXnBhYL_DUqkd$k0BP z=tK&v>mmd;IzBP6UZb)S#GMu|rs9S{<7yPgF8n?41tHDB;HwM1QJ3xNI~!K0XW*{G z(6}uJA{f75$9QpXg^KRi6F(BhO)OtKz|xN0FyOuZtzP5Xo1?Vdw;mf*h&<7S86v_V z0In2oOz-?QvHZKE>uVe7uZBIVi2yPXJRik{kMp`Vpb>0?fw=J z{R-0*jR{9wG6Y=S-7*39>u}+dbr>T{LSe$gR!>aYN1_C^HhBmo44uMb!|Yg$og7KL z$DhA@?)3wkSPd3-&9p1kPSzXeb)ZAN0AKhT8+P*3=TBS8)WOGoF5VHcie901kB~lZ z3x# zh%hYm`;yVM(iW|ltUSPxQ0zM_^31ja2aJ}ZUGE~G=YZGcq-QZadVKC*0SZm_XLEB{ zK|gY7M|#mq9&GA0E&<8ipFba<8)&}j946G8C!o>jxNhjozms>9-e)s_#?=VEuZlRv z(hOiKf+J)(Jettva-_WqynygT#c0FAT==9cOx&gG)qrPNq1w=KmMMg^eUbtJ5xxt% zXo!c5EgC1y5SCGj78__bkpk zuQV+ZG@l7kd`*6i2sR6@k&hDTa`3b-; z4Z{B`um214=Wp8qy~kDXg=q>Mf=2G@y~k}Ra`Ho(QoOQ4-q7Z)o&(sGwpWwRFYk8X z?;Go|v-#^i%L)O(v3McM3m+DBK?Fc?k^iOpzdm~}9?C6b&;9Xa@hG<$FHkNOqDHH@ zJp-cudf7km&Ho?YaJqfLf12y?+$X89cnUJ&Hu`_0u%{?mpsh4|cCcIuQY~Qm4RmRJlHIK+M>E>qREa9%noRjWcYF7$ zEfhO{+Z@^G)g+mU+rXBCzb5~!utlDRqr6rOg4eIpY$w>J*QK(SUiPwjN8ZA*;kzLk zli+dMK8=rch-BQVy?{vlXsZUL;$SvyG~QTKSo7|}OJ_8X{(2cC|Ib?D-|i`HR}P#w z-;u**p~#>FURhz)m0vl!4lSdyo|a>EcUr}TEfa0oO;6dBBqdPB&e9e>8+Qt3v))zI zoDpWeh{W;-_V<1p%F1pAfdFM_sOP%Su+Q8ri2Otp)f_O_{>{53%Ti;uuTaS1!M9-f zKxbQe+q$uREtH?yE>kKawB%x}9=5R!sXF|I&!=^*Nu} z$i!Hu=d;eog)OdQ4ejg{ScR=xDV^Qf z51z`?rs=RiV86wQp{!#Nn?d3AX=G-PJEv{0h_os9dl1+-vAk1F?P{K?&*j(@^-WJJ zMk${gHXsU(z!d^ebGg5_=S=6tWiK7x_lo{tBP%>QC?8Y?QxqZFvGf^V1lkAr$aM>P zn<@8-(SNz`xRe|?^bdoqWQVZ`S>ef+a$=#`GKUc43h(gO=NWH6z|2MU%^64@7Yj?7~~`3c!~BAJ^+A<~a`qWwy^Q%k4P z&%3|z1S3`P%Z=J9D|EEH@FEzjWkJB5jZ8vg}a|1H(<-m3_ZU9(FUT#VqtTS{Tdbd8g6)q$-uGbKFbdbT~wYNCigBBmQf%Ez;1WUbzbNtda`4)1QpneNvIbhBFN#P^P(l zBa=b3pNmA8aizrs3CYHA1B#7owatnJeyQjmC6OrqwQlZl!pI=`&B^d0j?^lZzltEp z87~ASTO*VD+E5gke+TivrTd$Cb&{D!=)qnk{&<$0kvm~(`qAs&wpS|)Ut|3x01t^~ z2o+s)@rKClEtamG*BzW5qONmK&Dc=(cwDt*x!U&j7CyiFfk(h0>lu+-19$j(2r{om}wIsU&_{LURjBqc2{Jwx`9Y#|GJL zvRm@{B^PF~H`NA0*Ue^BGB~HG7$sWP;GA^=5=7pb4m-^^dBMsX#;h5-dA9_o@q}Nj zg~v{F-k^*d!aC*7?sE#9jBvq zv7i>DeAjCtY|J?N z+tR?yu8J3lGMT}34=O!EtdJ}7Ws#?|q1jow5F6-8b-dO1E zJ;VVSL^+A8(O5tEfPee>^XEU@nFp(tKUsHVQKpA9AkW!u5l|Z07QhOZ3)_J*Uj$yOw8eGZ6Q4!D(uCXnwqvRXt2_=u}Ye{JckNuPUI-i zvL5O$tb9f&RbtioL(<`DLc$REbm`78a(;StjMk}E|LG30!qq#AL@X|q4gwFQ-qbC3?c^U z(IDHV6y3?5Jcr2{J%aH}5}NAt{o!po2UPR&YnKe4@DC((A;3qpQJY$pBL+QRK-g}4 zaXIUNfC#4WzF}t@@8(`AJ@=MBH$R*^no9?ouP7!3<} zA)YCI{7v;x+6B4*vJaoA?M%y<+P=Gm6k#*25O!ay$u^~s21U{hwohxFc2?{ zkzl^~L?m{xg7~5Im;TVhPzuys5$G>{-1E%xs`mX^Ti8MJ%}Zo6Ul5X98On`-K<4uX zZep_KU6J=Mc?dtc5QXGD!9A5 zY06ivt+VK?`}6%0Zbqr=?ZjXZ`Ft2ci6k&N(5|^Lz)l&vRk%7e@=faLGL5CBbW#*A z%%@&Qx-UpUDS@+B!8Y*xFoa?C!d@Mb_9CG=T6NbFyu~W6jQ!Ul~rg2 zs8~5eUz*Z(8~z^AeDNkg&HwqR$orcnJZlZk3Q&KuaE6CBY2jpbvDq?eXk9Iai!djv z7XTtf$lfLx0+K-1g)XFA3U$;DLRJnHMsuOkL{Vehn+Kn+fRYqkqnbdxOdJZa1iA_$}=yuTy8se3y869d97ejMqNXL03S{X zXtKcmM1dfs3E!*rMD8#nmoWW>XWnv{1?>|>H4{F1XH3@DI7!!$Q`4xPO6-QQEUIGT zuG_KzTtYig*2APe6#G|b|BWBX6Y*$s{vn; zE8haG04krvSA`21GG%;Cx=Aq%y)Pbn{ES6mh@YEulF(VKpX1OZn++vBWGg<&dQvi? zAkZv7fWVm?>0CiH;l3H&l+Qi+sKbEaJL1T zQLN?UwEtA5aj)6FFlm+10z}cuu{Q*xEiNM=5?aUW|;YF$AfQCLW zk>}QQ#gp>XPcwS+Lxqw+fNILiE2%ucB?%*R`KPnKfnSSg)7*O$K+iU&y+HnMLWQ1X zKvydKLNKTeH%wpba0u^Dzaz{{sPzuh1EUY&m4cpO6@_sK8l>css%LiZ;qzL3+jx^) zeEVaThh1|))gEYafSA1F_|mzHmqD(pm8lmlBv%t5s(4rE&$7D?vUX6*gIBZ<+#9O`FN?VqlGpQxbi^2vU61jM}ln`HjYg2w-~*2I9b6u*ZgfafA-ljWduTe8+Y5 z-U*rwx?Z`HFytNPnl)@Iu$#;}zicqn$dIk1wV2Qvte?l(u(2z;iO^AQ^|>b2$0ptr zUb2sv>#yLvCY;-4F_(&~6x`)Xd!C)&LQ4G9g^4(Y`6<-leaN9BpSE$L0%)or(A%h) zQEXy$sF0rTiqCP7qIf1 z`p}yKn1hp)IFlNuh~I6+dGNKiwDX!vtKNP^9U%YTn&f>B^g~}XXbpTM&&*(-5X!X0 zPy=Zt6X<@dmyG9JullY(Te`A?@8%YgF+op;y_6<4G8%r$9kTiZ1A@&fu@YX8l?2=L zo4n6PG@?b4w28r?k3?b&t+yhOq55UzaWg^N%c;r^CBQOtX6h{eQVS(IIX(cz^rHY!(}klYCSiEg7&y{sz-6R3R|9=d>hEF+`2&s1!O92VB)>`uZ5GI ztMa7u&X4c{P0c2NVS$ree=aMx8+`IN`fo3Wr68AbjK3S<6u{~^;`z7xRgy70Boy9^ zk`f`&lx&a>4FQkmE^a~lt?=vGKtfaGuY+^8n#*#Fi#<{vrwktQoq)KXMAr%wnuaZ5 zeo9^%*9&u$jVU-HfBzPWgFSBjz*^#vHSoPLradJGFe`JHxk#9y`jHXUwD%|X!Fxys zN^trLF+2Dc7wPsSs=|YvWH^1va-#MXZw=EhWAkOeG>%)yw=E9v1ko0L=PC%ZzD{8G|q}0hCm@WLEUD^57iy74%dca*!gPX%2`{>$7fhxZ(^Qv-*R#BIWzL(sRE5b ztHh7yt>giW-9`%Z$^qOM9UU~QYZb+KsF+ye=)9+>|1GNnE_AD z4PIEVya>(!bmo(-|8>njB5w}7$Y#5k#&LllpEn}7goW!TIfwAXnN^X*3Z z;gMWs4yhh0s;MN73KepxI^S?LA-of_@iFp!3S!F}CGPT0=@ zKl$+HiunHi{_zEG^8zWpkXq5rCC&^ztt;4}^+r#zx znvCz^)WE!$oeQHK!JP+E?{kwn0NpHhAE0Grhn7fU+X(;GP0{HMo zHNaQ>J8X~9vh0C30j2gqd#em`+E=h&7u9a^FZwCmhg(9TQ&)`P|9EKs9W7?#fVZ;; z_%RRb$A($(QBOJJ1_Yi7~r#XIY-u}}8!v8U1r zHDd#J7ZTZX9>i1iD5ycQ8?fU?uCx~zVgk2n$nzl$R^J4>(UR%oWMXg)o|cTQ_1(#t zwm-%%B zU8L|6R3y!QVsQQe`NK6`TCnYc|8IA*Zr&ls(;lh{mt@#o0eXb-Qz{mZ(ocrFlwi~( znL*UmD)*=E&>8Zm@f?N5i*{HyO_nbLa<);}I3n64qLR%+aHMR^7#zen%yV3d+dbQp z$9;P_J6BKDf*+u*n>8FCaP+;GT1~?;br=3o3jnE!Fw@}g?ZLB{3Ph$2;?n*16NbJmyHN><3Ky37Ylr^vxCB5P09kR@68v^^OQi&dapwBehXT#@ zs4M(*yPXhAz_vHv$S-%<{O_%yYz_NJ^pm9pzmNSaUQe1$Ie^1H&nSXUJ@4-YJB5&4*7&qR{vq?s=cOF?kUPz48me4cV{yUr3+p*>ppzBBrnAUA0c zN|ohloK6;Xi$_P8J~C8-T=vkiWH~jV9h%_TfN;qZ2wx4QP{2pL-X@508#tEfMEX{=)I}EZP_)(>IRbfJ)GzMQ@Ow(y|tNCji=@K!IZne6lFR< zWiY{~0+m|WYysH>vAr9$Cc*;s2Ekg&<%?`+;0~4#;iR3Bk7{ZRHd&@!f5BW=eg&JN ztOO3ylXR8KzZB)|OYYn`>ujKbkLX1Hg@uj1ZX=I-{*0Wqe#mZEoPK?1c;eV9PFDLq z|7PUQz`&q&lc*^;m&pUr*XGvc^HF`A=41b7yk{7CUC%u6FOB7{RE9)SBYf? zm&DLCg2|?qVGYiNC&1@ZalYcN+DimKbz4I~8_~!Xs3<_^K&~XG88_+nFHUmwEL(Zx zBUIF~P*}$2laD~B8BQ$l9aYeGy$$t){qh~2fNWFDe^brHp>bpAsknQw*4!>VhdqEH z#-CPES`M*;e?Ub&eCU(N8`70n8_2?8aCC6^ExQ21KOO0n&|{01aF~O4z;cx$wIh%D zR<0Lk>*2pl$#}AmEZ5A+jy?I7x;F^a)%xwLvRbrYyjjwimD;KRw| zrLe>(AK_ao2-~BxACbB=s9AP2oQ%JZ#LwCoTt^lcH;8Y7uuc8m5&|~6DmT9hG*{^z6STZCmVTJ_oqXDW{*LCU-F4&F}k2KrFCvH_Z$4<7ulh&mX41p9t{yC?}z* zPmF1*z+L%n%jR83z4YD=3G4XtPcwpi?&O17~VWS)&IaM1dm zAwCrSVAJ#@DwxtN>q${9Y^<8TD=?{RILj(W8l#YO=lfNq&kD?p8F^E-f(6DK2>m$f zm#7j`W`<_gh2N~>bsR&?@&Ht-6%~dXStME_KVL9DwYU2eV4bVAC|e!))3fXq>@h(5 zx~emfRej{Pclxg7AY_vO6%Ec)Kq;9@9p-A>tguhyU!MjKV4wxyDt&O&#v4dMzXUmL z3en+$0|)15S?dmhP>r)~1wg#1Kjn^s3g8ru`acX$Iv9Gsm~ucKY6STL_MkW*>TO3v)nA(K2~T zXbXYO`{-0@5U(7`a@r*$d}*GUHAb1-n%eew5N+~6dz0xjn$pH9B^NZJNuocGPj7HX z=|b0zaqs@4?Yh4lF-OW`A<^_5%fvz`Og7>(@(?6~vNYQQsxmlh@n_qPTPzV05}Yi7 zS{eJa@hTd#f^C7PL2P+?CUm)=bsrnS;!2H*;_s70bzDpO9MeNP`#&lw>%I9ORLJ1 zl*RZ=EVR?VV&Uy_Y(h)T_I3MB?qBM@97dAr=a^0=b+8-OaOLYY`k-{DT$yzjC=al+ zzE?LMIlScgwJ#%DlHIvPG(q~Y2=<{v_MsGhDA8ff-oqc8j6mNec#~B;op-(Pme?@P#J!`-sj16PAVvpp4O}Fzq&5=odQ+pH z>Mn>0*g#=BT(Z0!HGVKVe-u;5bql@-Kkkts6*Mwd2s>c!f#KS_q3nhzgfPbm^S;Ht z$M9#$i*a;pvXaw7(mMer2>xiU zcuY4iMWk=xO;eOj0X@NqFz&R{ zipI!e_wob+v0Ah&G4`<%1b@U6X*So2H@mZs--yTs(7&-(vy>8#tnor3i%iiI66pADbqUK4?G9OqrFXl#EHZYeptC2yv6BR(MaBj`U(lb;hrIgAO{}`x4f$>aZ_h z;J0Qkx#iDpv$1YF-Hf|=sgblAvhf9@#p806cJCoL@wL77OUenC#ILU|yL)$cJ^MYs zB}NCz5~js)t&7$11S_gTF7nJQI$uWBTX9SWACxoEK%A4{x!K>|a{Nb!xWB<6_8N)t z9>Qad#7A0#%d5lX7V= z+e>jx2Q#W;(|F?&648cAWe-)Dqw+N-9R&J7aQ#{)=C#V+3ob!FoR2bP8Ul$G_YUL6Ek)+X77Cxr7lHWRAQI1_ z>g}JjNxWFUTwQc_PMKx>P6!emSgGX3clLZaf{EIHm`a)C5cVFRzcwdT!#-gc6L~wy6mQ1&$d&C_I$(T`=9=|s=mKRVL=WlfdS(e zCs1GD-E*`C2E4ZiIIjCb2lvEl_fDf|Ok(;RN`nCRoODZg3){sN%jay+H{tZSAlZz$ zt6Ry+w*-;Aw9FrfRjb6_#_V$@Yi@4uh1c8R^~1gJo^aB;KN~T#3R@k|i80r~a#nbZ zv1Sohie6Sxj!avV$1bM+YR7N;8&D{4D3>K~@^k&T`0&~res&!=da4}4qICM*ieAHI z`0HoQ0zU%z_OR_GndxaTpx0LJ@Q3$Xy9TfPrZvF%uXNuvzQ6(WYLzk9HxCVoW1B<| zy$pNZ%hk_XH-ucXUceQip8tqY_o~LcDjo0eV4#%`PjtpcOBKVfoLr#DS_3x zMBIuCKY}-48rCBu1w*7jgc>!C zvZ2}=Lw;|J$KV1cH!_t2*ixPuOmYNhv~&5$*KHbujlAgmNZgq7b9VI2_ELbsS1&@z zP3IftgT?KILYpRPF%O&cue*t5!!lS7$2TAWfpP96nXKo!upO=WKRfGB;i!qAHp-rB zTB-~jz_0ZcRecP95_P_O^o>lKQD${PVVDYJ+fKSnU1}hq+qTB`Y1qCu@ z3p_zozspc{vM{V-Ki6Nl1rl8_R_FPHKNi^i5c@_A3^EA&qN{Lk`wgX#`An3$y=HHI z-G@I>@4uI3Y}%v$4L?y%frP@|i|X^3>qy`c4$iOACgVe|P=n@9eWp(=lfE+w8Fbvm z0;xIe(K|sG1%ndZDEI$-1u zD&h)P<=BvSS#4Pfyjch_JliM=LA7`G4o_n|x=4<-?5Hmm5U~Ai=iu}bu9a!>$XX?p z@73U9-$%Hs%S)uZJ z?}Z86T?-k#4R6`)S)N)YTsOCnQJ-ucW@g?kI%4%oW4`g@GVYyL?2BKxeIBTo3!kbV z9iD@DR3YiQJ*YClfu_ljWA}RH6&1PbZIT=!aSH0f%E+`exh%n5Ebcs%yMT|R&@ROc zabT|x!|!$xJy2Gz`WVj{N&X8ieL1^tfJ1!3ShmW2c7`wit4r4+BCcv{-RD;wmV-*X z8e*m~35biU%=A`}z1g!@tD7W?lI=Hp7L`Tz9XJo7x*}40*|h0AyFr!a(qnD)&QQ)@ z5X$X)bX3&Bj2Vd%qt zVr4BTcH5GwP;+q_N)6F~j&`#vb@wSbD>O3an}&Y=AdA{jn^&-f{tDtD7E1WjQpiIx z-Io1cumZIELgF=nRPg&`e+TL2&TtaxY3ERa$qDA_3#C1IN|g!LTee-VnMPB6VhUy$ zGAA8|RA43HSV3T(139ZwTWay3900;&2JiQ-FmAP%yBoSG=4l2fc%P%pV74Vt*$#*`|Sr3orT)W;}9q@fs`kPb+<|i zAD8i*ItovVrOvs_H5Cti@KuoKbnRlr3}s!ku70kO^d7gx(rhg9E$>r;Svbj#ZbpO% z{BUj!yXNY3AE!YcP7XxM^2H66=r$nl0QsMTwTgTGS3r&bjwb&nlj*(N(sV5Hu*Eu@ z{(2c4&`Y>h3{!cvHW zz9psQ7fF)J3cj@;A{(T@^}n&Vh5G@LYe|8Pi-?Gky|?wDSE^~-aFWNQ;QnS4^MRhP z1tQ8!-4DCF;pOOjE zOe?D^ug*JPKr+?LmazweS~D{*c$N<-{-|qcn}v^BBK^El3zj|dWrrMrh7bhAHjI*1 zf-Z2&SH>v(Aop~$&xtQaQj%^$=Aq$+h1JF4E5iPy?wG@NHIIO_+OB@VO$HHP3?i;M z>+leR$A`LdT9)S5I4sS)wi^v@v5HZ0(cGWxUm5ylL$lNnb@bY7xjfW|(O`z)^uP~jJA9XBWNo~3CO=_f@;5FyzTJL*`60BBBxZnPq&1hADk7>W$!D@HwlJdskWY-dFMY-s_d?o~{^?uY5jj z^OWga)8hR;nJG-iF6Ri~aCGu{I3%e=7|k_B(gNOAQJ|r74w*T43K;$l_cQp=4c zQt5|6N`QJAPHFJ@{6tegee)>g#}@q+QFI;yWR8G|J?9ntBNC3$)7r6AF_e)0VKbGg zR)gBH%BUW(u7F}yAiECzqZB`Js9`>oGnDe}>3sBsNxhBH)T6h5{xy{#{v!46HNDNg4`7L=}H)O&hE) za_O+o0IOwvCd+TiH5`8pi=i_X0bX4Xc5zz9q`D>H=|)9X|lipw-7-yLpwNYUTa57N1pymBja!sVLsS#Onh+)m|5)9>mBf9|* z`nYNz{Ha6ey{;^0x~c@v8XSGdC47$PDWbEcFi@{M#K&H|_ED(&N3L9k+))V@rT1ex z@vT$T3_dI4cphvyCg<3Q`*9s_PPr-wStLuDH{d=xpCrL3rrACjx&Aqi04MId7J~_( z-R_~4l@4*j!#nbwxmeG2isJ;QcE2+g689abWg6dw(W=}Zy;(#n+Pgh0sV4aBjfoK6 z)B3Pz`h8B;jLM4rcT$TMzJzPIGJt)x^%Wmy)sXW`Pj{yJ?=JzE+Yo@l!xuOn}TkprXk{u0!dSu1wDG2cWIevM%~ZKPrquY8tePLsSh6RtziUx!0m z>VnI*hCLONzqti^jx!B7=w!^Xi^8Qi%i~-KJ1Rm7@f=F*=uFi&H0`*xXn4W+dDOkZ zsn#iRoIT6gnqN}Ccx&us_;_v6cB=~Ig?JIl|E$RROjaOohtM0l>A8o-lk zZ*X1UVgKka6Ldp68R%E>lR_nqipMKJ1{8GP*VA@SUN4 zzKzH{f6v<0E}Ljs3Tyv4!$Dg|HnyYuspKOtUZFy6m7yJ|!J`0LM&zgKKD1gDweoA2 z16sf8`|qyT6~1{@EJ~)u}G)-_oys(S!O>Qm9fp-&?uF9G{~X)&l2=sp39MNbh@#r>GpGcI9@gO z$S1@gjJ*yoEmL-yu{bBzrXJ*Rv!(Y4Vd7iat10jjouCD~!-j-qmF;n(-(m?iPwKOa zWvLkVccy9W0DJQz|ReoQ3hL z=pb6WTUmg3j-KdXO zCxsuK&o)+L*-jsSR0vzn(1bRJ7vR#LU9-DzHoUpksF%0@F;0Oll*dZ_DVZ~j3H;@( z%p;lwlRN{|YhK=WEZM8MuO)Dn)YZ!FSSFb#>Pyt&pkHuz0(|ZTt~?i=3`dURPFyzG z2Q@M=e!wox*RD~lkkzM6E|vysPe`Ypc3r1tPEz3~tk#5y(Z_nM632&ypnrDtGws(J z^bz15rUea_OdGU!Z9IMYRAkK;fYU~YTf5ZMkf6tw?s3npjFP7VWvd*Nh<@I(YK|d$ z)AjZe=#f`W?be7X0Voa%yTuF>zI|nf8l>ZL&BRe-p;M2idk)j&{AD}TTq>-39I>g_ z;_4c~6KAp@Y$1-Y$8z;}AyV~3oWh|{QqXlbFURMX6d#bYo*)dsH}u!~Bjr0o(f8oD zQ#F{2Z7xIn!MK$={V4|0FVe>avRIX+3XmN&@T(kTwV!t`X=Vpb+9^IH7u4X*)m`Ve zuujV_JkN%Gs>r#f!AFOIA7sInOSlp#Vz)`%J3LlRq(M45NH}u>b)66W5xX=wz>L_= ze(C0}@Teyo@2>D;O~VF^4=)_nGZlDs9Xe5uNKR$Tt|1 zTk3rjWl^l0hgg_yv+?Oi3_v~~EB->b<{@0Xgv(4g$u=s+p?89O6c)GE0@b zq2^`m*r@-5%74@X?2NTm!W*F0LRC3sN9hkDPr2ORJ6|*+*vCx&i9{S>mj zJC8Ip=ug#M9Fc>&I|ZQC8mPSY%nFyQ0g~)4aMya^x)lSJh2mkZs5L#NS|5R4THn8( zAqYv<;eKc;bF%w~;ikcaT0@fo7VL3y`;Qa&?^*k3o{JrncP8(9LpnFQdpkQnn_SMk zzx?U^T_tT!o-pD2m#$yq85aD4<-H+N$Z?ZkQMvVF*5f^~J5KN<+|6t1r^v-?1An*i zS2<|Hoxt!V*;HIOV;|SQt_9kUHm);twOz-ao4uaLOlkE>A5LKs9JOo>mT>P6+fF=W z4`(Sz#k1v`%{u44iU2=@7lnFlzsxYzEDGPLVmjX&BusgGZ5IR; zj8cW3Bndwg3TWG!2tj$`qc^FYh~c%ajflGbDfmdxc4iQ1KlOIn`m0AWp%E*D7xz=8 zM^Em>&&8ACw2D9WHyigCzrkH8<;EKtHsSl`jJg@MGuFZ#*nM{z-(BQOgSd({H}Q=SMTRrY0m0Of zZKIfFFwO`)_3I6JT7kN8=UB?CK1n8x_?$jm@iX9j@k=HnpyH5+91&Mg9Gv2t%A^mG z56#fI@ow=G_lp@~k%Hg(+09>mq~4yDvwRg@&1VrRC)a)NB6ZtH`Y*LHSz%*ROfAX6 zzuAJRKh5A?H!l>3A{=RY=8x71#4KSAq`*PR|M8&z%M(}-KJ-#)e*Nh-sK9od9n)HF z15@Yg#It5mDJ+yi9c<5dxyH<&hYfmR|E>@Q9vqTh{En{+Wv%XIzb=M}8iJn8XLoh9 zi0ZV(ie&mQJGnCoZq8em+Rs+9`0}#nV>NF72xQV%l73*+V?W)pM5ruJ!8pJnykMC0 zIU~bu`kI#&du-lLhST1(uUQh7Fq$N)?7?yOl5H0o=6r_}`<4%i!Nox=zbYJdH|1QD zeKq`ZgfwQSzkB`8GTAYL?O(WB7{xG@-M~~%c~1L9cb?F9r`YE|5I*HNzdX&ZiVXbq zdXOJfHge7m_G9|Xwdj47^iZO{rDft2J6e|WV;3n!T6IiE{tDZ8YGu3mPH^h7k(BSj ztcR^*U`INx^%b!zaJPM9eRb6SU?vHO#r1D6RW_yFjwLn6XxZnoPIB;&hiebaLFk3= z)Tf2vdVK7;1-Cc3WA!;y(n?t{t+AQCy;5`mfbOH_%0!SSyw5F>{tPW&)vVTDx8p_*oR4esd@K z=30o=FJ-67{orYp-kF3nO~my1JBUG#)*#_yya(@`0Jp_6rxtaK zz~iDsi2(Dxr`NEzp2|N36*_zf3#J_F+F$M45s%Z4o^*uGGIj^gC_|}Tq@MYXtCr^nWrnZo~Kp zID{LtoJip@utwI1LJi$;L>DR5k=t}dP9=E?Qw%H7yGCs8!9qDU+luO^S_65mW!`U2 z;3eOgFQ~!&h$nwIOuln=$mk^>sD5^%cg8^n8+cdp1(X*tKjTx!?&(V~5}qE@96n2l z9QXW=zrLSWM;M-XQjg2`4Swo>;wXHQxFc$Ws;u!ByuTW#Otz6MC5-+d>qY6hzm6jVUr3U=$Kzo=$f&MA&i;bZUBMui=cg8??<@;}p>`apGj|W@1vxlb4L-Lc zuUrp2?ChuJ_u;;y@!IZ%f#;T-3b`ZzKlO;l-crqp%VKr#>*CXzYn|KfY1uy3BEQ>1 z9G*?cR0G#AGTcxobqA9*!J4-l?lkrQuexs$XxEx59QGoLvuw zzzNIlhf9m>WM9qllHVD!u4}pthrQ7{X~w`@KU#T-JpnFLwQtnx@JBn9;$k%D9;iKQ zCgYLk&v9+(EAHJt1aDXc?$)!UqOGH4%!KNz3N);CEIK6J-B%;J{5r=qj<1$t`GhJ& zfA}eaai`mo>8gc<5jAln3b3@fpFeLcJ#ftH=h=ni6sW?BVN~@TQ!a8m;(8tG=Cf)7 zsr;&Ffbg}E=^Jz)P|)<}#HxxHJ#b>tNcJc5;>CN5^eo2dF?rR3-HN;E+6l%86=Hx4 z7+BECI!>Z=ecA%Gb7rRKs!u~lm}$WaMOA%k$qI5c^!NA)8G3(R{{U0_Sq3rtq2Hg4tHrqq0y7MYQ1q@n!73?oC5v_iyIspoY*&Br{W{1Y zyg<^qn}@k0v~(=hlx8@E*~)SKOKKHKES@a-n{szO4j!3fKX3B;$-tW$42o<>J6Fr+ z+*(qR6OBUuQwroit8ocd>;@(1?oVFqWoE`4?8+iJGjI;ckP@9+*sTfUj`air(G2RlcP9aTWkI<8+0Wxzk(P@OkaW!x}t7Uf3L!)kHnKqM|NqFQujWRRV|_J5o1 zxti;@cCAeFov>W_;x+UB@X-NBosZ0;uH@rqhwhgSc*40x_>LKh3E}Zed!w4yJ*Umf z?@AkKh)W%3txr4Sq%N?p9)aunW1F(vw-(iZAVH6G*xDlNTY2lAW$1~iH17NEaawf2 zs)e(A?$9jdxm;e86020l#K*HHV{RRBd(aT`%SKodzV~3aYhmAm0_U#j4eiohh<5OW zVpnVJs@uVY!bQgcc@#F8$69+{w z2XHE*G5ZqYBPBdeuoV3_HEGR50Vz*b^setYOq8x(K|k`;b2i+c&ue~d^29xl!$By& zv)AC04+YSxFQac@5_La8LZ~b9jR|Uo0XG<>H|)syt!&mL+&CibpJjT?Kn{%YX8d}dQm{MLnaUFV&2m3`L*lo;^BrM=k|HBaatE`CnO zA<5^*s1Yc3HL=RZf66y_;!vT?|HIdtKtuii?Zcn3@03J|QCSlzYqpthDI!!VvX>Cq z_kD&4Awt=gkR^N8Y$I!h?8!RzoiVlxu=Qu_)&dmG$+OF$$ zT{{hAzH68DJ-15xw%e(JYkx2@0%Ge0v_K1Dk>9m+*iUV6?}M2hVrY2yU1p{e(H0U@ zlB-iz?z?4Q;2jj(eUHW^O^U~SkU8(*&G?U{D0M$k@MnRX#F~jQ3N-Iln=QACN&@8cuC5TctzPRC+!6VpmZ^}id$sN;Gp-LfMs4fi2az>SA5sMie z?j#AU9@euPf(|e7uuJdT=MSVYFs3iHv(WwNdY>S~L}Pz83jf}bVP+~bJPkF<<+bOn zZ0e$PPOBzde>n?fEr9m)A-IFcr(vy(Rg{$hmZ2M)}KC3E7+2 zDFf*#|FO~>YVaWAeOLQJLEJ8GbmH{XL6MK=xRIQ%4Xw*ursiplz!>9`aXkiMPZd?) zWKDk%<7im#{=PcR*nhWCX3_tR&0%Ny83FF_vATU;l$W>FkPQRBG$7;;$gNW`C?)ar zKSCCO@m{ZwkM*N&J;nYuecX^CWupb#dwZtt^~GFoIR4vYc(_tVqxhA_y)usPq-Z!G z=xy|C-Y*szta-4-)UkVe`B+2t%f%KU0>0>rM2)4t&?7z!IH8Fe1OkGK0 zzp6+{v_jpUn2p%(*6-^|a92?XAwWT2k-FI^}4Z-kdyt^G+NJ4WecgcKhRo{Es-TLElhrTTP;r4tqIBsy?H$m zCb(EM!G4%R+trIu4wDXyJcQ5fHIME7jcIQoFuX!xidTznH`N_vu?&taL}P zR)l5he7~k}9SALCnU&kw?_ZFT7ZC=k3WM8TZij7xJLUY?e?^WwOGDgc0 zxgndA>V6#qZ>GB#bVh5nx>4^LDV0hbb-qDSIme+SP!@570*^M6Dh?yNu5jsR52TEWCUeg!&ijLK=4`{nm^+xyJWmQU<9b8^7omHSZF zG$Qw_wV?Y8ern=u9t$o0v9DlIKzIxN?5KW!+s)Wh5i2X4NE;i`TIT@4$KCw4H1(O! z1pRRAyX@$O-zViJ$jM(TcqFLhPl>wCH$iSMeDCe;fJeQK1mZq?c>5(D8x{}? z)pLD2S%oxQyS`b~LUooYtnLN2uT@p;?Pz0v`Ox3cmI1h6C#+?I_;)>_`mi|L8!9QU zwtY|E@o>MIYD_k&=nZ>pqW(e3zMV5D=&?MP_{nh!$lA&btn;^8u~bQ=(MijcB)kA` zXEN&5oyz^%8GF=Y`ogZadsx4E?%3oP!wSi7o0g5{;T~?QHV_W{s{Vy^FNU*zXxOQO z@3-%Ok?F+pQSkd@^PhX~v_a-WnXHQg7RLN^#^=XF%q_EYWXWqz5btCuwZEsdzjGD5x(8<&%hVZ zmIsnxTw??@-Y^dY?&$dANR-u1qo!GN!2ZjIId9%9Hw)Z=+37E>q!B)xxsUdmk!n4M>; z#QYTAd2T!TwwZXKR<{w9u?y5|h@!OvNV^JmlV|A4$6|Y<{{em#`Ed#Y;RC+9=D6Rp zFmzJThTBz4tluW)8nbH3cvB#+AfIo6I>9UvU;+BeS)*YoXI|a=`VYJAK0n&6OAEe z5)2*xHSno-2HSBG!56x0jqSnF`yS~WJ{_qF6}#&&d9XZdmKk zomu|c%~p`Qtv*ei(}y?@G2jyx(EcdvDg_1YzyfTqU>7Vr^P0sBI z?_kxb!sKn!kxbyh(3a8|my$dwN5{`~bVg^t;?18KxH z8erdx0g;!x-j+N28$r6p&<7%13!o=xTkC&}f93>`nvj-Ce|SUc;{aW2npQ?Y9z0G! zQ=JZxqLph9r2 z{81)N=BAvS!c)y#pUTF3AcsbFAomuqf5ke#G;ot~ImUY)6*SI;_kYiiE^j%$^nkQ@ zgNueA@NFLDJzBam`&bFqR9VE_=)EQhd@KRZ>7M{f=>a!)|G9UA?5knse6nk*Y#51~ zV+^xX5-5(Kb9Q^0nRHH{?gV3TV_O)*^2GY-?o?has-|vl+m~C8N(Q!?Hn+R^;9J+P zZhGIAnQ~d^o3~C1q=mLguoj#oL0_(j_hgj}J%h}RgCOUU>mL_EJoA$;zL=|^VIWvg zzfR)n@9(DtnkwDR{t&*uYAsnrWCE=kr-A!>7{6lL;tw29@fITp2zPI(MVjEmJM^8l z1{yww{2P$s-m;)J?>p;)C;xA373-;Fre}cd-=rJ3FIooDwjLe%nu19u`l(qnUQau~ z)yOAC4TbEszy3gMjR`qIVC3}#czY+WSp>gR(-S&CbAk6M)~b_&=~}kgocL;jrL--K zZYmG0_;Dj)+4vI1GiPY8)^Y*A)_1|S;*Il60+qj@cN(LwO#@dH;cp$!BcRHPm?!Jr zZ}`RV6@GLs#PJ^>g0vML#0iiCww1)3{4^>4qw^T3+79nPnFZiG=fh~*Zf=);pbM%U z%qP(if2qSB&;J;ukHkuMGFTsZb4D{> zpKi)2c6$X=rVU7CzJJvly)*o#Mi{t6(Ft(L(~d}`%Uq;x@SkN@16glqj~q3h!DD|; z!2u(sD!BHtm++y5+GS3Ta9U6K2PV~ZD_|(2_Xb{O3G7WC=0#ea#De^uv5@E*{#hS$ z&e7PlI++YC@6FfD6&WvCe}IkDvJ|1nG|-a~^cuUEN>Bw<%K4lPB^4VD8@j?{Y~sNdx)E>7c|3|+dFz#jJULB1hADesM{HL6L-Dn zJK)nZaU+qfm7kA3$MRD{8w^K+zd@1gd++zRN6JMs;-~8JSsC-@UtNSVVs{ZIrf7qO zU4Z)KpAPpOd$q2ST$BVFR@m%$(A*GWeEm=+d9{r**9mw{HTjzdiP*{`?rqfO;#-AU z6mJKddf_MvSe2q#AdrMEW%4KXdk!jiN1sN=kz-Sn!`iz)do=$ZB+{!Zxm~D-oh!n{ zN{eJ6R?k z986FqV;ULfIidd*5qF_u32~nuIRfEf1v|vh%c~F-(rV>@NUGqTgS$2GzjNriOw?Zi z(ZBz2#zVvN7GSJgf9(F(nZ>M?tY7Vg%)#;0T+!#Q6s*R67rJN*6q!H_RDxn6q1c_b zhhxhJPMuIl?%H?mq#&9}nEz~x4yo_)a4XiTxOaoDdEF4UQjdRpK<8LP0mPgOLpl;o}O#Z5nCj?xFzPhfJrl+oL2@e3>jq=(zOn)Nr`8U4syI^ zW1JrKQw{nI>IA+(qH+(hfVZgRnBTgyX)*e3Zs7ztBlFUD5Q96j-+$z{D4*j6cR%f+ zTF%3x5GssDp}s5b5Kw}gff@QpZJGO?F@rNFjoh_8=Ic7T*wb8Ao9mSO{Iv}u4*eF& zse|1~XU?(h-#zu77TxnnolAln4H91-be&eOTjOJThX3~N(xbt@aOYvjRNmGqo~YQ< zmP62s8FjI~1!kXf9kPlpcq%R)eB6E+c1PN}q`%wTB3^W#n z4ePkidMLg6frToNmfyG#%M<9hN|7#F^aO@69`kObAapV{TFR;L5fC-mTnz~GGeUT0 z(6zdb(e~Xd&;I};qkmlUyWSdrmETqr$}xJ)**>m2pOH-debC)SdOBt==;D@ zaPw}Vzr2KgA5N*pe`;|cCL20!u3PN9ZF4RiTjqLsx^2(fzB5>wM3ozmD9Lv!yVK?r z**ge9d@~Ferb!o%k|xHXX!8dni8!M0i_@Gc1wzkkzvm4c>9_|0m%n2FFq8>?fDfap zTQK#MQ|QXDaixkhYWs9VD!Kb+NmP)Fe$a@kP-Z3S4oO1DO4M5HU`nPwD5r|aR2cM| z>Q94jz}+JlIoGkGp9Q`f0~OAA9DX1sZ9|Cr(HSu(mSZPHfL(O2PAWsP%rFg z@uKL{{Xf5@ob}(?L10uAlfm6+;+PmVHNSOR}YWWY1Q zPai-rXIlIs2y5;2{c3b=@8mmb;|zE?hWbgt@-;XF{meA}Idu{|TQiKQ8Tb>>(jreg zmh>4e={lj3d23UO8V8#GYDKNBtugCU8KMQ=p5-))2ZHj)ttb2s@YZdk*`=wW#?IWH z4jNjtt*jf*P&f!TeO*N?;8A#b^U2d8b-HvruhjYJL>l0%VazGlZ#xbY{&0Eo5AZ=OG_4t?DHrEpdeF?@F)>l@(cCpN zQlP_vylisnIv`{Wi-6*NLkP0#w2c)$1W+d4t@zsH(XwHjx_9{_x;V)n~ zxATyG9^LE%9bclB9XR4G&tD}U?+cZc*3y$Jj4FkI(4Lsk*fz>$*K(BdR)WK3! zg4d4zovY>Jon`=11f~>^T4NB(U=rL4oc{`o&P)#T=6r5>u$-8;k2~#`wyZv*;o_ah z*b2$F$!YG!U2rp9{c0VvgrOFHN}JtZBjo73Lq(Wm1Q){zx}UjA=+k4wa8ENULKMp)YSOljDPO z>7iLLG<%9IRZfbL1X7<5k(}+Fw2AtIOe;?FRI%CIIBSVpd3Z-sLG+)Ebl z-AOdGzpr?m|B-FfKNpC&4jL}6v7(CDzfE~#TuaeoYL+am~jknIACv(a#TlmtTQx<|; z1d7yofZ2UIat|xyX3;~7jwTvjvw5Jv@`mN#^iTu`Sou3(70U7(VgGK-|KoApL+7F6 zzn2@zu+aTx$)r)=Z(wy9CG6gv2G7V!@OMj9P{9nGxy-s6?Ck0kx8-O&2AD-VfaSFf zJfmU`CkUv6dB{nNQhTAskYE3mWJYe-i{BKNuc$G3I5T~U@b0tR%KwOt;s=wKUw}?ks^Vj1l zZzWSS_!S;!>P=9gTS*F&wf)5x6bJ$8#iwZ>Dyi|avc792_CqeUS>&t8+pGYTW$m|w z<^wF+VJ-$bG<$jyFr{PFM<{aLE_Q~}9iKkA;kKu7oYXxKtHSv zM!dCnQ#0u|*XM1V;Kea8G~qDef2)V`W|YD7*FCV^`7GZxD%Ooe3!vkR`u+h0nCD=h z`;~5PU-a9>jF6L{#P<5l!=~nPDLV?p{^4`xj|erUW=(;Q#;D?(@5lXYq7mX2|;T+AB-*HI5c@8I;33JSOjXoZV52#qa9*p7q}q zi_RhkE6OJi(~M;}f;Ov3mUWYlIJeh7cQ^yYaee0#2BE+Djy7}H3}6Sg{mI8~?djb*B2piM4lAAx15+|9{#Js8Y zhp+O+Lw!xIUa+cH9B_f^N~mxKX8qey#mDB7S#IG|K%yelAmFZB>O2D_GPY+{Y2x;Q zE5-F9kfO{xt}?2+pB|5)m9d>g-Y3(Li&?~RaKVUf=-Qcwl0deGa*Rn2OYXV zd#TWoN-pw{2WE?oN?+{J>17E*m(JFHvm(QtK@oQQ^kt^Eq@h2!!^{yQ`YTg=jBr0X zwFOQ6gBK-0RntvQLc_@GCc3K2%gq;`*`?J2yHe2K6>T>I>~ z|N1=v!7KBEwJYqcRPPNlT@xd+=9R--HICVB3qQ6kP(Ljt%IeNJ()j~WJ@7cYcmnN~ z{K@m3d_F)#z&!{T_}NLTeohIZuxpkJ+?iX+cLKkMa8uT*O#@e1$c`(U!;_bo;xx!BP)Oo3U^+s-WlTI!WXLj0?C; zJ=A|%E|JM|7KA&~6n;>6=ip;-O&6tq(O0NXfmeg>&GFxJZSg2fG+#kM!QKyU%^xx5 zJw(D;mqE>}+_WPy6ZD3_sZlcKv%z|p&tvr>s_d!-e`cb3K1pALYAXy{>o@39DDPVm z9I4om^>3SJ6r!7^xsRs;iS^k_`?!V%<&R}$((42@%n1EIK)x=AQlcI$Vr4t3e92ST zouK=pJ*E5{ltTs$`?Ser<>kEV8yoCjSx?9o}$Qzc!=``OP?FS?-;3mR@6?quCjD?%YW=$2Q!i}RKu5`7zIhwpJ)!p0$fcn zxeWL0PvbFBZZb^A<SB}T!FPMX*rH-{&TW_->wWwy930gM2XTeXM7Me1UhQ2uO ztDHxWE?AvxW#9rURGP(z+VY=G%P^|D6vx!y^qvjZbi>Hefkdh`lmIEvLOp+^x-!;@VscSzxGlQ%TK6e2v;>?W(F z?j-5!(IshgeUAX3!??`=8qUO?H}ugyR}^y~U6wjC67%*xR(|{D=?fPgf(&Sgdhr5v zmo1%P_wF5*ZEE0IbZh?3_Yit6y7Tq;i%cO;A>2g`dLzDyuBkz)+D5DQse^NHO2?JQ4lR%`<`Tb1Bo1~_5&CIQjCqYGJD!(J`35tr@>a?aB zutP+6!I*>t%gs0d0kL1DsF^5|p!QvI5)W~+3S!cz56&a3cmg9&gI|4zA;NY4<@jYF zSYc;ETSm}F?$Lqz{O-dwD*qxr3sha#Ij&vUJGvW)$i3P+IFCu2grpr5K^hc-i;vO# z$u?}3IfzU`h=@}ChpKPY6K4DqCjM3xHMO+X)bQrcC~gZmx;;edr1XvPsNz8jFUc(V zW)UJDe9MCA?oI>zAcVg&@)qk=x5e*yhj9H9g)gWF)i8*&J1CRA9>uVjHO6SWadY}n z3;FVPpxllFuhPL}WPHv*LJwTfYDS`Ri0_^fg?Y-oU+vBo_#H8$Ys8WKK_R;rR52Sq zeW(TjewHc}W?*f^S?o=L2hrjvkw5mWEEdDl1!@q-+~EW9pacOCMO}E-#a+`@*F#^4 z(!8l^*8LUtx)IPz+9TdLVRCP8fW%g*cx*tU(^PCS*Kk+l+`1(jjwO8OVgYw1sDK`BG)=wZtERTx^kk2-J&})L^~c{$0Ga}{{2iW@MdPAHY&DforH-;T_j<+^M65PKu4j8A6bbcc7vr(!*^tP4tVDBR!8_Rx5BxP&47;bpfric) zmNyeTztRS?Tg^HhaUc!hO}t5A$B%=Y7_3-V+Lqj0uNYcZjfYN=|4?q|Y$uHnmb89g zcgZr)Ho~*fla32-2FY-MPu7lO(@Q0+n26gXV|4p@UI&9DztObhOAn*N@|2$YOh z=vIL~iU2JkNRfomo0kU8-`Wt)6oCs3KP;Hik41SSDwWr{01}h#6A~)1&bT8 z9q)j%j-Yd2*H$Wu@rb11-~U3%)M*c^a$NNHc3S}z_OqhwaLyI>Jv658m z)-oSg@Mjrgda20SU2>L|V|LLXYr!;p-aM1m26~mhbH|3l(%~r`>KWRzpi*`^?`j`d z)u=aLod0afv$z0yWC1}!5%3u6G1X(mcimmR0GGvX-F!p1a7a&znnh|4D$;ZEr7Ku2 zeQgUDClW+>@xX5t*W6}P^?ux;_8PD{Ru2F2<;yJIC+-k$lNWeSsm42W#g=dGC}kZP zml_}T@Vurx-sCJGC^(9iH+lIA%=cO+RI!>xi~uoQKH>+id9gv=%t2+X%z1bTdDpzjwqi@b{B}$7Y<{MlG-|I{}HfKkP|qRCYp!(j`EL|8E;0 zlhg7zh^77sKY9w#OZS(8HWi6UjfSU#uh6g}JxWm`1^wrSHnGtFS7Uo80I)))kxYNv zng23;`Y)BcK*PbpqDOP9Gl&-SzND5Nx-2Zc6zg5l@tu z!y`7b6cwojId0I>V|LX%V#(tXSuApjp;sCB^?Nn)EXW?31r&GsH{r3-l(7*8xs}Nd zci_39Frb{Fr%K*wzYK7NL1(PTLBZsSiHQ&**8&st*FB0X!z=;nl(Of2T5QGrc(W=9 z98%;3NYvD_&StwK#C~~X=n8m;x^#rHFA4bRXiv==UhBw>Ro4cmTQS$bDi3pu<5=$S z_FzP8+L=0(8a7~g>PX3bJK%EQRcg}&UnEx2FEutXb0+%&JDv7+{dAOy6XAlCl~`0yG1(ze4Q%?uA7QlO+4sP1>n;&A>fMNgU4;) z>o-5gzQXtlP^D=Yv>z-2BDWN!(^M|;xU+h`hYn$RzfKARg%(ebHudsd-JAAJS)oTf zR-u2sA-T+ec96t&;t_hiYybK@6w_)D_cG(gy_7{)(Z(>&e5|-1RHv{3&a@o`d z_<;Y)&%<4_eRw$NbBGFO<3~eb>bwOfv>;RX1tfg=N<#6x_n$p*17*y?+w%y$vFflb zkP~Xa3aIQVUTz@bWMl*wKP)hh2~bBYVAyJdx$4xEs0md08rnWQ_FWf^6dtS0iIx?i z`fJ`2q2F+z&3F$e1wQs6gHb)I4`{L_j^OWARxKn2W5tr0%6efBE-VE>$%_^G zFbP5@?UKh5tU%1(#5Je(5n&^Ksl!=B?J6uF?02xGz@^ITTb^dl<_0(o-DYlRBINx8 zUYEP;ndn?T``u|)R49wiPc@T^FvO0GLLJSPFECiLKpD;73-@tEsi}t-HXjHWRn?sK z8vCI~O7q$Z;+~YmW}6DIBEK;rgg)}Lit>ib043&6onUB4(AmJngAmeZ!_V*eG&>Mx zWK6t2$@Ic$zuk`WG5`U3x|v^7dC?o|>s_h$>EE)V*B=HBUi#ypaQ^Xy`iC&N-?y`& zjD8A;n+Q%f;z7d63A&{Md^2=AKFuY-*-zM)5;WPx5NJ@t(mLql<3TGZIL&2u`N|@8 zW6zaV{0*uUTP$*7Y6E{`UlU^7M}`YJx896ZoZZF}u8krT(F+%6ARj46GR23MO7zLb zVtKw{?l-B!X_0qboF4;mpFxb=Y%IzS(3ma5rfi^A${?FSszkznNT~n!vhhx|g5_

Q>GkTZqp1hNQ@2`iTASb2UGVG^m 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πRVpC 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

x-OCK~<@0Y=pg=;~ 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�WAJp#<~R_J$(2XwkM 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 xfGDf+nE$lK0hO_uF9 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


y|h)lnu65@YEVc4g_I!>*W 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 z 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 I4+ql{mI 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 diff --git a/Server/src/main/resources/static/js/mar.js b/Server/src/main/resources/static/js/mar.js index 4f2ce8e..390dc7a 100644 --- a/Server/src/main/resources/static/js/mar.js +++ b/Server/src/main/resources/static/js/mar.js @@ -269,6 +269,7 @@ var config = { wallTint: 0xDDDDDD, vaultWallTint: 0x3F2D2A, vaultFloorTint: 0x2B1E1C, + fluidTint: 0x0ACED6, oreTint: 0xF3F3F3, cubotHoverTint: 0x00FF00, cubotTint: 0xFFFFFF, @@ -285,6 +286,7 @@ var config = { hologramStroke: "#12FFB0", copperFill: "#C87D38", plainSprite: "tiles/tile", + magneticSprite: "tiles/magneticTile", wallSprite: "tiles/bigTile", wallSprite2: "tiles/bigTile2", walkDuration: 800, @@ -1436,6 +1438,7 @@ var TileType; TileType[TileType["VAULT_FLOOR"] = 4] = "VAULT_FLOOR"; TileType[TileType["VAULT_WALL"] = 5] = "VAULT_WALL"; TileType[TileType["FLUID"] = 6] = "FLUID"; + TileType[TileType["MAGNETIC"] = 7] = "MAGNETIC"; })(TileType || (TileType = {})); var Tile = (function (_super) { __extends(Tile, _super); @@ -1463,6 +1466,8 @@ var Tile = (function (_super) { return new VoidTile(x, y); case TileType.FLUID: return new FluidTile(x, y); + case TileType.MAGNETIC: + return new MagneticTile(x, y); case TileType.PLAIN: default: return new PlainTile(x, y); @@ -1562,7 +1567,7 @@ var FluidTile = (function (_super) { __extends(FluidTile, _super); function FluidTile(x, y) { var _this = _super.call(this, x, y, config.plainSprite, 0) || this; - _this.baseTint = 0x0ACED6; + _this.baseTint = config.fluidTint; _this.tint = _this.baseTint; _this.alpha = 0.6; _this.baseZ = -15; @@ -1572,6 +1577,26 @@ var FluidTile = (function (_super) { } return FluidTile; }(Tile)); +var MagneticTile = (function (_super) { + __extends(MagneticTile, _super); + + function MagneticTile(x, y) { + var _this = _super.call(this, x, y, config.magneticSprite, 0) || this; + _this.baseTint = 0xFFFFFF; + _this.tint = _this.baseTint; + _this.setText("Magnetic", config.textIron); + _this.tileType = "Magnetic tile"; + return _this; + } + + MagneticTile.prototype.onHover = function () { + mar.game.add.tween(this).to({isoZ: this.baseZ + 30}, 200, Phaser.Easing.Quadratic.InOut, true); + mar.tileIndicator.tileX = this.tileX; + mar.tileIndicator.tileY = this.tileY; + mar.tileIndicator.tileType = this.tileType; + }; + return MagneticTile; +}(Tile)); var IronTile = (function (_super) { __extends(IronTile, _super); function IronTile(x, y) { diff --git a/Server/src/main/resources/static/js/phaser.js b/Server/src/main/resources/static/js/phaser.js index a02f7e2..f3c6e77 100644 --- a/Server/src/main/resources/static/js/phaser.js +++ b/Server/src/main/resources/static/js/phaser.js @@ -7,7 +7,7 @@ * * Phaser - http://phaser.io * - * v2.9.1 "2017-10-10" - Built: Tue Oct 10 2017 11:17:47 + * v2.11.1 "2018-10-02" - Built: Tue Oct 02 2018 18:19:07 * * By Richard Davey http://www.photonstorm.com @photonstorm * @@ -51,9 +51,13 @@ * THE SOFTWARE. */ !function (e) { - if ("object" == typeof exports) module.exports = e(); else if ("function" == typeof define && false) define(e); else { + if (typeof exports == 'object') { + module.exports = e(); + } else if (typeof define == 'function' && false) { + define(e); + } else { var f; - "undefined" != typeof window ? f = window : "undefined" != typeof global ? f = global : "undefined" != typeof self && (f = self), f.p2 = e() + typeof window != 'undefined' ? f = window : typeof global != 'undefined' ? f = global : typeof self != 'undefined' && (f = self), f.p2 = e(); } }(function () { var define, module, exports; @@ -61,23 +65,29 @@ function s(o, u) { if (!n[o]) { if (!t[o]) { - var a = typeof require == "function" && require; - if (!u && a) return a(o, !0); - if (i) return i(o, !0); - throw new Error("Cannot find module '" + o + "'") + var a = typeof require == 'function' && require; + if (!u && a) { + return a(o, !0); + } + if (i) { + return i(o, !0); + } + throw new Error('Cannot find module \'' + o + '\''); } var f = n[o] = {exports: {}}; t[o][0].call(f.exports, function (e) { var n = t[o][1][e]; - return s(n ? n : e) - }, f, f.exports, e, t, n, r) + return s(n ? n : e); + }, f, f.exports, e, t, n, r); } - return n[o].exports + return n[o].exports; } - var i = typeof require == "function" && require; - for (var o = 0; o < r.length; o++) s(r[o]); - return s + var i = typeof require == 'function' && require; + for (var o = 0; o < r.length; o++) { + s(r[o]); + } + return s; })({ 1: [function (_dereq_, module, exports) { var Scalar = _dereq_('./Scalar'); @@ -89,7 +99,7 @@ * @class Line */ function Line() { - }; + } /** * Compute the intersection between two lines. @@ -134,17 +144,18 @@ var db = q2[1] - q1[1]; // segments are parallel - if (da * dy - db * dx == 0) + if (da * dy - db * dx == 0) { return false; + } - var s = (dx * (q1[1] - p1[1]) + dy * (p1[0] - q1[0])) / (da * dy - db * dx) - var t = (da * (p1[1] - q1[1]) + db * (q1[0] - p1[0])) / (db * dx - da * dy) + var s = (dx * (q1[1] - p1[1]) + dy * (p1[0] - q1[0])) / (da * dy - db * dx); + var t = (da * (p1[1] - q1[1]) + db * (q1[0] - p1[0])) / (db * dx - da * dy); return (s >= 0 && s <= 1 && t >= 0 && t <= 1); }; - }, {"./Scalar": 4}], + }, {'./Scalar': 4}], 2: [function (_dereq_, module, exports) { module.exports = Point; @@ -153,7 +164,7 @@ * @class Point */ function Point() { - }; + } /** * Get the area of a triangle spanned by the three given points. Note that the area will be negative if the points are not given in counter-clockwise order. @@ -197,9 +208,9 @@ * @return {Boolean} */ Point.collinear = function (a, b, c, thresholdAngle) { - if (!thresholdAngle) + if (!thresholdAngle) { return Point.area(a, b, c) == 0; - else { + } else { var ab = tmpPoint1, bc = tmpPoint2; @@ -224,9 +235,9 @@ }, {}], 3: [function (_dereq_, module, exports) { - var Line = _dereq_("./Line") - , Point = _dereq_("./Point") - , Scalar = _dereq_("./Scalar") + var Line = _dereq_('./Line'), + Point = _dereq_('./Point'), + Scalar = _dereq_('./Scalar'); module.exports = Polygon; @@ -240,7 +251,7 @@ /** * Vertices that this polygon consists of. An array of array of numbers, example: [[0,0],[1,0],..] * @property vertices - * @objType {Array} + * @type {Array} */ this.vertices = []; } @@ -293,12 +304,22 @@ * @return {Array} */ Polygon.prototype.append = function (poly, from, to) { - if (typeof(from) == "undefined") throw new Error("From is not given!"); - if (typeof(to) == "undefined") throw new Error("To is not given!"); + if (typeof (from) == 'undefined') { + throw new Error('From is not given!'); + } + if (typeof (to) == 'undefined') { + throw new Error('To is not given!'); + } - if (to - 1 < from) throw new Error("lol1"); - if (to > poly.vertices.length) throw new Error("lol2"); - if (from < 0) throw new Error("lol3"); + if (to - 1 < from) { + throw new Error('lol1'); + } + if (to > poly.vertices.length) { + throw new Error('lol2'); + } + if (from < 0) { + throw new Error('lol3'); + } for (var i = from; i < to; i++) { this.vertices.push(poly.vertices[i]); @@ -359,7 +380,9 @@ * @return {Boolean} */ Polygon.prototype.canSee = function (a, b) { - var p, dist, l1 = tmpLine1, l2 = tmpLine2; + var p, dist, + l1 = tmpLine1, + l2 = tmpLine2; if (Point.leftOn(this.at(a + 1), this.at(a), this.at(b)) && Point.rightOn(this.at(a - 1), this.at(a), this.at(b))) { return false; @@ -367,7 +390,9 @@ dist = Point.sqdist(this.at(a), this.at(b)); for (var i = 0; i !== this.vertices.length; ++i) { // for each edge if ((i + 1) % this.vertices.length === a || i === a) // ignore incident edges + { continue; + } if (Point.leftOn(this.at(a), this.at(b), this.at(i + 1)) && Point.rightOn(this.at(a), this.at(b), this.at(i))) { // if diag intersects an edge l1[0] = this.at(a); l1[1] = this.at(b); @@ -396,18 +421,21 @@ p.clear(); if (i < j) { // Insert all vertices from i to j - for (var k = i; k <= j; k++) + for (var k = i; k <= j; k++) { p.vertices.push(this.vertices[k]); + } } else { // Insert vertices 0 to j - for (var k = 0; k <= j; k++) + for (var k = 0; k <= j; k++) { p.vertices.push(this.vertices[k]); + } // Insert vertices i to end - for (var k = i; k < this.vertices.length; k++) + for (var k = i; k < this.vertices.length; k++) { p.vertices.push(this.vertices[k]); + } } return p; @@ -420,7 +448,10 @@ * @return {Array} */ Polygon.prototype.getCutEdges = function () { - var min = [], tmp1 = [], tmp2 = [], tmpPoly = new Polygon(); + var min = [], + tmp1 = [], + tmp2 = [], + tmpPoly = new Polygon(); var nDiags = Number.MAX_VALUE; for (var i = 0; i < this.vertices.length; ++i) { @@ -430,8 +461,9 @@ tmp1 = this.copy(i, j, tmpPoly).getCutEdges(); tmp2 = this.copy(j, i, tmpPoly).getCutEdges(); - for (var k = 0; k < tmp2.length; k++) + for (var k = 0; k < tmp2.length; k++) { tmp1.push(tmp2[k]); + } if (tmp1.length < nDiags) { min = tmp1; @@ -453,10 +485,12 @@ */ Polygon.prototype.decomp = function () { var edges = this.getCutEdges(); - if (edges.length > 0) + if (edges.length > 0) { return this.slice(edges); - else + } + else { return [this]; + } }; /** @@ -466,13 +500,16 @@ * @return {Array} */ Polygon.prototype.slice = function (cutEdges) { - if (cutEdges.length == 0) return [this]; + if (cutEdges.length == 0) { + return [this]; + } if (cutEdges instanceof Array && cutEdges.length && cutEdges[0] instanceof Array && cutEdges[0].length == 2 && cutEdges[0][0] instanceof Array) { var polys = [this]; for (var i = 0; i < cutEdges.length; i++) { var cutEdge = cutEdges[i]; + // Cut all polys for (var j = 0; j < polys.length; j++) { var poly = polys[j]; @@ -512,6 +549,7 @@ */ Polygon.prototype.isSimple = function () { var path = this.vertices; + // Check for (var i = 0; i < path.length - 1; i++) { for (var j = 0; j < i - 1; j++) { @@ -541,10 +579,12 @@ var c2 = (a2 * q1[0]) + (b2 * q1[1]); var det = (a1 * b2) - (a2 * b1); - if (!Scalar.eq(det, 0, delta)) - return [((b2 * c1) - (b1 * c2)) / det, ((a1 * c2) - (a2 * c1)) / det] - else - return [0, 0] + if (!Scalar.eq(det, 0, delta)) { + return [((b2 * c1) - (b1 * c2)) / det, ((a1 * c2) - (a2 * c1)) / det]; + } + else { + return [0, 0]; + } } /** @@ -562,22 +602,32 @@ maxlevel = maxlevel || 100; level = level || 0; delta = delta || 25; - result = typeof(result) != "undefined" ? result : []; + result = typeof (result) != 'undefined' ? result : []; reflexVertices = reflexVertices || []; steinerPoints = steinerPoints || []; - var upperInt = [0, 0], lowerInt = [0, 0], p = [0, 0]; // Points - var upperDist = 0, lowerDist = 0, d = 0, closestDist = 0; // scalars - var upperIndex = 0, lowerIndex = 0, closestIndex = 0; // Integers - var lowerPoly = new Polygon(), upperPoly = new Polygon(); // polygons + var upperInt = [0, 0], + lowerInt = [0, 0], + p = [0, 0]; // Points + var upperDist = 0, + lowerDist = 0, + d = 0, + closestDist = 0; // scalars + var upperIndex = 0, + lowerIndex = 0, + closestIndex = 0; // Integers + var lowerPoly = new Polygon(), + upperPoly = new Polygon(); // polygons var poly = this, v = this.vertices; - if (v.length < 3) return result; + if (v.length < 3) { + return result; + } level++; if (level > maxlevel) { - console.warn("quickDecomp: max level (" + maxlevel + ") reached."); + console.warn('quickDecomp: max level (' + maxlevel + ') reached.'); return result; } @@ -616,37 +666,40 @@ // if there are no vertices to connect to, choose a point in the middle if (lowerIndex == (upperIndex + 1) % this.vertices.length) { - //console.log("Case 1: Vertex("+i+"), lowerIndex("+lowerIndex+"), upperIndex("+upperIndex+"), poly.size("+this.vertices.length+")"); + // console.log("Case 1: Vertex("+i+"), lowerIndex("+lowerIndex+"), upperIndex("+upperIndex+"), poly.size("+this.vertices.length+")"); p[0] = (lowerInt[0] + upperInt[0]) / 2; p[1] = (lowerInt[1] + upperInt[1]) / 2; steinerPoints.push(p); if (i < upperIndex) { - //lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.begin() + upperIndex + 1); + // lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.begin() + upperIndex + 1); lowerPoly.append(poly, i, upperIndex + 1); lowerPoly.vertices.push(p); upperPoly.vertices.push(p); if (lowerIndex != 0) { - //upperPoly.insert(upperPoly.end(), poly.begin() + lowerIndex, poly.end()); + // upperPoly.insert(upperPoly.end(), poly.begin() + lowerIndex, poly.end()); upperPoly.append(poly, lowerIndex, poly.vertices.length); } - //upperPoly.insert(upperPoly.end(), poly.begin(), poly.begin() + i + 1); + + // upperPoly.insert(upperPoly.end(), poly.begin(), poly.begin() + i + 1); upperPoly.append(poly, 0, i + 1); } else { if (i != 0) { - //lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.end()); + // lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.end()); lowerPoly.append(poly, i, poly.vertices.length); } - //lowerPoly.insert(lowerPoly.end(), poly.begin(), poly.begin() + upperIndex + 1); + + // lowerPoly.insert(lowerPoly.end(), poly.begin(), poly.begin() + upperIndex + 1); lowerPoly.append(poly, 0, upperIndex + 1); lowerPoly.vertices.push(p); upperPoly.vertices.push(p); - //upperPoly.insert(upperPoly.end(), poly.begin() + lowerIndex, poly.begin() + i + 1); + + // upperPoly.insert(upperPoly.end(), poly.begin() + lowerIndex, poly.begin() + i + 1); upperPoly.append(poly, lowerIndex, i + 1); } } else { // connect to the closest point within the triangle - //console.log("Case 2: Vertex("+i+"), closestIndex("+closestIndex+"), poly.size("+this.vertices.length+")\n"); + // console.log("Case 2: Vertex("+i+"), closestIndex("+closestIndex+"), poly.size("+this.vertices.length+")\n"); if (lowerIndex > upperIndex) { upperIndex += this.vertices.length; @@ -719,7 +772,7 @@ return num; }; - }, {"./Line": 1, "./Point": 2, "./Scalar": 4}], + }, {'./Line': 1, './Point': 2, './Scalar': 4}], 4: [function (_dereq_, module, exports) { module.exports = Scalar; @@ -747,58 +800,50 @@ }, {}], 5: [function (_dereq_, module, exports) { module.exports = { - Polygon: _dereq_("./Polygon"), - Point: _dereq_("./Point"), + Polygon: _dereq_('./Polygon'), + Point: _dereq_('./Point') }; - }, {"./Point": 2, "./Polygon": 3}], + }, {'./Point': 2, './Polygon': 3}], 6: [function (_dereq_, module, exports) { module.exports = { - "name": "p2", - "version": "0.7.1", - "description": "A JavaScript 2D physics engine.", - "author": "Stefan Hedman (http://steffe.se)", - "keywords": [ - "p2.js", - "p2", - "physics", - "engine", - "2d" + name: 'p2', + version: '0.7.1', + description: 'A JavaScript 2D physics engine.', + author: 'Stefan Hedman (http://steffe.se)', + keywords: [ + 'p2.js', + 'p2', + 'physics', + 'engine', + '2d' ], - "main": "./src/p2.js", - "engines": { - "node": "*" + main: './src/p2.js', + engines: {node: '*'}, + repository: { + type: 'git', + url: 'https://github.com/schteppe/p2.js.git' }, - "repository": { - "type": "git", - "url": "https://github.com/schteppe/p2.js.git" - }, - "bugs": { - "url": "https://github.com/schteppe/p2.js/issues" - }, - "licenses": [ - { - "type": "MIT" - } + bugs: {url: 'https://github.com/schteppe/p2.js/issues'}, + licenses: [ + {type: 'MIT'} ], - "devDependencies": { - "grunt": "^0.4.5", - "grunt-contrib-jshint": "^0.11.2", - "grunt-contrib-nodeunit": "^0.4.1", - "grunt-contrib-uglify": "~0.4.0", - "grunt-contrib-watch": "~0.5.0", - "grunt-browserify": "~2.0.1", - "grunt-contrib-concat": "^0.4.0" + devDependencies: { + grunt: '^0.4.5', + 'grunt-contrib-jshint': '^0.11.2', + 'grunt-contrib-nodeunit': '^0.4.1', + 'grunt-contrib-uglify': '~0.4.0', + 'grunt-contrib-watch': '~0.5.0', + 'grunt-browserify': '~2.0.1', + 'grunt-contrib-concat': '^0.4.0' }, - "dependencies": { - "poly-decomp": "0.1.1" - } - } + dependencies: {'poly-decomp': '0.1.1'} + }; }, {}], 7: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , Utils = _dereq_('../utils/Utils'); + var vec2 = _dereq_('../math/vec2'), + Utils = _dereq_('../utils/Utils'); module.exports = AABB; @@ -815,7 +860,7 @@ /** * The lower bound of the bounding box. * @property lowerBound - * @objType {Array} + * @type {Array} */ this.lowerBound = vec2.create(); if (options && options.lowerBound) { @@ -825,7 +870,7 @@ /** * The upper bound of the bounding box. * @property upperBound - * @objType {Array} + * @type {Array} */ this.upperBound = vec2.create(); if (options && options.upperBound) { @@ -847,7 +892,7 @@ var l = this.lowerBound, u = this.upperBound; - if (typeof(angle) !== "number") { + if (typeof (angle) !== 'number') { angle = 0; } @@ -986,19 +1031,19 @@ // if tmax < 0, ray (line) is intersecting AABB, but whole AABB is behing us if (tmax < 0) { - //t = tmax; + // t = tmax; return -1; } // if tmin > tmax, ray doesn't intersect AABB if (tmin > tmax) { - //t = tmax; + // t = tmax; return -1; } return tmin; }; - }, {"../math/vec2": 30, "../utils/Utils": 57}], + }, {'../math/vec2': 30, '../utils/Utils': 57}], 8: [function (_dereq_, module, exports) { var vec2 = _dereq_('../math/vec2'); var Body = _dereq_('../objects/Body'); @@ -1017,34 +1062,34 @@ /** * The resulting overlapping pairs. Will be filled with results during .getCollisionPairs(). * @property result - * @objType {Array} + * @type {Array} */ this.result = []; /** * The world to search for collision pairs in. To change it, use .setWorld() * @property world - * @objType {World} + * @type {World} * @readOnly */ this.world = null; /** - * The bounding volume objType to use in the broadphase algorithms. Should be set to Broadphase.AABB or Broadphase.BOUNDING_CIRCLE. + * The bounding volume type to use in the broadphase algorithms. Should be set to Broadphase.AABB or Broadphase.BOUNDING_CIRCLE. * @property {Number} boundingVolumeType */ this.boundingVolumeType = Broadphase.AABB; } /** - * Axis aligned bounding box objType. + * Axis aligned bounding box type. * @static * @property {Number} AABB */ Broadphase.AABB = 1; /** - * Bounding circle objType. + * Bounding circle type. * @static * @property {Number} BOUNDING_CIRCLE */ @@ -1113,7 +1158,7 @@ result = Broadphase.aabbCheck(bodyA, bodyB); break; default: - throw new Error('Bounding volume objType not recognized: ' + this.boundingVolumeType); + throw new Error('Bounding volume type not recognized: ' + this.boundingVolumeType); } return result; }; @@ -1162,7 +1207,7 @@ Broadphase.NAIVE = 1; Broadphase.SAP = 2; - }, {"../math/vec2": 30, "../objects/Body": 31}], + }, {'../math/vec2': 30, '../objects/Body': 31}], 9: [function (_dereq_, module, exports) { var Circle = _dereq_('../shapes/Circle'), Plane = _dereq_('../shapes/Plane'), @@ -1183,7 +1228,6 @@ function NaiveBroadphase() { Broadphase.call(this, Broadphase.NAIVE); } - NaiveBroadphase.prototype = new Broadphase(); NaiveBroadphase.prototype.constructor = NaiveBroadphase; @@ -1241,55 +1285,55 @@ return result; }; }, { - "../collision/Broadphase": 8, - "../math/vec2": 30, - "../shapes/Circle": 39, - "../shapes/Particle": 43, - "../shapes/Plane": 44, - "../shapes/Shape": 45 + '../collision/Broadphase': 8, + '../math/vec2': 30, + '../shapes/Circle': 39, + '../shapes/Particle': 43, + '../shapes/Plane': 44, + '../shapes/Shape': 45 }], 10: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , sub = vec2.sub - , add = vec2.add - , dot = vec2.dot - , Utils = _dereq_('../utils/Utils') - , ContactEquationPool = _dereq_('../utils/ContactEquationPool') - , FrictionEquationPool = _dereq_('../utils/FrictionEquationPool') - , TupleDictionary = _dereq_('../utils/TupleDictionary') - , Equation = _dereq_('../equations/Equation') - , ContactEquation = _dereq_('../equations/ContactEquation') - , FrictionEquation = _dereq_('../equations/FrictionEquation') - , Circle = _dereq_('../shapes/Circle') - , Convex = _dereq_('../shapes/Convex') - , Shape = _dereq_('../shapes/Shape') - , Body = _dereq_('../objects/Body') - , Box = _dereq_('../shapes/Box'); + var vec2 = _dereq_('../math/vec2'), + sub = vec2.sub, + add = vec2.add, + dot = vec2.dot, + Utils = _dereq_('../utils/Utils'), + ContactEquationPool = _dereq_('../utils/ContactEquationPool'), + FrictionEquationPool = _dereq_('../utils/FrictionEquationPool'), + TupleDictionary = _dereq_('../utils/TupleDictionary'), + Equation = _dereq_('../equations/Equation'), + ContactEquation = _dereq_('../equations/ContactEquation'), + FrictionEquation = _dereq_('../equations/FrictionEquation'), + Circle = _dereq_('../shapes/Circle'), + Convex = _dereq_('../shapes/Convex'), + Shape = _dereq_('../shapes/Shape'), + Body = _dereq_('../objects/Body'), + Box = _dereq_('../shapes/Box'); module.exports = Narrowphase; -// Temp things + // Temp things var yAxis = vec2.fromValues(0, 1); - var tmp1 = vec2.fromValues(0, 0) - , tmp2 = vec2.fromValues(0, 0) - , tmp3 = vec2.fromValues(0, 0) - , tmp4 = vec2.fromValues(0, 0) - , tmp5 = vec2.fromValues(0, 0) - , tmp6 = vec2.fromValues(0, 0) - , tmp7 = vec2.fromValues(0, 0) - , tmp8 = vec2.fromValues(0, 0) - , tmp9 = vec2.fromValues(0, 0) - , tmp10 = vec2.fromValues(0, 0) - , tmp11 = vec2.fromValues(0, 0) - , tmp12 = vec2.fromValues(0, 0) - , tmp13 = vec2.fromValues(0, 0) - , tmp14 = vec2.fromValues(0, 0) - , tmp15 = vec2.fromValues(0, 0) - , tmp16 = vec2.fromValues(0, 0) - , tmp17 = vec2.fromValues(0, 0) - , tmp18 = vec2.fromValues(0, 0) - , tmpArray = []; + var tmp1 = vec2.fromValues(0, 0), + tmp2 = vec2.fromValues(0, 0), + tmp3 = vec2.fromValues(0, 0), + tmp4 = vec2.fromValues(0, 0), + tmp5 = vec2.fromValues(0, 0), + tmp6 = vec2.fromValues(0, 0), + tmp7 = vec2.fromValues(0, 0), + tmp8 = vec2.fromValues(0, 0), + tmp9 = vec2.fromValues(0, 0), + tmp10 = vec2.fromValues(0, 0), + tmp11 = vec2.fromValues(0, 0), + tmp12 = vec2.fromValues(0, 0), + tmp13 = vec2.fromValues(0, 0), + tmp14 = vec2.fromValues(0, 0), + tmp15 = vec2.fromValues(0, 0), + tmp16 = vec2.fromValues(0, 0), + tmp17 = vec2.fromValues(0, 0), + tmp18 = vec2.fromValues(0, 0), + tmpArray = []; /** * Narrowphase. Creates contacts and friction given shapes and transforms. @@ -1300,41 +1344,41 @@ /** * @property contactEquations - * @objType {Array} + * @type {Array} */ this.contactEquations = []; /** * @property frictionEquations - * @objType {Array} + * @type {Array} */ this.frictionEquations = []; /** * Whether to make friction equations in the upcoming contacts. * @property enableFriction - * @objType {Boolean} + * @type {Boolean} */ this.enableFriction = true; /** * Whether to make equations enabled in upcoming contacts. * @property enabledEquations - * @objType {Boolean} + * @type {Boolean} */ this.enabledEquations = true; /** * The friction slip force to use when creating friction equations. * @property slipForce - * @objType {Number} + * @type {Number} */ this.slipForce = 10.0; /** * The friction value to use in the upcoming friction equations. * @property frictionCoefficient - * @objType {Number} + * @type {Number} */ this.frictionCoefficient = 0.3; @@ -1366,7 +1410,7 @@ /** * The restitution value to use in the next contact equations. * @property restitution - * @objType {Number} + * @type {Number} */ this.restitution = 0; @@ -1385,21 +1429,21 @@ /** * The stiffness value to use in the next friction equations. * @property frictionStiffness - * @objType {Number} + * @type {Number} */ this.frictionStiffness = Equation.DEFAULT_STIFFNESS; /** * The relaxation value to use in the next friction equations. * @property frictionRelaxation - * @objType {Number} + * @type {Number} */ this.frictionRelaxation = Equation.DEFAULT_RELAXATION; /** * Enable reduction of friction equations. If disabled, a box on a plane will generate 2 contact equations and 2 friction equations. If enabled, there will be only one friction equation. Same kind of simplifications are made for all collision types. * @property enableFrictionReduction - * @objType {Boolean} + * @type {Boolean} * @deprecated This flag will be removed when the feature is stable enough. * @default true */ @@ -1409,7 +1453,7 @@ * Keeps track of the colliding bodies last step. * @private * @property collidingBodiesLastStep - * @objType {TupleDictionary} + * @type {TupleDictionary} */ this.collidingBodiesLastStep = new TupleDictionary(); @@ -1571,7 +1615,7 @@ return eq; }; -// Take the average N latest contact point on the plane. + // Take the average N latest contact point on the plane. Narrowphase.prototype.createFrictionFromAverage = function (numContacts) { var c = this.contactEquations[this.contactEquations.length - 1]; var eq = this.createFrictionEquation(c.bodyA, c.bodyB, c.shapeA, c.shapeB); @@ -1617,15 +1661,17 @@ * @todo Implement me! */ Narrowphase.prototype[Shape.LINE | Shape.CONVEX] = - Narrowphase.prototype.convexLine = function (convexBody, - convexShape, - convexOffset, - convexAngle, - lineBody, - lineShape, - lineOffset, - lineAngle, - justTest) { + Narrowphase.prototype.convexLine = function ( + convexBody, + convexShape, + convexOffset, + convexAngle, + lineBody, + lineShape, + lineOffset, + lineAngle, + justTest + ) { // TODO if (justTest) { return false; @@ -1649,15 +1695,17 @@ * @todo Implement me! */ Narrowphase.prototype[Shape.LINE | Shape.BOX] = - Narrowphase.prototype.lineBox = function (lineBody, - lineShape, - lineOffset, - lineAngle, - boxBody, - boxShape, - boxOffset, - boxAngle, - justTest) { + Narrowphase.prototype.lineBox = function ( + lineBody, + lineShape, + lineOffset, + lineAngle, + boxBody, + boxShape, + boxOffset, + boxAngle, + justTest + ) { // TODO if (justTest) { return false; @@ -1690,15 +1738,17 @@ */ Narrowphase.prototype[Shape.CAPSULE | Shape.CONVEX] = Narrowphase.prototype[Shape.CAPSULE | Shape.BOX] = - Narrowphase.prototype.convexCapsule = function (convexBody, - convexShape, - convexPosition, - convexAngle, - capsuleBody, - capsuleShape, - capsulePosition, - capsuleAngle, - justTest) { + Narrowphase.prototype.convexCapsule = function ( + convexBody, + convexShape, + convexPosition, + convexAngle, + capsuleBody, + capsuleShape, + capsulePosition, + capsuleAngle, + justTest + ) { // Check the circles // Add offsets! @@ -1739,15 +1789,17 @@ * @todo Implement me! */ Narrowphase.prototype[Shape.CAPSULE | Shape.LINE] = - Narrowphase.prototype.lineCapsule = function (lineBody, - lineShape, - linePosition, - lineAngle, - capsuleBody, - capsuleShape, - capsulePosition, - capsuleAngle, - justTest) { + Narrowphase.prototype.lineCapsule = function ( + lineBody, + lineShape, + linePosition, + lineAngle, + capsuleBody, + capsuleShape, + capsulePosition, + capsuleAngle, + justTest + ) { // TODO if (justTest) { return false; @@ -1879,15 +1931,17 @@ * @todo Implement me! */ Narrowphase.prototype[Shape.LINE | Shape.LINE] = - Narrowphase.prototype.lineLine = function (bodyA, - shapeA, - positionA, - angleA, - bodyB, - shapeB, - positionB, - angleB, - justTest) { + Narrowphase.prototype.lineLine = function ( + bodyA, + shapeA, + positionA, + angleA, + bodyB, + shapeB, + positionB, + angleB, + justTest + ) { // TODO if (justTest) { return false; @@ -2004,15 +2058,17 @@ }; Narrowphase.prototype[Shape.PARTICLE | Shape.CAPSULE] = - Narrowphase.prototype.particleCapsule = function (particleBody, - particleShape, - particlePosition, - particleAngle, - capsuleBody, - capsuleShape, - capsulePosition, - capsuleAngle, - justTest) { + Narrowphase.prototype.particleCapsule = function ( + particleBody, + particleShape, + particlePosition, + particleAngle, + capsuleBody, + capsuleShape, + capsulePosition, + capsuleAngle, + justTest + ) { return this.circleLine(particleBody, particleShape, particlePosition, particleAngle, capsuleBody, capsuleShape, capsulePosition, capsuleAngle, justTest, capsuleShape.radius, 0); }; @@ -2032,19 +2088,21 @@ * @param {Number} circleRadius If set, this value overrides the circle shape radius. */ Narrowphase.prototype[Shape.CIRCLE | Shape.LINE] = - Narrowphase.prototype.circleLine = function (circleBody, - circleShape, - circleOffset, - circleAngle, - lineBody, - lineShape, - lineOffset, - lineAngle, - justTest, - lineRadius, - circleRadius) { + Narrowphase.prototype.circleLine = function ( + circleBody, + circleShape, + circleOffset, + circleAngle, + lineBody, + lineShape, + lineOffset, + lineAngle, + justTest, + lineRadius, + circleRadius + ) { var lineRadius = lineRadius || 0, - circleRadius = typeof(circleRadius) !== "undefined" ? circleRadius : circleShape.radius, + circleRadius = typeof (circleRadius) !== 'undefined' ? circleRadius : circleShape.radius, orthoDist = tmp1, lineToCircleOrthoUnit = tmp2, @@ -2217,17 +2275,19 @@ */ Narrowphase.prototype[Shape.CIRCLE | Shape.CONVEX] = Narrowphase.prototype[Shape.CIRCLE | Shape.BOX] = - Narrowphase.prototype.circleConvex = function (circleBody, - circleShape, - circleOffset, - circleAngle, - convexBody, - convexShape, - convexOffset, - convexAngle, - justTest, - circleRadius) { - var circleRadius = typeof(circleRadius) === "number" ? circleRadius : circleShape.radius; + Narrowphase.prototype.circleConvex = function ( + circleBody, + circleShape, + circleOffset, + circleAngle, + convexBody, + convexShape, + convexOffset, + convexAngle, + justTest, + circleRadius + ) { + var circleRadius = typeof (circleRadius) === 'number' ? circleRadius : circleShape.radius; var worldVertex0 = tmp1, worldVertex1 = tmp2, @@ -2427,15 +2487,17 @@ */ Narrowphase.prototype[Shape.PARTICLE | Shape.CONVEX] = Narrowphase.prototype[Shape.PARTICLE | Shape.BOX] = - Narrowphase.prototype.particleConvex = function (particleBody, - particleShape, - particleOffset, - particleAngle, - convexBody, - convexShape, - convexOffset, - convexAngle, - justTest) { + Narrowphase.prototype.particleConvex = function ( + particleBody, + particleShape, + particleOffset, + particleAngle, + convexBody, + convexShape, + convexOffset, + convexAngle, + justTest + ) { var worldVertex0 = tmp1, worldVertex1 = tmp2, worldEdge = tmp3, @@ -2554,17 +2616,19 @@ * @param {Number} [radiusB] Optional radius to use for shapeB */ Narrowphase.prototype[Shape.CIRCLE] = - Narrowphase.prototype.circleCircle = function (bodyA, - shapeA, - offsetA, - angleA, - bodyB, - shapeB, - offsetB, - angleB, - justTest, - radiusA, - radiusB) { + Narrowphase.prototype.circleCircle = function ( + bodyA, + shapeA, + offsetA, + angleA, + bodyB, + shapeB, + offsetB, + angleB, + justTest, + radiusA, + radiusB + ) { var dist = tmp1, radiusA = radiusA || shapeA.radius, @@ -2616,15 +2680,17 @@ */ Narrowphase.prototype[Shape.PLANE | Shape.CONVEX] = Narrowphase.prototype[Shape.PLANE | Shape.BOX] = - Narrowphase.prototype.planeConvex = function (planeBody, - planeShape, - planeOffset, - planeAngle, - convexBody, - convexShape, - convexOffset, - convexAngle, - justTest) { + Narrowphase.prototype.planeConvex = function ( + planeBody, + planeShape, + planeOffset, + planeAngle, + convexBody, + convexShape, + convexOffset, + convexAngle, + justTest + ) { var worldVertex = tmp1, worldNormal = tmp2, dist = tmp3; @@ -2698,15 +2764,17 @@ * @param {Boolean} justTest */ Narrowphase.prototype[Shape.PARTICLE | Shape.PLANE] = - Narrowphase.prototype.particlePlane = function (particleBody, - particleShape, - particleOffset, - particleAngle, - planeBody, - planeShape, - planeOffset, - planeAngle, - justTest) { + Narrowphase.prototype.particlePlane = function ( + particleBody, + particleShape, + particleOffset, + particleAngle, + planeBody, + planeShape, + planeOffset, + planeAngle, + justTest + ) { var dist = tmp1, worldNormal = tmp2; @@ -2728,6 +2796,7 @@ vec2.copy(c.normalA, worldNormal); vec2.scale(dist, c.normalA, d); + // dist is now the distance vector in the normal direction // ri is the particle position projected down onto the plane, from the plane center @@ -2759,15 +2828,17 @@ * @param {Boolean} justTest */ Narrowphase.prototype[Shape.CIRCLE | Shape.PARTICLE] = - Narrowphase.prototype.circleParticle = function (circleBody, - circleShape, - circleOffset, - circleAngle, - particleBody, - particleShape, - particleOffset, - particleAngle, - justTest) { + Narrowphase.prototype.circleParticle = function ( + circleBody, + circleShape, + circleOffset, + circleAngle, + particleBody, + particleShape, + particleOffset, + particleAngle, + justTest + ) { var dist = tmp1; sub(dist, particleOffset, circleOffset); @@ -2817,15 +2888,17 @@ * @param {Boolean} justTest */ Narrowphase.prototype[Shape.PLANE | Shape.CAPSULE] = - Narrowphase.prototype.planeCapsule = function (planeBody, - planeShape, - planeOffset, - planeAngle, - capsuleBody, - capsuleShape, - capsuleOffset, - capsuleAngle, - justTest) { + Narrowphase.prototype.planeCapsule = function ( + planeBody, + planeShape, + planeOffset, + planeAngle, + capsuleBody, + capsuleShape, + capsuleOffset, + capsuleAngle, + justTest + ) { var end1 = planeCapsule_tmp1, end2 = planeCapsule_tmp2, circle = planeCapsule_tmpCircle, @@ -2968,7 +3041,7 @@ dist = tmp8, worldNormal = tmp9, numContacts = 0, - precision = typeof(precision) === 'number' ? precision : 0; + precision = typeof (precision) === 'number' ? precision : 0; var found = Narrowphase.findSeparatingAxis(si, xi, ai, sj, xj, aj, sepAxis); if (!found) { @@ -2994,10 +3067,14 @@ var closestEdgeA = closestEdge1, closestEdgeB = closestEdge2, - shapeA = si, shapeB = sj, - offsetA = xi, offsetB = xj, - angleA = ai, angleB = aj, - bodyA = bi, bodyB = bj; + shapeA = si, + shapeB = sj, + offsetA = xi, + offsetB = xj, + angleA = ai, + angleB = aj, + bodyA = bi, + bodyB = bj; if (k === 0) { // Swap! @@ -3088,8 +3165,8 @@ vec2.normalize(c.normalA, c.normalA); sub(dist, worldPoint, worldPoint0); // From edge point to the penetrating point - var d = dot(c.normalA, dist); // Penetration - vec2.scale(penetrationVec, c.normalA, d); // Vector penetration + var d = dot(c.normalA, dist); // Penetration + vec2.scale(penetrationVec, c.normalA, d); // Vector penetration sub(c.contactPointA, worldPoint, offsetA); sub(c.contactPointA, c.contactPointA, penetrationVec); @@ -3121,7 +3198,7 @@ return numContacts; }; -// .projectConvex is called by other functions, need local tmp vectors + // .projectConvex is called by other functions, need local tmp vectors var pcoa_tmp1 = vec2.fromValues(0, 0); /** @@ -3168,13 +3245,13 @@ vec2.set(result, min + offset, max + offset); }; -// .findSeparatingAxis is called by other functions, need local tmp vectors - var fsa_tmp1 = vec2.fromValues(0, 0) - , fsa_tmp2 = vec2.fromValues(0, 0) - , fsa_tmp3 = vec2.fromValues(0, 0) - , fsa_tmp4 = vec2.fromValues(0, 0) - , fsa_tmp5 = vec2.fromValues(0, 0) - , fsa_tmp6 = vec2.fromValues(0, 0); + // .findSeparatingAxis is called by other functions, need local tmp vectors + var fsa_tmp1 = vec2.fromValues(0, 0), + fsa_tmp2 = vec2.fromValues(0, 0), + fsa_tmp3 = vec2.fromValues(0, 0), + fsa_tmp4 = vec2.fromValues(0, 0), + fsa_tmp5 = vec2.fromValues(0, 0), + fsa_tmp6 = vec2.fromValues(0, 0); /** * Find a separating axis between the shapes, that maximizes the separating distance between them. @@ -3341,10 +3418,10 @@ return found; }; -// .getClosestEdge is called by other functions, need local tmp vectors - var gce_tmp1 = vec2.fromValues(0, 0) - , gce_tmp2 = vec2.fromValues(0, 0) - , gce_tmp3 = vec2.fromValues(0, 0); + // .getClosestEdge is called by other functions, need local tmp vectors + var gce_tmp1 = vec2.fromValues(0, 0), + gce_tmp2 = vec2.fromValues(0, 0), + gce_tmp3 = vec2.fromValues(0, 0); /** * Get the edge that has a normal closest to an axis. @@ -3424,8 +3501,8 @@ var idxA = Math.floor((circlePos[0] - radius - hfPos[0]) / w), idxB = Math.ceil((circlePos[0] + radius - hfPos[0]) / w); - /*if(idxB < 0 || idxA >= data.length) - return justTest ? false : 0;*/ + /* if(idxB < 0 || idxA >= data.length) + return justTest ? false : 0; */ if (idxA < 0) { idxA = 0; @@ -3575,6 +3652,7 @@ convexHeightfield_v1 = vec2.create(), convexHeightfield_tilePos = vec2.create(), convexHeightfield_tempConvexShape = new Convex({vertices: [vec2.create(), vec2.create(), vec2.create(), vec2.create()]}); + /** * @method circleHeightfield * @param {Body} bi @@ -3655,19 +3733,19 @@ return numContacts; }; }, { - "../equations/ContactEquation": 21, - "../equations/Equation": 22, - "../equations/FrictionEquation": 23, - "../math/vec2": 30, - "../objects/Body": 31, - "../shapes/Box": 37, - "../shapes/Circle": 39, - "../shapes/Convex": 40, - "../shapes/Shape": 45, - "../utils/ContactEquationPool": 48, - "../utils/FrictionEquationPool": 49, - "../utils/TupleDictionary": 56, - "../utils/Utils": 57 + '../equations/ContactEquation': 21, + '../equations/Equation': 22, + '../equations/FrictionEquation': 23, + '../math/vec2': 30, + '../objects/Body': 31, + '../shapes/Box': 37, + '../shapes/Circle': 39, + '../shapes/Convex': 40, + '../shapes/Shape': 45, + '../utils/ContactEquationPool': 48, + '../utils/FrictionEquationPool': 49, + '../utils/TupleDictionary': 56, + '../utils/Utils': 57 }], 11: [function (_dereq_, module, exports) { module.exports = Ray; @@ -3758,7 +3836,6 @@ this.update(); } - Ray.prototype.constructor = Ray; /** @@ -3981,7 +4058,7 @@ } - }, {"../collision/AABB": 7, "../collision/RaycastResult": 12, "../math/vec2": 30, "../shapes/Shape": 45}], + }, {'../collision/AABB': 7, '../collision/RaycastResult': 12, '../math/vec2': 30, '../shapes/Shape': 45}], 12: [function (_dereq_, module, exports) { var vec2 = _dereq_('../math/vec2'); var Ray = _dereq_('../collision/Ray'); @@ -4101,21 +4178,23 @@ * @param {Body} body * @param {number} fraction */ - RaycastResult.prototype.set = function (normal, - shape, - body, - fraction, - faceIndex) { + RaycastResult.prototype.set = function ( + normal, + shape, + body, + fraction, + faceIndex + ) { vec2.copy(this.normal, normal); this.shape = shape; this.body = body; this.fraction = fraction; this.faceIndex = faceIndex; }; - }, {"../collision/Ray": 11, "../math/vec2": 30}], + }, {'../collision/Ray': 11, '../math/vec2': 30}], 13: [function (_dereq_, module, exports) { - var Utils = _dereq_('../utils/Utils') - , Broadphase = _dereq_('../collision/Broadphase'); + var Utils = _dereq_('../utils/Utils'), + Broadphase = _dereq_('../collision/Broadphase'); module.exports = SAPBroadphase; @@ -4132,14 +4211,14 @@ /** * List of bodies currently in the broadphase. * @property axisList - * @objType {Array} + * @type {Array} */ this.axisList = []; /** * The axis to sort along. 0 means x-axis and 1 y-axis. If your bodies are more spread out over the X axis, set axisIndex to 0, and you will gain some performance. * @property axisIndex - * @objType {Number} + * @type {Number} */ this.axisIndex = 0; @@ -4156,7 +4235,6 @@ } }; } - SAPBroadphase.prototype = new Broadphase(); SAPBroadphase.prototype.constructor = SAPBroadphase; @@ -4174,11 +4252,11 @@ // Remove old handlers, if any world - .off("addBody", this._addBodyHandler) - .off("removeBody", this._removeBodyHandler); + .off('addBody', this._addBodyHandler) + .off('removeBody', this._removeBodyHandler); // Add handlers to update the list of bodies. - world.on("addBody", this._addBodyHandler).on("removeBody", this._removeBodyHandler); + world.on('addBody', this._addBodyHandler).on('removeBody', this._removeBodyHandler); this.world = world; }; @@ -4299,7 +4377,7 @@ return result; }; - }, {"../collision/Broadphase": 8, "../utils/Utils": 57}], + }, {'../collision/Broadphase': 8, '../utils/Utils': 57}], 14: [function (_dereq_, module, exports) { module.exports = Constraint; @@ -4320,42 +4398,42 @@ function Constraint(bodyA, bodyB, type, options) { /** - * The objType of constraint. May be one of Constraint.DISTANCE, Constraint.GEAR, Constraint.LOCK, Constraint.PRISMATIC or Constraint.REVOLUTE. - * @property {number} objType + * The type of constraint. May be one of Constraint.DISTANCE, Constraint.GEAR, Constraint.LOCK, Constraint.PRISMATIC or Constraint.REVOLUTE. + * @property {number} type */ this.type = type; options = Utils.defaults(options, { collideConnected: true, - wakeUpBodies: true, + wakeUpBodies: true }); /** * Equations to be solved in this constraint * * @property equations - * @objType {Array} + * @type {Array} */ this.equations = []; /** * First body participating in the constraint. * @property bodyA - * @objType {Body} + * @type {Body} */ this.bodyA = bodyA; /** * Second body participating in the constraint. * @property bodyB - * @objType {Body} + * @type {Body} */ this.bodyB = bodyB; /** * Set to true if you want the connected bodies to collide. * @property collideConnected - * @objType {Boolean} + * @type {Boolean} * @default true */ this.collideConnected = options.collideConnected; @@ -4376,7 +4454,7 @@ * @method update */ Constraint.prototype.update = function () { - throw new Error("method update() not implmemented in this Constraint subclass!"); + throw new Error('method update() not implmemented in this Constraint subclass!'); }; /** @@ -4437,12 +4515,12 @@ } }; - }, {"../utils/Utils": 57}], + }, {'../utils/Utils': 57}], 15: [function (_dereq_, module, exports) { - var Constraint = _dereq_('./Constraint') - , Equation = _dereq_('../equations/Equation') - , vec2 = _dereq_('../math/vec2') - , Utils = _dereq_('../utils/Utils'); + var Constraint = _dereq_('./Constraint'), + Equation = _dereq_('../equations/Equation'), + vec2 = _dereq_('../math/vec2'), + Utils = _dereq_('../utils/Utils'); module.exports = DistanceConstraint; @@ -4489,14 +4567,14 @@ /** * Local anchor in body A. * @property localAnchorA - * @objType {Array} + * @type {Array} */ this.localAnchorA = vec2.fromValues(options.localAnchorA[0], options.localAnchorA[1]); /** * Local anchor in body B. * @property localAnchorB - * @objType {Array} + * @type {Array} */ this.localAnchorB = vec2.fromValues(options.localAnchorB[0], options.localAnchorB[1]); @@ -4506,11 +4584,11 @@ /** * The distance to keep. * @property distance - * @objType {Number} + * @type {Number} */ this.distance = 0; - if (typeof(options.distance) === 'number') { + if (typeof (options.distance) === 'number') { this.distance = options.distance; } else { // Use the current world distance between the world anchor points. @@ -4530,7 +4608,7 @@ } var maxForce; - if (typeof(options.maxForce) === "undefined") { + if (typeof (options.maxForce) === 'undefined') { maxForce = Number.MAX_VALUE; } else { maxForce = options.maxForce; @@ -4578,7 +4656,7 @@ vec2.sub(r, r, ri); vec2.sub(r, r, xi); - //vec2.sub(r, bodyB.position, bodyA.position); + // vec2.sub(r, bodyB.position, bodyA.position); return vec2.length(r) - that.distance; }; @@ -4615,7 +4693,6 @@ */ this.position = 0; } - DistanceConstraint.prototype = new Constraint(); DistanceConstraint.prototype.constructor = DistanceConstraint; @@ -4709,12 +4786,12 @@ return normal.maxForce; }; - }, {"../equations/Equation": 22, "../math/vec2": 30, "../utils/Utils": 57, "./Constraint": 14}], + }, {'../equations/Equation': 22, '../math/vec2': 30, '../utils/Utils': 57, './Constraint': 14}], 16: [function (_dereq_, module, exports) { - var Constraint = _dereq_('./Constraint') - , Equation = _dereq_('../equations/Equation') - , AngleLockEquation = _dereq_('../equations/AngleLockEquation') - , vec2 = _dereq_('../math/vec2'); + var Constraint = _dereq_('./Constraint'), + Equation = _dereq_('../equations/Equation'), + AngleLockEquation = _dereq_('../equations/AngleLockEquation'), + vec2 = _dereq_('../math/vec2'); module.exports = GearConstraint; @@ -4750,14 +4827,14 @@ /** * The gear ratio. * @property ratio - * @objType {Number} + * @type {Number} */ this.ratio = options.ratio !== undefined ? options.ratio : 1; /** * The relative angle * @property angle - * @objType {Number} + * @type {Number} */ this.angle = options.angle !== undefined ? options.angle : bodyB.angle - this.ratio * bodyA.angle; @@ -4766,7 +4843,7 @@ options.ratio = this.ratio; this.equations = [ - new AngleLockEquation(bodyA, bodyB, options), + new AngleLockEquation(bodyA, bodyB, options) ]; // Set max torque @@ -4774,7 +4851,6 @@ this.setMaxTorque(options.maxTorque); } } - GearConstraint.prototype = new Constraint(); GearConstraint.prototype.constructor = GearConstraint; @@ -4803,11 +4879,11 @@ GearConstraint.prototype.getMaxTorque = function (torque) { return this.equations[0].maxForce; }; - }, {"../equations/AngleLockEquation": 20, "../equations/Equation": 22, "../math/vec2": 30, "./Constraint": 14}], + }, {'../equations/AngleLockEquation': 20, '../equations/Equation': 22, '../math/vec2': 30, './Constraint': 14}], 17: [function (_dereq_, module, exports) { - var Constraint = _dereq_('./Constraint') - , vec2 = _dereq_('../math/vec2') - , Equation = _dereq_('../equations/Equation'); + var Constraint = _dereq_('./Constraint'), + vec2 = _dereq_('../math/vec2'), + Equation = _dereq_('../equations/Equation'); module.exports = LockConstraint; @@ -4835,7 +4911,7 @@ Constraint.call(this, bodyA, bodyB, Constraint.LOCK, options); - var maxForce = (typeof(options.maxForce) === "undefined" ? Number.MAX_VALUE : options.maxForce); + var maxForce = (typeof (options.maxForce) === 'undefined' ? Number.MAX_VALUE : options.maxForce); var localAngleB = options.localAngleB || 0; @@ -4910,7 +4986,7 @@ * @property {Number} localAngleB */ this.localAngleB = 0; - if (typeof(options.localAngleB) === 'number') { + if (typeof (options.localAngleB) === 'number') { this.localAngleB = options.localAngleB; } else { // Construct @@ -4920,7 +4996,6 @@ this.equations.push(x, y, rot); this.setMaxForce(maxForce); } - LockConstraint.prototype = new Constraint(); LockConstraint.prototype.constructor = LockConstraint; @@ -4982,13 +5057,13 @@ rot.G[5] = vec2.crossLength(r, t); }; - }, {"../equations/Equation": 22, "../math/vec2": 30, "./Constraint": 14}], + }, {'../equations/Equation': 22, '../math/vec2': 30, './Constraint': 14}], 18: [function (_dereq_, module, exports) { - var Constraint = _dereq_('./Constraint') - , ContactEquation = _dereq_('../equations/ContactEquation') - , Equation = _dereq_('../equations/Equation') - , vec2 = _dereq_('../math/vec2') - , RotationalLockEquation = _dereq_('../equations/RotationalLockEquation'); + var Constraint = _dereq_('./Constraint'), + ContactEquation = _dereq_('../equations/ContactEquation'), + Equation = _dereq_('../equations/Equation'), + vec2 = _dereq_('../math/vec2'), + RotationalLockEquation = _dereq_('../equations/RotationalLockEquation'); module.exports = PrismaticConstraint; @@ -5031,19 +5106,19 @@ /** * @property localAnchorA - * @objType {Array} + * @type {Array} */ this.localAnchorA = localAnchorA; /** * @property localAnchorB - * @objType {Array} + * @type {Array} */ this.localAnchorB = localAnchorB; /** * @property localAxisA - * @objType {Array} + * @type {Array} */ this.localAxisA = localAxisA; @@ -5065,7 +5140,7 @@ */ - var maxForce = this.maxForce = typeof(options.maxForce) !== "undefined" ? options.maxForce : Number.MAX_VALUE; + var maxForce = this.maxForce = typeof (options.maxForce) !== 'undefined' ? options.maxForce : Number.MAX_VALUE; // Translational part var trans = new Equation(bodyA, bodyB, -maxForce, maxForce); @@ -5106,7 +5181,7 @@ /** * The position of anchor A relative to anchor B, along the constraint axis. * @property position - * @objType {Number} + * @type {Number} */ this.position = 0; @@ -5116,30 +5191,30 @@ /** * Set to true to enable lower limit. * @property lowerLimitEnabled - * @objType {Boolean} + * @type {Boolean} */ - this.lowerLimitEnabled = typeof(options.lowerLimit) !== "undefined" ? true : false; + this.lowerLimitEnabled = typeof (options.lowerLimit) !== 'undefined' ? true : false; /** * Set to true to enable upper limit. * @property upperLimitEnabled - * @objType {Boolean} + * @type {Boolean} */ - this.upperLimitEnabled = typeof(options.upperLimit) !== "undefined" ? true : false; + this.upperLimitEnabled = typeof (options.upperLimit) !== 'undefined' ? true : false; /** * Lower constraint limit. The constraint position is forced to be larger than this value. * @property lowerLimit - * @objType {Number} + * @type {Number} */ - this.lowerLimit = typeof(options.lowerLimit) !== "undefined" ? options.lowerLimit : 0; + this.lowerLimit = typeof (options.lowerLimit) !== 'undefined' ? options.lowerLimit : 0; /** * Upper constraint limit. The constraint position is forced to be smaller than this value. * @property upperLimit - * @objType {Number} + * @type {Number} */ - this.upperLimit = typeof(options.upperLimit) !== "undefined" ? options.upperLimit : 1; + this.upperLimit = typeof (options.upperLimit) !== 'undefined' ? options.upperLimit : 1; // Equations used for limits this.upperLimitEquation = new ContactEquation(bodyA, bodyB); @@ -5152,21 +5227,21 @@ /** * Equation used for the motor. * @property motorEquation - * @objType {Equation} + * @type {Equation} */ this.motorEquation = new Equation(bodyA, bodyB); /** * The current motor state. Enable or disable the motor using .enableMotor * @property motorEnabled - * @objType {Boolean} + * @type {Boolean} */ this.motorEnabled = false; /** * Set the target speed for the motor. * @property motorSpeed - * @objType {Number} + * @type {Number} */ this.motorSpeed = 0; @@ -5327,7 +5402,7 @@ * @param {number} upper Upper limit. */ PrismaticConstraint.prototype.setLimits = function (lower, upper) { - if (typeof(lower) === 'number') { + if (typeof (lower) === 'number') { this.lowerLimit = lower; this.lowerLimitEnabled = true; } else { @@ -5335,7 +5410,7 @@ this.lowerLimitEnabled = false; } - if (typeof(upper) === 'number') { + if (typeof (upper) === 'number') { this.upperLimit = upper; this.upperLimitEnabled = true; } else { @@ -5346,18 +5421,18 @@ }, { - "../equations/ContactEquation": 21, - "../equations/Equation": 22, - "../equations/RotationalLockEquation": 24, - "../math/vec2": 30, - "./Constraint": 14 + '../equations/ContactEquation': 21, + '../equations/Equation': 22, + '../equations/RotationalLockEquation': 24, + '../math/vec2': 30, + './Constraint': 14 }], 19: [function (_dereq_, module, exports) { - var Constraint = _dereq_('./Constraint') - , Equation = _dereq_('../equations/Equation') - , RotationalVelocityEquation = _dereq_('../equations/RotationalVelocityEquation') - , RotationalLockEquation = _dereq_('../equations/RotationalLockEquation') - , vec2 = _dereq_('../math/vec2'); + var Constraint = _dereq_('./Constraint'), + Equation = _dereq_('../equations/Equation'), + RotationalVelocityEquation = _dereq_('../equations/RotationalVelocityEquation'), + RotationalLockEquation = _dereq_('../equations/RotationalLockEquation'), + vec2 = _dereq_('../math/vec2'); module.exports = RevoluteConstraint; @@ -5400,7 +5475,7 @@ options = options || {}; Constraint.call(this, bodyA, bodyB, Constraint.REVOLUTE, options); - var maxForce = this.maxForce = typeof(options.maxForce) !== "undefined" ? options.maxForce : Number.MAX_VALUE; + var maxForce = this.maxForce = typeof (options.maxForce) !== 'undefined' ? options.maxForce : Number.MAX_VALUE; /** * @property {Array} pivotA @@ -5416,6 +5491,7 @@ // Compute pivotA and pivotB vec2.sub(this.pivotA, options.worldPivot, bodyA.position); vec2.sub(this.pivotB, options.worldPivot, bodyB.position); + // Rotate to local coordinate system vec2.rotate(this.pivotA, this.pivotA, -bodyA.angle); vec2.rotate(this.pivotB, this.pivotB, -bodyB.angle); @@ -5428,7 +5504,7 @@ // Equations to be fed to the solver var eqs = this.equations = [ new Equation(bodyA, bodyB, -maxForce, maxForce), - new Equation(bodyA, bodyB, -maxForce, maxForce), + new Equation(bodyA, bodyB, -maxForce, maxForce) ]; var x = eqs[0]; @@ -5468,7 +5544,7 @@ /** * The constraint position. * @property angle - * @objType {Number} + * @type {Number} * @readOnly */ this.angle = 0; @@ -5476,28 +5552,28 @@ /** * Set to true to enable lower limit * @property lowerLimitEnabled - * @objType {Boolean} + * @type {Boolean} */ this.lowerLimitEnabled = false; /** * Set to true to enable upper limit * @property upperLimitEnabled - * @objType {Boolean} + * @type {Boolean} */ this.upperLimitEnabled = false; /** * The lower limit on the constraint angle. * @property lowerLimit - * @objType {Boolean} + * @type {Boolean} */ this.lowerLimit = 0; /** * The upper limit on the constraint angle. * @property upperLimit - * @objType {Boolean} + * @type {Boolean} */ this.upperLimit = 0; @@ -5506,7 +5582,6 @@ this.upperLimitEquation.minForce = 0; this.lowerLimitEquation.maxForce = 0; } - RevoluteConstraint.prototype = new Constraint(); RevoluteConstraint.prototype.constructor = RevoluteConstraint; @@ -5517,7 +5592,7 @@ * @param {number} upper Upper angle limit. */ RevoluteConstraint.prototype.setLimits = function (lower, upper) { - if (typeof(lower) === 'number') { + if (typeof (lower) === 'number') { this.lowerLimit = lower; this.lowerLimitEnabled = true; } else { @@ -5525,7 +5600,7 @@ this.lowerLimitEnabled = false; } - if (typeof(upper) === 'number') { + if (typeof (upper) === 'number') { this.upperLimit = upper; this.upperLimitEnabled = true; } else { @@ -5645,16 +5720,6 @@ this.motorEnabled = false; }; - /** - * Check if the motor is enabled. - * @method motorIsEnabled - * @deprecated use property motorEnabled instead. - * @return {Boolean} - */ - RevoluteConstraint.prototype.motorIsEnabled = function () { - return !!this.motorEnabled; - }; - /** * Set the speed of the rotational constraint motor * @method setMotorSpeed @@ -5681,14 +5746,14 @@ }; }, { - "../equations/Equation": 22, - "../equations/RotationalLockEquation": 24, - "../equations/RotationalVelocityEquation": 25, - "../math/vec2": 30, - "./Constraint": 14 + '../equations/Equation': 22, + '../equations/RotationalLockEquation': 24, + '../equations/RotationalVelocityEquation': 25, + '../math/vec2': 30, + './Constraint': 14 }], 20: [function (_dereq_, module, exports) { - var Equation = _dereq_("./Equation"), + var Equation = _dereq_('./Equation'), vec2 = _dereq_('../math/vec2'); module.exports = AngleLockEquation; @@ -5716,11 +5781,10 @@ * @private * @see setRatio */ - this.ratio = typeof(options.ratio) === "number" ? options.ratio : 1; + this.ratio = typeof (options.ratio) === 'number' ? options.ratio : 1; this.setRatio(this.ratio); } - AngleLockEquation.prototype = new Equation(); AngleLockEquation.prototype.constructor = AngleLockEquation; @@ -5750,9 +5814,9 @@ this.minForce = -torque; }; - }, {"../math/vec2": 30, "./Equation": 22}], + }, {'../math/vec2': 30, './Equation': 22}], 21: [function (_dereq_, module, exports) { - var Equation = _dereq_("./Equation"), + var Equation = _dereq_('./Equation'), vec2 = _dereq_('../math/vec2'); module.exports = ContactEquation; @@ -5772,7 +5836,7 @@ /** * Vector from body i center of mass to the contact point. * @property contactPointA - * @objType {Array} + * @type {Array} */ this.contactPointA = vec2.create(); this.penetrationVec = vec2.create(); @@ -5780,28 +5844,28 @@ /** * World-oriented vector from body A center of mass to the contact point. * @property contactPointB - * @objType {Array} + * @type {Array} */ this.contactPointB = vec2.create(); /** * The normal vector, pointing out of body i * @property normalA - * @objType {Array} + * @type {Array} */ this.normalA = vec2.create(); /** * The restitution to use (0=no bounciness, 1=max bounciness). * @property restitution - * @objType {Number} + * @type {Number} */ this.restitution = 0; /** * This property is set to true if this is the first impact between the bodies (not persistant contact). * @property firstImpact - * @objType {Boolean} + * @type {Boolean} * @readOnly */ this.firstImpact = false; @@ -5809,18 +5873,17 @@ /** * The shape in body i that triggered this contact. * @property shapeA - * @objType {Shape} + * @type {Shape} */ this.shapeA = null; /** * The shape in body j that triggered this contact. * @property shapeB - * @objType {Shape} + * @type {Shape} */ this.shapeB = null; } - ContactEquation.prototype = new Equation(); ContactEquation.prototype.constructor = ContactEquation; ContactEquation.prototype.computeB = function (a, b, h) { @@ -5885,7 +5948,7 @@ return vec2.dot(this.normalA, relVel); }; - }, {"../math/vec2": 30, "./Equation": 22}], + }, {'../math/vec2': 30, './Equation': 22}], 22: [function (_dereq_, module, exports) { module.exports = Equation; @@ -5907,49 +5970,49 @@ /** * Minimum force to apply when solving. * @property minForce - * @objType {Number} + * @type {Number} */ - this.minForce = typeof(minForce) === "undefined" ? -Number.MAX_VALUE : minForce; + this.minForce = typeof (minForce) === 'undefined' ? -Number.MAX_VALUE : minForce; /** * Max force to apply when solving. * @property maxForce - * @objType {Number} + * @type {Number} */ - this.maxForce = typeof(maxForce) === "undefined" ? Number.MAX_VALUE : maxForce; + this.maxForce = typeof (maxForce) === 'undefined' ? Number.MAX_VALUE : maxForce; /** * First body participating in the constraint * @property bodyA - * @objType {Body} + * @type {Body} */ this.bodyA = bodyA; /** * Second body participating in the constraint * @property bodyB - * @objType {Body} + * @type {Body} */ this.bodyB = bodyB; /** * The stiffness of this equation. Typically chosen to a large number (~1e7), but can be chosen somewhat freely to get a stable simulation. * @property stiffness - * @objType {Number} + * @type {Number} */ this.stiffness = Equation.DEFAULT_STIFFNESS; /** * The number of time steps needed to stabilize the constraint equation. Typically between 3 and 5 time steps. * @property relaxation - * @objType {Number} + * @type {Number} */ this.relaxation = Equation.DEFAULT_RELAXATION; /** * The Jacobian entry of this equation. 6 numbers, 3 per body (x,y,angle). * @property G - * @objType {Array} + * @type {Array} */ this.G = new Utils.ARRAY_TYPE(6); for (var i = 0; i < 6; i++) { @@ -5972,7 +6035,7 @@ /** * The resulting constraint multiplier from the last solve. This is mostly equivalent to the force produced by the constraint. * @property multiplier - * @objType {Number} + * @type {Number} */ this.multiplier = 0; @@ -5988,7 +6051,6 @@ */ this.enabled = true; } - Equation.prototype.constructor = Equation; /** @@ -6187,16 +6249,18 @@ vec2.scale(temp, Gi, invMassi * deltalambda); vec2.multiply(temp, temp, bi.massMultiplier); vec2.add(bi.vlambda, bi.vlambda, temp); + // This impulse is in the offset frame // Also add contribution to angular - //bi.wlambda -= vec2.crossLength(temp,ri); + // bi.wlambda -= vec2.crossLength(temp,ri); bi.wlambda += invIi * G[2] * deltalambda; vec2.scale(temp, Gj, invMassj * deltalambda); vec2.multiply(temp, temp, bj.massMultiplier); vec2.add(bj.vlambda, bj.vlambda, temp); - //bj.wlambda -= vec2.crossLength(temp,rj); + + // bj.wlambda -= vec2.crossLength(temp,rj); bj.wlambda += invIj * G[5] * deltalambda; }; @@ -6210,11 +6274,11 @@ return 1.0 / (this.computeGiMGt() + eps); }; - }, {"../math/vec2": 30, "../objects/Body": 31, "../utils/Utils": 57}], + }, {'../math/vec2': 30, '../objects/Body': 31, '../utils/Utils': 57}], 23: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , Equation = _dereq_('./Equation') - , Utils = _dereq_('../utils/Utils'); + var vec2 = _dereq_('../math/vec2'), + Equation = _dereq_('./Equation'), + Utils = _dereq_('../utils/Utils'); module.exports = FrictionEquation; @@ -6234,35 +6298,35 @@ /** * Relative vector from center of body A to the contact point, world oriented. * @property contactPointA - * @objType {Array} + * @type {Array} */ this.contactPointA = vec2.create(); /** * Relative vector from center of body B to the contact point, world oriented. * @property contactPointB - * @objType {Array} + * @type {Array} */ this.contactPointB = vec2.create(); /** * Tangent vector that the friction force will act along. World oriented. * @property t - * @objType {Array} + * @type {Array} */ this.t = vec2.create(); /** * ContactEquations connected to this friction equation. The contact equations can be used to rescale the max force for the friction. If more than one contact equation is given, then the max force can be set to the average. * @property contactEquations - * @objType {ContactEquation} + * @type {ContactEquation} */ this.contactEquations = []; /** * The shape in body i that triggered this friction. * @property shapeA - * @objType {Shape} + * @type {Shape} * @todo Needed? The shape can be looked up via contactEquation.shapeA... */ this.shapeA = null; @@ -6270,7 +6334,7 @@ /** * The shape in body j that triggered this friction. * @property shapeB - * @objType {Shape} + * @type {Shape} * @todo Needed? The shape can be looked up via contactEquation.shapeB... */ this.shapeB = null; @@ -6278,11 +6342,10 @@ /** * The friction coefficient to use. * @property frictionCoefficient - * @objType {Number} + * @type {Number} */ this.frictionCoefficient = 0.3; } - FrictionEquation.prototype = new Equation(); FrictionEquation.prototype.constructor = FrictionEquation; @@ -6331,9 +6394,9 @@ return B; }; - }, {"../math/vec2": 30, "../utils/Utils": 57, "./Equation": 22}], + }, {'../math/vec2': 30, '../utils/Utils': 57, './Equation': 22}], 24: [function (_dereq_, module, exports) { - var Equation = _dereq_("./Equation"), + var Equation = _dereq_('./Equation'), vec2 = _dereq_('../math/vec2'); module.exports = RotationalLockEquation; @@ -6362,7 +6425,6 @@ G[2] = 1; G[5] = -1; } - RotationalLockEquation.prototype = new Equation(); RotationalLockEquation.prototype.constructor = RotationalLockEquation; @@ -6376,9 +6438,9 @@ return vec2.dot(worldVectorA, worldVectorB); }; - }, {"../math/vec2": 30, "./Equation": 22}], + }, {'../math/vec2': 30, './Equation': 22}], 25: [function (_dereq_, module, exports) { - var Equation = _dereq_("./Equation"), + var Equation = _dereq_('./Equation'), vec2 = _dereq_('../math/vec2'); module.exports = RotationalVelocityEquation; @@ -6397,7 +6459,6 @@ this.relativeVelocity = 1; this.ratio = 1; } - RotationalVelocityEquation.prototype = new Equation(); RotationalVelocityEquation.prototype.constructor = RotationalVelocityEquation; RotationalVelocityEquation.prototype.computeB = function (a, b, h) { @@ -6412,7 +6473,7 @@ return B; }; - }, {"../math/vec2": 30, "./Equation": 22}], + }, {'../math/vec2': 30, './Equation': 22}], 26: [function (_dereq_, module, exports) { /** * Base class for objects that dispatches events. @@ -6465,10 +6526,8 @@ if (listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1) { return true; } - } else { - if (listeners[type] !== undefined) { - return true; - } + } else if (listeners[type] !== undefined) { + return true; } return false; @@ -6497,7 +6556,7 @@ * Emit an event. * @method emit * @param {Object} event - * @param {String} event.objType + * @param {String} event.type * @return {EventEmitter} The self object, for chainability. */ emit: function (event) { @@ -6544,92 +6603,92 @@ options = options || {}; if (!(materialA instanceof Material) || !(materialB instanceof Material)) { - throw new Error("First two arguments must be Material instances."); + throw new Error('First two arguments must be Material instances.'); } /** * The contact material identifier * @property id - * @objType {Number} + * @type {Number} */ this.id = ContactMaterial.idCounter++; /** * First material participating in the contact material * @property materialA - * @objType {Material} + * @type {Material} */ this.materialA = materialA; /** * Second material participating in the contact material * @property materialB - * @objType {Material} + * @type {Material} */ this.materialB = materialB; /** * Friction coefficient to use in the contact of these two materials. Friction = 0 will make the involved objects super slippery, and friction = 1 will make it much less slippery. A friction coefficient larger than 1 will allow for very large friction forces, which can be convenient for preventing car tires not slip on the ground. * @property friction - * @objType {Number} + * @type {Number} * @default 0.3 */ - this.friction = typeof(options.friction) !== "undefined" ? Number(options.friction) : 0.3; + this.friction = typeof (options.friction) !== 'undefined' ? Number(options.friction) : 0.3; /** * Restitution, or "bounciness" to use in the contact of these two materials. A restitution of 0 will make no bounce, while restitution=1 will approximately bounce back with the same velocity the object came with. * @property restitution - * @objType {Number} + * @type {Number} * @default 0 */ - this.restitution = typeof(options.restitution) !== "undefined" ? Number(options.restitution) : 0; + this.restitution = typeof (options.restitution) !== 'undefined' ? Number(options.restitution) : 0; /** * Hardness of the contact. Less stiffness will make the objects penetrate more, and will make the contact act more like a spring than a contact force. Default value is {{#crossLink "Equation/DEFAULT_STIFFNESS:property"}}Equation.DEFAULT_STIFFNESS{{/crossLink}}. * @property stiffness - * @objType {Number} + * @type {Number} */ - this.stiffness = typeof(options.stiffness) !== "undefined" ? Number(options.stiffness) : Equation.DEFAULT_STIFFNESS; + this.stiffness = typeof (options.stiffness) !== 'undefined' ? Number(options.stiffness) : Equation.DEFAULT_STIFFNESS; /** * Relaxation of the resulting ContactEquation that this ContactMaterial generate. Default value is {{#crossLink "Equation/DEFAULT_RELAXATION:property"}}Equation.DEFAULT_RELAXATION{{/crossLink}}. * @property relaxation - * @objType {Number} + * @type {Number} */ - this.relaxation = typeof(options.relaxation) !== "undefined" ? Number(options.relaxation) : Equation.DEFAULT_RELAXATION; + this.relaxation = typeof (options.relaxation) !== 'undefined' ? Number(options.relaxation) : Equation.DEFAULT_RELAXATION; /** * Stiffness of the resulting friction force. For most cases, the value of this property should be a large number. I cannot think of any case where you would want less frictionStiffness. Default value is {{#crossLink "Equation/DEFAULT_STIFFNESS:property"}}Equation.DEFAULT_STIFFNESS{{/crossLink}}. * @property frictionStiffness - * @objType {Number} + * @type {Number} */ - this.frictionStiffness = typeof(options.frictionStiffness) !== "undefined" ? Number(options.frictionStiffness) : Equation.DEFAULT_STIFFNESS; + this.frictionStiffness = typeof (options.frictionStiffness) !== 'undefined' ? Number(options.frictionStiffness) : Equation.DEFAULT_STIFFNESS; /** * Relaxation of the resulting friction force. The default value should be good for most simulations. Default value is {{#crossLink "Equation/DEFAULT_RELAXATION:property"}}Equation.DEFAULT_RELAXATION{{/crossLink}}. * @property frictionRelaxation - * @objType {Number} + * @type {Number} */ - this.frictionRelaxation = typeof(options.frictionRelaxation) !== "undefined" ? Number(options.frictionRelaxation) : Equation.DEFAULT_RELAXATION; + this.frictionRelaxation = typeof (options.frictionRelaxation) !== 'undefined' ? Number(options.frictionRelaxation) : Equation.DEFAULT_RELAXATION; /** * Will add surface velocity to this material. If bodyA rests on top if bodyB, and the surface velocity is positive, bodyA will slide to the right. * @property {Number} surfaceVelocity * @default 0 */ - this.surfaceVelocity = typeof(options.surfaceVelocity) !== "undefined" ? Number(options.surfaceVelocity) : 0; + this.surfaceVelocity = typeof (options.surfaceVelocity) !== 'undefined' ? Number(options.surfaceVelocity) : 0; /** * Offset to be set on ContactEquations. A positive value will make the bodies penetrate more into each other. Can be useful in scenes where contacts need to be more persistent, for example when stacking. Aka "cure for nervous contacts". * @property contactSkinSize - * @objType {Number} + * @type {Number} */ this.contactSkinSize = 0.005; } ContactMaterial.idCounter = 0; - }, {"../equations/Equation": 22, "./Material": 28}], + }, {'../equations/Equation': 22, './Material': 28}], 28: [function (_dereq_, module, exports) { module.exports = Material; @@ -6644,7 +6703,7 @@ /** * The material identifier * @property id - * @objType {Number} + * @type {Number} */ this.id = id || Material.idCounter++; } @@ -6735,14 +6794,18 @@ } */ PolyK.GetArea = function (p) { - if (p.length < 6) return 0; + if (p.length < 6) { + return 0; + } var l = p.length - 2; var sum = 0; - for (var i = 0; i < l; i += 2) + for (var i = 0; i < l; i += 2) { sum += (p[i + 2] - p[i]) * (p[i + 1] + p[i + 3]); + } sum += (p[0] - p[l]) * (p[l + 1] + p[1]); return -sum * 0.5; - } + }; + /* PolyK.GetAABB = function(p) { @@ -6763,10 +6826,14 @@ PolyK.Triangulate = function (p) { var n = p.length >> 1; - if (n < 3) return []; + if (n < 3) { + return []; + } var tgs = []; var avl = []; - for (var i = 0; i < n; i++) avl.push(i); + for (var i = 0; i < n; i++) { + avl.push(i); + } var i = 0; var al = n; @@ -6775,16 +6842,21 @@ var i1 = avl[(i + 1) % al]; var i2 = avl[(i + 2) % al]; - var ax = p[2 * i0], ay = p[2 * i0 + 1]; - var bx = p[2 * i1], by = p[2 * i1 + 1]; - var cx = p[2 * i2], cy = p[2 * i2 + 1]; + var ax = p[2 * i0], + ay = p[2 * i0 + 1]; + var bx = p[2 * i1], + by = p[2 * i1 + 1]; + var cx = p[2 * i2], + cy = p[2 * i2 + 1]; var earFound = false; if (PolyK._convex(ax, ay, bx, by, cx, cy)) { earFound = true; for (var j = 0; j < al; j++) { var vi = avl[j]; - if (vi == i0 || vi == i1 || vi == i2) continue; + if (vi == i0 || vi == i1 || vi == i2) { + continue; + } if (PolyK._PointInTriangle(p[2 * vi], p[2 * vi + 1], ax, ay, bx, by, cx, cy)) { earFound = false; break; @@ -6796,12 +6868,14 @@ avl.splice((i + 1) % al, 1); al--; i = 0; - } - else if (i++ > 3 * al) break; // no convex angles :( + } else if (i++ > 3 * al) { + break; + } // no convex angles :( } tgs.push(avl[0], avl[1], avl[2]); return tgs; - } + }; + /* PolyK.ContainsPoint = function(p, px, py) { @@ -7045,7 +7119,8 @@ // Check if point is in triangle return (u >= 0) && (v >= 0) && (u + v < 1); - } + }; + /* PolyK._RayLineIntersection = function(a1, a2, b1, b2, c) { @@ -7101,7 +7176,8 @@ */ PolyK._convex = function (ax, ay, bx, by, cx, cy) { return (ay - by) * (cx - bx) + (bx - ax) * (cy - by) >= 0; - } + }; + /* PolyK._P = function(x,y) { @@ -7182,7 +7258,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ vec2.crossVZ = function (out, vec, zcomp) { vec2.rotate(out, vec, -Math.PI / 2);// Rotate according to the right hand rule - vec2.scale(out, out, zcomp); // Scale with z + vec2.scale(out, out, zcomp); // Scale with z return out; }; @@ -7197,7 +7273,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ vec2.crossZV = function (out, zcomp, vec) { vec2.rotate(out, vec, Math.PI / 2); // Rotate according to the right hand rule - vec2.scale(out, out, zcomp); // Scale with z + vec2.scale(out, out, zcomp); // Scale with z return out; }; @@ -7581,7 +7657,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ y = a[1]; var len = x * x + y * y; if (len > 0) { - //TODO: evaluate use of glm_invsqrt here? + // TODO: evaluate use of glm_invsqrt here? len = 1 / Math.sqrt(len); out[0] = a[0] * len; out[1] = a[1] * len; @@ -7690,15 +7766,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return -1; // No collision }; - }, {"../utils/Utils": 57}], + }, {'../utils/Utils': 57}], 31: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , decomp = _dereq_('poly-decomp') - , Convex = _dereq_('../shapes/Convex') - , RaycastResult = _dereq_('../collision/RaycastResult') - , Ray = _dereq_('../collision/Ray') - , AABB = _dereq_('../collision/AABB') - , EventEmitter = _dereq_('../events/EventEmitter'); + var vec2 = _dereq_('../math/vec2'), + decomp = _dereq_('poly-decomp'), + Convex = _dereq_('../shapes/Convex'), + RaycastResult = _dereq_('../collision/RaycastResult'), + Ray = _dereq_('../collision/Ray'), + AABB = _dereq_('../collision/AABB'), + EventEmitter = _dereq_('../events/EventEmitter'); module.exports = Body; @@ -7722,7 +7798,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Number} [options.fixedRotation=false] * @param {Number} [options.gravityScale] * @param {Number} [options.id] - * @param {Number} [options.mass=0] A number >= 0. If zero, the .objType will be set to Body.STATIC. + * @param {Number} [options.mass=0] A number >= 0. If zero, the .type will be set to Body.STATIC. * @param {Number} [options.sleepSpeedLimit] * @param {Number} [options.sleepTimeLimit] * @param {Object} [options] @@ -7752,14 +7828,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The body identifyer * @property id - * @objType {Number} + * @type {Number} */ this.id = options.id || ++Body._idCounter; /** * The world that this body is added to. This property is set to NULL if the body is not added to any world. * @property world - * @objType {World} + * @type {World} */ this.world = null; @@ -7767,35 +7843,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The shapes of the body. * * @property shapes - * @objType {Array} + * @type {Array} */ this.shapes = []; /** * The mass of the body. * @property mass - * @objType {number} + * @type {number} */ this.mass = options.mass || 0; /** * The inverse mass of the body. * @property invMass - * @objType {number} + * @type {number} */ this.invMass = 0; /** * The inertia of the body around the Z axis. * @property inertia - * @objType {number} + * @type {number} */ this.inertia = 0; /** * The inverse inertia of the body. * @property invInertia - * @objType {number} + * @type {number} */ this.invInertia = 0; @@ -7805,7 +7881,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Set to true if you want to fix the rotation of the body. * @property fixedRotation - * @objType {Boolean} + * @type {Boolean} */ this.fixedRotation = !!options.fixedRotation; @@ -7830,7 +7906,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The position of the body * @property position - * @objType {Array} + * @type {Array} */ this.position = vec2.fromValues(0, 0); if (options.position) { @@ -7840,35 +7916,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The interpolated position of the body. Use this for rendering. * @property interpolatedPosition - * @objType {Array} + * @type {Array} */ this.interpolatedPosition = vec2.fromValues(0, 0); /** * The interpolated angle of the body. Use this for rendering. * @property interpolatedAngle - * @objType {Number} + * @type {Number} */ this.interpolatedAngle = 0; /** * The previous position of the body. * @property previousPosition - * @objType {Array} + * @type {Array} */ this.previousPosition = vec2.fromValues(0, 0); /** * The previous angle of the body. * @property previousAngle - * @objType {Number} + * @type {Number} */ this.previousAngle = 0; /** * The current velocity of the body. * @property velocity - * @objType {Array} + * @type {Array} */ this.velocity = vec2.fromValues(0, 0); if (options.velocity) { @@ -7878,21 +7954,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Constraint velocity that was added to the body during the last step. * @property vlambda - * @objType {Array} + * @type {Array} */ this.vlambda = vec2.fromValues(0, 0); /** * Angular constraint velocity that was added to the body during last step. * @property wlambda - * @objType {Array} + * @type {Array} */ this.wlambda = 0; /** * The angle of the body, in radians. * @property angle - * @objType {number} + * @type {number} * @example * // The angle property is not normalized to the interval 0 to 2*pi, it can be any value. * // If you need a value between 0 and 2*pi, use the following function to normalize it. @@ -7909,14 +7985,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The angular velocity of the body, in radians per second. * @property angularVelocity - * @objType {number} + * @type {number} */ this.angularVelocity = options.angularVelocity || 0; /** * The force acting on the body. Since the body force (and {{#crossLink "Body/angularForce:property"}}{{/crossLink}}) will be zeroed after each step, so you need to set the force before each step. * @property force - * @objType {Array} + * @type {Array} * * @example * // This produces a forcefield of 1 Newton in the positive x direction. @@ -7940,40 +8016,40 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The angular force acting on the body. See {{#crossLink "Body/force:property"}}{{/crossLink}}. * @property angularForce - * @objType {number} + * @type {number} */ this.angularForce = options.angularForce || 0; /** * The linear damping acting on the body in the velocity direction. Should be a value between 0 and 1. * @property damping - * @objType {Number} + * @type {Number} * @default 0.1 */ - this.damping = typeof(options.damping) === "number" ? options.damping : 0.1; + this.damping = typeof (options.damping) === 'number' ? options.damping : 0.1; /** * The angular force acting on the body. Should be a value between 0 and 1. * @property angularDamping - * @objType {Number} + * @type {Number} * @default 0.1 */ - this.angularDamping = typeof(options.angularDamping) === "number" ? options.angularDamping : 0.1; + this.angularDamping = typeof (options.angularDamping) === 'number' ? options.angularDamping : 0.1; /** - * The objType of motion this body has. Should be one of: {{#crossLink "Body/STATIC:property"}}Body.STATIC{{/crossLink}}, {{#crossLink "Body/DYNAMIC:property"}}Body.DYNAMIC{{/crossLink}} and {{#crossLink "Body/KINEMATIC:property"}}Body.KINEMATIC{{/crossLink}}. + * The type of motion this body has. Should be one of: {{#crossLink "Body/STATIC:property"}}Body.STATIC{{/crossLink}}, {{#crossLink "Body/DYNAMIC:property"}}Body.DYNAMIC{{/crossLink}} and {{#crossLink "Body/KINEMATIC:property"}}Body.KINEMATIC{{/crossLink}}. * * * Static bodies do not move, and they do not respond to forces or collision. * * Dynamic bodies body can move and respond to collisions and forces. * * Kinematic bodies only moves according to its .velocity, and does not respond to collisions or force. * * @property type - * @objType {number} + * @type {number} * * @example * // Bodies are static by default. Static bodies will never move. * var body = new Body(); - * console.log(body.objType == Body.STATIC); // true + * console.log(body.type == Body.STATIC); // true * * @example * // By setting the mass of a body to a nonzero number, the body @@ -7981,17 +8057,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * var dynamicBody = new Body({ * mass : 1 * }); - * console.log(dynamicBody.objType == Body.DYNAMIC); // true + * console.log(dynamicBody.type == Body.DYNAMIC); // true * * @example * // Kinematic bodies will only move if you change their velocity. * var kinematicBody = new Body({ - * objType: Body.KINEMATIC // Type can be set via the options object. + * type: Body.KINEMATIC // Type can be set via the options object. * }); */ this.type = Body.STATIC; - if (typeof(options.type) !== 'undefined') { + if (typeof (options.type) !== 'undefined') { this.type = options.type; } else if (!options.mass) { this.type = Body.STATIC; @@ -8002,21 +8078,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Bounding circle radius. * @property boundingRadius - * @objType {Number} + * @type {Number} */ this.boundingRadius = 0; /** * Bounding box of this body. * @property aabb - * @objType {AABB} + * @type {AABB} */ this.aabb = new AABB(); /** * Indicates if the AABB needs update. Update it with {{#crossLink "Body/updateAABB:method"}}.updateAABB(){{/crossLink}}. * @property aabbNeedsUpdate - * @objType {Boolean} + * @type {Boolean} * @see updateAABB * * @example @@ -8030,7 +8106,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * If true, the body will automatically fall to sleep. Note that you need to enable sleeping in the {{#crossLink "World"}}{{/crossLink}} before anything will happen. * @property allowSleep - * @objType {Boolean} + * @type {Boolean} * @default true */ this.allowSleep = options.allowSleep !== undefined ? options.allowSleep : true; @@ -8043,7 +8119,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The body is initially Body.AWAKE. If its velocity norm is below .sleepSpeedLimit, the sleepState will become Body.SLEEPY. If the body continues to be Body.SLEEPY for .sleepTimeLimit seconds, it will fall asleep (Body.SLEEPY). * * @property sleepState - * @objType {Number} + * @type {Number} * @default Body.AWAKE */ this.sleepState = Body.AWAKE; @@ -8051,7 +8127,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * If the speed (the norm of the velocity) is smaller than this value, the body is considered sleepy. * @property sleepSpeedLimit - * @objType {Number} + * @type {Number} * @default 0.2 */ this.sleepSpeedLimit = options.sleepSpeedLimit !== undefined ? options.sleepSpeedLimit : 0.2; @@ -8059,7 +8135,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * If the body has been sleepy for this sleepTimeLimit seconds, it is considered sleeping. * @property sleepTimeLimit - * @objType {Number} + * @type {Number} * @default 1 */ this.sleepTimeLimit = options.sleepTimeLimit !== undefined ? options.sleepTimeLimit : 1; @@ -8110,7 +8186,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.updateMassProperties(); } - Body.prototype = new EventEmitter(); Body.prototype.constructor = Body; @@ -8489,12 +8564,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Make it counter-clockwise p.makeCCW(); - if (typeof(options.removeCollinearPoints) === "number") { + if (typeof (options.removeCollinearPoints) === 'number') { p.removeCollinearPoints(options.removeCollinearPoints); } // Check if any line segment intersects the path itself - if (typeof(options.skipSimpleCheck) === "undefined") { + if (typeof (options.skipSimpleCheck) === 'undefined') { if (!p.isSimple()) { return false; } @@ -8737,9 +8812,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; var result = new RaycastResult(); - var ray = new Ray({ - mode: Ray.ALL - }); + var ray = new Ray({mode: Ray.ALL}); var direction = vec2.create(); var end = vec2.create(); var startToEnd = vec2.create(); @@ -8846,28 +8919,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @event sleepy */ - Body.sleepyEvent = { - type: "sleepy" - }; + Body.sleepyEvent = {type: 'sleepy'}; /** * @event sleep */ - Body.sleepEvent = { - type: "sleep" - }; + Body.sleepEvent = {type: 'sleep'}; /** * @event wakeup */ - Body.wakeUpEvent = { - type: "wakeup" - }; + Body.wakeUpEvent = {type: 'wakeup'}; /** * Dynamic body. * @property DYNAMIC - * @objType {Number} + * @type {Number} * @static */ Body.DYNAMIC = 1; @@ -8875,7 +8942,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Static body. * @property STATIC - * @objType {Number} + * @type {Number} * @static */ Body.STATIC = 2; @@ -8883,41 +8950,41 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Kinematic body. * @property KINEMATIC - * @objType {Number} + * @type {Number} * @static */ Body.KINEMATIC = 4; /** * @property AWAKE - * @objType {Number} + * @type {Number} * @static */ Body.AWAKE = 0; /** * @property SLEEPY - * @objType {Number} + * @type {Number} * @static */ Body.SLEEPY = 1; /** * @property SLEEPING - * @objType {Number} + * @type {Number} * @static */ Body.SLEEPING = 2; }, { - "../collision/AABB": 7, - "../collision/Ray": 11, - "../collision/RaycastResult": 12, - "../events/EventEmitter": 26, - "../math/vec2": 30, - "../shapes/Convex": 40, - "poly-decomp": 5 + '../collision/AABB': 7, + '../collision/Ray': 11, + '../collision/RaycastResult': 12, + '../events/EventEmitter': 26, + '../math/vec2': 30, + '../shapes/Convex': 40, + 'poly-decomp': 5 }], 32: [function (_dereq_, module, exports) { var vec2 = _dereq_('../math/vec2'); @@ -8953,14 +9020,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Anchor for bodyA in local bodyA coordinates. * @property localAnchorA - * @objType {Array} + * @type {Array} */ this.localAnchorA = vec2.fromValues(0, 0); /** * Anchor for bodyB in local bodyB coordinates. * @property localAnchorB - * @objType {Array} + * @type {Array} */ this.localAnchorB = vec2.fromValues(0, 0); @@ -8986,11 +9053,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Rest length of the spring. * @property restLength - * @objType {number} + * @type {number} */ - this.restLength = typeof(options.restLength) === "number" ? options.restLength : worldDistance; + this.restLength = typeof (options.restLength) === 'number' ? options.restLength : worldDistance; } - LinearSpring.prototype = new Spring(); LinearSpring.prototype.constructor = LinearSpring; @@ -9074,8 +9140,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var rlen = vec2.len(r); vec2.normalize(r_unit, r); - //console.log(rlen) - //console.log("A",vec2.str(worldAnchorA),"B",vec2.str(worldAnchorB)) + // console.log(rlen) + // console.log("A",vec2.str(worldAnchorA),"B",vec2.str(worldAnchorB)) // Compute relative velocity of the anchor points, u vec2.sub(u, bodyB.velocity, bodyA.velocity); @@ -9098,7 +9164,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ bodyB.angularForce += rj_x_f; }; - }, {"../math/vec2": 30, "../utils/Utils": 57, "./Spring": 34}], + }, {'../math/vec2': 30, '../utils/Utils': 57, './Spring': 34}], 33: [function (_dereq_, module, exports) { var vec2 = _dereq_('../math/vec2'); var Spring = _dereq_('./Spring'); @@ -9128,11 +9194,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Rest angle of the spring. * @property restAngle - * @objType {number} + * @type {number} */ - this.restAngle = typeof(options.restAngle) === "number" ? options.restAngle : bodyB.angle - bodyA.angle; + this.restAngle = typeof (options.restAngle) === 'number' ? options.restAngle : bodyB.angle - bodyA.angle; } - RotationalSpring.prototype = new Spring(); RotationalSpring.prototype.constructor = RotationalSpring; @@ -9155,7 +9220,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ bodyB.angularForce += torque; }; - }, {"../math/vec2": 30, "./Spring": 34}], + }, {'../math/vec2': 30, './Spring': 34}], 34: [function (_dereq_, module, exports) { var vec2 = _dereq_('../math/vec2'); var Utils = _dereq_('../utils/Utils'); @@ -9180,34 +9245,34 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function Spring(bodyA, bodyB, options) { options = Utils.defaults(options, { stiffness: 100, - damping: 1, + damping: 1 }); /** * Stiffness of the spring. * @property stiffness - * @objType {number} + * @type {number} */ this.stiffness = options.stiffness; /** * Damping of the spring. * @property damping - * @objType {number} + * @type {number} */ this.damping = options.damping; /** * First connected body. * @property bodyA - * @objType {Body} + * @type {Body} */ this.bodyA = bodyA; /** * Second connected body. * @property bodyB - * @objType {Body} + * @type {Body} */ this.bodyB = bodyB; } @@ -9220,7 +9285,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // To be implemented by subclasses }; - }, {"../math/vec2": 30, "../utils/Utils": 57}], + }, {'../math/vec2': 30, '../utils/Utils': 57}], 35: [function (_dereq_, module, exports) { var vec2 = _dereq_('../math/vec2'); var Utils = _dereq_('../utils/Utils'); @@ -9398,7 +9463,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.setBrakeForce(0); } - WheelConstraint.prototype = new Constraint(); /** @@ -9456,14 +9520,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.vehicle.chassisBody.applyForce(tmpVec, this.forwardEquation.contactPointA); }; }, { - "../constraints/Constraint": 14, - "../equations/FrictionEquation": 23, - "../math/vec2": 30, - "../objects/Body": 31, - "../utils/Utils": 57 + '../constraints/Constraint': 14, + '../equations/FrictionEquation': 23, + '../math/vec2': 30, + '../objects/Body': 31, + '../utils/Utils': 57 }], 36: [function (_dereq_, module, exports) { -// Export p2 classes + // Export p2 classes var p2 = module.exports = { AABB: _dereq_('./collision/AABB'), AngleLockEquation: _dereq_('./equations/AngleLockEquation'), @@ -9508,7 +9572,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Utils: _dereq_('./utils/Utils'), World: _dereq_('./world/World'), vec2: _dereq_('./math/vec2'), - version: _dereq_('../package.json').version, + version: _dereq_('../package.json').version }; Object.defineProperty(p2, 'Rectangle', { @@ -9518,55 +9582,55 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } }); }, { - "../package.json": 6, - "./collision/AABB": 7, - "./collision/Broadphase": 8, - "./collision/NaiveBroadphase": 9, - "./collision/Narrowphase": 10, - "./collision/Ray": 11, - "./collision/RaycastResult": 12, - "./collision/SAPBroadphase": 13, - "./constraints/Constraint": 14, - "./constraints/DistanceConstraint": 15, - "./constraints/GearConstraint": 16, - "./constraints/LockConstraint": 17, - "./constraints/PrismaticConstraint": 18, - "./constraints/RevoluteConstraint": 19, - "./equations/AngleLockEquation": 20, - "./equations/ContactEquation": 21, - "./equations/Equation": 22, - "./equations/FrictionEquation": 23, - "./equations/RotationalVelocityEquation": 25, - "./events/EventEmitter": 26, - "./material/ContactMaterial": 27, - "./material/Material": 28, - "./math/vec2": 30, - "./objects/Body": 31, - "./objects/LinearSpring": 32, - "./objects/RotationalSpring": 33, - "./objects/Spring": 34, - "./objects/TopDownVehicle": 35, - "./shapes/Box": 37, - "./shapes/Capsule": 38, - "./shapes/Circle": 39, - "./shapes/Convex": 40, - "./shapes/Heightfield": 41, - "./shapes/Line": 42, - "./shapes/Particle": 43, - "./shapes/Plane": 44, - "./shapes/Shape": 45, - "./solver/GSSolver": 46, - "./solver/Solver": 47, - "./utils/ContactEquationPool": 48, - "./utils/FrictionEquationPool": 49, - "./utils/Pool": 55, - "./utils/Utils": 57, - "./world/World": 61 + '../package.json': 6, + './collision/AABB': 7, + './collision/Broadphase': 8, + './collision/NaiveBroadphase': 9, + './collision/Narrowphase': 10, + './collision/Ray': 11, + './collision/RaycastResult': 12, + './collision/SAPBroadphase': 13, + './constraints/Constraint': 14, + './constraints/DistanceConstraint': 15, + './constraints/GearConstraint': 16, + './constraints/LockConstraint': 17, + './constraints/PrismaticConstraint': 18, + './constraints/RevoluteConstraint': 19, + './equations/AngleLockEquation': 20, + './equations/ContactEquation': 21, + './equations/Equation': 22, + './equations/FrictionEquation': 23, + './equations/RotationalVelocityEquation': 25, + './events/EventEmitter': 26, + './material/ContactMaterial': 27, + './material/Material': 28, + './math/vec2': 30, + './objects/Body': 31, + './objects/LinearSpring': 32, + './objects/RotationalSpring': 33, + './objects/Spring': 34, + './objects/TopDownVehicle': 35, + './shapes/Box': 37, + './shapes/Capsule': 38, + './shapes/Circle': 39, + './shapes/Convex': 40, + './shapes/Heightfield': 41, + './shapes/Line': 42, + './shapes/Particle': 43, + './shapes/Plane': 44, + './shapes/Shape': 45, + './solver/GSSolver': 46, + './solver/Solver': 47, + './utils/ContactEquationPool': 48, + './utils/FrictionEquationPool': 49, + './utils/Pool': 55, + './utils/Utils': 57, + './world/World': 61 }], 37: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , Shape = _dereq_('./Shape') - , Convex = _dereq_('./Convex'); + var vec2 = _dereq_('../math/vec2'), + Shape = _dereq_('./Shape'), + Convex = _dereq_('./Convex'); module.exports = Box; @@ -9580,7 +9644,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @extends Convex */ function Box(options) { - if (typeof(arguments[0]) === 'number' && typeof(arguments[1]) === 'number') { + if (typeof (arguments[0]) === 'number' && typeof (arguments[1]) === 'number') { options = { width: arguments[0], height: arguments[1] @@ -9592,14 +9656,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Total width of the box * @property width - * @objType {Number} + * @type {Number} */ var width = this.width = options.width || 1; /** * Total height of the box * @property height - * @objType {Number} + * @type {Number} */ var height = this.height = options.height || 1; @@ -9619,7 +9683,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ options.type = Shape.BOX; Convex.call(this, options); } - Box.prototype = new Convex(); Box.prototype.constructor = Box; @@ -9665,10 +9728,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; - }, {"../math/vec2": 30, "./Convex": 40, "./Shape": 45}], + }, {'../math/vec2': 30, './Convex': 40, './Shape': 45}], 38: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'); module.exports = Capsule; @@ -9688,7 +9751,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * body.addShape(capsuleShape); */ function Capsule(options) { - if (typeof(arguments[0]) === 'number' && typeof(arguments[1]) === 'number') { + if (typeof (arguments[0]) === 'number' && typeof (arguments[1]) === 'number') { options = { length: arguments[0], radius: arguments[1] @@ -9712,7 +9775,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ options.type = Shape.CAPSULE; Shape.call(this, options); } - Capsule.prototype = new Shape(); Capsule.prototype.constructor = Capsule; @@ -9878,10 +9940,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } } }; - }, {"../math/vec2": 30, "./Shape": 45}], + }, {'../math/vec2': 30, './Shape': 45}], 39: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'); module.exports = Circle; @@ -9898,10 +9960,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * body.addShape(circleShape); */ function Circle(options) { - if (typeof(arguments[0]) === 'number') { - options = { - radius: arguments[0] - }; + if (typeof (arguments[0]) === 'number') { + options = {radius: arguments[0]}; console.warn('The Circle constructor signature has changed. Please use the following format: new Circle({ radius: 1 })'); } options = options || {}; @@ -9909,14 +9969,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The radius of the circle. * @property radius - * @objType {number} + * @type {number} */ this.radius = options.radius || 1; options.type = Shape.CIRCLE; Shape.call(this, options); } - Circle.prototype = new Shape(); Circle.prototype.constructor = Circle; @@ -10027,12 +10086,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } } }; - }, {"../math/vec2": 30, "./Shape": 45}], + }, {'../math/vec2': 30, './Shape': 45}], 40: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2') - , polyk = _dereq_('../math/polyk') - , decomp = _dereq_('poly-decomp'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'), + polyk = _dereq_('../math/polyk'), + decomp = _dereq_('poly-decomp'); module.exports = Convex; @@ -10063,7 +10122,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Vertices defined in the local frame. * @property vertices - * @objType {Array} + * @type {Array} */ this.vertices = []; @@ -10078,7 +10137,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Axes defined in the local frame. * @property axes - * @objType {Array} + * @type {Array} */ this.axes = []; @@ -10114,14 +10173,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The center of mass of the Convex * @property centerOfMass - * @objType {Array} + * @type {Array} */ this.centerOfMass = vec2.fromValues(0, 0); /** * Triangulated version of this convex. The structure is Array of 3-Arrays, and each subarray contains 3 integers, referencing the vertices. * @property triangles - * @objType {Array} + * @type {Array} */ this.triangles = []; @@ -10133,7 +10192,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The bounding radius of the convex * @property boundingRadius - * @objType {Number} + * @type {Number} */ this.boundingRadius = 0; @@ -10143,10 +10202,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.updateBoundingRadius(); this.updateArea(); if (this.area < 0) { - throw new Error("Convex vertices must be given in conter-clockwise winding."); + throw new Error('Convex vertices must be given in conter-clockwise winding.'); } } - Convex.prototype = new Shape(); Convex.prototype.constructor = Convex; @@ -10409,11 +10467,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } }; - }, {"../math/polyk": 29, "../math/vec2": 30, "./Shape": 45, "poly-decomp": 5}], + }, {'../math/polyk': 29, '../math/vec2': 30, './Shape': 45, 'poly-decomp': 5}], 41: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2') - , Utils = _dereq_('../utils/Utils'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'), + Utils = _dereq_('../utils/Utils'); module.exports = Heightfield; @@ -10449,11 +10507,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ function Heightfield(options) { if (Array.isArray(arguments[0])) { - options = { - heights: arguments[0] - }; + options = {heights: arguments[0]}; - if (typeof(arguments[1]) === 'object') { + if (typeof (arguments[1]) === 'object') { for (var key in arguments[1]) { options[key] = arguments[1][key]; } @@ -10494,7 +10550,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ options.type = Shape.HEIGHTFIELD; Shape.call(this, options); } - Heightfield.prototype = new Shape(); Heightfield.prototype.constructor = Heightfield; @@ -10594,7 +10649,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var intersectHeightfield_localTo = vec2.create(); var intersectHeightfield_unit_y = vec2.fromValues(0, 1); -// Returns 1 if the lines intersect, otherwise 0. + // Returns 1 if the lines intersect, otherwise 0. function getLineSegmentsIntersection(out, p0, p1, p2, p3) { var s1_x, s1_y, s2_x, s2_y; @@ -10663,10 +10718,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } } }; - }, {"../math/vec2": 30, "../utils/Utils": 57, "./Shape": 45}], + }, {'../math/vec2': 30, '../utils/Utils': 57, './Shape': 45}], 42: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'); module.exports = Line; @@ -10679,10 +10734,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @constructor */ function Line(options) { - if (typeof(arguments[0]) === 'number') { - options = { - length: arguments[0] - }; + if (typeof (arguments[0]) === 'number') { + options = {length: arguments[0]}; console.warn('The Line constructor signature has changed. Please use the following format: new Line({ length: 1, ... })'); } options = options || {}; @@ -10697,7 +10750,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ options.type = Shape.LINE; Shape.call(this, options); } - Line.prototype = new Shape(); Line.prototype.constructor = Line; @@ -10758,10 +10810,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ray.reportIntersection(result, fraction, normal, -1); } }; - }, {"../math/vec2": 30, "./Shape": 45}], + }, {'../math/vec2': 30, './Shape': 45}], 43: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'); module.exports = Particle; @@ -10777,7 +10829,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ options.type = Shape.PARTICLE; Shape.call(this, options); } - Particle.prototype = new Shape(); Particle.prototype.constructor = Particle; @@ -10800,11 +10851,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ vec2.copy(out.upperBound, position); }; - }, {"../math/vec2": 30, "./Shape": 45}], + }, {'../math/vec2': 30, './Shape': 45}], 44: [function (_dereq_, module, exports) { - var Shape = _dereq_('./Shape') - , vec2 = _dereq_('../math/vec2') - , Utils = _dereq_('../utils/Utils'); + var Shape = _dereq_('./Shape'), + vec2 = _dereq_('../math/vec2'), + Utils = _dereq_('../utils/Utils'); module.exports = Plane; @@ -10820,7 +10871,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ options.type = Shape.PLANE; Shape.call(this, options); } - Plane.prototype = new Shape(); Plane.prototype.constructor = Plane; @@ -10860,6 +10910,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (a === 0) { // y goes from -inf to 0 upperBound[1] = 0; + // set(lowerBound, -max, -max); // set(upperBound, max, 0); @@ -10867,6 +10918,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // x goes from 0 to inf lowerBound[0] = 0; + // set(lowerBound, 0, -max); // set(upperBound, max, max); @@ -10874,6 +10926,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // y goes from 0 to inf lowerBound[1] = 0; + // set(lowerBound, -max, 0); // set(upperBound, max, max); @@ -10881,6 +10934,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // x goes from -inf to 0 upperBound[0] = 0; + // set(lowerBound, -max, -max); // set(upperBound, 0, max); @@ -10939,7 +10993,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ray.reportIntersection(result, t, normal, -1); }; - }, {"../math/vec2": 30, "../utils/Utils": 57, "./Shape": 45}], + }, {'../math/vec2': 30, '../utils/Utils': 57, './Shape': 45}], 45: [function (_dereq_, module, exports) { module.exports = Shape; @@ -10956,7 +11010,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} [options.collisionMask=1] * @param {boolean} [options.sensor=false] * @param {boolean} [options.collisionResponse=true] - * @param {object} [options.objType=0] + * @param {object} [options.type=0] */ function Shape(options) { options = options || {}; @@ -10983,7 +11037,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.angle = options.angle || 0; /** - * The objType of the shape. One of: + * The type of the shape. One of: * * * {{#crossLink "Shape/CIRCLE:property"}}Shape.CIRCLE{{/crossLink}} * * {{#crossLink "Shape/PARTICLE:property"}}Shape.PARTICLE{{/crossLink}} @@ -10994,13 +11048,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * {{#crossLink "Shape/CAPSULE:property"}}Shape.CAPSULE{{/crossLink}} * * {{#crossLink "Shape/HEIGHTFIELD:property"}}Shape.HEIGHTFIELD{{/crossLink}} * - * @property {number} objType + * @property {number} type */ this.type = options.type || 0; /** * Shape object identifier. - * @objType {Number} + * @type {Number} * @property id */ this.id = Shape.idCounter++; @@ -11008,14 +11062,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Bounding circle radius of this shape * @property boundingRadius - * @objType {Number} + * @type {Number} */ this.boundingRadius = 0; /** * Collision group that this shape belongs to (bit mask). See this tutorial. * @property collisionGroup - * @objType {Number} + * @type {Number} * @example * // Setup bits for each available group * var PLAYER = Math.pow(2,0), @@ -11052,21 +11106,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Collision mask of this shape. See .collisionGroup. * @property collisionMask - * @objType {Number} + * @type {Number} */ this.collisionMask = options.collisionMask !== undefined ? options.collisionMask : 1; /** * Material to use in collisions for this Shape. If this is set to null, the world will use default material properties instead. * @property material - * @objType {Material} + * @type {Material} */ this.material = options.material || null; /** * Area of this shape. * @property area - * @objType {Number} + * @type {Number} */ this.area = 0; @@ -11121,13 +11175,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Shape.BOX = 32; - Object.defineProperty(Shape, 'RECTANGLE', { - get: function () { - console.warn('Shape.RECTANGLE is deprecated, use Shape.BOX instead.'); - return Shape.BOX; - } - }); - /** * @static * @property {Number} CAPSULE @@ -11187,12 +11234,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Shape.prototype.raycast = function (result, ray, position, angle) { // To be implemented in each subclass }; - }, {"../math/vec2": 30}], + }, {'../math/vec2': 30}], 46: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , Solver = _dereq_('./Solver') - , Utils = _dereq_('../utils/Utils') - , FrictionEquation = _dereq_('../equations/FrictionEquation'); + var vec2 = _dereq_('../math/vec2'), + Solver = _dereq_('./Solver'), + Utils = _dereq_('../utils/Utils'), + FrictionEquation = _dereq_('../equations/FrictionEquation'); module.exports = GSSolver; @@ -11213,14 +11260,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The max number of iterations to do when solving. More gives better results, but is more expensive. * @property iterations - * @objType {Number} + * @type {Number} */ this.iterations = options.iterations || 10; /** * The error tolerance, per constraint. If the total error is below this limit, the solver will stop iterating. Set to zero for as good solution as possible, but to something larger than zero to make computations faster. * @property tolerance - * @objType {Number} + * @type {Number} * @default 1e-7 */ this.tolerance = options.tolerance || 1e-7; @@ -11233,7 +11280,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Set to true to set all right hand side terms to zero when solving. Can be handy for a few applications. * @property useZeroRHS - * @objType {Boolean} + * @type {Boolean} * @todo Remove, not used */ this.useZeroRHS = false; @@ -11244,7 +11291,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Use only frictionIterations > 0 if the approximated normal force (F_normal = mass * gravity) is not good enough. Examples of where it can happen is in space games where gravity is zero, or in tall stacks where the normal force is large at bottom but small at top. * * @property frictionIterations - * @objType {Number} + * @type {Number} * @default 0 */ this.frictionIterations = options.frictionIterations !== undefined ? 0 : options.frictionIterations; @@ -11255,7 +11302,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.usedIterations = 0; } - GSSolver.prototype = new Solver(); GSSolver.prototype.constructor = GSSolver; @@ -11401,7 +11447,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } }; -// Sets the .multiplier property of each equation + // Sets the .multiplier property of each equation GSSolver.updateMultipliers = function (equations, lambda, invDt) { // Set the .multiplier property of each equation var l = equations.length; @@ -11439,10 +11485,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return deltalambda; }; - }, {"../equations/FrictionEquation": 23, "../math/vec2": 30, "../utils/Utils": 57, "./Solver": 47}], + }, {'../equations/FrictionEquation': 23, '../math/vec2': 30, '../utils/Utils': 57, './Solver': 47}], 47: [function (_dereq_, module, exports) { - var Utils = _dereq_('../utils/Utils') - , EventEmitter = _dereq_('../events/EventEmitter'); + var Utils = _dereq_('../utils/Utils'), + EventEmitter = _dereq_('../events/EventEmitter'); module.exports = Solver; @@ -11463,18 +11509,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Current equations in the solver. * * @property equations - * @objType {Array} + * @type {Array} */ this.equations = []; /** * Function that is used to sort all equations before each solve. * @property equationSortFunction - * @objType {function|boolean} + * @type {function|boolean} */ this.equationSortFunction = options.equationSortFunction || false; } - Solver.prototype = new EventEmitter(); Solver.prototype.constructor = Solver; @@ -11485,7 +11530,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {World} world */ Solver.prototype.solve = function (dt, world) { - throw new Error("Solver.solve should be implemented by subclasses!"); + throw new Error('Solver.solve should be implemented by subclasses!'); }; var mockWorld = {bodies: []}; @@ -11542,7 +11587,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Array} eqs */ Solver.prototype.addEquations = function (eqs) { - //Utils.appendArray(this.equations,eqs); + // Utils.appendArray(this.equations,eqs); for (var i = 0, N = eqs.length; i !== N; i++) { var eq = eqs[i]; if (eq.enabled) { @@ -11576,7 +11621,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Solver.GS = 1; Solver.ISLAND = 2; - }, {"../events/EventEmitter": 26, "../utils/Utils": 57}], + }, {'../events/EventEmitter': 26, '../utils/Utils': 57}], 48: [function (_dereq_, module, exports) { var ContactEquation = _dereq_('../equations/ContactEquation'); var Pool = _dereq_('./Pool'); @@ -11589,7 +11634,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function ContactEquationPool() { Pool.apply(this, arguments); } - ContactEquationPool.prototype = new Pool(); ContactEquationPool.prototype.constructor = ContactEquationPool; @@ -11611,7 +11655,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this; }; - }, {"../equations/ContactEquation": 21, "./Pool": 55}], + }, {'../equations/ContactEquation': 21, './Pool': 55}], 49: [function (_dereq_, module, exports) { var FrictionEquation = _dereq_('../equations/FrictionEquation'); var Pool = _dereq_('./Pool'); @@ -11624,7 +11668,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function FrictionEquationPool() { Pool.apply(this, arguments); } - FrictionEquationPool.prototype = new Pool(); FrictionEquationPool.prototype.constructor = FrictionEquationPool; @@ -11646,7 +11689,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this; }; - }, {"../equations/FrictionEquation": 23, "./Pool": 55}], + }, {'../equations/FrictionEquation': 23, './Pool': 55}], 50: [function (_dereq_, module, exports) { var IslandNode = _dereq_('../world/IslandNode'); var Pool = _dereq_('./Pool'); @@ -11659,7 +11702,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function IslandNodePool() { Pool.apply(this, arguments); } - IslandNodePool.prototype = new Pool(); IslandNodePool.prototype.constructor = IslandNodePool; @@ -11681,7 +11723,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this; }; - }, {"../world/IslandNode": 60, "./Pool": 55}], + }, {'../world/IslandNode': 60, './Pool': 55}], 51: [function (_dereq_, module, exports) { var Island = _dereq_('../world/Island'); var Pool = _dereq_('./Pool'); @@ -11694,7 +11736,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function IslandPool() { Pool.apply(this, arguments); } - IslandPool.prototype = new Pool(); IslandPool.prototype.constructor = IslandPool; @@ -11716,7 +11757,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this; }; - }, {"../world/Island": 58, "./Pool": 55}], + }, {'../world/Island': 58, './Pool': 55}], 52: [function (_dereq_, module, exports) { var TupleDictionary = _dereq_('./TupleDictionary'); var OverlapKeeperRecord = _dereq_('./OverlapKeeperRecord'); @@ -11846,8 +11887,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ idB = shapeB.id | 0; var last = this.overlappingShapesLastState; var current = this.overlappingShapesCurrentState; + // Not in last but in new - return !!!last.get(idA, idB) && !!current.get(idA, idB); + return !last.get(idA, idB) && !!current.get(idA, idB); }; OverlapKeeper.prototype.getNewBodyOverlaps = function (result) { @@ -11888,7 +11930,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return result; }; - }, {"./OverlapKeeperRecord": 53, "./OverlapKeeperRecordPool": 54, "./TupleDictionary": 56, "./Utils": 57}], + }, {'./OverlapKeeperRecord': 53, './OverlapKeeperRecordPool': 54, './TupleDictionary': 56, './Utils': 57}], 53: [function (_dereq_, module, exports) { module.exports = OverlapKeeperRecord; @@ -11906,14 +11948,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Shape} shapeA */ this.shapeA = shapeA; + /** * @property {Shape} shapeB */ this.shapeB = shapeB; + /** * @property {Body} bodyA */ this.bodyA = bodyA; + /** * @property {Body} bodyB */ @@ -11945,7 +11990,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function OverlapKeeperRecordPool() { Pool.apply(this, arguments); } - OverlapKeeperRecordPool.prototype = new Pool(); OverlapKeeperRecordPool.prototype.constructor = OverlapKeeperRecordPool; @@ -11967,7 +12011,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this; }; - }, {"./OverlapKeeperRecord": 53, "./Pool": 55}], + }, {'./OverlapKeeperRecord': 53, './Pool': 55}], 55: [function (_dereq_, module, exports) { module.exports = Pool; @@ -11979,7 +12023,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property {Array} objects - * @objType {Array} + * @type {Array} */ this.objects = []; @@ -12044,7 +12088,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The data storage * @property data - * @objType {Object} + * @type {Object} */ this.data = {}; @@ -12106,7 +12150,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ TupleDictionary.prototype.set = function (i, j, value) { if (!value) { - throw new Error("No data!"); + throw new Error('No data!'); } var key = this.getKey(i, j); @@ -12152,7 +12196,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } }; - }, {"./Utils": 57}], + }, {'./Utils': 57}], 57: [function (_dereq_, module, exports) { /* global P2_ARRAY_TYPE */ @@ -12200,12 +12244,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; /** - * The array objType to use for internal numeric computations throughout the library. Float32Array is used if it is available, but falls back on Array. If you want to set array objType manually, inject it via the global variable P2_ARRAY_TYPE. See example below. + * The array type to use for internal numeric computations throughout the library. Float32Array is used if it is available, but falls back on Array. If you want to set array type manually, inject it via the global variable P2_ARRAY_TYPE. See example below. * @static * @property {function} ARRAY_TYPE * @example * * @@ -12265,14 +12309,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Current equations in this island. * @property equations - * @objType {Array} + * @type {Array} */ this.equations = []; /** * Current bodies in this island. * @property bodies - * @objType {Array} + * @type {Array} */ this.bodies = []; } @@ -12337,14 +12381,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return true; }; - }, {"../objects/Body": 31}], + }, {'../objects/Body': 31}], 59: [function (_dereq_, module, exports) { - var vec2 = _dereq_('../math/vec2') - , Island = _dereq_('./Island') - , IslandNode = _dereq_('./IslandNode') - , IslandNodePool = _dereq_('./../utils/IslandNodePool') - , IslandPool = _dereq_('./../utils/IslandPool') - , Body = _dereq_('../objects/Body'); + var vec2 = _dereq_('../math/vec2'), + Island = _dereq_('./Island'), + IslandNode = _dereq_('./IslandNode'), + IslandNodePool = _dereq_('./../utils/IslandNodePool'), + IslandPool = _dereq_('./../utils/IslandPool'), + Body = _dereq_('../objects/Body'); module.exports = IslandManager; @@ -12360,13 +12404,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property nodePool - * @objType {IslandNodePool} + * @type {IslandNodePool} */ this.nodePool = new IslandNodePool({size: 16}); /** * @property islandPool - * @objType {IslandPool} + * @type {IslandPool} */ this.islandPool = new IslandPool({size: 8}); @@ -12491,6 +12535,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var node = this.nodePool.get(); node.body = bodies[i]; nodes.push(node); + // if(this.nodePool.length){ // var node = this.nodePool.pop(); // node.reset(); @@ -12538,12 +12583,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; }, { - "../math/vec2": 30, - "../objects/Body": 31, - "./../utils/IslandNodePool": 50, - "./../utils/IslandPool": 51, - "./Island": 58, - "./IslandNode": 60 + '../math/vec2': 30, + '../objects/Body': 31, + './../utils/IslandNodePool': 50, + './../utils/IslandPool': 51, + './Island': 58, + './IslandNode': 60 }], 60: [function (_dereq_, module, exports) { module.exports = IslandNode; @@ -12577,7 +12622,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * If this node was visiting during the graph traversal. * @property visited - * @objType {Boolean} + * @type {Boolean} */ this.visited = false; } @@ -12595,37 +12640,37 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, {}], 61: [function (_dereq_, module, exports) { - var GSSolver = _dereq_('../solver/GSSolver') - , Solver = _dereq_('../solver/Solver') - , Ray = _dereq_('../collision/Ray') - , vec2 = _dereq_('../math/vec2') - , Circle = _dereq_('../shapes/Circle') - , Convex = _dereq_('../shapes/Convex') - , Line = _dereq_('../shapes/Line') - , Plane = _dereq_('../shapes/Plane') - , Capsule = _dereq_('../shapes/Capsule') - , Particle = _dereq_('../shapes/Particle') - , EventEmitter = _dereq_('../events/EventEmitter') - , Body = _dereq_('../objects/Body') - , Shape = _dereq_('../shapes/Shape') - , LinearSpring = _dereq_('../objects/LinearSpring') - , Material = _dereq_('../material/Material') - , ContactMaterial = _dereq_('../material/ContactMaterial') - , DistanceConstraint = _dereq_('../constraints/DistanceConstraint') - , Constraint = _dereq_('../constraints/Constraint') - , LockConstraint = _dereq_('../constraints/LockConstraint') - , RevoluteConstraint = _dereq_('../constraints/RevoluteConstraint') - , PrismaticConstraint = _dereq_('../constraints/PrismaticConstraint') - , GearConstraint = _dereq_('../constraints/GearConstraint') - , pkg = _dereq_('../../package.json') - , Broadphase = _dereq_('../collision/Broadphase') - , AABB = _dereq_('../collision/AABB') - , SAPBroadphase = _dereq_('../collision/SAPBroadphase') - , Narrowphase = _dereq_('../collision/Narrowphase') - , Utils = _dereq_('../utils/Utils') - , OverlapKeeper = _dereq_('../utils/OverlapKeeper') - , IslandManager = _dereq_('./IslandManager') - , RotationalSpring = _dereq_('../objects/RotationalSpring'); + var GSSolver = _dereq_('../solver/GSSolver'), + Solver = _dereq_('../solver/Solver'), + Ray = _dereq_('../collision/Ray'), + vec2 = _dereq_('../math/vec2'), + Circle = _dereq_('../shapes/Circle'), + Convex = _dereq_('../shapes/Convex'), + Line = _dereq_('../shapes/Line'), + Plane = _dereq_('../shapes/Plane'), + Capsule = _dereq_('../shapes/Capsule'), + Particle = _dereq_('../shapes/Particle'), + EventEmitter = _dereq_('../events/EventEmitter'), + Body = _dereq_('../objects/Body'), + Shape = _dereq_('../shapes/Shape'), + LinearSpring = _dereq_('../objects/LinearSpring'), + Material = _dereq_('../material/Material'), + ContactMaterial = _dereq_('../material/ContactMaterial'), + DistanceConstraint = _dereq_('../constraints/DistanceConstraint'), + Constraint = _dereq_('../constraints/Constraint'), + LockConstraint = _dereq_('../constraints/LockConstraint'), + RevoluteConstraint = _dereq_('../constraints/RevoluteConstraint'), + PrismaticConstraint = _dereq_('../constraints/PrismaticConstraint'), + GearConstraint = _dereq_('../constraints/GearConstraint'), + pkg = _dereq_('../../package.json'), + Broadphase = _dereq_('../collision/Broadphase'), + AABB = _dereq_('../collision/AABB'), + SAPBroadphase = _dereq_('../collision/SAPBroadphase'), + Narrowphase = _dereq_('../collision/Narrowphase'), + Utils = _dereq_('../utils/Utils'), + OverlapKeeper = _dereq_('../utils/OverlapKeeper'), + IslandManager = _dereq_('./IslandManager'), + RotationalSpring = _dereq_('../objects/RotationalSpring'); module.exports = World; @@ -12657,7 +12702,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * All springs in the world. To add a spring to the world, use {{#crossLink "World/addSpring:method"}}{{/crossLink}}. * * @property springs - * @objType {Array} + * @type {Array} */ this.springs = []; @@ -12684,7 +12729,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The narrowphase to use to generate contacts. * * @property narrowphase - * @objType {Narrowphase} + * @type {Narrowphase} */ this.narrowphase = new Narrowphase(this); @@ -12698,7 +12743,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Gravity in the world. This is applied on all bodies in the beginning of each step(). * * @property gravity - * @objType {Array} + * @type {Array} */ this.gravity = vec2.fromValues(0, -9.78); if (options.gravity) { @@ -12729,7 +12774,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The broadphase algorithm to use. * * @property broadphase - * @objType {Broadphase} + * @type {Broadphase} */ this.broadphase = options.broadphase || new SAPBroadphase(); this.broadphase.setWorld(this); @@ -12738,7 +12783,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * User-added constraints. * * @property constraints - * @objType {Array} + * @type {Array} */ this.constraints = []; @@ -12757,14 +12802,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * For keeping track of what time step size we used last step * @property lastTimeStep - * @objType {Number} + * @type {Number} */ this.lastTimeStep = 1 / 60; /** * Enable to automatically apply spring forces each step. * @property applySpringForces - * @objType {Boolean} + * @type {Boolean} * @default true */ this.applySpringForces = true; @@ -12772,7 +12817,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Enable to automatically apply body damping each step. * @property applyDamping - * @objType {Boolean} + * @type {Boolean} * @default true */ this.applyDamping = true; @@ -12780,7 +12825,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Enable to automatically apply gravity each step. * @property applyGravity - * @objType {Boolean} + * @type {Boolean} * @default true */ this.applyGravity = true; @@ -12788,7 +12833,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Enable/disable constraint solving in each step. * @property solveConstraints - * @objType {Boolean} + * @type {Boolean} * @default true */ this.solveConstraints = true; @@ -12796,14 +12841,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The ContactMaterials added to the World. * @property contactMaterials - * @objType {Array} + * @type {Array} */ this.contactMaterials = []; /** * World time. * @property time - * @objType {Number} + * @type {Number} */ this.time = 0.0; this.accumulator = 0; @@ -12826,12 +12871,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Boolean} islandSplit * @default true */ - this.islandSplit = typeof(options.islandSplit) !== "undefined" ? !!options.islandSplit : true; + this.islandSplit = typeof (options.islandSplit) !== 'undefined' ? !!options.islandSplit : true; /** * Set to true if you want to the world to emit the "impact" event. Turning this off could improve performance. * @property emitImpactEvent - * @objType {Boolean} + * @type {Boolean} * @default true */ this.emitImpactEvent = true; @@ -12844,9 +12889,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Fired after the step(). * @event postStep */ - this.postStepEvent = { - type: "postStep" - }; + this.postStepEvent = {type: 'postStep'}; /** * Fired when a body is added to the world. @@ -12854,7 +12897,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Body} body */ this.addBodyEvent = { - type: "addBody", + type: 'addBody', body: null }; @@ -12864,7 +12907,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Body} body */ this.removeBodyEvent = { - type: "removeBody", + type: 'removeBody', body: null }; @@ -12874,7 +12917,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Spring} spring */ this.addSpringEvent = { - type: "addSpring", + type: 'addSpring', spring: null }; @@ -12885,7 +12928,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Body} bodyB */ this.impactEvent = { - type: "impact", + type: 'impact', bodyA: null, bodyB: null, shapeA: null, @@ -12901,7 +12944,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Array} pairs An array of collision pairs. If this array is [body1,body2,body3,body4], then the body pairs 1,2 and 3,4 would advance to narrowphase. */ this.postBroadphaseEvent = { - type: "postBroadphase", + type: 'postBroadphase', pairs: null }; @@ -12909,7 +12952,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * How to deactivate bodies during simulation. Possible modes are: {{#crossLink "World/NO_SLEEPING:property"}}World.NO_SLEEPING{{/crossLink}}, {{#crossLink "World/BODY_SLEEPING:property"}}World.BODY_SLEEPING{{/crossLink}} and {{#crossLink "World/ISLAND_SLEEPING:property"}}World.ISLAND_SLEEPING{{/crossLink}}. * If sleeping is enabled, you might need to {{#crossLink "Body/wakeUp:method"}}wake up{{/crossLink}} the bodies if they fall asleep when they shouldn't. If you want to enable sleeping in the world, but want to disable it for a particular body, see {{#crossLink "Body/allowSleep:property"}}Body.allowSleep{{/crossLink}}. * @property sleepMode - * @objType {number} + * @type {number} * @default World.NO_SLEEPING */ this.sleepMode = World.NO_SLEEPING; @@ -12924,7 +12967,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Array} contactEquations */ this.beginContactEvent = { - type: "beginContact", + type: 'beginContact', shapeA: null, shapeB: null, bodyA: null, @@ -12941,7 +12984,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Body} bodyB */ this.endContactEvent = { - type: "endContact", + type: 'endContact', shapeA: null, shapeB: null, bodyA: null, @@ -12955,7 +12998,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {Array} frictionEquations An array of friction equations to be solved. */ this.preSolveEvent = { - type: "preSolve", + type: 'preSolve', contactEquations: null, frictionEquations: null }; @@ -12969,7 +13012,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.overlapKeeper = new OverlapKeeper(); } - World.prototype = new Object(EventEmitter.prototype); World.prototype.constructor = World; @@ -13368,8 +13410,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ for (var i = 0; i !== Nbodies; i++) { var body = bodies[i]; - // if(body.sleepState !== Body.SLEEPING && body.objType !== Body.STATIC){ + // if(body.sleepState !== Body.SLEEPING && body.type !== Body.STATIC){ body.integrate(dt); + // } } @@ -13529,7 +13572,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Reset contact equations e.contactEquations.length = 0; - if (typeof(numContacts) === "number") { + if (typeof (numContacts) === 'number') { for (var i = np.contactEquations.length - numContacts; i < np.contactEquations.length; i++) { e.contactEquations.push(np.contactEquations[i]); } @@ -13539,7 +13582,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } // divide the max friction force by the number of contacts - if (typeof(numContacts) === "number" && numFrictionEquations > 1) { // Why divide by 1? + if (typeof (numContacts) === 'number' && numFrictionEquations > 1) { // Why divide by 1? for (var i = np.frictionEquations.length - numFrictionEquations; i < np.frictionEquations.length; i++) { var f = np.frictionEquations[i]; f.setSlipForce(f.getSlipForce() / numFrictionEquations); @@ -13879,41 +13922,42 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; }, { - "../../package.json": 6, - "../collision/AABB": 7, - "../collision/Broadphase": 8, - "../collision/Narrowphase": 10, - "../collision/Ray": 11, - "../collision/SAPBroadphase": 13, - "../constraints/Constraint": 14, - "../constraints/DistanceConstraint": 15, - "../constraints/GearConstraint": 16, - "../constraints/LockConstraint": 17, - "../constraints/PrismaticConstraint": 18, - "../constraints/RevoluteConstraint": 19, - "../events/EventEmitter": 26, - "../material/ContactMaterial": 27, - "../material/Material": 28, - "../math/vec2": 30, - "../objects/Body": 31, - "../objects/LinearSpring": 32, - "../objects/RotationalSpring": 33, - "../shapes/Capsule": 38, - "../shapes/Circle": 39, - "../shapes/Convex": 40, - "../shapes/Line": 42, - "../shapes/Particle": 43, - "../shapes/Plane": 44, - "../shapes/Shape": 45, - "../solver/GSSolver": 46, - "../solver/Solver": 47, - "../utils/OverlapKeeper": 52, - "../utils/Utils": 57, - "./IslandManager": 59 + '../../package.json': 6, + '../collision/AABB': 7, + '../collision/Broadphase': 8, + '../collision/Narrowphase': 10, + '../collision/Ray': 11, + '../collision/SAPBroadphase': 13, + '../constraints/Constraint': 14, + '../constraints/DistanceConstraint': 15, + '../constraints/GearConstraint': 16, + '../constraints/LockConstraint': 17, + '../constraints/PrismaticConstraint': 18, + '../constraints/RevoluteConstraint': 19, + '../events/EventEmitter': 26, + '../material/ContactMaterial': 27, + '../material/Material': 28, + '../math/vec2': 30, + '../objects/Body': 31, + '../objects/LinearSpring': 32, + '../objects/RotationalSpring': 33, + '../shapes/Capsule': 38, + '../shapes/Circle': 39, + '../shapes/Convex': 40, + '../shapes/Line': 42, + '../shapes/Particle': 43, + '../shapes/Plane': 44, + '../shapes/Shape': 45, + '../solver/GSSolver': 46, + '../solver/Solver': 47, + '../utils/OverlapKeeper': 52, + '../utils/Utils': 57, + './IslandManager': 59 }] }, {}, [36]) - (36) + (36); }); + /** * @author Mat Groves http://matgroves.com/ @Doormat23 */ @@ -14008,12 +14052,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The visibility of this DisplayObject. A value of `false` makes the object invisible. - * A value of `true` makes it visible. Please note that an object with a visible value of - * `false` is skipped during the render pass. Equally a DisplayObject with visible false will - * not render any of its children. + * A value of `true` makes it visible. + * + * An object with a visible value of `false` is skipped during the render pass. + * Equally a DisplayObject with visible `false` will not render any of its children. * * The value of this property does not reflect any visible values set further up the display list. - * To obtain that value please see the `worldVisible` property. + * To obtain that value please see the {@link #worldVisible} property. + * + * Objects that are not {@link #worldVisible} do not update their {@link #worldPosition}. * * @property {boolean} visible * @default @@ -14025,7 +14072,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) * * @property hitArea - * @objType Rectangle|Circle|Ellipse|Polygon + * @type Rectangle|Circle|Ellipse|Polygon */ this.hitArea = null; @@ -14130,7 +14177,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The rectangular area used by filters when rendering a shader for this DisplayObject. * * @property {PIXI.Rectangle} filterArea - * @objType Rectangle + * @type Rectangle * @default */ this.filterArea = null; @@ -14247,8 +14294,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (parent) { p = parent; - } - else if (!this.parent) { + } else if (!this.parent) { p = this.game.world; } @@ -14289,8 +14335,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ wt.d = c * pt.b + d * pt.d; wt.tx = tx * pt.a + ty * pt.c + pt.tx; wt.ty = tx * pt.b + ty * pt.d + pt.ty; - } - else { + } else { // lets do the fast version as we know there is no rotation.. a = this.scale.x; b = 0; @@ -14320,15 +14365,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.worldRotation = (b > 0) ? Math.acos(a / r) : -Math.acos(a / r); this.worldScale.x = r; this.worldScale.y = determ / r; - } - else if (c || d) { + } else if (c || d) { var s = Math.sqrt((c * c) + (d * d)); this.worldRotation = Phaser.Math.HALF_PI - ((d > 0) ? Math.acos(-c / s) : -Math.acos(c / s)); this.worldScale.x = determ / s; this.worldScale.y = s; - } - else { + } else { this.worldScale.x = 0; this.worldScale.y = 0; } @@ -14449,8 +14492,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (renderSession.gl) { PIXI.Sprite.prototype._renderWebGL.call(this._cachedSprite, renderSession); - } - else { + } else { PIXI.Sprite.prototype._renderCanvas.call(this._cachedSprite, renderSession); } @@ -14482,8 +14524,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var renderTexture = new Phaser.RenderTexture(this.game, bounds.width, bounds.height, undefined, undefined, undefined, undefined, textureUnit); this._cachedSprite = new PIXI.Sprite(renderTexture); this._cachedSprite.worldTransform = this.worldTransform; - } - else { + } else { this._cachedSprite.texture.resize(bounds.width, bounds.height); } @@ -14536,7 +14577,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name PIXI.DisplayObject#x * @property {number} x - The horizontal position of the DisplayObject, in pixels, relative to its parent. */ - 'x': { + x: { get: function () { @@ -14558,7 +14599,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name PIXI.DisplayObject#y * @property {number} y - The vertical position of the DisplayObject, in pixels, relative to its parent. */ - 'y': { + y: { get: function () { @@ -14579,20 +14620,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name PIXI.DisplayObject#worldVisible * @property {boolean} worldVisible - Indicates if this DisplayObject is visible, based on it, and all of its parents, `visible` property values. */ - 'worldVisible': { + worldVisible: { get: function () { if (!this.visible) { return false; - } - else { + } else { var item = this.parent; if (!item) { return this.visible; - } - else { + } else { do { if (!item.visible) { return false; @@ -14620,7 +14659,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name PIXI.DisplayObject#mask * @property {Phaser.Graphics} mask - The mask applied to this DisplayObject. Set to `null` to remove an existing mask. */ - 'mask': { + mask: { get: function () { @@ -14657,7 +14696,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name PIXI.DisplayObject#filters * @property {Array} filters - An Array of Phaser.Filter objects, or objects that extend them. */ - 'filters': { + filters: { get: function () { @@ -14710,7 +14749,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name PIXI.DisplayObject#cacheAsBitmap * @property {boolean} cacheAsBitmap - Cache this DisplayObject as a Bitmap. Set to `null` to remove an existing cached bitmap. */ - 'cacheAsBitmap': { + cacheAsBitmap: { get: function () { @@ -14726,8 +14765,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value) { this._generateCachedSprite(); - } - else { + } else { this._destroyCachedSprite(); } @@ -14759,7 +14797,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * [read-only] The array of children of this container. * * @property children - * @objType Array(DisplayObject) + * @type Array(DisplayObject) * @readOnly */ this.children = []; @@ -14813,8 +14851,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.children.splice(index, 0, child); return child; - } - else { + } else { throw new Error(child + 'addChildAt: The index ' + index + ' supplied is out of bounds ' + this.children.length); } @@ -14879,8 +14916,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var currentIndex = this.getChildIndex(child); - this.children.splice(currentIndex, 1); //remove from old position - this.children.splice(index, 0, child); //add at new position + this.children.splice(currentIndex, 1); // remove from old position + this.children.splice(index, 0, child); // add at new position }; @@ -14941,6 +14978,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + PIXI.DisplayObjectContainer.prototype.bringChildToTop = function (child) { + + if (child.parent !== this) { + return; + } + + return this.setChildIndex(child, this.children.length - 1); + + }; + + PIXI.DisplayObjectContainer.prototype.sendChildToBack = function (child) { + + if (child.parent !== this) { + return; + } + + return this.setChildIndex(child, 0); + + }; + /** * Removes all children from this container that are within the begin and end indexes. * @@ -14968,11 +15025,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } return removed; - } - else if (range === 0 && this.children.length === 0) { + } else if (range === 0 && this.children.length === 0) { return []; - } - else { + } else { throw new Error('removeChildren: Range Error, numeric values are outside the acceptable range'); } @@ -15019,11 +15074,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!isTargetCoordinateSpaceDisplayObject) { targetCoordinateSpace = this; - } - else if (targetCoordinateSpace instanceof PIXI.DisplayObjectContainer) { + } else if (targetCoordinateSpace instanceof PIXI.DisplayObjectContainer) { isTargetCoordinateSpaceThisOrParent = targetCoordinateSpace.contains(this); - } - else { + } else { isTargetCoordinateSpaceThisOrParent = false; } @@ -15174,11 +15227,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!child) { return false; - } - else if (child === this) { + } else if (child === this) { return true; - } - else { + } else { return this.contains(child.parent); } }; @@ -15223,12 +15274,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ renderSession.spriteBatch.stop(); - if (this._mask) renderSession.maskManager.popMask(this._mask, renderSession); - if (this._filters) renderSession.filterManager.popFilter(); + if (this._mask) { + renderSession.maskManager.popMask(this._mask, renderSession); + } + if (this._filters) { + renderSession.filterManager.popFilter(); + } renderSession.spriteBatch.start(); - } - else { + } else { // simple render children! for (i = 0; i < this.children.length; i++) { this.children[i]._renderWebGL(renderSession); @@ -15272,8 +15326,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The width of the displayObjectContainer, setting this will actually modify the scale to achieve the value set * - * @property width - * @objType Number + * @name PIXI.DisplayObjectContainer#width + * @type Number */ Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'width', { @@ -15287,8 +15341,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (width !== 0) { this.scale.x = value / width; - } - else { + } else { this.scale.x = 1; } @@ -15299,8 +15352,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The height of the displayObjectContainer, setting this will actually modify the scale to achieve the value set * - * @property height - * @objType Number + * @name PIXI.DisplayObjectContainer#height + * @type Number */ Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'height', { @@ -15314,8 +15367,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (height !== 0) { this.scale.y = value / height; - } - else { + } else { this.scale.y = 1; } @@ -15349,7 +15401,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * You can modify the default values in PIXI.Sprite.defaultAnchor. * * @property anchor - * @objType Point + * @type Point */ this.anchor = new PIXI.Point(PIXI.Sprite.defaultAnchor.x, PIXI.Sprite.defaultAnchor.y); @@ -15357,7 +15409,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The texture that the sprite is using * * @property texture - * @objType Texture + * @type Texture */ this.texture = texture || PIXI.Texture.emptyTexture; @@ -15365,7 +15417,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The width of the sprite (this is initially set by the texture) * * @property _width - * @objType Number + * @type Number * @private */ this._width = 0; @@ -15374,16 +15426,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The height of the sprite (this is initially set by the texture) * * @property _height - * @objType Number + * @type Number * @private */ this._height = 0; /** - * The tint applied to the sprite. This is a hex value. A value of 0xFFFFFF will remove any tint effect. + * The tint applied to the sprite. This is a hex value. A value of 0xFFFFFF (Phaser.Color.WHITE) will remove any tint effect. * * @property tint - * @objType Number + * @type Number * @default 0xFFFFFF */ this.tint = 0xFFFFFF; @@ -15393,7 +15445,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * @property cachedTint * @private - * @objType Number + * @type Number * @default -1 */ this.cachedTint = -1; @@ -15402,7 +15454,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A canvas that contains the tinted version of the Sprite (in Canvas mode, WebGL doesn't populate this) * * @property tintedTexture - * @objType Canvas + * @type Canvas * @default null */ this.tintedTexture = null; @@ -15413,7 +15465,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Warning: You cannot have a blend mode and a filter active on the same Sprite. Doing so will render the sprite invisible. * * @property blendMode - * @objType Number + * @type Number * @default PIXI.blendModes.NORMAL; */ this.blendMode = PIXI.blendModes.NORMAL; @@ -15423,7 +15475,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Set to null to remove a current shader. * * @property shader - * @objType Phaser.Filter + * @type Phaser.Filter * @default null */ this.shader = null; @@ -15432,7 +15484,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Controls if this Sprite is processed by the core Phaser game loops and Group loops (except {@link Phaser.Group#update}). * * @property exists - * @objType Boolean + * @type Boolean * @default true */ this.exists = true; @@ -15447,7 +15499,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property PIXI.Sprite.defaultAnchor - A Point-like object. - * @objType {{x: number, y: number}} + * @type {{x: number, y: number}} * @default */ PIXI.Sprite.defaultAnchor = {x: 0, y: 0}; @@ -15460,7 +15512,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The width of the sprite, setting this will actually modify the scale to achieve the value set * * @property width - * @objType Number + * @type Number */ Object.defineProperty(PIXI.Sprite.prototype, 'width', { @@ -15479,7 +15531,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The height of the sprite, setting this will actually modify the scale to achieve the value set * * @property height - * @objType Number + * @type Number */ Object.defineProperty(PIXI.Sprite.prototype, 'height', { @@ -15523,20 +15575,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ PIXI.Sprite.prototype.onTextureUpdate = function () { // so if _width is 0 then width was not set.. - if (this._width) this.scale.x = this._width / this.texture.frame.width; - if (this._height) this.scale.y = this._height / this.texture.frame.height; + if (this._width) { + this.scale.x = this._width / this.texture.frame.width; + } + if (this._height) { + this.scale.y = this._height / this.texture.frame.height; + } }; /** * Returns the bounds of the Sprite as a rectangle. * The bounds calculation takes the worldTransform into account. * - * It is important to note that the transform is not updated when you call this method. - * So if this Sprite is the child of a Display Object which has had its transform - * updated since the last render pass, those changes will not yet have been applied - * to this Sprites worldTransform. If you need to ensure that all parent transforms - * are factored into this getBounds operation then you should call `updateTransform` - * on the root most object in this Sprites display list first. + * The worldTransform was calculated during the last render pass and is not updated when you call this method. + * If this Sprite was just created and has never been rendered, you can call `updateTransform` on the Sprite itself. + * If any of the Sprite's ancestors have been positioned, scaled, or rotated since the last render pass, + * those changes have not yet have been applied to this Sprite's worldTransform. Call `updateTransform` + * on the root-most (highest) ancestor that was changed. * * @method PIXI.Sprite#getBounds * @param matrix {Matrix} the transformation matrix of the sprite @@ -15589,8 +15644,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ maxX = a * w0 + tx; minY = d * h1 + ty; maxY = d * h0 + ty; - } - else { + } else { var x1 = a * w1 + c * h1 + tx; var y1 = d * h1 + b * w1 + ty; @@ -15676,7 +15730,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ PIXI.Sprite.prototype._renderWebGL = function (renderSession, matrix) { // if the sprite is not visible or the alpha is 0 then no need to render this element - if (!this.visible || this.alpha <= 0 || !this.renderable) return; + if (!this.visible || this.alpha <= 0 || !this.renderable) { + return; + } // They provided an alternative rendering matrix, so use it var wt = this.worldTransform; @@ -15712,12 +15768,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // time to stop the sprite batch as either a mask element or a filter draw will happen next spriteBatch.stop(); - if (this._mask) renderSession.maskManager.popMask(this._mask, renderSession); - if (this._filters) renderSession.filterManager.popFilter(); + if (this._mask) { + renderSession.maskManager.popMask(this._mask, renderSession); + } + if (this._filters) { + renderSession.filterManager.popFilter(); + } spriteBatch.start(); - } - else { + } else { renderSession.spriteBatch.render(this); // Render children! @@ -15738,7 +15797,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ PIXI.Sprite.prototype._renderCanvas = function (renderSession, matrix) { // If the sprite is not visible or the alpha is 0 then no need to render this element - if (!this.visible || this.alpha === 0 || !this.renderable || this.texture.crop.width <= 0 || this.texture.crop.height <= 0) { + if (!this.visible || this.alpha === 0 || !this.renderable || this.texture.crop.width < 1 || this.texture.crop.height < 1) { return; } @@ -15820,14 +15879,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ renderSession.context.setTransform(wt.a, wt.b, wt.c, wt.d, tx | 0, ty | 0); dx |= 0; dy |= 0; - } - else { + } else { renderSession.context.setTransform(wt.a, wt.b, wt.c, wt.d, tx, ty); } dx /= resolution; dy /= resolution; + cw |= 0; + ch |= 0; + + if (!cw || !ch) { + return; + } + if (this.tint !== 0xFFFFFF) { if (this.texture.requiresReTint || this.cachedTint !== this.tint) { this.tintedTexture = PIXI.CanvasTinter.getTintedTexture(this, this.tint); @@ -15837,14 +15902,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } renderSession.context.drawImage(this.tintedTexture, 0, 0, cw, ch, dx, dy, cw / resolution, ch / resolution); - } - else { + } else { var cx = this.texture.crop.x; var cy = this.texture.crop.y; - cw = Math.floor(cw) - ch = Math.floor(ch) - renderSession.context.drawImage(this.texture.baseTexture.source, cx, cy, cw, ch, dx, dy, cw / resolution, ch / resolution); } @@ -15905,7 +15966,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var src = shaderSrc; if (Array.isArray(shaderSrc)) { - src = shaderSrc.join("\n"); + src = shaderSrc.join('\n'); } var shader = gl.createShader(shaderType); @@ -15940,7 +16001,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { window.console.log(gl.getProgramInfoLog(shaderProgram)); - window.console.log("Could not initialise shaders"); + window.console.log('Could not initialise shaders'); } return shaderProgram; @@ -15959,42 +16020,42 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.PixiShader = function (gl) { /** * @property _UID - * @objType Number + * @type Number * @private */ this._UID = Phaser._UID++; /** * @property gl - * @objType WebGLContext + * @type WebGLContext */ this.gl = gl; /** * The WebGL program. * @property program - * @objType Any + * @type Any */ this.program = null; /** * The fragment shader. * @property fragmentSrc - * @objType Array + * @type Array */ this.fragmentSrc = null; /** * A local texture counter for multi-texture shaders. * @property textureCount - * @objType Number + * @type Number */ this.textureCount = 0; /** * A local flag * @property firstRun - * @objType Boolean + * @type Boolean * @private */ this.firstRun = true; @@ -16002,14 +16063,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * A dirty flag * @property dirty - * @objType Boolean + * @type Boolean */ this.dirty = true; /** * Uniform attributes cache. * @property attributes - * @objType Array + * @type Array * @private */ this.attributes = []; @@ -16022,11 +16083,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.PixiShader.prototype.initMultitexShader = function () { var gl = this.gl; this.MAX_TEXTURES = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); - var dynamicIfs = '\tif (vTextureIndex == 0.0) { gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;return;}\n' + var dynamicIfs = '\tif (vTextureIndex == 0.0) { gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;return;}\n'; for (var index = 1; index < this.MAX_TEXTURES; ++index) { dynamicIfs += '\tif (vTextureIndex == ' + index + '.0) {gl_FragColor = texture2D(uSamplerArray[' + - index + '], vTextureCoord) * vColor;return;}\n' + index + '], vTextureCoord) * vColor;return;}\n'; } this.fragmentSrc = [ '// PixiShader Fragment Shader.', @@ -16036,9 +16097,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 'varying vec4 vColor;', 'varying float vTextureIndex;', 'uniform sampler2D uSamplerArray[' + this.MAX_TEXTURES + '];', + // Blue color means that you are trying to bound // a texture out of the limits of the hardware. 'const vec4 BLUE = vec4(1.0, 0.0, 1.0, 1.0);', + // If you get a red color means you are out of memory // or in some way corrupted the vertex buffer. 'const vec4 RED = vec4(1.0, 0.0, 0.0, 1.0);', @@ -16054,7 +16117,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ gl.useProgram(program); // get and store the uniforms for the shader - //this.uSampler = gl.getUniformLocation(program, 'uSampler'); + // this.uSampler = gl.getUniformLocation(program, 'uSampler'); this.uSamplerArray = gl.getUniformLocation(program, 'uSamplerArray[0]'); this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); @@ -16067,6 +16130,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.aTextureIndex = gl.getAttribLocation(program, 'aTextureIndex'); var indices = []; + // HACK: we bind an empty texture to avoid WebGL warning spam. var tempTexture = gl.createTexture(); gl.activeTexture(gl.TEXTURE0); @@ -16163,6 +16227,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.program = program; }; + /** * Initialises the shader. * @@ -16200,36 +16265,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (uniform.value !== null) { this.initSampler2D(uniform); } - } - else if (type === 'mat2' || type === 'mat3' || type === 'mat4') { + } else if (type === 'mat2' || type === 'mat3' || type === 'mat4') { // These require special handling uniform.glMatrix = true; uniform.glValueLength = 1; if (type === 'mat2') { uniform.glFunc = gl.uniformMatrix2fv; - } - else if (type === 'mat3') { + } else if (type === 'mat3') { uniform.glFunc = gl.uniformMatrix3fv; - } - else if (type === 'mat4') { + } else if (type === 'mat4') { uniform.glFunc = gl.uniformMatrix4fv; } - } - else { + } else { // GL function reference uniform.glFunc = gl['uniform' + type]; if (type === '2f' || type === '2i') { uniform.glValueLength = 2; - } - else if (type === '3f' || type === '3i') { + } else if (type === '3f' || type === '3i') { uniform.glValueLength = 3; - } - else if (type === '4f' || type === '4i') { + } else if (type === '4f' || type === '4i') { uniform.glValueLength = 4; - } - else { + } else { uniform.glValueLength = 1; } } @@ -16285,11 +16343,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var height = (data.height) ? data.height : 2; var border = (data.border) ? data.border : 0; - // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum objType, ArrayBufferView? pixels); + // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels); gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, border, format, gl.UNSIGNED_BYTE, null); - } - else { - // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum objType, ImageData? pixels); + } else { + // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels); gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, uniform.value.baseTexture.source); } @@ -16323,28 +16380,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (uniform.glValueLength === 1) { if (uniform.glMatrix === true) { uniform.glFunc.call(gl, uniform.uniformLocation, uniform.transpose, uniform.value); - } - else { + } else { uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value); } - } - else if (uniform.glValueLength === 2) { + } else if (uniform.glValueLength === 2) { uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y); - } - else if (uniform.glValueLength === 3) { + } else if (uniform.glValueLength === 3) { uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y, uniform.value.z); - } - else if (uniform.glValueLength === 4) { + } else if (uniform.glValueLength === 4) { uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y, uniform.value.z, uniform.value.w); - } - else if (uniform.type === 'sampler2D') { + } else if (uniform.type === 'sampler2D') { if (uniform._init) { gl.activeTexture(gl['TEXTURE' + this.textureCount]); if (uniform.value.baseTexture._dirty[gl.id]) { PIXI.instances[gl.id].updateTexture(uniform.value.baseTexture); - } - else { + } else { // bind the current texture gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id]); } @@ -16352,8 +16403,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id] || PIXI.createWebGLTexture( uniform.value.baseTexture, gl)); gl.uniform1i(uniform.uniformLocation, this.textureCount); this.textureCount++; - } - else { + } else { this.initSampler2D(uniform); } } @@ -16378,7 +16428,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The Default Vertex shader source. * * @property defaultVertexSrc - * @objType String + * @type String */ PIXI.PixiShader.defaultVertexSrc = [ '// PixiShader Vertex Shader', @@ -16418,38 +16468,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.PixiFastShader = function (gl) { /** * @property _UID - * @objType Number + * @type Number * @private */ this._UID = Phaser._UID++; /** * @property gl - * @objType WebGLContext + * @type WebGLContext */ this.gl = gl; /** * The WebGL program. * @property program - * @objType Any + * @type Any */ this.program = null; if (PIXI._enableMultiTextureToggle) { var gl = this.gl; this.MAX_TEXTURES = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); - var dynamicIfs = '\tif (vTextureIndex == 0.0) { gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;return;}\n' + var dynamicIfs = '\tif (vTextureIndex == 0.0) { gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;return;}\n'; for (var index = 1; index < this.MAX_TEXTURES; ++index) { dynamicIfs += '\tif (vTextureIndex == ' + index + '.0) { gl_FragColor = texture2D(uSamplerArray[' + - index + '], vTextureCoord) * vColor;return;}\n' + index + '], vTextureCoord) * vColor;return;}\n'; } /** * The fragment shader. * @property fragmentSrc - * @objType Array + * @type Array */ this.fragmentSrc = [ '// PixiFastShader Fragment Shader.', @@ -16459,9 +16509,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 'varying float vColor;', 'varying float vTextureIndex;', 'uniform sampler2D uSamplerArray[' + this.MAX_TEXTURES + '];', + // Blue color means that you are trying to bound // a texture out of the limits of the hardware. 'const vec4 BLUE = vec4(1.0, 0.0, 1.0, 1.0);', + // If you get a red color means you are out of memory // or in some way corrupted the vertex buffer. 'const vec4 RED = vec4(1.0, 0.0, 0.0, 1.0);', @@ -16488,7 +16540,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The vertex shader. * @property vertexSrc - * @objType Array + * @type Array */ this.vertexSrc = [ '// PixiFastShader Vertex Shader.', @@ -16519,6 +16571,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ' gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);', ' vTextureCoord = aTextureCoord;', ' vTextureIndex = aTextureIndex;', + // ' vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;', ' vColor = aColor;', '}' @@ -16527,7 +16580,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * A local texture counter for multi-texture shaders. * @property textureCount - * @objType Number + * @type Number */ this.textureCount = 0; @@ -16555,6 +16608,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (PIXI._enableMultiTextureToggle) { var indices = []; + // HACK: we bind an empty texture to avoid WebGL warning spam. var tempTexture = gl.createTexture(); gl.activeTexture(gl.TEXTURE0); @@ -16636,39 +16690,39 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.StripShader = function (gl) { /** * @property _UID - * @objType Number + * @type Number * @private */ this._UID = Phaser._UID++; /** * @property gl - * @objType WebGLContext + * @type WebGLContext */ this.gl = gl; /** * The WebGL program. * @property program - * @objType Any + * @type Any */ this.program = null; if (PIXI._enableMultiTextureToggle) { var gl = this.gl; this.MAX_TEXTURES = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); - var dynamicIfs = '\tif (vTextureIndex == 0.0) { gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord);return;}\n' + var dynamicIfs = '\tif (vTextureIndex == 0.0) { gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord);return;}\n'; for (var index = 1; index < this.MAX_TEXTURES; ++index) { dynamicIfs += '\tif (vTextureIndex == ' + index + '.0) { gl_FragColor = texture2D(uSamplerArray[' + - index + '], vTextureCoord) ;return;}\n' + index + '], vTextureCoord) ;return;}\n'; } /** * The fragment shader. * @property fragmentSrc - * @objType Array + * @type Array */ this.fragmentSrc = [ '//StripShader Fragment Shader.', @@ -16676,12 +16730,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 'bool isnan( float val ) { return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true; }', 'varying vec2 vTextureCoord;', 'varying float vTextureIndex;', + // 'varying float vColor;', 'uniform float alpha;', 'uniform sampler2D uSamplerArray[' + this.MAX_TEXTURES + '];', + // Blue color means that you are trying to bound // a texture out of the limits of the hardware. 'const vec4 BLUE = vec4(1.0, 0.0, 1.0, 1.0);', + // If you get a red color means you are out of memory // or in some way corrupted the vertex buffer. 'const vec4 RED = vec4(1.0, 0.0, 0.0, 1.0);', @@ -16695,13 +16752,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The fragment shader. * @property fragmentSrc - * @objType Array + * @type Array */ this.fragmentSrc = [ '//StripShader Fragment Shader.', 'precision mediump float;', 'varying vec2 vTextureCoord;', 'varying float vTextureIndex;', + // 'varying float vColor;', 'uniform float alpha;', 'uniform sampler2D uSampler;', @@ -16714,7 +16772,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The vertex shader. * @property vertexSrc - * @objType Array + * @type Array */ this.vertexSrc = [ '//StripShader Vertex Shader.', @@ -16724,10 +16782,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 'uniform mat3 translationMatrix;', 'uniform vec2 projectionVector;', 'uniform vec2 offsetVector;', + // 'uniform float alpha;', // 'uniform vec3 tint;', 'varying vec2 vTextureCoord;', 'varying float vTextureIndex;', + // 'varying vec4 vColor;', 'void main(void) {', @@ -16736,6 +16796,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ' gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);', ' vTextureCoord = aTextureCoord;', ' vTextureIndex = aTextureIndex;', + // ' vColor = aColor * vec4(tint * alpha, alpha);', '}' ]; @@ -16763,6 +16824,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (PIXI._enableMultiTextureToggle) { var indices = []; + // HACK: we bind an empty texture to avoid WebGL warning spam. var tempTexture = gl.createTexture(); gl.activeTexture(gl.TEXTURE0); @@ -16781,7 +16843,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); this.colorAttribute = gl.getAttribLocation(program, 'aColor'); this.aTextureIndex = gl.getAttribLocation(program, 'aTextureIndex'); - //this.dimensions = gl.getUniformLocation(this.program, 'dimensions'); + + // this.dimensions = gl.getUniformLocation(this.program, 'dimensions'); // get and store the attributes this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); @@ -16820,28 +16883,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.PrimitiveShader = function (gl) { /** * @property _UID - * @objType Number + * @type Number * @private */ this._UID = Phaser._UID++; /** * @property gl - * @objType WebGLContext + * @type WebGLContext */ this.gl = gl; /** * The WebGL program. * @property program - * @objType Any + * @type Any */ this.program = null; /** * The fragment shader. * @property fragmentSrc - * @objType Array + * @type Array */ this.fragmentSrc = [ 'precision mediump float;', @@ -16855,7 +16918,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The vertex shader. * @property vertexSrc - * @objType Array + * @type Array */ this.vertexSrc = [ 'attribute vec2 aVertexPosition;', @@ -16935,28 +16998,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.ComplexPrimitiveShader = function (gl) { /** * @property _UID - * @objType Number + * @type Number * @private */ this._UID = Phaser._UID++; /** * @property gl - * @objType WebGLContext + * @type WebGLContext */ this.gl = gl; /** * The WebGL program. * @property program - * @objType Any + * @type Any */ this.program = null; /** * The fragment shader. * @property fragmentSrc - * @objType Array + * @type Array */ this.fragmentSrc = [ @@ -16972,11 +17035,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The vertex shader. * @property vertexSrc - * @objType Array + * @type Array */ this.vertexSrc = [ 'attribute vec2 aVertexPosition;', - //'attribute vec4 aColor;', + + // 'attribute vec4 aColor;', 'uniform mat3 translationMatrix;', 'uniform vec2 projectionVector;', 'uniform vec2 offsetVector;', @@ -16991,7 +17055,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ' vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);', ' v -= offsetVector.xyx;', ' gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);', - ' vColor = vec4(color * alpha * tint, alpha);',//" * vec4(tint * alpha, alpha);', + ' vColor = vec4(color * alpha * tint, alpha);',// " * vec4(tint * alpha, alpha);', '}' ]; @@ -17020,6 +17084,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // get and store the attributes this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + // this.colorAttribute = gl.getAttribLocation(program, 'aColor'); this.attributes = [this.aVertexPosition, this.colorAttribute]; @@ -17061,7 +17126,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @constructor * @param game {Phaser.Game} A reference to the Phaser Game instance */ - PIXI.WebGLRenderer = function (game) { + PIXI.WebGLRenderer = function (game, config) { /** * @property {Phaser.Game} game - A reference to the Phaser Game instance. @@ -17076,7 +17141,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property type - * @objType Number + * @type Number */ this.type = Phaser.WEBGL; @@ -17084,7 +17149,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The resolution of the renderer * * @property resolution - * @objType Number + * @type Number * @default 1 */ this.resolution = game.resolution; @@ -17093,7 +17158,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Whether the render view is transparent * * @property transparent - * @objType Boolean + * @type Boolean */ this.transparent = game.transparent; @@ -17101,7 +17166,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Whether the render view should be resized automatically * * @property autoResize - * @objType Boolean + * @type Boolean */ this.autoResize = false; @@ -17109,7 +17174,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The value of the preserveDrawingBuffer flag affects whether or not the contents of the stencil buffer is retained after rendering. * * @property preserveDrawingBuffer - * @objType Boolean + * @type Boolean */ this.preserveDrawingBuffer = game.preserveDrawingBuffer; @@ -17120,7 +17185,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Disable this by setting this to false. For example: if your game has a canvas filling background image, you often don't need this set. * * @property clearBeforeRender - * @objType Boolean + * @type Boolean * @default */ this.clearBeforeRender = game.clearBeforeRender; @@ -17129,7 +17194,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The width of the canvas view * * @property width - * @objType Number + * @type Number */ this.width = game.width; @@ -17137,7 +17202,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The height of the canvas view * * @property height - * @objType Number + * @type Number */ this.height = game.height; @@ -17145,18 +17210,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The canvas element that everything is drawn to * * @property view - * @objType HTMLCanvasElement + * @type HTMLCanvasElement */ this.view = game.canvas; /** * @property _contextOptions - * @objType Object + * @type Object * @private */ this._contextOptions = { alpha: this.transparent, antialias: game.antialias, + failIfMajorPerformanceCaveat: config.failIfMajorPerformanceCaveat, premultipliedAlpha: this.transparent && this.transparent !== 'notMultiplied', stencil: true, preserveDrawingBuffer: this.preserveDrawingBuffer @@ -17164,13 +17230,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property projection - * @objType Point + * @type Point */ this.projection = new PIXI.Point(); /** * @property offset - * @objType Point + * @type Point */ this.offset = new PIXI.Point(); @@ -17179,54 +17245,54 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Deals with managing the shader programs and their attribs * @property shaderManager - * @objType WebGLShaderManager + * @type WebGLShaderManager */ this.shaderManager = new PIXI.WebGLShaderManager(); /** * Manages the rendering of sprites * @property spriteBatch - * @objType WebGLSpriteBatch + * @type WebGLSpriteBatch */ this.spriteBatch = new PIXI.WebGLSpriteBatch(game); /** * Manages the masks using the stencil buffer * @property maskManager - * @objType WebGLMaskManager + * @type WebGLMaskManager */ this.maskManager = new PIXI.WebGLMaskManager(); /** * Manages the filters * @property filterManager - * @objType WebGLFilterManager + * @type WebGLFilterManager */ this.filterManager = new PIXI.WebGLFilterManager(); /** * Manages the stencil buffer * @property stencilManager - * @objType WebGLStencilManager + * @type WebGLStencilManager */ this.stencilManager = new PIXI.WebGLStencilManager(); /** * Manages the blendModes * @property blendModeManager - * @objType WebGLBlendModeManager + * @type WebGLBlendModeManager */ this.blendModeManager = new PIXI.WebGLBlendModeManager(); /** * @property renderSession - * @objType Object + * @type Object */ this.renderSession = {}; /** * @property currentBatchedTextures - * @objType Array + * @type Array */ this.currentBatchedTextures = []; @@ -17242,7 +17308,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.renderSession.stencilManager = this.stencilManager; this.renderSession.renderer = this; this.renderSession.resolution = this.resolution; - this.renderSession.roundPixels = false; + this.renderSession.roundPixels = config.roundPixels || false; this.renderSession.maxTextureAvailableSpace = null; // filled in setTexturePriority() // time init the context.. @@ -17373,6 +17439,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } var maxTextureAvailableSpace = (maxTextureSize) - clampPot(Math.max(this.width, this.height)); this.currentBatchedTextures.length = 0; + // We start from 1 because framebuffer texture uses unit 0. for (var j = 0; j < textureNameCollection.length; ++j) { imageName = textureNameCollection[j]; @@ -17381,6 +17448,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ console.warn('setTexturePriority: There is no image "%s" in the image cache.', imageName); continue; } + // Unit 0 is reserved for Pixi's framebuffer var base = imageCache[imageName].base; maxTextureAvailableSpace -= clampPot(Math.max(base.width, base.height)); @@ -17452,7 +17520,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // set the default projection this.renderSession.projection = projection; - //set the default offset + // set the default offset this.renderSession.offset = this.offset; // start the sprite batch @@ -17529,16 +17597,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (texture.mipmap && Phaser.Math.isPowerOfTwo(texture.width, texture.height)) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR_MIPMAP_LINEAR : gl.NEAREST_MIPMAP_NEAREST); gl.generateMipmap(gl.TEXTURE_2D); - } - else { + } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); } if (!texture._powerOf2) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - } - else { + } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } @@ -17579,16 +17645,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (texture.mipmap && Phaser.Math.isPowerOfTwo(texture.width, texture.height)) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR_MIPMAP_LINEAR : gl.NEAREST_MIPMAP_NEAREST); gl.generateMipmap(gl.TEXTURE_2D); - } - else { + } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); } if (!texture._powerOf2) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - } - else { + } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } @@ -17689,7 +17753,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.WebGLBlendModeManager = function () { /** * @property currentBlendMode - * @objType Number + * @type Number */ this.currentBlendMode = 99999; }; @@ -17713,7 +17777,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param blendMode {Number} the blendMode, should be a Pixi const, such as PIXI.BlendModes.ADD */ PIXI.WebGLBlendModeManager.prototype.setBlendMode = function (blendMode) { - if (this.currentBlendMode === blendMode) return false; + if (this.currentBlendMode === blendMode) { + return false; + } this.currentBlendMode = blendMode; @@ -17868,8 +17934,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - level, 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level, 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); } @@ -17879,19 +17944,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - (level + 1), 0xFF); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level + 1, 0xFF); } this.reverse = !this.reverse; - } - else { + } else { if (!this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - level, 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level, 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); } @@ -17900,8 +17962,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - (level + 1), 0xFF); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level + 1, 0xFF); } } @@ -17921,7 +17982,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param renderSession {Object} */ PIXI.WebGLStencilManager.prototype.bindGraphics = function (graphics, webGLData, renderSession) { - //if(this._currentGraphics === graphics)return; + // if(this._currentGraphics === graphics)return; this._currentGraphics = graphics; var gl = this.gl; @@ -17956,9 +18017,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // now do the rest.. // set the index buffer! gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGLData.indexBuffer); - } - else { - //renderSession.shaderManager.activatePrimitiveShader(); + } else { + // renderSession.shaderManager.activatePrimitiveShader(); shader = renderSession.shaderManager.primitiveShader; renderSession.shaderManager.setShader(shader); @@ -17998,8 +18058,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // the stack is empty! gl.disable(gl.STENCIL_TEST); - } - else { + } else { var level = this.count; @@ -18013,8 +18072,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - (level + 1), 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level + 1, 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR); } @@ -18030,19 +18088,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - (level), 0xFF); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level, 0xFF); } - } - else { + } else { // console.log("<<>>") if (!this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - (level + 1), 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level + 1, 0xFF); gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR); } @@ -18051,8 +18106,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!this.reverse) { gl.stencilFunc(gl.EQUAL, 0xFF - (level), 0xFF); - } - else { + } else { gl.stencilFunc(gl.EQUAL, level, 0xFF); } } @@ -18086,19 +18140,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.WebGLShaderManager = function () { /** * @property maxAttibs - * @objType Number + * @type Number */ this.maxAttibs = 10; /** * @property attribState - * @objType Array + * @type Array */ this.attribState = []; /** * @property tempAttribState - * @objType Array + * @type Array */ this.tempAttribState = []; @@ -18108,7 +18162,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property stack - * @objType Array + * @type Array */ this.stack = []; @@ -18174,8 +18228,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.tempAttribState[i]) { gl.enableVertexAttribArray(i); - } - else { + } else { gl.disableVertexAttribArray(i); } } @@ -18189,7 +18242,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param shader {Any} */ PIXI.WebGLShaderManager.prototype.setShader = function (shader) { - if (this._currentId === shader._UID) return false; + if (this._currentId === shader._UID) { + return false; + } this._currentId = shader._UID; @@ -18254,32 +18309,33 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property vertSize - * @objType Number + * @type Number */ this.vertSize = 5; /** * The number of images in the SpriteBatch before it flushes * @property size - * @objType Number + * @type Number */ - this.size = 2000; //Math.pow(2, 16) / this.vertSize; + this.size = 2000; // Math.pow(2, 16) / this.vertSize; - //the total number of bytes in our batch + // the total number of bytes in our batch // Including texture index: // position + uv + color + textureIndex // vec2 + vec2 + (char * 4) + float this.vertexSize = (4 * 2) + (4 * 2) + (4) + (4); var numVerts = this.vertexSize * this.size * 4; - //this.size * 4 * 4 * this.vertSize; - //the total number of indices in our batch + + // this.size * 4 * 4 * this.vertSize; + // the total number of indices in our batch var numIndices = this.size * 6; /** * Holds the vertices * * @property vertices - * @objType ArrayBuffer + * @type ArrayBuffer */ this.vertices = new ArrayBuffer(numVerts); @@ -18287,7 +18343,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * View on the vertices as a Float32Array * * @property positions - * @objType Float32Array + * @type Float32Array */ this.positions = new Float32Array(this.vertices); @@ -18295,7 +18351,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * View on the vertices as a Uint32Array * * @property colors - * @objType Uint32Array + * @type Uint32Array */ this.colors = new Uint32Array(this.vertices); @@ -18303,13 +18359,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Holds the indices * * @property indices - * @objType Uint16Array + * @type Uint16Array */ this.indices = new Uint16Array(numIndices); /** * @property lastIndexCount - * @objType Number + * @type Number */ this.lastIndexCount = 0; @@ -18324,55 +18380,55 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property drawing - * @objType Boolean + * @type Boolean */ this.drawing = false; /** * @property currentBatchSize - * @objType Number + * @type Number */ this.currentBatchSize = 0; /** * @property currentBaseTexture - * @objType BaseTexture + * @type BaseTexture */ this.currentBaseTexture = null; /** * @property dirty - * @objType Boolean + * @type Boolean */ this.dirty = true; /** * @property textures - * @objType Array + * @type Array */ this.textures = []; /** * @property blendModes - * @objType Array + * @type Array */ this.blendModes = []; /** * @property shaders - * @objType Array + * @type Array */ this.shaders = []; /** * @property sprites - * @objType Array + * @type Array */ this.sprites = []; /** * @property defaultShader - * @objType Phaser.Filter + * @type Phaser.Filter */ this.defaultShader = null; }; @@ -18385,11 +18441,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.MAX_TEXTURES = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); this.gl = gl; if (PIXI._enableMultiTextureToggle) { - var dynamicIfs = '\tif (vTextureIndex == 0.0) {gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;return;}\n' + var dynamicIfs = '\tif (vTextureIndex == 0.0) {gl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;return;}\n'; for (var index = 1; index < this.MAX_TEXTURES; ++index) { dynamicIfs += '\tif (vTextureIndex == ' + index + '.0) {gl_FragColor = texture2D(uSamplerArray[' + - index + '], vTextureCoord) * vColor;return;}\n' + index + '], vTextureCoord) * vColor;return;}\n'; } this.defaultShader = new Phaser.Filter( this.game, @@ -18406,8 +18462,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ '\tgl_FragColor = texture2D(uSamplerArray[0], vTextureCoord) * vColor;', '}' ]); - } - else { + } else { this.defaultShader = new Phaser.Filter( this.game, undefined, @@ -18430,7 +18485,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // 65535 is max index, so 65535 / 6 = 10922. - //upload the index data + // upload the index data gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); @@ -18475,7 +18530,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var texture = sprite.texture; var baseTexture = texture.baseTexture; var gl = this.gl; - if (PIXI.WebGLRenderer.textureArray[baseTexture.textureIndex] != baseTexture) { + if (PIXI.WebGLRenderer.textureArray[baseTexture.textureIndex] != baseTexture) // eslint-disable-line eqeqeq + { this.flush(); gl.activeTexture(gl.TEXTURE0 + baseTexture.textureIndex); gl.bindTexture(gl.TEXTURE_2D, baseTexture._glTextures[gl.id]); @@ -18525,8 +18581,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ h1 = texture.frame.height * -aY; } - var i = this.currentBatchSize * this.vertexSize; //4 * this.vertSize; - var tiOffset = this.currentBatchSize * 4; + var i = this.currentBatchSize * this.vertexSize; // 4 * this.vertSize; var resolution = texture.baseTexture.resolution; var textureIndex = texture.baseTexture.textureIndex; @@ -18537,7 +18592,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var tx = wt.tx; var ty = wt.ty; - var cw = texture.crop.width; var ch = texture.crop.height; if (texture.rotated) { @@ -18631,6 +18685,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ colors[i++] = color; positions[i++] = textureIndex; } + // increment the batchsize this.sprites[this.currentBatchSize++] = sprite; }; @@ -18646,7 +18701,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var baseTexture = texture.baseTexture; var gl = this.gl; var textureIndex = sprite.texture.baseTexture.textureIndex; - if (PIXI.WebGLRenderer.textureArray[textureIndex] != baseTexture) { + if (PIXI.WebGLRenderer.textureArray[textureIndex] != baseTexture) // eslint-disable-line eqeqeq + { this.flush(); gl.activeTexture(gl.TEXTURE0 + textureIndex); gl.bindTexture(gl.TEXTURE_2D, baseTexture._glTextures[gl.id]); @@ -18715,7 +18771,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var h0 = height * (1 - aY); var h1 = height * -aY; - var i = this.currentBatchSize * this.vertexSize; //4 * this.vertSize; + var i = this.currentBatchSize * this.vertexSize; // 4 * this.vertSize; var resolution = texture.baseTexture.resolution; @@ -18727,47 +18783,60 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var d = wt.d / resolution; var tx = wt.tx; var ty = wt.ty; + // xy positions[i++] = a * w1 + c * h1 + tx; positions[i++] = d * h1 + b * w1 + ty; + // uv positions[i++] = uvs.x0; positions[i++] = uvs.y0; + // color colors[i++] = color; + // texture index positions[i++] = textureIndex; // xy positions[i++] = (a * w0 + c * h1 + tx); positions[i++] = d * h1 + b * w0 + ty; + // uv positions[i++] = uvs.x1; positions[i++] = uvs.y1; + // color colors[i++] = color; + // texture index positions[i++] = textureIndex; // xy positions[i++] = a * w0 + c * h0 + tx; positions[i++] = d * h0 + b * w0 + ty; + // uv positions[i++] = uvs.x2; positions[i++] = uvs.y2; + // color colors[i++] = color; + // texture index positions[i++] = textureIndex; // xy positions[i++] = a * w1 + c * h0 + tx; positions[i++] = d * h0 + b * w1 + ty; + // uv positions[i++] = uvs.x3; positions[i++] = uvs.y3; + // color colors[i++] = color; + // texture index positions[i++] = textureIndex; @@ -18800,8 +18869,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // bind the buffers gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + // this is the same for each shader? - var stride = this.vertexSize; //this.vertSize * 4; + var stride = this.vertexSize; // this.vertSize * 4; gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, stride, 8); @@ -18832,7 +18902,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var blendSwap = false; var shaderSwap = false; var sprite; - var textureIndex = 0; for (var i = 0, j = this.currentBatchSize; i < j; i++) { @@ -18855,8 +18924,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (skip && sprite.children.length > 0) { skip = false; } + // - if (/*(currentBaseTexture != nextTexture && !skip) ||*/ + if (/* (currentBaseTexture != nextTexture && !skip) || */ blendSwap || shaderSwap) { this.renderBatch(currentBaseTexture, batchSize, start); @@ -18938,6 +19008,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } gl.drawElements(gl.TRIANGLES, size * 6, gl.UNSIGNED_SHORT, startIndex * 6 * 2); + // increment the draw count this.renderSession.drawCount++; }; @@ -18992,57 +19063,57 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property vertSize - * @objType Number + * @type Number */ this.vertSize = 11; /** * @property maxSize - * @objType Number + * @type Number */ - this.maxSize = 6000;//Math.pow(2, 16) / this.vertSize; + this.maxSize = 6000;// Math.pow(2, 16) / this.vertSize; /** * @property size - * @objType Number + * @type Number */ this.size = this.maxSize; - //the total number of floats in our batch + // the total number of floats in our batch var numVerts = this.size * 4 * this.vertSize; - //the total number of indices in our batch + // the total number of indices in our batch var numIndices = this.maxSize * 6; /** * Vertex data * @property vertices - * @objType Float32Array + * @type Float32Array */ this.vertices = new Float32Array(numVerts); /** * Index data * @property indices - * @objType Uint16Array + * @type Uint16Array */ this.indices = new Uint16Array(numIndices); /** * @property vertexBuffer - * @objType Object + * @type Object */ this.vertexBuffer = null; /** * @property indexBuffer - * @objType Object + * @type Object */ this.indexBuffer = null; /** * @property lastIndexCount - * @objType Number + * @type Number */ this.lastIndexCount = 0; @@ -19057,43 +19128,43 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property drawing - * @objType Boolean + * @type Boolean */ this.drawing = false; /** * @property currentBatchSize - * @objType Number + * @type Number */ this.currentBatchSize = 0; /** * @property currentBaseTexture - * @objType BaseTexture + * @type BaseTexture */ this.currentBaseTexture = null; /** * @property currentBlendMode - * @objType Number + * @type Number */ this.currentBlendMode = 0; /** * @property renderSession - * @objType Object + * @type Object */ this.renderSession = null; /** * @property shader - * @objType Object + * @type Object */ this.shader = null; /** * @property matrix - * @objType Matrix + * @type Matrix */ this.matrix = null; @@ -19117,7 +19188,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // 65535 is max index, so 65535 / 6 = 10922. - //upload the index data + // upload the index data gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); @@ -19157,7 +19228,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // if the uvs have not updated then no point rendering just yet! // check texture. - if (!sprite.texture._uvs) return; + if (!sprite.texture._uvs) { + return; + } this.currentBaseTexture = sprite.texture.baseTexture; @@ -19184,19 +19257,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var gl = this.gl; var textureIndex = sprite.texture.baseTexture.textureIndex; - if (PIXI.WebGLRenderer.textureArray[textureIndex] != baseTexture && + if (PIXI.WebGLRenderer.textureArray[textureIndex] != baseTexture && // eslint-disable-line eqeqeq baseTexture._glTextures[gl.id] && !sprite.texture.baseTexture.skipRender) { this.flush(); gl.activeTexture(gl.TEXTURE0 + textureIndex); gl.bindTexture(gl.TEXTURE_2D, baseTexture._glTextures[gl.id]); PIXI.WebGLRenderer.textureArray[textureIndex] = baseTexture; - if (!sprite.texture._uvs) return; + if (!sprite.texture._uvs) { + return; + } } - //sprite = children[i]; - if (!sprite.visible) return; - var uvs, vertices = this.vertices, width, height, w0, w1, h0, h1, index; + // sprite = children[i]; + if (!sprite.visible) { + return; + } + + var uvs, + vertices = this.vertices, + width, height, w0, w1, h0, h1, index; uvs = sprite.texture._uvs; @@ -19212,16 +19292,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ h1 = trim.y - sprite.anchor.y * trim.height; h0 = h1 + sprite.texture.crop.height; - } - else { - w0 = (sprite.texture.frame.width) * (1 - sprite.anchor.x); - w1 = (sprite.texture.frame.width) * -sprite.anchor.x; + } else { + w0 = width * (1 - sprite.anchor.x); + w1 = width * -sprite.anchor.x; - h0 = sprite.texture.frame.height * (1 - sprite.anchor.y); - h1 = sprite.texture.frame.height * -sprite.anchor.y; + h0 = height * (1 - sprite.anchor.y); + h1 = height * -sprite.anchor.y; } index = this.currentBatchSize * 4 * this.vertSize; + // xy vertices[index++] = w1; vertices[index++] = h1; @@ -19229,18 +19309,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ vertices[index++] = sprite.position.x; vertices[index++] = sprite.position.y; - //scale + // scale vertices[index++] = sprite.scale.x; vertices[index++] = sprite.scale.y; - //rotation + // rotation vertices[index++] = sprite.rotation; // uv vertices[index++] = uvs.x0; vertices[index++] = uvs.y1; + // color vertices[index++] = sprite.alpha; + // texture Index vertices[index++] = textureIndex; @@ -19252,18 +19334,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ vertices[index++] = sprite.position.x; vertices[index++] = sprite.position.y; - //scale + // scale vertices[index++] = sprite.scale.x; vertices[index++] = sprite.scale.y; - //rotation + // rotation vertices[index++] = sprite.rotation; // uv vertices[index++] = uvs.x1; vertices[index++] = uvs.y1; + // color vertices[index++] = sprite.alpha; + // texture Index vertices[index++] = textureIndex; @@ -19274,18 +19358,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ vertices[index++] = sprite.position.x; vertices[index++] = sprite.position.y; - //scale + // scale vertices[index++] = sprite.scale.x; vertices[index++] = sprite.scale.y; - //rotation + // rotation vertices[index++] = sprite.rotation; // uv vertices[index++] = uvs.x2; vertices[index++] = uvs.y2; + // color vertices[index++] = sprite.alpha; + // texture Index vertices[index++] = textureIndex; @@ -19297,18 +19383,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ vertices[index++] = sprite.position.x; vertices[index++] = sprite.position.y; - //scale + // scale vertices[index++] = sprite.scale.x; vertices[index++] = sprite.scale.y; - //rotation + // rotation vertices[index++] = sprite.rotation; // uv vertices[index++] = uvs.x3; vertices[index++] = uvs.y3; + // color vertices[index++] = sprite.alpha; + // texture Index vertices[index++] = textureIndex; @@ -19325,7 +19413,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ PIXI.WebGLFastSpriteBatch.prototype.flush = function () { // If the batch is length 0 then return as there is nothing to draw - if (this.currentBatchSize === 0) return; + if (this.currentBatchSize === 0) { + return; + } var gl = this.gl; @@ -19336,14 +19426,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return; } - //gl.bindTexture(gl.TEXTURE_2D, this.currentBaseTexture._glTextures[gl.id]); + // gl.bindTexture(gl.TEXTURE_2D, this.currentBaseTexture._glTextures[gl.id]); // upload the verts to the buffer if (this.currentBatchSize > (this.size * 0.5)) { gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); - } - else { + } else { var view = this.vertices.subarray(0, this.currentBatchSize * 4 * this.vertSize); gl.bufferSubData(gl.ARRAY_BUFFER, 0, view); @@ -19412,19 +19501,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PIXI.WebGLFilterManager = function () { /** * @property filterStack - * @objType Array + * @type Array */ this.filterStack = []; /** * @property offsetX - * @objType Number + * @type Number */ this.offsetX = 0; /** * @property offsetY - * @objType Number + * @type Number */ this.offsetY = 0; }; @@ -19474,10 +19563,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ filterBlock._filterArea = filterBlock.target.filterArea || filterBlock.target.getBounds(); // >>> modify by nextht - filterBlock._previous_stencil_mgr = this.renderSession.stencilManager; + filterBlock._previous_stencil_mgr = this.renderSession.stencilManager; // eslint-disable-line camelcase this.renderSession.stencilManager = new PIXI.WebGLStencilManager(); this.renderSession.stencilManager.setContext(gl); gl.disable(gl.STENCIL_TEST); + // <<< modify by nextht // filter program @@ -19492,8 +19582,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var texture = this.texturePool.pop(); if (!texture) { texture = new PIXI.FilterTexture(this.gl, this.width * this.renderSession.resolution, this.height * this.renderSession.resolution); - } - else { + } else { texture.resize(this.width * this.renderSession.resolution, this.height * this.renderSession.resolution); } @@ -19508,12 +19597,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ filterArea.height += padding * 2; // cap filter to screen size.. - if (filterArea.x < 0) filterArea.x = 0; - if (filterArea.width > this.width) filterArea.width = this.width; - if (filterArea.y < 0) filterArea.y = 0; - if (filterArea.height > this.height) filterArea.height = this.height; + if (filterArea.x < 0) { + filterArea.x = 0; + } + if (filterArea.width > this.width) { + filterArea.width = this.width; + } + if (filterArea.y < 0) { + filterArea.y = 0; + } + if (filterArea.height > this.height) { + filterArea.height = this.height; + } - //gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, filterArea.width, filterArea.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + // gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, filterArea.width, filterArea.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); gl.bindFramebuffer(gl.FRAMEBUFFER, texture.frameBuffer); // set view port @@ -19528,8 +19625,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // update projection // now restore the regular shader.. // this.renderSession.shaderManager.setShader(this.defaultShader); - //gl.uniform2f(this.defaultShader.projectionVector, filterArea.width/2, -filterArea.height/2); - //gl.uniform2f(this.defaultShader.offsetVector, -filterArea.x, -filterArea.y); + // gl.uniform2f(this.defaultShader.projectionVector, filterArea.width/2, -filterArea.height/2); + // gl.uniform2f(this.defaultShader.offsetVector, -filterArea.x, -filterArea.y); gl.colorMask(true, true, true, true); gl.clearColor(0, 0, 0, 0); @@ -19572,6 +19669,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray); gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + // now set the uvs.. this.uvArray[2] = filterArea.width / this.width; this.uvArray[5] = filterArea.height / this.height; @@ -19582,7 +19680,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var inputTexture = texture; var outputTexture = this.texturePool.pop(); - if (!outputTexture) outputTexture = new PIXI.FilterTexture(this.gl, this.width * this.renderSession.resolution, this.height * this.renderSession.resolution); + if (!outputTexture) { + outputTexture = new PIXI.FilterTexture(this.gl, this.width * this.renderSession.resolution, this.height * this.renderSession.resolution); + } outputTexture.resize(this.width * this.renderSession.resolution, this.height * this.renderSession.resolution); // need to clear this FBO as it may have some left over elements from a previous filter. @@ -19601,7 +19701,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ gl.bindTexture(gl.TEXTURE_2D, inputTexture.texture); // draw texture.. - //filterPass.applyFilterPass(filterArea.width, filterArea.height); + // filterPass.applyFilterPass(filterArea.width, filterArea.height); this.applyFilterPass(filterPass, filterArea, filterArea.width, filterArea.height); // swap the textures.. @@ -19631,9 +19731,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // time to render the filters texture to the previous scene if (this.filterStack.length === 0) { - gl.colorMask(true, true, true, true);//this.transparent); - } - else { + gl.colorMask(true, true, true, true);// this.transparent); + } else { var currentFilter = this.filterStack[this.filterStack.length - 1]; filterArea = currentFilter._filterArea; @@ -19691,7 +19790,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ gl.bindFramebuffer(gl.FRAMEBUFFER, buffer); // set the blend mode! - //gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA) + // gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA) // set texture gl.activeTexture(gl.TEXTURE0); @@ -19701,14 +19800,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.renderSession.stencilManager) { this.renderSession.stencilManager.destroy(); } - this.renderSession.stencilManager = filterBlock._previous_stencil_mgr; - filterBlock._previous_stencil_mgr = null; + this.renderSession.stencilManager = filterBlock._previous_stencil_mgr; // eslint-disable-line camelcase + filterBlock._previous_stencil_mgr = null; // eslint-disable-line camelcase if (this.renderSession.stencilManager.count > 0) { gl.enable(gl.STENCIL_TEST); - } - else { + } else { gl.disable(gl.STENCIL_TEST); } + // <<< modify by nextht // apply! @@ -19752,16 +19851,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // set the shader this.renderSession.shaderManager.setShader(shader); -// gl.useProgram(shader.program); + // gl.useProgram(shader.program); gl.uniform2f(shader.projectionVector, width / 2, -height / 2); gl.uniform2f(shader.offsetVector, 0, 0); if (filter.uniforms.dimensions) { - filter.uniforms.dimensions.value[0] = this.width;//width; - filter.uniforms.dimensions.value[1] = this.height;//height; + filter.uniforms.dimensions.value[0] = this.width;// width; + filter.uniforms.dimensions.value[1] = this.height;// height; filter.uniforms.dimensions.value[2] = this.vertexArray[0]; - filter.uniforms.dimensions.value[3] = this.vertexArray[5];//filterArea.height; + filter.uniforms.dimensions.value[3] = this.vertexArray[5];// filterArea.height; } shader.syncUniforms(); @@ -19850,7 +19949,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.texturePool = null; - //destroy buffers.. + // destroy buffers.. gl.deleteBuffer(this.vertexBuffer); gl.deleteBuffer(this.uvBuffer); gl.deleteBuffer(this.colorBuffer); @@ -19921,21 +20020,24 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ PIXI.FilterTexture = function (gl, width, height, scaleMode, textureUnit) { textureUnit = typeof textureUnit === 'number' ? textureUnit : 0; + /** * @property gl - * @objType WebGLContext + * @type WebGLContext */ this.gl = gl; + // next time to create a frame buffer and texture /** * @property frameBuffer - * @objType Any + * @type Any */ this.frameBuffer = _CreateFramebuffer(gl, width, height, scaleMode || PIXI.scaleModes.DEFAULT, textureUnit); + /** * @property texture - * @objType Any + * @type Any */ this.texture = this.frameBuffer.targetTexture; this.width = width; @@ -19965,7 +20067,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param height {Number} the new height of the texture */ PIXI.FilterTexture.prototype.resize = function (width, height) { - if (this.width === width && this.height === height) return; + if (this.width === width && this.height === height) { + return; + } this.width = width; this.height = height; @@ -19973,6 +20077,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var gl = this.gl; gl.bindTexture(gl.TEXTURE_2D, this.texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + // update the stencil buffer width and height gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); @@ -20009,7 +20114,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The width of the Canvas in pixels. * * @property width - * @objType Number + * @type Number */ this.width = width; @@ -20017,7 +20122,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The height of the Canvas in pixels. * * @property height - * @objType Number + * @type Number */ this.height = height; @@ -20025,7 +20130,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The Canvas object that belongs to this CanvasBuffer. * * @property canvas - * @objType HTMLCanvasElement + * @type HTMLCanvasElement */ this.canvas = Phaser.CanvasPool.create(this, this.width, this.height); @@ -20033,9 +20138,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A CanvasRenderingContext2D object representing a two-dimensional rendering context. * * @property context - * @objType CanvasRenderingContext2D + * @type CanvasRenderingContext2D */ - this.context = this.canvas.getContext("2d"); + this.context = this.canvas.getContext('2d'); this.canvas.width = width; this.canvas.height = height; @@ -20172,7 +20277,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param canvas {HTMLCanvasElement} the current canvas */ PIXI.CanvasTinter.tintWithMultiply = function (texture, color, canvas) { - var context = canvas.getContext("2d"); + var context = canvas.getContext('2d'); var crop = texture.crop; var w = crop.width; @@ -20190,13 +20295,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ context.clearRect(0, 0, w, h); - context.fillStyle = "#" + ("00000" + (color | 0).toString(16)).substr(-6); + context.fillStyle = '#' + ('00000' + (color | 0).toString(16)).substr(-6); context.fillRect(0, 0, w, h); - context.globalCompositeOperation = "multiply"; + context.globalCompositeOperation = 'multiply'; context.drawImage(texture.baseTexture.source, crop.x, crop.y, w, h, 0, 0, w, h); - context.globalCompositeOperation = "destination-atop"; + context.globalCompositeOperation = 'destination-atop'; context.drawImage(texture.baseTexture.source, crop.x, crop.y, w, h, 0, 0, w, h); }; @@ -20211,7 +20316,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param canvas {HTMLCanvasElement} the current canvas */ PIXI.CanvasTinter.tintWithPerPixel = function (texture, color, canvas) { - var context = canvas.getContext("2d"); + var context = canvas.getContext('2d'); var crop = texture.crop; var w = crop.width; @@ -20227,12 +20332,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ canvas.height = h; } - context.globalCompositeOperation = "copy"; + context.globalCompositeOperation = 'copy'; context.drawImage(texture.baseTexture.source, crop.x, crop.y, w, h, 0, 0, w, h); var rgbValues = Phaser.Color.hexToRGBArray(color); - var r = rgbValues[0], g = rgbValues[1], b = rgbValues[2]; + var r = rgbValues[0], + g = rgbValues[1], + b = rgbValues[2]; var pixelData = context.getImageData(0, 0, w, h); @@ -20267,7 +20374,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @constructor * @param game {Phaser.Game} A reference to the Phaser Game instance */ - PIXI.CanvasRenderer = function (game) { + PIXI.CanvasRenderer = function (game, config) { /** * @property {Phaser.Game} game - A reference to the Phaser Game instance. @@ -20279,10 +20386,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } /** - * The renderer objType. + * The renderer type. * * @property type - * @objType Number + * @type Number */ this.type = Phaser.CANVAS; @@ -20290,7 +20397,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The resolution of the canvas. * * @property resolution - * @objType Number + * @type Number */ this.resolution = game.resolution; @@ -20301,7 +20408,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Disable this by setting this to false. For example if your game has a canvas filling background image you often don't need this set. * * @property clearBeforeRender - * @objType Boolean + * @type Boolean * @default */ this.clearBeforeRender = game.clearBeforeRender; @@ -20310,7 +20417,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Whether the render view is transparent * * @property transparent - * @objType Boolean + * @type Boolean */ this.transparent = game.transparent; @@ -20318,7 +20425,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Whether the render view should be resized automatically * * @property autoResize - * @objType Boolean + * @type Boolean */ this.autoResize = false; @@ -20326,7 +20433,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The width of the canvas view * * @property width - * @objType Number + * @type Number * @default 800 */ this.width = game.width * this.resolution; @@ -20335,7 +20442,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The height of the canvas view * * @property height - * @objType Number + * @type Number * @default 600 */ this.height = game.height * this.resolution; @@ -20344,22 +20451,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The canvas element that everything is drawn to. * * @property view - * @objType HTMLCanvasElement + * @type HTMLCanvasElement */ this.view = game.canvas; /** * The canvas 2d context that everything is drawn with * @property context - * @objType CanvasRenderingContext2D + * @type CanvasRenderingContext2D */ - this.context = this.view.getContext("2d", {alpha: this.transparent}); + this.context = this.view.getContext('2d', {alpha: this.transparent}); + + if (!this.context) { + throw new Error('Failed to create a Canvas 2d context.'); + } /** * Boolean flag controlling canvas refresh. * * @property refresh - * @objType Boolean + * @type Boolean */ this.refresh = true; @@ -20367,21 +20478,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Internal var. * * @property count - * @objType Number + * @type Number */ this.count = 0; /** * Instance of a PIXI.CanvasMaskManager, handles masking when using the canvas renderer * @property CanvasMaskManager - * @objType CanvasMaskManager + * @type CanvasMaskManager */ this.maskManager = new PIXI.CanvasMaskManager(); /** * The render session is just a bunch of parameter used for rendering * @property renderSession - * @objType Object + * @type Object */ this.renderSession = { context: this.context, @@ -20393,7 +20504,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * If true Pixi will Math.floor() x/y values when rendering, stopping pixel interpolation. * Handy for crisp pixel art and speed on legacy devices. */ - roundPixels: false + roundPixels: config.roundPixels || false }; this.mapBlendModes(); @@ -20424,15 +20535,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.context.globalCompositeOperation = 'source-over'; if (navigator.isCocoonJS && this.view.screencanvas) { - this.context.fillStyle = "black"; + this.context.fillStyle = 'black'; this.context.clear(); } if (this.clearBeforeRender) { if (this.transparent) { this.context.clearRect(0, 0, this.width, this.height); - } - else if (root._bgColor) { + } else if (root._bgColor) { this.context.fillStyle = root._bgColor.rgba; this.context.fillRect(0, 0, this.width, this.height); } @@ -20442,7 +20552,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; - PIXI.CanvasRenderer.prototype.setTexturePriority = function (textureNameCollection) { + PIXI.CanvasRenderer.prototype.setTexturePriority = function () { // Does nothing on Canvas, but here to allow you to simply set // `game.renderer.setTexturePriority()` without having to worry about @@ -20489,8 +20599,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.view.height = this.height; if (this.autoResize) { - this.view.style.width = this.width / this.resolution + "px"; - this.view.style.height = this.height / this.resolution + "px"; + this.view.style.width = this.width / this.resolution + 'px'; + this.view.style.height = this.height / this.resolution + 'px'; } if (this.renderSession.smoothProperty) { @@ -20570,7 +20680,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The Resolution of the texture. * * @property resolution - * @objType Number + * @type Number */ this.resolution = resolution || 1; @@ -20578,7 +20688,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * [read-only] The width of the base texture set when the image has loaded * * @property width - * @objType Number + * @type Number * @readOnly */ this.width = 100; @@ -20587,7 +20697,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * [read-only] The height of the base texture set when the image has loaded * * @property height - * @objType Number + * @type Number * @readOnly */ this.height = 100; @@ -20596,7 +20706,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The scale mode to apply when scaling this texture * * @property scaleMode - * @objType {Number} + * @type {Number} * @default PIXI.scaleModes.LINEAR */ this.scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; @@ -20605,7 +20715,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * [read-only] Set to true once the base texture has loaded * * @property hasLoaded - * @objType Boolean + * @type Boolean * @readOnly */ this.hasLoaded = false; @@ -20614,7 +20724,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The image source that is used to create the texture. * * @property source - * @objType Image + * @type Image */ this.source = source; @@ -20622,7 +20732,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Controls if RGB channels should be pre-multiplied by Alpha (WebGL only) * * @property premultipliedAlpha - * @objType Boolean + * @type Boolean * @default true */ this.premultipliedAlpha = true; @@ -20631,7 +20741,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @property _glTextures - * @objType Array + * @type Array * @private */ this._glTextures = []; @@ -20641,20 +20751,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Also the texture must be a power of two size to work * * @property mipmap - * @objType {Boolean} + * @type {Boolean} */ this.mipmap = false; /** * The multi texture batching index number. * @property textureIndex - * @objType Number + * @type Number */ this.textureIndex = 0; /** * @property _dirty - * @objType Array + * @type Array * @private */ this._dirty = [true, true, true, true]; @@ -20677,13 +20787,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * that has children that you do want to render, without causing a batch flush in the process. * * @property skipRender - * @objType Boolean + * @type Boolean */ this.skipRender = false; /** * @property _powerOf2 - * @objType Boolean + * @type Boolean * @private */ this._powerOf2 = false; @@ -20723,17 +20833,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.unloadFromGPU(); }; - /** - * Changes the source image of the texture - * - * @method PIXI.BaseTexture#updateSourceImage - * @param newSrc {String} the path of the image - * @deprecated This method is deprecated. Please use Phaser.Sprite.loadTexture instead. - */ - PIXI.BaseTexture.prototype.updateSourceImage = function (newSrc) { - console.warn("PIXI.BaseTexture.updateSourceImage is deprecated. Use Phaser.Sprite.loadTexture instead."); - }; - /** * Sets all glTextures to be dirty. * @@ -20803,7 +20902,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * If `true` then {@link PIXI.Texture#setFrame} will no longer throw an error if the texture dimensions are incorrect. * Instead {@link PIXI.Texture#valid} will be set to `false` (#1556) * - * @objType {boolean} + * @type {boolean} */ PIXI.TextureSilentFail = false; @@ -20823,7 +20922,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Does this Texture have any frame data assigned to it? * * @property noFrame - * @objType Boolean + * @type Boolean */ this.noFrame = false; @@ -20840,7 +20939,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The base texture that this texture uses. * * @property baseTexture - * @objType BaseTexture + * @type BaseTexture */ this.baseTexture = baseTexture; @@ -20848,7 +20947,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The frame specifies the region of the base texture that this texture uses * * @property frame - * @objType Rectangle + * @type Rectangle */ this.frame = frame; @@ -20856,7 +20955,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The texture trim data. * * @property trim - * @objType Rectangle + * @type Rectangle */ this.trim = trim; @@ -20864,7 +20963,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * This will let the renderer know if the texture is valid. If it's not then it cannot be rendered. * * @property valid - * @objType Boolean + * @type Boolean */ this.valid = false; @@ -20872,7 +20971,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Is this a tiling texture? As used by the likes of a TilingSprite. * * @property isTiling - * @objType Boolean + * @type Boolean */ this.isTiling = false; @@ -20880,7 +20979,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * This will let a renderer know that a texture has been updated (used mainly for webGL uv updates) * * @property requiresUpdate - * @objType Boolean + * @type Boolean */ this.requiresUpdate = false; @@ -20888,7 +20987,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * This will let a renderer know that a tinted parent has updated its texture. * * @property requiresReTint - * @objType Boolean + * @type Boolean */ this.requiresReTint = false; @@ -20896,7 +20995,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The WebGL UV data cache. * * @property _uvs - * @objType Object + * @type Object * @private */ this._uvs = null; @@ -20905,7 +21004,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The width of the Texture in pixels. * * @property width - * @objType Number + * @type Number */ this.width = 0; @@ -20913,7 +21012,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The height of the Texture in pixels. * * @property height - * @objType Number + * @type Number */ this.height = 0; @@ -20922,7 +21021,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * irrespective of the actual frame size or placement (which can be influenced by trimmed texture atlases) * * @property crop - * @objType Rectangle + * @type Rectangle */ this.crop = crop || new PIXI.Rectangle(0, 0, 1, 1); @@ -20932,12 +21031,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Sprite rotation. * * @property rotated - * @objType Boolean + * @type Boolean */ this.rotated = false; if (baseTexture.hasLoaded) { - if (this.noFrame) frame = new PIXI.Rectangle(0, 0, baseTexture.width, baseTexture.height); + if (this.noFrame) { + frame = new PIXI.Rectangle(0, 0, baseTexture.width, baseTexture.height); + } this.setFrame(frame); } @@ -20968,7 +21069,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param destroyBase {Boolean} Whether to destroy the base texture as well */ PIXI.Texture.prototype.destroy = function (destroyBase) { - if (destroyBase) this.baseTexture.destroy(); + if (destroyBase) { + this.baseTexture.destroy(); + } this.valid = false; }; @@ -21009,7 +21112,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.frame.height = this.trim.height; } - if (this.valid) this._updateUvs(); + if (this.valid) { + this._updateUvs(); + } }; @@ -21020,7 +21125,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @private */ PIXI.Texture.prototype._updateUvs = function () { - if (!this._uvs) this._uvs = new PIXI.TextureUvs(); + if (!this._uvs) { + this._uvs = new PIXI.TextureUvs(); + } var frame = this.crop; var tw = this.baseTexture.width; @@ -21136,474 +21243,474 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @namespace Phaser */ - var Phaser = Phaser || { // jshint ignore:line + var Phaser = Phaser || { // jshint ignore:line /** * The Phaser version number. * @constant Phaser.VERSION - * @objType {string} + * @type {string} */ - VERSION: '2.9.1', + VERSION: '2.11.1', /** * An array of Phaser game instances. * @constant Phaser.GAMES - * @objType {array} + * @type {array} */ GAMES: [], /** * AUTO renderer - picks between WebGL or Canvas based on device. * @constant Phaser.AUTO - * @objType {integer} + * @type {integer} */ AUTO: 0, /** * Canvas Renderer. * @constant Phaser.CANVAS - * @objType {integer} + * @type {integer} */ CANVAS: 1, /** * WebGL Renderer. * @constant Phaser.WEBGL - * @objType {integer} + * @type {integer} */ WEBGL: 2, /** * Headless renderer (not visual output) * @constant Phaser.HEADLESS - * @objType {integer} + * @type {integer} */ HEADLESS: 3, /** * WebGL Renderer with MultiTexture support enabled. * @constant Phaser.WEBGL_MULTI - * @objType {integer} + * @type {integer} */ WEBGL_MULTI: 4, /** * Direction constant. * @constant Phaser.NONE - * @objType {integer} + * @type {integer} */ NONE: 0, /** * Direction constant. * @constant Phaser.LEFT - * @objType {integer} + * @type {integer} */ LEFT: 1, /** * Direction constant. * @constant Phaser.RIGHT - * @objType {integer} + * @type {integer} */ RIGHT: 2, /** * Direction constant. * @constant Phaser.UP - * @objType {integer} + * @type {integer} */ UP: 3, /** * Direction constant. * @constant Phaser.DOWN - * @objType {integer} + * @type {integer} */ DOWN: 4, /** - * Game Object objType. + * Game Object type. * @constant Phaser.SPRITE - * @objType {integer} + * @type {integer} */ SPRITE: 0, /** - * Game Object objType. + * Game Object type. * @constant Phaser.BUTTON - * @objType {integer} + * @type {integer} */ BUTTON: 1, /** - * Game Object objType. + * Game Object type. * @constant Phaser.IMAGE - * @objType {integer} + * @type {integer} */ IMAGE: 2, /** - * Game Object objType. + * Game Object type. * @constant Phaser.GRAPHICS - * @objType {integer} + * @type {integer} */ GRAPHICS: 3, /** - * Game Object objType. + * Game Object type. * @constant Phaser.TEXT - * @objType {integer} + * @type {integer} */ TEXT: 4, /** - * Game Object objType. + * Game Object type. * @constant Phaser.TILESPRITE - * @objType {integer} + * @type {integer} */ TILESPRITE: 5, /** - * Game Object objType. + * Game Object type. * @constant Phaser.BITMAPTEXT - * @objType {integer} + * @type {integer} */ BITMAPTEXT: 6, /** - * Game Object objType. + * Game Object type. * @constant Phaser.GROUP - * @objType {integer} + * @type {integer} */ GROUP: 7, /** - * Game Object objType. + * Game Object type. * @constant Phaser.RENDERTEXTURE - * @objType {integer} + * @type {integer} */ RENDERTEXTURE: 8, /** - * Game Object objType. + * Game Object type. * @constant Phaser.TILEMAP - * @objType {integer} + * @type {integer} */ TILEMAP: 9, /** - * Game Object objType. + * Game Object type. * @constant Phaser.TILEMAPLAYER - * @objType {integer} + * @type {integer} */ TILEMAPLAYER: 10, /** - * Game Object objType. + * Game Object type. * @constant Phaser.EMITTER - * @objType {integer} + * @type {integer} */ EMITTER: 11, /** - * Game Object objType. + * Game Object type. * @constant Phaser.POLYGON - * @objType {integer} + * @type {integer} */ POLYGON: 12, /** - * Game Object objType. + * Game Object type. * @constant Phaser.BITMAPDATA - * @objType {integer} + * @type {integer} */ BITMAPDATA: 13, /** - * Game Object objType. + * Game Object type. * @constant Phaser.CANVAS_FILTER - * @objType {integer} + * @type {integer} */ CANVAS_FILTER: 14, /** - * Game Object objType. + * Game Object type. * @constant Phaser.WEBGL_FILTER - * @objType {integer} + * @type {integer} */ WEBGL_FILTER: 15, /** - * Game Object objType. + * Game Object type. * @constant Phaser.ELLIPSE - * @objType {integer} + * @type {integer} */ ELLIPSE: 16, /** - * Game Object objType. + * Game Object type. * @constant Phaser.SPRITEBATCH - * @objType {integer} + * @type {integer} */ SPRITEBATCH: 17, /** - * Game Object objType. + * Game Object type. * @constant Phaser.RETROFONT - * @objType {integer} + * @type {integer} */ RETROFONT: 18, /** - * Game Object objType. + * Game Object type. * @constant Phaser.POINTER - * @objType {integer} + * @type {integer} */ POINTER: 19, /** - * Game Object objType. + * Game Object type. * @constant Phaser.ROPE - * @objType {integer} + * @type {integer} */ ROPE: 20, /** - * Game Object objType. + * Game Object type. * @constant Phaser.CIRCLE - * @objType {integer} + * @type {integer} */ CIRCLE: 21, /** - * Game Object objType. + * Game Object type. * @constant Phaser.RECTANGLE - * @objType {integer} + * @type {integer} */ RECTANGLE: 22, /** - * Game Object objType. + * Game Object type. * @constant Phaser.LINE - * @objType {integer} + * @type {integer} */ LINE: 23, /** - * Game Object objType. + * Game Object type. * @constant Phaser.MATRIX - * @objType {integer} + * @type {integer} */ MATRIX: 24, /** - * Game Object objType. + * Game Object type. * @constant Phaser.POINT - * @objType {integer} + * @type {integer} */ POINT: 25, /** - * Game Object objType. + * Game Object type. * @constant Phaser.ROUNDEDRECTANGLE - * @objType {integer} + * @type {integer} */ ROUNDEDRECTANGLE: 26, /** - * Game Object objType. + * Game Object type. * @constant Phaser.CREATURE - * @objType {integer} + * @type {integer} */ CREATURE: 27, /** - * Game Object objType. + * Game Object type. * @constant Phaser.VIDEO - * @objType {integer} + * @type {integer} */ VIDEO: 28, /** - * Game Object objType. + * Game Object type. * @constant Phaser.PENDING_ATLAS - * @objType {integer} + * @type {integer} */ PENDING_ATLAS: -1, /** * A horizontal orientation * @constant Phaser.HORIZONTAL - * @objType {integer} + * @type {integer} */ HORIZONTAL: 0, /** * A vertical orientation * @constant Phaser.VERTICAL - * @objType {integer} + * @type {integer} */ VERTICAL: 1, /** * A landscape orientation * @constant Phaser.LANDSCAPE - * @objType {integer} + * @type {integer} */ LANDSCAPE: 0, /** * A portrait orientation * @constant Phaser.PORTRAIT - * @objType {integer} + * @type {integer} */ PORTRAIT: 1, /** * The Angle (in degrees) a Game Object needs to be set to in order to face up. * @constant Phaser.ANGLE_UP - * @objType {integer} + * @type {integer} */ ANGLE_UP: 270, /** * The Angle (in degrees) a Game Object needs to be set to in order to face down. * @constant Phaser.ANGLE_DOWN - * @objType {integer} + * @type {integer} */ ANGLE_DOWN: 90, /** * The Angle (in degrees) a Game Object needs to be set to in order to face left. * @constant Phaser.ANGLE_LEFT - * @objType {integer} + * @type {integer} */ ANGLE_LEFT: 180, /** * The Angle (in degrees) a Game Object needs to be set to in order to face right. * @constant Phaser.ANGLE_RIGHT - * @objType {integer} + * @type {integer} */ ANGLE_RIGHT: 0, /** * The Angle (in degrees) a Game Object needs to be set to in order to face north east. * @constant Phaser.ANGLE_NORTH_EAST - * @objType {integer} + * @type {integer} */ ANGLE_NORTH_EAST: 315, /** * The Angle (in degrees) a Game Object needs to be set to in order to face north west. * @constant Phaser.ANGLE_NORTH_WEST - * @objType {integer} + * @type {integer} */ ANGLE_NORTH_WEST: 225, /** * The Angle (in degrees) a Game Object needs to be set to in order to face south east. * @constant Phaser.ANGLE_SOUTH_EAST - * @objType {integer} + * @type {integer} */ ANGLE_SOUTH_EAST: 45, /** * The Angle (in degrees) a Game Object needs to be set to in order to face south west. * @constant Phaser.ANGLE_SOUTH_WEST - * @objType {integer} + * @type {integer} */ ANGLE_SOUTH_WEST: 135, /** * A constant representing a top-left alignment or position. * @constant Phaser.TOP_LEFT - * @objType {integer} + * @type {integer} */ TOP_LEFT: 0, /** * A constant representing a top-center alignment or position. * @constant Phaser.TOP_CENTER - * @objType {integer} + * @type {integer} */ TOP_CENTER: 1, /** * A constant representing a top-right alignment or position. * @constant Phaser.TOP_RIGHT - * @objType {integer} + * @type {integer} */ TOP_RIGHT: 2, /** * A constant representing a left-top alignment or position. * @constant Phaser.Phaser.LEFT_TOP - * @objType {integer} + * @type {integer} */ LEFT_TOP: 3, /** * A constant representing a left-center alignment or position. * @constant Phaser.LEFT_TOP - * @objType {integer} + * @type {integer} */ LEFT_CENTER: 4, /** * A constant representing a left-bottom alignment or position. * @constant Phaser.LEFT_BOTTOM - * @objType {integer} + * @type {integer} */ LEFT_BOTTOM: 5, /** * A constant representing a center alignment or position. * @constant Phaser.CENTER - * @objType {integer} + * @type {integer} */ CENTER: 6, /** * A constant representing a right-top alignment or position. * @constant Phaser.RIGHT_TOP - * @objType {integer} + * @type {integer} */ RIGHT_TOP: 7, /** * A constant representing a right-center alignment or position. * @constant Phaser.RIGHT_CENTER - * @objType {integer} + * @type {integer} */ RIGHT_CENTER: 8, /** * A constant representing a right-bottom alignment or position. * @constant Phaser.RIGHT_BOTTOM - * @objType {integer} + * @type {integer} */ RIGHT_BOTTOM: 9, /** * A constant representing a bottom-left alignment or position. * @constant Phaser.BOTTOM_LEFT - * @objType {integer} + * @type {integer} */ BOTTOM_LEFT: 10, /** * A constant representing a bottom-center alignment or position. * @constant Phaser.BOTTOM_CENTER - * @objType {integer} + * @type {integer} */ BOTTOM_CENTER: 11, /** * A constant representing a bottom-right alignment or position. * @constant Phaser.BOTTOM_RIGHT - * @objType {integer} + * @type {integer} */ BOTTOM_RIGHT: 12, @@ -21682,6 +21789,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ + if (typeof AudioBufferSourceNode !== 'undefined') { + if (!AudioBufferSourceNode.prototype.start) { + AudioBufferSourceNode.prototype.start = AudioBufferSourceNode.prototype.noteGrainOn; + } + if (!AudioBufferSourceNode.prototype.stop) { + AudioBufferSourceNode.prototype.stop = AudioBufferSourceNode.prototype.noteOff; + } + } + // ES6 Math.trunc - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc if (!Math.trunc) { Math.trunc = function trunc(x) { @@ -21701,7 +21817,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return function (thisArg) { - var target = this, boundArgs = slice.call(arguments, 1); + var target = this, + boundArgs = slice.call(arguments, 1); if (typeof target !== 'function') { throw new TypeError(); @@ -21719,7 +21836,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!(this instanceof F)) { /* jshint supernew: true */ - return new F; + return new F(); } })(target.prototype); @@ -21742,8 +21859,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach */ if (!Array.prototype.forEach) { - Array.prototype.forEach = function (fun /*, thisArg */) { - "use strict"; + Array.prototype.forEach = function (fun /* , thisArg */) { + 'use strict'; if (this === void 0 || this === null) { throw new TypeError(); @@ -21752,7 +21869,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var t = Object(this); var len = t.length >>> 0; - if (typeof fun !== "function") { + if (typeof fun !== 'function') { throw new TypeError(); } @@ -21771,21 +21888,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Source: http://www.html5gamedevs.com/topic/5988-phaser-12-ie9/ * Cameron Foale (http://www.kibibu.com) */ - if (typeof window.Uint32Array !== "function" && typeof window.Uint32Array !== "object") { + if (typeof window.Uint32Array !== 'function' && typeof window.Uint32Array !== 'object') { var CheapArray = function (type) { - var proto = new Array(); // jshint ignore:line + /* eslint-disable no-array-constructor */ + var proto = new Array(); + /* eslint-enable no-array-constructor */ window[type] = function (arg) { - if (typeof(arg) === "number") { + if (typeof (arg) === 'number') { Array.call(this, arg); this.length = arg; for (var i = 0; i < this.length; i++) { this[i] = 0; } - } - else { + } else { Array.call(this, arg.length); this.length = arg.length; @@ -21823,10 +21941,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ if (!Object.assign) { - /* jshint -W098 */ // We include `varArgs` (unused) to ensure Object.assign.length === 2 - Object.assign = function (target, varArgs) { - /* jshint +W098 */ + Object.assign = function (target, varArgs) // eslint-disable-line no-unused-vars + { 'use strict'; if (target == null) { // TypeError if undefined or null throw new TypeError('Cannot convert undefined or null to object'); @@ -21863,6 +21980,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Utils = { + defaults: function (target, defaults) { + var keys = Object.keys(defaults); + + for (var i = 0, len = keys.length; i < len; i++) { + var key = keys[i]; + + if (target[key] === undefined) { + target[key] = defaults[key]; + } + } + + return target; + }, + /** * Takes the given string and reverses it, returning the reversed string. * For example if given the string `Atari 520ST` it would return `TS025 iratA`. @@ -21882,30 +22013,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * @method Phaser.Utils.getProperty * @param {object} obj - The object to traverse. - * @param {string} prop - The property whose value will be returned. + * @param {string} name - The property name, or a series of names separated by `.` (for nested properties). * @return {any} - The value of the property or `undefined` if the property isn't found. */ - getProperty: function (obj, prop) { + getProperty: function (obj, name) { - var parts = prop.split('.'), - len = parts.length, - i = 0, - val = obj; + var parts = name.split('.'); - while (i < len) { - var key = parts[i]; - - if (val != null) { - val = val[key]; - i++; - } - else { - return undefined; - } + switch (parts.length) { + case 1: + return obj[name]; + case 2: + return obj[parts[0]][parts[1]]; + case 3: + return obj[parts[0]][parts[1]][parts[2]]; + case 4: + return obj[parts[0]][parts[1]][parts[2]][parts[3]]; + default: + return this._getProperty(obj, name); } - return val; - }, /** @@ -21970,6 +22097,37 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } }, + /** + * Gets an object's property by string. + * + * @private + * @method Phaser.Utils._getProperty + * @param {object} obj - The object to traverse. + * @param {string} name - The property whose value will be returned. + * @return {any} - The value of the property or `undefined` if the property isn't found. + */ + _getProperty: function (obj, name) { + + var parts = name.split('.'), + len = parts.length, + i = 0, + val = obj; + + while (i < len) { + var key = parts[i]; + + if (val != null) { + val = val[key]; + i++; + } else { + return undefined; + } + } + + return val; + + }, + /** * Sets an object's property by name and value. * @@ -21990,8 +22148,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (len === 1) { obj[name] = value; - } - else { + } else { while (i < (len - 1)) { currentObj = currentObj[key]; i++; @@ -22054,16 +22211,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (dimension === 0) { px = window.innerWidth * f; - } - else { + } else { px = window.innerHeight * f; } - } - else { + } else { px = parseInt(size, 10); } - } - else { + } else { px = size; } @@ -22149,7 +22303,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // - Any object or value whose internal [[Class]] property is not "[object Object]" // - DOM nodes // - window - if (typeof(obj) !== "object" || obj.nodeType || obj === obj.window) { + if (typeof (obj) !== 'object' || obj.nodeType || obj === obj.window) { return false; } @@ -22158,7 +22312,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // the "constructor" property of certain host objects, ie. |window.location| // https://bugzilla.mozilla.org/show_bug.cgi?id=814622 try { - if (obj.constructor && !({}).hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf")) { + if (obj.constructor && !({}).hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf')) { return false; } } catch (e) { @@ -22187,9 +22341,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ deep = false; // Handle a deep copy situation - if (typeof target === "boolean") { + if (typeof target === 'boolean') { deep = target; target = arguments[1] || {}; + // skip the boolean and the target i = 2; } @@ -22218,8 +22373,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (copyIsArray) { copyIsArray = false; clone = src && Array.isArray(src) ? src : []; - } - else { + } else { clone = src && Phaser.Utils.isPlainObject(src) ? src : {}; } @@ -22227,8 +22381,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ target[name] = Phaser.Utils.extend(deep, clone, copy); // Don't bring in undefined values - } - else if (copy !== undefined) { + } else if (copy !== undefined) { target[name] = copy; } } @@ -22267,21 +22420,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!replace && (key in target)) { // Not overwriting existing property continue; - } - else { - if (value && - (typeof value.get === 'function' || typeof value.set === 'function')) { - // Special case for classes like Phaser.Point which has a 'set' function! - if (typeof value.clone === 'function') { - target[key] = value.clone(); - } - else { - Object.defineProperty(target, key, value); - } - } - else { - target[key] = value; + } else if (value && + (typeof value.get === 'function' || typeof value.set === 'function')) { + // Special case for classes like Phaser.Point which has a 'set' function! + if (typeof value.clone === 'function') { + target[key] = value.clone(); + } else { + Object.defineProperty(target, key, value); } + } else { + target[key] = value; } } @@ -22298,7 +22446,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ mixin: function (from, to) { - if (!from || typeof (from) !== "object") { + if (!from || typeof (from) !== 'object') { return to; } @@ -22311,15 +22459,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var type = typeof (from[key]); - if (!from[key] || type !== "object") { + if (!from[key] || type !== 'object') { to[key] = from[key]; - } - else { + } else { // Clone sub-object if (typeof (to[key]) === type) { to[key] = Phaser.Utils.mixin(from[key], to[key]); - } - else { + } else { to[key] = Phaser.Utils.mixin(from[key], new o.constructor()); } } @@ -22380,7 +22526,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.CIRCLE; @@ -22505,15 +22651,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Returns a new Circle object with the same values for the x, y, width, and height properties as this Circle object. * @method Phaser.Circle#clone - * @param {Phaser.Circle} output - Optional Circle object. If given the values will be set into the object, otherwise a brand new Circle object will be created and returned. + * @param {Phaser.Circle} [output] - Optional Circle object. If given the values will be set into the object, otherwise a brand new Circle object will be created and returned. * @return {Phaser.Circle} The cloned Circle object. */ clone: function (output) { if (output === undefined || output === null) { output = new Phaser.Circle(this.x, this.y, this.diameter); - } - else { + } else { output.setTo(this.x, this.y, this.diameter); } @@ -22626,7 +22771,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @return {string} a string representation of the instance. */ toString: function () { - return "[{Phaser.Circle (x=" + this.x + " y=" + this.y + " diameter=" + this.diameter + " radius=" + this.radius + ")}]"; + return '[{Phaser.Circle (x=' + this.x + ' y=' + this.y + ' diameter=' + this.diameter + ' radius=' + this.radius + ')}]'; } }; @@ -22639,7 +22784,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#diameter * @property {number} diameter - Gets or sets the diameter of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "diameter", { + Object.defineProperty(Phaser.Circle.prototype, 'diameter', { get: function () { return this._diameter; @@ -22660,7 +22805,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#radius * @property {number} radius - Gets or sets the radius of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "radius", { + Object.defineProperty(Phaser.Circle.prototype, 'radius', { get: function () { return this._radius; @@ -22682,7 +22827,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#left * @propety {number} left - Gets or sets the value of the leftmost point of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "left", { + Object.defineProperty(Phaser.Circle.prototype, 'left', { get: function () { return this.x - this._radius; @@ -22693,8 +22838,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value > this.x) { this._radius = 0; this._diameter = 0; - } - else { + } else { this.radius = this.x - value; } @@ -22707,7 +22851,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#right * @property {number} right - Gets or sets the value of the rightmost point of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "right", { + Object.defineProperty(Phaser.Circle.prototype, 'right', { get: function () { return this.x + this._radius; @@ -22718,8 +22862,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value < this.x) { this._radius = 0; this._diameter = 0; - } - else { + } else { this.radius = value - this.x; } @@ -22732,7 +22875,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#top * @property {number} top - Gets or sets the top of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "top", { + Object.defineProperty(Phaser.Circle.prototype, 'top', { get: function () { return this.y - this._radius; @@ -22743,8 +22886,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value > this.y) { this._radius = 0; this._diameter = 0; - } - else { + } else { this.radius = this.y - value; } @@ -22757,7 +22899,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#bottom * @property {number} bottom - Gets or sets the bottom of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "bottom", { + Object.defineProperty(Phaser.Circle.prototype, 'bottom', { get: function () { return this.y + this._radius; @@ -22768,8 +22910,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value < this.y) { this._radius = 0; this._diameter = 0; - } - else { + } else { this.radius = value - this.y; } @@ -22783,14 +22924,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} area - The area of this circle. * @readonly */ - Object.defineProperty(Phaser.Circle.prototype, "area", { + Object.defineProperty(Phaser.Circle.prototype, 'area', { get: function () { if (this._radius > 0) { return Math.PI * this._radius * this._radius; - } - else { + } else { return 0; } @@ -22804,7 +22944,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Circle#empty * @property {boolean} empty - Gets or sets the empty state of the circle. */ - Object.defineProperty(Phaser.Circle.prototype, "empty", { + Object.defineProperty(Phaser.Circle.prototype, 'empty', { get: function () { return (this._diameter === 0); @@ -22836,8 +22976,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var dy = (a.y - y) * (a.y - y); return (dx + dy) <= (a.radius * a.radius); - } - else { + } else { return false; } @@ -22965,14 +23104,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (p0Exists && p1Exists) { return returnPoints ? [p0, p1] : true; - } - else if (p0Exists) { + } else if (p0Exists) { return returnPoints ? [p0] : true; - } - else if (p1Exists) { + } else if (p1Exists) { return returnPoints ? [p1] : true; - } - else { + } else { return returnPoints ? [] : false; } }; @@ -23026,7 +23162,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.height = height; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.ELLIPSE; @@ -23100,15 +23236,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Returns a new Ellipse object with the same values for the x, y, width, and height properties as this Ellipse object. * @method Phaser.Ellipse#clone - * @param {Phaser.Ellipse} output - Optional Ellipse object. If given the values will be set into the object, otherwise a brand new Ellipse object will be created and returned. + * @param {Phaser.Ellipse} [output] - Optional Ellipse object. If given the values will be set into the object, otherwise a brand new Ellipse object will be created and returned. * @return {Phaser.Ellipse} The cloned Ellipse object. */ clone: function (output) { if (output === undefined || output === null) { output = new Phaser.Ellipse(this.x, this.y, this.width, this.height); - } - else { + } else { output.setTo(this.x, this.y, this.width, this.height); } @@ -23145,13 +23280,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } var p = Math.random() * Math.PI * 2; - var r = Math.random(); + var r = Math.sqrt(Math.random()); - out.x = Math.sqrt(r) * Math.cos(p); - out.y = Math.sqrt(r) * Math.sin(p); - - out.x = this.x + (out.x * this.width / 2.0); - out.y = this.y + (out.y * this.height / 2.0); + out.x = this.centerX + 0.5 * r * Math.cos(p) * this.width; + out.y = this.centerY + 0.5 * r * Math.sin(p) * this.height; return out; @@ -23163,7 +23295,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @return {string} A string representation of the instance. */ toString: function () { - return "[{Phaser.Ellipse (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + ")}]"; + return '[{Phaser.Ellipse (x=' + this.x + ' y=' + this.y + ' width=' + this.width + ' height=' + this.height + ')}]'; } }; @@ -23175,7 +23307,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Ellipse#left * @propety {number} left - Gets or sets the value of the leftmost point of the ellipse. */ - Object.defineProperty(Phaser.Ellipse.prototype, "left", { + Object.defineProperty(Phaser.Ellipse.prototype, 'left', { get: function () { return this.x; @@ -23194,7 +23326,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Ellipse#right * @property {number} right - Gets or sets the value of the rightmost point of the ellipse. */ - Object.defineProperty(Phaser.Ellipse.prototype, "right", { + Object.defineProperty(Phaser.Ellipse.prototype, 'right', { get: function () { return this.x + this.width; @@ -23204,8 +23336,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value < this.x) { this.width = 0; - } - else { + } else { this.width = value - this.x; } } @@ -23217,7 +23348,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Ellipse#top * @property {number} top - Gets or sets the top of the ellipse. */ - Object.defineProperty(Phaser.Ellipse.prototype, "top", { + Object.defineProperty(Phaser.Ellipse.prototype, 'top', { get: function () { return this.y; @@ -23234,7 +23365,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Ellipse#bottom * @property {number} bottom - Gets or sets the bottom of the ellipse. */ - Object.defineProperty(Phaser.Ellipse.prototype, "bottom", { + Object.defineProperty(Phaser.Ellipse.prototype, 'bottom', { get: function () { return this.y + this.height; @@ -23244,21 +23375,48 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value < this.y) { this.height = 0; - } - else { + } else { this.height = value - this.y; } } }); + /** + * The x coordinate of the center of the Ellipse. + * @name Phaser.Ellipse#centerX + * @property {number} centerX + * @readonly + */ + Object.defineProperty(Phaser.Ellipse.prototype, 'centerX', { + + get: function () { + return this.x + 0.5 * this.width; + } + + }); + + /** + * The y coordinate of the center of the Ellipse. + * @name Phaser.Ellipse#centerY + * @property {number} centerY + * @readonly + */ + Object.defineProperty(Phaser.Ellipse.prototype, 'centerY', { + + get: function () { + return this.y + 0.5 * this.height; + } + + }); + /** * Determines whether or not this Ellipse object is empty. Will return a value of true if the Ellipse objects dimensions are less than or equal to 0; otherwise false. * If set to true it will reset all of the Ellipse objects properties to 0. An Ellipse object is empty if its width or height is less than or equal to 0. * @name Phaser.Ellipse#empty * @property {boolean} empty - Gets or sets the empty state of the ellipse. */ - Object.defineProperty(Phaser.Ellipse.prototype, "empty", { + Object.defineProperty(Phaser.Ellipse.prototype, 'empty', { get: function () { return (this.width === 0 || this.height === 0); @@ -23329,14 +23487,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (p0Exists && p1Exists) { return returnPoints ? [p0, p1] : true; - } - else if (p0Exists) { + } else if (p0Exists) { return returnPoints ? [p0] : true; - } - else if (p1Exists) { + } else if (p1Exists) { return returnPoints ? [p1] : true; - } - else { + } else { return returnPoints ? [] : false; } }; @@ -23379,7 +23534,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.end = new Phaser.Point(x2, y2); /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.LINE; @@ -23407,6 +23562,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, + /** + * Sets the line to match the x/y coordinates of the two given points. + * + * @param {any} start - A {@link Phaser.Point} or point-like object. + * @param {any} end - A {@link Phaser.Point} or point-like object. + * @return {Phaser.Line} - This line object. + */ + fromPoints: function (start, end) { + + this.setTo(start.x, start.y, end.x, end.y); + + return this; + + }, + /** * Sets the line to match the x/y coordinates of the two given sprites. * Can optionally be calculated from their center coordinates. @@ -23427,7 +23597,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this.setTo(startSprite.centerX, startSprite.centerY, endSprite.centerX, endSprite.centerY); } - return this.setTo(startSprite.x, startSprite.y, endSprite.x, endSprite.y); + return this.fromPoints(startSprite, endSprite); }, @@ -23690,15 +23860,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Returns a new Line object with the same values for the start and end properties as this Line object. * @method Phaser.Line#clone - * @param {Phaser.Line} output - Optional Line object. If given the values will be set into the object, otherwise a brand new Line object will be created and returned. + * @param {Phaser.Line} [output] - Optional Line object. If given the values will be set into the object, otherwise a brand new Line object will be created and returned. * @return {Phaser.Line} The cloned Line object. */ clone: function (output) { if (output === undefined || output === null) { output = new Phaser.Line(this.start.x, this.start.y, this.end.x, this.end.y); - } - else { + } else { output.setTo(this.start.x, this.start.y, this.end.x, this.end.y); } @@ -23713,7 +23882,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} length - Gets the length of the line segment. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "length", { + Object.defineProperty(Phaser.Line.prototype, 'length', { get: function () { return Math.sqrt((this.end.x - this.start.x) * (this.end.x - this.start.x) + (this.end.y - this.start.y) * (this.end.y - this.start.y)); @@ -23726,10 +23895,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} angle - Gets the angle of the line in radians. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "angle", { + Object.defineProperty(Phaser.Line.prototype, 'angle', { get: function () { - return Math.atan2(this.end.y - this.start.y, this.end.x - this.start.x); + return Phaser.Point.angle(this.end, this.start); } }); @@ -23739,7 +23908,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} slope - Gets the slope of the line (y/x). * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "slope", { + Object.defineProperty(Phaser.Line.prototype, 'slope', { get: function () { return (this.end.y - this.start.y) / (this.end.x - this.start.x); @@ -23752,7 +23921,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} perpSlope - Gets the perpendicular slope of the line (x/y). * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "perpSlope", { + Object.defineProperty(Phaser.Line.prototype, 'perpSlope', { get: function () { return -((this.end.x - this.start.x) / (this.end.y - this.start.y)); @@ -23765,7 +23934,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} x - Gets the x coordinate of the top left of the bounds around this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "x", { + Object.defineProperty(Phaser.Line.prototype, 'x', { get: function () { return Math.min(this.start.x, this.end.x); @@ -23778,7 +23947,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} y - Gets the y coordinate of the top left of the bounds around this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "y", { + Object.defineProperty(Phaser.Line.prototype, 'y', { get: function () { return Math.min(this.start.y, this.end.y); @@ -23791,7 +23960,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} left - Gets the left-most point of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "left", { + Object.defineProperty(Phaser.Line.prototype, 'left', { get: function () { return Math.min(this.start.x, this.end.x); @@ -23804,7 +23973,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} right - Gets the right-most point of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "right", { + Object.defineProperty(Phaser.Line.prototype, 'right', { get: function () { return Math.max(this.start.x, this.end.x); @@ -23817,7 +23986,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} top - Gets the top-most point of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "top", { + Object.defineProperty(Phaser.Line.prototype, 'top', { get: function () { return Math.min(this.start.y, this.end.y); @@ -23830,7 +23999,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} bottom - Gets the bottom-most point of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "bottom", { + Object.defineProperty(Phaser.Line.prototype, 'bottom', { get: function () { return Math.max(this.start.y, this.end.y); @@ -23843,7 +24012,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} width - Gets the width of this bounds of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "width", { + Object.defineProperty(Phaser.Line.prototype, 'width', { get: function () { return Math.abs(this.start.x - this.end.x); @@ -23856,7 +24025,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} height - Gets the height of this bounds of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "height", { + Object.defineProperty(Phaser.Line.prototype, 'height', { get: function () { return Math.abs(this.start.y - this.end.y); @@ -23869,7 +24038,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} normalX - Gets the x component of the left-hand normal of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "normalX", { + Object.defineProperty(Phaser.Line.prototype, 'normalX', { get: function () { return Math.cos(this.angle - 1.5707963267948966); @@ -23882,7 +24051,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} normalY - Gets the y component of the left-hand normal of this line. * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "normalY", { + Object.defineProperty(Phaser.Line.prototype, 'normalY', { get: function () { return Math.sin(this.angle - 1.5707963267948966); @@ -23895,7 +24064,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} normalAngle - Gets the angle in radians of the normal of this line (line.angle - 90 degrees.) * @readonly */ - Object.defineProperty(Phaser.Line.prototype, "normalAngle", { + Object.defineProperty(Phaser.Line.prototype, 'normalAngle', { get: function () { return Phaser.Math.wrap(this.angle - 1.5707963267948966, -Math.PI, Math.PI); @@ -23949,8 +24118,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) { return result; - } - else { + } else { return null; } } @@ -24032,8 +24200,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (t > by1 && t <= by2) { return true; } - } - else if (x1 > bx2 && x2 <= bx2) { + } else if (x1 > bx2 && x2 <= bx2) { // Right edge t = y1 + (y2 - y1) * (bx2 - x1) / (x2 - x1); @@ -24049,8 +24216,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (t >= bx1 && t <= bx2) { return true; } - } - else if (y1 > by2 && y2 <= by2) { + } else if (y1 > by2 && y2 <= by2) { // Bottom edge t = x1 + (x2 - x1) * (by2 - y1) / (y2 - y1); @@ -24149,8 +24315,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * It is represented like so: * - * | a | b | tx | - * | c | d | ty | + * | a | c | tx | + * | b | d | ty | * | 0 | 0 | 1 | * * @class Phaser.Matrix @@ -24220,7 +24386,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.ty = ty; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.MATRIX; @@ -24289,8 +24455,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (output === undefined || output === null) { output = new Phaser.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty); - } - else { + } else { output.a = this.a; output.b = this.b; output.c = this.c; @@ -24362,8 +24527,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ array[6] = this.tx; array[7] = this.ty; array[8] = 1; - } - else { + } else { array[0] = this.a; array[1] = this.c; array[2] = this.tx; @@ -24570,7 +24734,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.y = y; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.POINT; @@ -24781,18 +24945,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ clip: function (rect) { - var left = rect.left, top = rect.top, right = rect.right, bottom = rect.bottom; + var left = rect.left, + top = rect.top, + right = rect.right, + bottom = rect.bottom; if (this.x < left) { this.x = left; - } - else if (this.x > right) { + } else if (this.x > right) { this.x = right; } if (this.y < top) { this.y = top; - } - else if (this.y > bottom) { + } else if (this.y > bottom) { this.y = bottom; } @@ -24811,8 +24976,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (output === undefined || output === null) { output = new Phaser.Point(this.x, this.y); - } - else { + } else { output.setTo(this.x, this.y); } @@ -24894,20 +25058,51 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * @method Phaser.Point#angle * @param {Phaser.Point|any} a - The object to get the angle from this Point to. - * @param {boolean} [asDegrees=false] - Is the given angle in radians (false) or degrees (true)? - * @return {number} The angle between the two objects. + * @param {boolean} [asDegrees=false] - Return a value in radians (false) or degrees (true)? + * @return {number} The angle, where this Point is the vertex. Within [-pi, pi] or [-180deg, 180deg]. */ angle: function (a, asDegrees) { - if (asDegrees === undefined) { - asDegrees = false; - } + return this.angleXY(a.x, a.y, asDegrees); + + }, + + /** + * Returns the angle between this Point object and an x-y coordinate pair. + * + * @method Phaser.Point#angleXY + * @param {number} x - The x-coordinate + * @param {number} y - The y-coordinate + * @param {boolean} [asDegrees=false] - Return a value in radians (false) or degrees (true)? + * @return {number} The angle, where this Point is the vertex. Within [-pi, pi] or [-180deg, 180deg]. + */ + angleXY: function (x, y, asDegrees) { + + var angle = Math.atan2(y - this.y, x - this.x); if (asDegrees) { - return Phaser.Math.radToDeg(Math.atan2(a.y - this.y, a.x - this.x)); + return Phaser.Math.radToDeg(angle); + } else { + return angle; } - else { - return Math.atan2(a.y - this.y, a.x - this.x); + + }, + + /** + * Returns the arctangent of this Point. + * + * @method Phaser.Point#atan + * @param {boolean} [asDegrees=false] - Return a value in radians (false) or degrees (true)? + * @return {number} The angle, where the vertex is (0, 0). Within [-pi, pi] or [-180deg, 180deg]. + */ + atan: function (asDegrees) { + + var angle = Math.atan2(this.y, this.x); + + if (asDegrees) { + return Phaser.Math.radToDeg(angle); + } else { + return angle; } }, @@ -24985,11 +25180,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, /** - * Alters the Point object so it's magnitude is at most the max value. + * Alters the Point object so its magnitude is at most the max value. * * @method Phaser.Point#limit * @param {number} max - The maximum magnitude for the Point. * @return {Phaser.Point} This Point object. + * @see Phaser.Point#expand */ limit: function (max) { @@ -25001,6 +25197,24 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, + /** + * Alters the Point object so its magnitude is at least the min value. + * + * @method Phaser.Point#expand + * @param {number} min - The minimum magnitude for the Point. + * @return {Phaser.Point} This Point object. + * @see Phaser.Point#limit + */ + expand: function (min) { + + if (this.getMagnitudeSq() < min * min) { + this.setMagnitude(min); + } + + return this; + + }, + /** * Determine if this point is at 0,0. * @@ -25099,6 +25313,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, + /** + * Math.round() both the x and y properties of this Point. + * + * @method Phaser.Point#round + * @return {Phaser.Point} This Point object. + */ + round: function () { + + return this.setTo(Math.round(this.x), Math.round(this.y)); + + }, + /** * Returns a string representation of this object. * @@ -25243,11 +25469,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @method Phaser.Point.angle * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. - * @return {number} The angle between the two Points. + * @return {number} The angle, where b is the vertex. Within [-pi, pi]. */ Phaser.Point.angle = function (a, b) { - // return Math.atan2(a.x * b.y - a.y * b.x, a.x * b.x + a.y * b.y); return Math.atan2(a.y - b.y, a.x - b.x); }; @@ -25488,8 +25713,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ a.x = tx + x; a.y = ty + y; - } - else { + } else { var t = angle + Math.atan2(a.y - y, a.x - x); a.x = x + distance * Math.cos(t); a.y = y + distance * Math.sin(t); @@ -25514,13 +25738,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } if (Object.prototype.toString.call(points) !== '[object Array]') { - throw new Error("Phaser.Point. Parameter 'points' must be an array"); + throw new Error('Phaser.Point. Parameter \'points\' must be an array'); } var pointslength = points.length; if (pointslength < 1) { - throw new Error("Phaser.Point. Parameter 'points' array must not be empty"); + throw new Error('Phaser.Point. Parameter \'points\' array must not be empty'); } if (pointslength === 1) { @@ -25557,22 +25781,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var point = new Phaser.Point(); if (obj[xProp]) { - point.x = parseInt(obj[xProp], 10); + point.x = parseFloat(obj[xProp], 10); } if (obj[yProp]) { - point.y = parseInt(obj[yProp], 10); + point.y = parseFloat(obj[yProp], 10); } return point; }; + /** + * Truncates the x and y values, removing any fractional parts. + * + * @method Phaser.Point.trunc + * @static + * @param {object} obj - The Point. + * @return {object} The modified Point. + */ + Phaser.Point.trunc = function (obj) { + obj.x = Phaser.Math.trunc(obj.x); + obj.y = Phaser.Math.trunc(obj.y); + + return obj; + }; + /** * Tests a Point or Point-like object. * * @method Phaser.Point.isPoint * @static + * @param {object} obj - The object to test. * @return {boolean} - True if the object has numeric x and y properties. */ Phaser.Point.isPoint = function (obj) { @@ -25600,6 +25840,72 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + /** + * Sorts an array of points in a clockwise direction, relative to a reference point. + * + * The sort is clockwise relative to the display, starting from a 12 o'clock position. + * (In the Cartesian plane, it is anticlockwise, starting from the -y direction.) + * + * Example sequence: (0, -1), (1, 0), (0, 1), (-1, 0) + * + * @method Phaser.Point#sortClockwise + * @static + * @param {array} points - An array of Points or point-like objects (e.g., sprites). + * @param {object|Phaser.Point} [center] - The reference point. If omitted, the {@link #centroid} (midpoint) of the points is used. + * @return {array} The sorted array. + */ + Phaser.Point.sortClockwise = function (points, center) { + + // Adapted from (ciamej) + + if (!center) { + center = this.centroid(points); + } + + var cx = center.x; + var cy = center.y; + + var sort = function (a, b) { + if (a.x - cx >= 0 && b.x - cx < 0) { + return -1; + } + + if (a.x - cx < 0 && b.x - cx >= 0) { + return 1; + } + + if (a.x - cx === 0 && b.x - cx === 0) { + if (a.y - cy >= 0 || b.y - cy >= 0) { + return (a.y > b.y) ? 1 : -1; + } + + return (b.y > a.y) ? 1 : -1; + } + + // Compute the cross product of vectors (center -> a) * (center -> b) + var det = (a.x - cx) * -(b.y - cy) - (b.x - cx) * -(a.y - cy); + + if (det < 0) { + return -1; + } + + if (det > 0) { + return 1; + } + + // Points a and b are on the same line from the center + // Check which point is closer to the center + var d1 = (a.x - cx) * (a.x - cx) + (a.y - cy) * (a.y - cy); + var d2 = (b.x - cx) * (b.x - cx) + (b.y - cy) * (b.y - cy); + + return (d1 > d2) ? -1 : 1; + }; + + return points.sort(sort); + + }; + + // Because PIXI uses its own Point, we'll replace it with ours to avoid duplicating code or confusion. PIXI.Point = Phaser.Point; @@ -25654,7 +25960,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.flattened = false; /** - * @property {number} objType - The base object objType. + * @property {number} type - The base object type. */ this.type = Phaser.POLYGON; @@ -25680,8 +25986,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ output.push(this._points[i]); output.push(this._points[i + 1]); i++; - } - else { + } else { output.push(this._points[i].x); output.push(this._points[i].y); } @@ -25714,7 +26019,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * This is a deep clone, the resulting copy contains new Phaser.Point objects * * @method Phaser.Polygon#clone - * @param {Phaser.Polygon} [output=(new Polygon)] - The polygon to update. If not specified a new polygon will be created. + * @param {Phaser.Polygon} [output=(new Phaser.Polygon)] - The polygon to update. If not specified a new polygon will be created. * @return {Phaser.Polygon} The cloned (`output`) polygon object. */ clone: function (output) { @@ -25723,8 +26028,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (output === undefined || output === null) { output = new Phaser.Polygon(points); - } - else { + } else { output.setTo(points); } @@ -25759,8 +26063,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } } - } - else { + } else { for (var i = -1, j = this._points.length - 1; ++i < this._points.length; j = i) { var ix = this._points[i].x; var iy = this._points[i].y; @@ -25810,16 +26113,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var y0 = Number.MAX_VALUE; - // Allows for mixed-objType arguments + // Allows for mixed-type arguments for (var i = 0, len = points.length; i < len; i++) { if (typeof points[i] === 'number') { var p = new PIXI.Point(points[i], points[i + 1]); i++; - } - else if (Array.isArray(points[i])) { + } else if (Array.isArray(points[i])) { var p = new PIXI.Point(points[i][0], points[i][1]); - } - else { + } else { var p = new PIXI.Point(points[i].x, points[i].y); } @@ -25858,8 +26159,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (i === len - 1) { p2 = this._points[0]; - } - else { + } else { p2 = this._points[i + 1]; } @@ -25877,35 +26177,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Phaser.Polygon.prototype.constructor = Phaser.Polygon; /** - * Sets and modifies the points of this polygon. + * The points of this polygon. * - * See {@link Phaser.Polygon#setTo setTo} for the different kinds of arrays formats that can be assigned. + * You can modify these with {@link Phaser.Polygon#setTo setTo}. * * @name Phaser.Polygon#points * @property {Phaser.Point[]} points - The array of vertex points. - * @deprecated Use `setTo`. + * @readonly */ Object.defineProperty(Phaser.Polygon.prototype, 'points', { get: function () { return this._points; - }, - - set: function (points) { - - if (points != null) { - this.setTo(points); - } - else { - // Clear the points - this.setTo(); - } - } }); -// Because PIXI uses its own objType, we'll replace it with ours to avoid duplicating code or confusion. +// Because PIXI uses its own type, we'll replace it with ours to avoid duplicating code or confusion. PIXI.Polygon = Phaser.Polygon; /** @@ -25953,7 +26241,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.height = height; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.RECTANGLE; @@ -26407,7 +26695,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ toString: function () { - return "[{Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + " empty=" + this.empty + ")}]"; + return '[{Rectangle (x=' + this.x + ' y=' + this.y + ' width=' + this.width + ' height=' + this.height + ' empty=' + this.empty + ')}]'; } @@ -26418,7 +26706,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} halfWidth - Half of the width of the Rectangle. * @readonly */ - Object.defineProperty(Phaser.Rectangle.prototype, "halfWidth", { + Object.defineProperty(Phaser.Rectangle.prototype, 'halfWidth', { get: function () { return Math.round(this.width / 2); @@ -26431,7 +26719,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} halfHeight - Half of the height of the Rectangle. * @readonly */ - Object.defineProperty(Phaser.Rectangle.prototype, "halfHeight", { + Object.defineProperty(Phaser.Rectangle.prototype, 'halfHeight', { get: function () { return Math.round(this.height / 2); @@ -26444,7 +26732,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#bottom * @property {number} bottom - The sum of the y and height properties. */ - Object.defineProperty(Phaser.Rectangle.prototype, "bottom", { + Object.defineProperty(Phaser.Rectangle.prototype, 'bottom', { get: function () { return this.y + this.height; @@ -26454,8 +26742,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value <= this.y) { this.height = 0; - } - else { + } else { this.height = value - this.y; } @@ -26468,7 +26755,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#bottomLeft * @property {Phaser.Point} bottomLeft - Gets or sets the location of the Rectangles bottom left corner as a Point object. */ - Object.defineProperty(Phaser.Rectangle.prototype, "bottomLeft", { + Object.defineProperty(Phaser.Rectangle.prototype, 'bottomLeft', { get: function () { return new Phaser.Point(this.x, this.bottom); @@ -26486,7 +26773,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#bottomRight * @property {Phaser.Point} bottomRight - Gets or sets the location of the Rectangles bottom right corner as a Point object. */ - Object.defineProperty(Phaser.Rectangle.prototype, "bottomRight", { + Object.defineProperty(Phaser.Rectangle.prototype, 'bottomRight', { get: function () { return new Phaser.Point(this.right, this.bottom); @@ -26504,7 +26791,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#left * @property {number} left - The x coordinate of the left of the Rectangle. */ - Object.defineProperty(Phaser.Rectangle.prototype, "left", { + Object.defineProperty(Phaser.Rectangle.prototype, 'left', { get: function () { return this.x; @@ -26526,7 +26813,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#right * @property {number} right - The sum of the x and width properties. */ - Object.defineProperty(Phaser.Rectangle.prototype, "right", { + Object.defineProperty(Phaser.Rectangle.prototype, 'right', { get: function () { return this.x + this.width; @@ -26548,7 +26835,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} volume - The volume of the Rectangle derived from width * height. * @readonly */ - Object.defineProperty(Phaser.Rectangle.prototype, "volume", { + Object.defineProperty(Phaser.Rectangle.prototype, 'volume', { get: function () { return this.width * this.height; @@ -26562,7 +26849,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} perimeter - The perimeter size of the Rectangle. This is the sum of all 4 sides. * @readonly */ - Object.defineProperty(Phaser.Rectangle.prototype, "perimeter", { + Object.defineProperty(Phaser.Rectangle.prototype, 'perimeter', { get: function () { return (this.width * 2) + (this.height * 2); @@ -26575,7 +26862,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#centerX * @property {number} centerX - The x coordinate of the center of the Rectangle. */ - Object.defineProperty(Phaser.Rectangle.prototype, "centerX", { + Object.defineProperty(Phaser.Rectangle.prototype, 'centerX', { get: function () { return this.x + this.halfWidth; @@ -26592,7 +26879,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#centerY * @property {number} centerY - The y coordinate of the center of the Rectangle. */ - Object.defineProperty(Phaser.Rectangle.prototype, "centerY", { + Object.defineProperty(Phaser.Rectangle.prototype, 'centerY', { get: function () { return this.y + this.halfHeight; @@ -26610,7 +26897,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#randomX * @property {number} randomX - A random value between the left and right values (inclusive) of the Rectangle. */ - Object.defineProperty(Phaser.Rectangle.prototype, "randomX", { + Object.defineProperty(Phaser.Rectangle.prototype, 'randomX', { get: function () { @@ -26626,7 +26913,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#randomY * @property {number} randomY - A random value between the top and bottom values (inclusive) of the Rectangle. */ - Object.defineProperty(Phaser.Rectangle.prototype, "randomY", { + Object.defineProperty(Phaser.Rectangle.prototype, 'randomY', { get: function () { @@ -26642,7 +26929,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#top * @property {number} top - The y coordinate of the top of the Rectangle. */ - Object.defineProperty(Phaser.Rectangle.prototype, "top", { + Object.defineProperty(Phaser.Rectangle.prototype, 'top', { get: function () { return this.y; @@ -26664,7 +26951,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#topLeft * @property {Phaser.Point} topLeft - The location of the Rectangles top left corner as a Point object. */ - Object.defineProperty(Phaser.Rectangle.prototype, "topLeft", { + Object.defineProperty(Phaser.Rectangle.prototype, 'topLeft', { get: function () { return new Phaser.Point(this.x, this.y); @@ -26682,7 +26969,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#topRight * @property {Phaser.Point} topRight - The location of the Rectangles top left corner as a Point object. */ - Object.defineProperty(Phaser.Rectangle.prototype, "topRight", { + Object.defineProperty(Phaser.Rectangle.prototype, 'topRight', { get: function () { return new Phaser.Point(this.x + this.width, this.y); @@ -26701,7 +26988,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Rectangle#empty * @property {boolean} empty - Gets or sets the Rectangles empty state. */ - Object.defineProperty(Phaser.Rectangle.prototype, "empty", { + Object.defineProperty(Phaser.Rectangle.prototype, 'empty', { get: function () { return (!this.width || !this.height); @@ -26762,8 +27049,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (output === undefined || output === null) { output = new Phaser.Point(a.width, a.height); - } - else { + } else { output.setTo(a.width, a.height); } @@ -26782,8 +27068,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (output === undefined || output === null) { output = new Phaser.Rectangle(a.x, a.y, a.width, a.height); - } - else { + } else { output.setTo(a.x, a.y, a.width, a.height); } @@ -26986,11 +27271,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Calculates the Axis Aligned Bounding Box (or aabb) from an array of points. * - * @method Phaser.Rectangle#aabb + * @method Phaser.Rectangle.aabb * @param {Phaser.Point[]} points - The array of one or more points. * @param {Phaser.Rectangle} [out] - Optional Rectangle to store the value in, if not supplied a new Rectangle object will be created. * @return {Phaser.Rectangle} The new Rectangle object. - * @static */ Phaser.Rectangle.aabb = function (points, out) { @@ -27026,7 +27310,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Because PIXI uses its own Rectangle, we'll replace it with ours to avoid duplicating code or confusion. PIXI.Rectangle = Phaser.Rectangle; - PIXI.EmptyRectangle = new Phaser.Rectangle(0, 0, 0, 0); + + /** + * A Rectangle with width and height zero. + * @constant Phaser.EmptyRectangle + * @type {Phaser.Rectangle} + */ + Phaser.EmptyRectangle = new Phaser.Rectangle(0, 0, 0, 0); /** * @author Mat Groves http://matgroves.com/ @@ -27090,7 +27380,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.radius = radius || 20; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.ROUNDEDRECTANGLE; @@ -27143,7 +27433,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Phaser.RoundedRectangle.prototype.constructor = Phaser.RoundedRectangle; -// Because PIXI uses its own objType, we'll replace it with ours to avoid duplicating code or confusion. +// Because PIXI uses its own type, we'll replace it with ours to avoid duplicating code or confusion. PIXI.RoundedRectangle = Phaser.RoundedRectangle; /** @@ -27323,7 +27613,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this._fxDuration = 0; /** - * @property {number} _fxType - The FX objType running. + * @property {number} _fxType - The FX type running. * @private */ this._fxType = 0; @@ -27340,7 +27630,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A follow style that uses no deadzone. * * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.FOLLOW_LOCKON = 0; @@ -27348,7 +27638,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A follow style that uses a tall, narrow deadzone (0.33 x 0.125) with a center slightly above the view center. * * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.FOLLOW_PLATFORMER = 1; @@ -27356,7 +27646,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A follow style that uses a square deadzone (0.25 of the larger view edge). * * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.FOLLOW_TOPDOWN = 2; @@ -27364,31 +27654,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A follow style that uses a small square deadzone (0.125 of the larger view edge). * * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.FOLLOW_TOPDOWN_TIGHT = 3; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.SHAKE_BOTH = 4; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.SHAKE_HORIZONTAL = 5; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Camera.SHAKE_VERTICAL = 6; /** * @constant - * @objType {boolean} + * @type {boolean} */ Phaser.Camera.ENABLE_FX = true; @@ -27430,7 +27720,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Tell the camera which sprite to follow. * - * You can set the follow objType and a linear interpolation value. + * You can set the follow type and a linear interpolation value. * Use low lerp values (such as 0.1) to automatically smooth the camera motion. * * If you find you're getting a slight "jitter" effect when following a Sprite it's probably to do with sub-pixel rendering of the Sprite position. @@ -27725,8 +28015,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.fx.alpha = 0; this.onFlashComplete.dispatch(); } - } - else { + } else { // fade this.fx.alpha += this.game.time.elapsedMS / this._fxDuration; @@ -27753,8 +28042,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.onShakeComplete.dispatch(); this._shake.x = 0; this._shake.y = 0; - } - else { + } else { if (this._shake.horizontal) { this._shake.x = this.game.rnd.frac() * this._shake.intensity * this.view.width * 2 - this._shake.intensity * this.view.width; } @@ -27782,8 +28070,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._edge < this.deadzone.left) { this.view.x = this.game.math.linear(this.view.x, this._targetPosition.x - this.deadzone.left, this.lerp.x); - } - else if (this._edge > this.deadzone.right) { + } else if (this._edge > this.deadzone.right) { this.view.x = this.game.math.linear(this.view.x, this._targetPosition.x - this.deadzone.right, this.lerp.x); } @@ -27791,12 +28078,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._edge < this.deadzone.top) { this.view.y = this.game.math.linear(this.view.y, this._targetPosition.y - this.deadzone.top, this.lerp.y); - } - else if (this._edge > this.deadzone.bottom) { + } else if (this._edge > this.deadzone.bottom) { this.view.y = this.game.math.linear(this.view.y, this._targetPosition.y - this.deadzone.bottom, this.lerp.y); } - } - else { + } else { this.view.x = this.game.math.linear(this.view.x, this._targetPosition.x - this.view.halfWidth, this.lerp.x); this.view.y = this.game.math.linear(this.view.y, this._targetPosition.y - this.view.halfHeight, this.lerp.y); } @@ -27853,8 +28138,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // The camera is up against the bounds, so reset the shake this._shake.x = 0; } - } - else if (vw >= this.bounds.right * this.scale.x) { + } else if (vw >= this.bounds.right * this.scale.x) { this.atLimit.x = true; this.view.x = (this.bounds.right * this.scale.x) - this.width; @@ -27872,8 +28156,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // The camera is up against the bounds, so reset the shake this._shake.y = 0; } - } - else if (vh >= this.bounds.bottom * this.scale.y) { + } else if (vh >= this.bounds.bottom * this.scale.y) { this.atLimit.y = true; this.view.y = (this.bounds.bottom * this.scale.y) - this.height; @@ -27966,7 +28249,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Camera#x * @property {number} x - Gets or sets the cameras x position. */ - Object.defineProperty(Phaser.Camera.prototype, "x", { + Object.defineProperty(Phaser.Camera.prototype, 'x', { get: function () { @@ -27990,7 +28273,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Camera#y * @property {number} y - Gets or sets the cameras y position. */ - Object.defineProperty(Phaser.Camera.prototype, "y", { + Object.defineProperty(Phaser.Camera.prototype, 'y', { get: function () { @@ -28014,7 +28297,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Camera#position * @property {Phaser.Point} position - Gets or sets the cameras xy position using Phaser.Point object. */ - Object.defineProperty(Phaser.Camera.prototype, "position", { + Object.defineProperty(Phaser.Camera.prototype, 'position', { get: function () { @@ -28026,10 +28309,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ set: function (value) { - if (typeof value.x !== "undefined") { + if (typeof value.x !== 'undefined') { this.view.x = value.x; } - if (typeof value.y !== "undefined") { + if (typeof value.y !== 'undefined') { this.view.y = value.y; } @@ -28045,7 +28328,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Camera#width * @property {number} width - Gets or sets the cameras width. */ - Object.defineProperty(Phaser.Camera.prototype, "width", { + Object.defineProperty(Phaser.Camera.prototype, 'width', { get: function () { @@ -28066,7 +28349,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Camera#height * @property {number} height - Gets or sets the cameras height. */ - Object.defineProperty(Phaser.Camera.prototype, "height", { + Object.defineProperty(Phaser.Camera.prototype, 'height', { get: function () { @@ -28088,7 +28371,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Camera#shakeIntensity * @property {number} shakeIntensity - Gets or sets the cameras shake intensity. */ - Object.defineProperty(Phaser.Camera.prototype, "shakeIntensity", { + Object.defineProperty(Phaser.Camera.prototype, 'shakeIntensity', { get: function () { @@ -28111,7 +28394,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Phaser.Rectangle} fixedView * @readonly */ - Object.defineProperty(Phaser.Camera.prototype, "fixedView", { + Object.defineProperty(Phaser.Camera.prototype, 'fixedView', { get: function () { @@ -28140,6 +28423,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * | init | | | | | * | | preload | create | paused | | * | | loadUpdate* | update* | pauseUpdate* | | + * | | | postUpdate*| | | * | | | preRender* | | | * | | loadRender* | render* | render* | | * | | | | resumed | | @@ -28215,7 +28499,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.stage = null; /** - * @property {Phaser.StateManager} stage - A reference to the State Manager, which controls state changes. + * @property {Phaser.StateManager} state - A reference to the State Manager, which controls state changes. */ this.state = null; @@ -28315,6 +28599,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ update: function () { }, + /** + * The postUpdate method is left empty for your own use. + * It is called during the core game loop AFTER the Stage has had its postUpdate method called (including updateTransform). + * It is called BEFORE Plugins have had their postUpdate methods called. + * You don't need to call updateTransform yourself here unless Plugins need it. + * + * @method Phaser.State#postUpdate + * @param {Phaser.Game} game + */ + postUpdate: function () { + }, + /** * The preRender method is called after all Game Objects have been updated, but before any rendering takes place. * @@ -28593,12 +28889,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (state instanceof Phaser.State) { newState = state; - } - else if (typeof state === 'object') { + } else if (typeof state === 'object') { newState = state; newState.game = this.game; - } - else if (typeof state === 'function') { + } else if (typeof state === 'function') { newState = new state(this.game); } @@ -28607,8 +28901,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (autoStart) { if (this.game.isBooted) { this.start(key); - } - else { + } else { this._pendingState = key; } } @@ -28733,8 +29026,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.current !== this._pendingState) { return; - } - else { + } else { this._pendingState = null; } @@ -28747,13 +29039,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Is the loader empty? if (this.game.load.totalQueuedFiles() === 0 && this.game.load.totalQueuedPacks() === 0) { this.loadComplete(); - } - else { + } else { // Start the loader going as we have something in the queue this.game.load.start(); } - } - else { + } else { // No init? Then there was nothing to load either this.loadComplete(); } @@ -28815,14 +29105,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (state) { if (state.preload || state.create || state.update || state.render) { return true; - } - else { - console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"); + } else { + console.warn('Invalid Phaser State object given. Must contain at least one of the required functions: preload, create, update or render'); return false; } - } - else { - console.warn("Phaser.StateManager - No state found with the key: " + key); + } else { + console.warn('Phaser.StateManager - No state found with the key: ' + key); return false; } @@ -28837,25 +29125,27 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ link: function (key) { - this.states[key].game = this.game; - this.states[key].add = this.game.add; - this.states[key].make = this.game.make; - this.states[key].camera = this.game.camera; - this.states[key].cache = this.game.cache; - this.states[key].input = this.game.input; - this.states[key].load = this.game.load; - this.states[key].math = this.game.math; - this.states[key].sound = this.game.sound; - this.states[key].scale = this.game.scale; - this.states[key].state = this; - this.states[key].stage = this.game.stage; - this.states[key].time = this.game.time; - this.states[key].tweens = this.game.tweens; - this.states[key].world = this.game.world; - this.states[key].particles = this.game.particles; - this.states[key].rnd = this.game.rnd; - this.states[key].physics = this.game.physics; - this.states[key].key = key; + var state = this.states[key]; + + state.game = this.game; + state.add = this.game.add; + state.make = this.game.make; + state.camera = this.game.camera; + state.cache = this.game.cache; + state.input = this.game.input; + state.load = this.game.load; + state.math = this.game.math; + state.sound = this.game.sound; + state.scale = this.game.scale; + state.state = this; + state.stage = this.game.stage; + state.time = this.game.time; + state.tweens = this.game.tweens; + state.world = this.game.world; + state.particles = this.game.particles; + state.rnd = this.game.rnd; + state.physics = this.game.physics; + state.key = key; }, @@ -28868,25 +29158,27 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ unlink: function (key) { - if (this.states[key]) { - this.states[key].game = null; - this.states[key].add = null; - this.states[key].make = null; - this.states[key].camera = null; - this.states[key].cache = null; - this.states[key].input = null; - this.states[key].load = null; - this.states[key].math = null; - this.states[key].sound = null; - this.states[key].scale = null; - this.states[key].state = null; - this.states[key].stage = null; - this.states[key].time = null; - this.states[key].tweens = null; - this.states[key].world = null; - this.states[key].particles = null; - this.states[key].rnd = null; - this.states[key].physics = null; + var state = this.states[key]; + + if (state) { + state.game = null; + state.add = null; + state.make = null; + state.camera = null; + state.cache = null; + state.input = null; + state.load = null; + state.math = null; + state.sound = null; + state.scale = null; + state.state = null; + state.stage = null; + state.time = null; + state.tweens = null; + state.world = null; + state.particles = null; + state.rnd = null; + state.physics = null; } }, @@ -28900,27 +29192,30 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ setCurrentState: function (key) { - this.callbackContext = this.states[key]; + var state = this.states[key]; + + this.callbackContext = state; this.link(key); // Used when the state is set as being the current active state - this.onInitCallback = this.states[key]['init'] || this.dummy; + this.onInitCallback = state.init || this.dummy; - this.onPreloadCallback = this.states[key]['preload'] || null; - this.onLoadRenderCallback = this.states[key]['loadRender'] || null; - this.onLoadUpdateCallback = this.states[key]['loadUpdate'] || null; - this.onCreateCallback = this.states[key]['create'] || null; - this.onUpdateCallback = this.states[key]['update'] || null; - this.onPreRenderCallback = this.states[key]['preRender'] || null; - this.onRenderCallback = this.states[key]['render'] || null; - this.onResizeCallback = this.states[key]['resize'] || null; - this.onPausedCallback = this.states[key]['paused'] || null; - this.onResumedCallback = this.states[key]['resumed'] || null; - this.onPauseUpdateCallback = this.states[key]['pauseUpdate'] || null; + this.onPreloadCallback = state.preload || null; + this.onLoadRenderCallback = state.loadRender || null; + this.onLoadUpdateCallback = state.loadUpdate || null; + this.onCreateCallback = state.create || null; + this.onUpdateCallback = state.update || null; + this.onPostUpdateCallback = state.postUpdate || null; + this.onPreRenderCallback = state.preRender || null; + this.onRenderCallback = state.render || null; + this.onResizeCallback = state.resize || null; + this.onPausedCallback = state.paused || null; + this.onResumedCallback = state.resumed || null; + this.onPauseUpdateCallback = state.pauseUpdate || null; // Used when the state is no longer the current active state - this.onShutDownCallback = this.states[key]['shutdown'] || this.dummy; + this.onShutDownCallback = state.shutdown || this.dummy; // Reset the physics system, but not on the first state start if (this.current !== '') { @@ -28956,24 +29251,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @method Phaser.StateManager#loadComplete * @protected + * @see Phaser.StateManager#preUpdate */ loadComplete: function () { - // Make sure to do load-update one last time before state is set to _created - if (this._created === false && this.onLoadUpdateCallback) { - this.onLoadUpdateCallback.call(this.callbackContext, this.game); - } - if (this._created === false && this.onCreateCallback) { this._created = true; this.onCreateCallback.call(this.callbackContext, this.game); - } - else { + } else { this._created = true; } }, + /** + * @method Phaser.StateManager#loadUpdate + * @protected + * @see Phaser.Loader#finishedLoading + */ + loadUpdate: function () { + + if (this._created === false && this.onLoadUpdateCallback) { + this.onLoadUpdateCallback.call(this.callbackContext, this.game); + } + + }, + /** * @method Phaser.StateManager#pause * @protected @@ -29008,11 +29311,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.onUpdateCallback) { this.onUpdateCallback.call(this.callbackContext, this.game); } + } else if (this.onLoadUpdateCallback) { + this.onLoadUpdateCallback.call(this.callbackContext, this.game); } - else { - if (this.onLoadUpdateCallback) { - this.onLoadUpdateCallback.call(this.callbackContext, this.game); - } + + }, + + postUpdate: function () { + + if (this._created && this.onPostUpdateCallback) { + this.onPostUpdateCallback.call(this.callbackContext, this.game); } }, @@ -29027,11 +29335,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.onPauseUpdateCallback) { this.onPauseUpdateCallback.call(this.callbackContext, this.game); } - } - else { - if (this.onLoadUpdateCallback) { - this.onLoadUpdateCallback.call(this.callbackContext, this.game); - } + } else if (this.onLoadUpdateCallback) { + this.onLoadUpdateCallback.call(this.callbackContext, this.game); } }, @@ -29074,16 +29379,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.game.context.setTransform(1, 0, 0, 1, 0, 0); this.onRenderCallback.call(this.callbackContext, this.game); this.game.context.restore(); - } - else { + } else { this.onRenderCallback.call(this.callbackContext, this.game); } } - } - else { - if (this.onLoadRenderCallback) { - this.onLoadRenderCallback.call(this.callbackContext, this.game); - } + } else if (this.onLoadRenderCallback) { + this.onLoadRenderCallback.call(this.callbackContext, this.game); } }, @@ -29110,6 +29411,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.onLoadUpdateCallback = null; this.onCreateCallback = null; this.onUpdateCallback = null; + this.onPostUpdateCallback = null; this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; @@ -29131,7 +29433,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {boolean} created - True if the current state has had its `create` method run (if it has one, if not this is true by default). * @readOnly */ - Object.defineProperty(Phaser.StateManager.prototype, "created", { + Object.defineProperty(Phaser.StateManager.prototype, 'created', { get: function () { @@ -29291,8 +29593,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (binding.isOnce() !== isOnce) { throw new Error('You cannot add' + (isOnce ? '' : 'Once') + '() then add' + (!isOnce ? '' : 'Once') + '() the same listener without removing the relationship first.'); } - } - else { + } else { binding = new Phaser.SignalBinding(this, listener, isOnce, listenerContext, priority, args); this._addBinding(binding); } @@ -29460,7 +29761,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var i = this._indexOfListener(listener, context); if (i !== -1) { - this._bindings[i]._destroy(); //no reason to a Phaser.SignalBinding exist if it isn't attached to a signal + this._bindings[i]._destroy(); // no reason to a Phaser.SignalBinding exist if it isn't attached to a signal this._bindings.splice(i, 1); } @@ -29492,8 +29793,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this._bindings[n]._destroy(); this._bindings.splice(n, 1); } - } - else { + } else { this._bindings[n]._destroy(); } } @@ -29540,28 +29840,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ dispatch: function () { - if (!this.active || !this._bindings) { + if (!this.active || (!this._bindings && !this.memorize)) { return; } var paramsArr = Array.prototype.slice.call(arguments); - var n = this._bindings.length; - var bindings; if (this.memorize) { this._prevParams = paramsArr; } + var n = this._bindings ? this._bindings.length : 0; + if (!n) { // Should come after memorize return; } - bindings = this._bindings.slice(); //clone array in case add/remove items during dispatch - this._shouldPropagate = true; //in case `halt` was called before dispatch or during the previous dispatch. + var bindings = this._bindings.slice(); // clone array in case add/remove items during dispatch + this._shouldPropagate = true; // in case `halt` was called before dispatch or during the previous dispatch. - //execute all callbacks until end of the list or until a callback returns `false` or stops propagation - //reverse loop since listeners with higher priority will be added at the end of the list + // execute all callbacks until end of the list or until a callback returns `false` or stops propagation + // reverse loop since listeners with higher priority will be added at the end of the list do { n--; } @@ -29624,7 +29924,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @memberof Phaser.Signal * @property {function} boundDispatch */ - Object.defineProperty(Phaser.Signal.prototype, "boundDispatch", { + Object.defineProperty(Phaser.Signal.prototype, 'boundDispatch', { get: function () { var _this = this; @@ -29845,15 +30145,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The default uniforms, types and values for all Filters are: * * ```javascript - * resolution: { objType: '2f', value: { x: 256, y: 256 }} - * time: { objType: '1f', value: 0 } - * mouse: { objType: '2f', value: { x: 0.0, y: 0.0 } } - * date: { objType: '4fv', value: [ d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() *60 * 60 + d.getMinutes() * 60 + d.getSeconds() ] } - * sampleRate: { objType: '1f', value: 44100.0 } - * iChannel0: { objType: 'sampler2D', value: null, textureData: { repeat: true } } - * iChannel1: { objType: 'sampler2D', value: null, textureData: { repeat: true } } - * iChannel2: { objType: 'sampler2D', value: null, textureData: { repeat: true } } - * iChannel3: { objType: 'sampler2D', value: null, textureData: { repeat: true } } + * resolution: { type: '2f', value: { x: 256, y: 256 }} + * time: { type: '1f', value: 0 } + * mouse: { type: '2f', value: { x: 0.0, y: 0.0 } } + * date: { type: '4fv', value: [ d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() *60 * 60 + d.getMinutes() * 60 + d.getSeconds() ] } + * sampleRate: { type: '1f', value: 44100.0 } + * iChannel0: { type: 'sampler2D', value: null, textureData: { repeat: true } } + * iChannel1: { type: 'sampler2D', value: null, textureData: { repeat: true } } + * iChannel2: { type: 'sampler2D', value: null, textureData: { repeat: true } } + * iChannel3: { type: 'sampler2D', value: null, textureData: { repeat: true } } * ``` * * The vast majority of filters (including all of those that ship with Phaser) use fragment shaders, and @@ -29873,7 +30173,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.game = game; /** - * @property {number} objType - The const objType of this object, either Phaser.WEBGL_FILTER or Phaser.CANVAS_FILTER. + * @property {number} type - The const type of this object, either Phaser.WEBGL_FILTER or Phaser.CANVAS_FILTER. * @default */ this.type = Phaser.WEBGL_FILTER; @@ -30033,15 +30333,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (width !== undefined && width !== null) { this.width = width; - } - else { + } else { width = this.width; } if (height !== undefined && height !== null) { this.height = height; - } - else { + } else { height = this.height; } @@ -30329,34 +30627,33 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Prototype? if (typeof plugin === 'function') { plugin = new plugin(this.game, this); - } - else { + } else { plugin.game = this.game; plugin.parent = this; } // Check for methods now to avoid having to do this every loop - if (typeof plugin['preUpdate'] === 'function') { + if (typeof plugin.preUpdate === 'function') { plugin.hasPreUpdate = true; result = true; } - if (typeof plugin['update'] === 'function') { + if (typeof plugin.update === 'function') { plugin.hasUpdate = true; result = true; } - if (typeof plugin['postUpdate'] === 'function') { + if (typeof plugin.postUpdate === 'function') { plugin.hasPostUpdate = true; result = true; } - if (typeof plugin['render'] === 'function') { + if (typeof plugin.render === 'function') { plugin.hasRender = true; result = true; } - if (typeof plugin['postRender'] === 'function') { + if (typeof plugin.postRender === 'function') { plugin.hasPostRender = true; result = true; } @@ -30374,13 +30671,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this._len = this.plugins.push(plugin); // Allows plugins to run potentially destructive code outside of the constructor, and only if being added to the PluginManager - if (typeof plugin['init'] === 'function') { + if (typeof plugin.init === 'function') { plugin.init.apply(plugin, args); } return plugin; - } - else { + } else { return null; } }, @@ -30647,12 +30943,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Stage.prototype.parseConfig = function (config) { - if (config['disableVisibilityChange']) { - this.disableVisibilityChange = config['disableVisibilityChange']; + if (config.disableVisibilityChange) { + this.disableVisibilityChange = config.disableVisibilityChange; } - if (config['backgroundColor']) { - this.setBackgroundColor(config['backgroundColor']); + if (config.backgroundColor) { + this.setBackgroundColor(config.backgroundColor); } }; @@ -30769,17 +31065,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (document.hidden !== undefined) { this._hiddenVar = 'visibilitychange'; - } - else if (document.webkitHidden !== undefined) { + } else if (document.webkitHidden !== undefined) { this._hiddenVar = 'webkitvisibilitychange'; - } - else if (document.mozHidden !== undefined) { + } else if (document.mozHidden !== undefined) { this._hiddenVar = 'mozvisibilitychange'; - } - else if (document.msHidden !== undefined) { + } else if (document.msHidden !== undefined) { this._hiddenVar = 'msvisibilitychange'; - } - else { + } else { this._hiddenVar = null; } @@ -30789,6 +31081,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return _this.visibilityChange(event); }; + this._onChangePause = function () { + return _this._onChange({type: 'pause'}); + }; + + this._onChangeResume = function () { + return _this._onChange({type: 'resume'}); + }; + this._onClick = function (event) { if ((document.hasFocus !== undefined) && !document.hasFocus()) { _this.visibilityChange(event); @@ -30808,14 +31108,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ window.addEventListener('click', this._onClick); - if (this.game.device.cocoonJSApp) { - CocoonJS.App.onSuspended.addEventListener(function () { - Phaser.Stage.prototype.visibilityChange.call(_this, {type: "pause"}); - }); + if (this.game.device.cocoonJSApp && CocoonJS.App) { + if (CocoonJS.App.onSuspended) { + CocoonJS.App.onSuspended.addEventListener(this._onChangePause); + } - CocoonJS.App.onActivated.addEventListener(function () { - Phaser.Stage.prototype.visibilityChange.call(_this, {type: "resume"}); - }); + if (CocoonJS.App.onActivated) { + CocoonJS.App.onActivated.addEventListener(this._onChangeResume); + } + + if (CocoonJS.App.on) { + CocoonJS.App.on('activated', this._onChangeResume); + CocoonJS.App.on('suspended', this._onChangePause); + } } }; @@ -30829,7 +31134,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * - `visibilitychange` (visible) and CocoonJS's `onActivated` {@link Phaser.Game#gameResumed resume the game} unless {@link #disableVisibilityChange} is on. * * @method Phaser.Stage#visibilityChange - * @param {Event} event - Its objType will be used to decide whether the game should be paused or not. + * @param {Event} event - Its type will be used to decide whether the game should be paused or not. */ Phaser.Stage.prototype.visibilityChange = function (event) { @@ -30851,10 +31156,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return; } - if (document.hidden || document.mozHidden || document.msHidden || document.webkitHidden || event.type === "pause") { + if (document.hidden || document.mozHidden || document.msHidden || document.webkitHidden || event.type === 'pause') { this.game.gamePaused(event); - } - else { + } else { this.game.gameResumed(event); } @@ -30912,12 +31216,47 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + /** + * Adds an existing object to the Stage. + * + * The child is automatically added to the front of the Stage, and is displayed above every previous child. + * Or if the _optional_ `index` is specified, the child is added at the location specified by the index value, + * this allows you to control child ordering. + * + * If the object was already on the Stage, it is simply returned, and nothing else happens to it. + * + * @method Phaser.Stage#add + * @param {DisplayObject} child - The display object to add as a child. + * @param {boolean} [silent] - Unused. Kept for compatibility with {@link Phaser.Group#add}. + * @param {integer} [index] - The index to insert the object to. + * @return {DisplayObject} The child that was added to the group. + */ + Phaser.Stage.prototype.add = function (child, silent, index) { + + if (child.parent === this) { + return child; + } + + if (child.body && child.parent && child.parent.hash) { + child.parent.removeFromHash(child); + } + + if (index === undefined) { + this.addChild(child); + } else { + this.addChildAt(child, index); + } + + return child; + + }; + /** * @name Phaser.Stage#backgroundColor * @property {number|string} backgroundColor - Gets and sets the background color of the stage. The color can be given as a number: 0xff0000 or a hex string: '#ff0000' * @see Phaser.Stage#setBackgroundColor */ - Object.defineProperty(Phaser.Stage.prototype, "backgroundColor", { + Object.defineProperty(Phaser.Stage.prototype, 'backgroundColor', { get: function () { @@ -30939,7 +31278,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Stage#smoothed * @property {boolean} smoothed - Set to true to smooth all sprites rendered on this Stage, or false to disable smoothing (great for pixel art) */ - Object.defineProperty(Phaser.Stage.prototype, "smoothed", { + Object.defineProperty(Phaser.Stage.prototype, 'smoothed', { get: function () { @@ -30951,8 +31290,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value) { PIXI.scaleModes.DEFAULT = PIXI.scaleModes.LINEAR; - } - else { + } else { PIXI.scaleModes.DEFAULT = PIXI.scaleModes.NEAREST; } } @@ -30982,8 +31320,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * If undefined/unspecified the Group will be added to the {@link Phaser.Game#world Game World}; if null the Group will not be added to any parent. * @param {string} [name='group'] - A name for this group. Not used internally but useful for debugging. * @param {boolean} [addToStage=false] - If true this group will be added directly to the Game.Stage instead of Game.World. - * @param {boolean} [enableBody=false] - If true all Sprites created with {@link #create} or {@link #createMulitple} will have a physics body created on them. Change the body objType with {@link #physicsBodyType}. - * @param {integer} [physicsBodyType=0] - The physics body objType to use when physics bodies are automatically added. See {@link #physicsBodyType} for values. + * @param {boolean} [enableBody=false] - If true all Sprites created with {@link #create} or {@link #createMulitple} will have a physics body created on them. Change the body type with {@link #physicsBodyType}. + * @param {integer} [physicsBodyType=0] - The physics body type to use when physics bodies are automatically added. See {@link #physicsBodyType} for values. */ Phaser.Group = function (game, parent, name, addToStage, enableBody, physicsBodyType) { @@ -31027,23 +31365,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (addToStage) { this.game.stage.addChild(this); this.z = this.game.stage.children.length; - } - else { - if (parent) { - parent.addChild(this); - this.z = parent.children.length; - } + } else if (parent) { + parent.addChild(this); + this.z = parent.children.length; } /** * Internal Phaser Type value. - * @property {integer} objType + * @property {integer} type * @protected */ this.type = Phaser.GROUP; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.GROUP; @@ -31082,7 +31417,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.pendingDestroy = false; /** - * The objType of objects that will be created when using {@link #create} or {@link #createMultiple}. + * The type of objects that will be created when using {@link #create} or {@link #createMultiple}. * * It should extend either Sprite or Image and accept the same constructor arguments: `(game, x, y, key, frame)`. * @@ -31172,7 +31507,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * If there are children already in the Group at the time you set this property, they are not changed. * - * The default body objType is controlled with {@link #physicsBodyType}. + * The default body type is controlled with {@link #physicsBodyType}. * @property {boolean} enableBody */ this.enableBody = enableBody; @@ -31187,7 +31522,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.enableBodyDebug = false; /** - * If {@link #enableBody} is true this is the objType of physics body that is created on new Sprites. + * If {@link #enableBody} is true this is the type of physics body that is created on new Sprites. * * The valid values are {@link Phaser.Physics.ARCADE}, {@link Phaser.Physics.P2JS}, {@link Phaser.Physics.NINJA}, etc. * @property {integer} physicsBodyType @@ -31269,42 +31604,42 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * A returnType value, as specified in {@link #iterate} eg. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Group.RETURN_NONE = 0; /** * A returnType value, as specified in {@link #iterate} eg. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Group.RETURN_TOTAL = 1; /** * A returnType value, as specified in {@link #iterate} eg. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Group.RETURN_CHILD = 2; /** * A returnType value, as specified in {@link #iterate} eg. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Group.RETURN_ALL = 3; /** * A sort ordering value, as specified in {@link #sort} eg. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Group.SORT_ASCENDING = -1; /** * A sort ordering value, as specified in {@link #sort} eg. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Group.SORT_DESCENDING = 1; @@ -31322,7 +31657,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * If `Group.inputEnableChildren` is set, then an Input Handler will be created on the object, so long as one does not already exist. * - * Use {@link #addAt} to control where a child is added. Use {@link #create} to create and add a new child. + * Use {@link #create} to create and add a new child. * * @method Phaser.Group#add * @param {DisplayObject} child - The display object to add as a child. @@ -31348,8 +31683,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ child.z = this.children.length; this.addChild(child); - } - else { + } else { this.addChildAt(child, index); this.updateZ(); @@ -31357,8 +31691,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.enableBody && child.hasOwnProperty('body') && child.body === null) { this.game.physics.enable(child, this.physicsBodyType); - } - else if (child.body) { + } else if (child.body) { this.addToHash(child); } @@ -31466,8 +31799,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (children instanceof Phaser.Group) { children.moveAll(this, silent); - } - else if (Array.isArray(children)) { + } else if (Array.isArray(children)) { for (var i = 0; i < children.length; i++) { this.add(children[i], silent); } @@ -31488,8 +31820,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (index < 0 || index >= this.children.length) { return -1; - } - else { + } else { return this.getChildAt(index); } @@ -31498,7 +31829,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Creates a new Phaser.Sprite object and adds it to the top of this group. * - * Use {@link #classType} to change the objType of object created. + * Use {@link #classType} to change the type of object created. * * The child is automatically added to the top of the group, and is displayed above every previous child. * @@ -31539,7 +31870,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * This method is useful if you need to quickly generate a pool of sprites, such as bullets. * - * Use {@link #classType} to change the objType of object created. + * Use {@link #classType} to change the type of object created. * * You can provide an array as the `key` and / or `frame` arguments. When you do this * it will create `quantity` Sprites for every key (and frame) in the arrays. @@ -31715,10 +32046,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ for (var i = offset; i < this.children.length; i++) { var child = this.children[i]; - if (child['alignIn']) { + if (child.alignIn) { child.alignIn(r, position); - } - else { + } else { continue; } @@ -31730,8 +32060,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ r.x += cellWidth; r.y = 0; } - } - else if (height === -1) { + } else if (height === -1) { // We keep laying them out vertically until we've done them all r.x += cellWidth; @@ -31739,8 +32068,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ r.x = 0; r.y += cellHeight; } - } - else { + } else { // We keep laying them out until we hit the column limit r.x += cellWidth; @@ -31801,8 +32129,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Wrap the cursor? if (this.cursorIndex >= this.children.length - 1) { this.cursorIndex = 0; - } - else { + } else { this.cursorIndex++; } @@ -31827,8 +32154,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Wrap the cursor? if (this.cursorIndex === 0) { this.cursorIndex = this.children.length - 1; - } - else { + } else { this.cursorIndex--; } @@ -31873,6 +32199,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + /** + * Alias for {@link Phaser.Group#bringToTop}. + * @private + */ + Phaser.Group.prototype.bringChildToTop = Phaser.Group.prototype.bringToTop; + /** * Sends the given child to the bottom of this group so it renders below all other children. * @@ -31891,6 +32223,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + /** + * Alias for {@link Phaser.Group#sendToBack}. + * @private + */ + Phaser.Group.prototype.sendChildToBack = Phaser.Group.prototype.sendToBack; + /** * Moves the given child up one place in this group unless it's already at the top. * @@ -31947,8 +32285,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (index < 0 || index > this.children.length) { return -1; - } - else { + } else { this.getChildAt(index).x = x; this.getChildAt(index).y = y; } @@ -32023,8 +32360,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (newChild.parent) { if (newChild.parent instanceof Phaser.Group) { newChild.parent.remove(newChild); - } - else { + } else { newChild.parent.removeChild(newChild); } } @@ -32054,14 +32390,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (len === 1 && key[0] in child) { return true; - } - else if (len === 2 && key[0] in child && key[1] in child[key[0]]) { + } else if (len === 2 && key[0] in child && key[1] in child[key[0]]) { return true; - } - else if (len === 3 && key[0] in child && key[1] in child[key[0]] && key[2] in child[key[0]][key[1]]) { + } else if (len === 3 && key[0] in child && key[1] in child[key[0]] && key[2] in child[key[0]][key[1]]) { return true; - } - else if (len === 4 && key[0] in child && key[1] in child[key[0]] && key[2] in child[key[0]][key[1]] && key[3] in child[key[0]][key[1]][key[2]]) { + } else if (len === 4 && key[0] in child && key[1] in child[key[0]] && key[2] in child[key[0]][key[1]] && key[3] in child[key[0]][key[1]][key[2]]) { return true; } @@ -32114,68 +32447,49 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (len === 1) { if (operation === 0) { child[key[0]] = value; - } - else if (operation === 1) { + } else if (operation === 1) { child[key[0]] += value; - } - else if (operation === 2) { + } else if (operation === 2) { child[key[0]] -= value; - } - else if (operation === 3) { + } else if (operation === 3) { child[key[0]] *= value; - } - else if (operation === 4) { + } else if (operation === 4) { child[key[0]] /= value; } - } - else if (len === 2) { + } else if (len === 2) { if (operation === 0) { child[key[0]][key[1]] = value; - } - else if (operation === 1) { + } else if (operation === 1) { child[key[0]][key[1]] += value; - } - else if (operation === 2) { + } else if (operation === 2) { child[key[0]][key[1]] -= value; - } - else if (operation === 3) { + } else if (operation === 3) { child[key[0]][key[1]] *= value; - } - else if (operation === 4) { + } else if (operation === 4) { child[key[0]][key[1]] /= value; } - } - else if (len === 3) { + } else if (len === 3) { if (operation === 0) { child[key[0]][key[1]][key[2]] = value; - } - else if (operation === 1) { + } else if (operation === 1) { child[key[0]][key[1]][key[2]] += value; - } - else if (operation === 2) { + } else if (operation === 2) { child[key[0]][key[1]][key[2]] -= value; - } - else if (operation === 3) { + } else if (operation === 3) { child[key[0]][key[1]][key[2]] *= value; - } - else if (operation === 4) { + } else if (operation === 4) { child[key[0]][key[1]][key[2]] /= value; } - } - else if (len === 4) { + } else if (len === 4) { if (operation === 0) { child[key[0]][key[1]][key[2]][key[3]] = value; - } - else if (operation === 1) { + } else if (operation === 1) { child[key[0]][key[1]][key[2]][key[3]] += value; - } - else if (operation === 2) { + } else if (operation === 2) { child[key[0]][key[1]][key[2]][key[3]] -= value; - } - else if (operation === 3) { + } else if (operation === 3) { child[key[0]][key[1]][key[2]][key[3]] *= value; - } - else if (operation === 4) { + } else if (operation === 4) { child[key[0]][key[1]][key[2]][key[3]] /= value; } } @@ -32323,8 +32637,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if ((!checkAlive || (checkAlive && this.children[i].alive)) && (!checkVisible || (checkVisible && this.children[i].visible))) { if (this.children[i] instanceof Phaser.Group) { this.children[i].setAllChildren(key, value, checkAlive, checkVisible, operation, force); - } - else { + } else { this.setProperty(this.children[i], key.split('.'), value, operation, force); } } @@ -32585,23 +32898,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (child[callback[0]]) { return child[callback[0]]; } - } - else if (length === 2) { + } else if (length === 2) { if (child[callback[0]][callback[1]]) { return child[callback[0]][callback[1]]; } - } - else if (length === 3) { + } else if (length === 3) { if (child[callback[0]][callback[1]][callback[2]]) { return child[callback[0]][callback[1]][callback[2]]; } - } - else if (length === 4) { + } else if (length === 4) { if (child[callback[0]][callback[1]][callback[2]][callback[3]]) { return child[callback[0]][callback[1]][callback[2]][callback[3]]; } - } - else if (child[callback]) { + } else if (child[callback]) { return child[callback]; } @@ -32633,8 +32942,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (context === undefined || context === null || context === '') { context = null; - } - else { + } else { // Extract the context into an array if (typeof context === 'string') { context = context.split('.'); @@ -32664,8 +32972,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (callback) { callback.apply(callbackContext, args); } - } - else if (callback) { + } else if (callback) { callback.apply(this.children[i], args); } } @@ -32821,8 +33128,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ callback.call(callbackContext, this.children[i]); } } - } - else { + } else { // Assigning to arguments properties causes Extreme Deoptimization in Chrome, FF, and IE. // Using an array and pushing each element (not a slice!) is _significantly_ faster. var args = [null]; @@ -32951,8 +33257,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (order === Phaser.Group.SORT_ASCENDING) { this.children.sort(this.ascendingSortHandler.bind(this)); - } - else { + } else { this.children.sort(this.descendingSortHandler.bind(this)); } @@ -32995,17 +33300,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (a[this._sortProperty] < b[this._sortProperty]) { return -1; - } - else if (a[this._sortProperty] > b[this._sortProperty]) { + } else if (a[this._sortProperty] > b[this._sortProperty]) { + return 1; + } else if (a.z < b.z) { + return -1; + } else { return 1; - } - else { - if (a.z < b.z) { - return -1; - } - else { - return 1; - } } }; @@ -33022,11 +33322,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (a[this._sortProperty] < b[this._sortProperty]) { return 1; - } - else if (a[this._sortProperty] > b[this._sortProperty]) { + } else if (a[this._sortProperty] > b[this._sortProperty]) { return -1; - } - else { + } else { return 0; } @@ -33065,8 +33363,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.children.length === 0) { if (returnType === Phaser.Group.RETURN_TOTAL) { return 0; - } - else if (returnType === Phaser.Group.RETURN_ALL) { + } else if (returnType === Phaser.Group.RETURN_ALL) { return []; } } @@ -33085,16 +33382,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (args) { args[0] = this.children[i]; callback.apply(callbackContext, args); - } - else { + } else { callback.call(callbackContext, this.children[i]); } } if (returnType === Phaser.Group.RETURN_CHILD) { return this.children[i]; - } - else if (returnType === Phaser.Group.RETURN_ALL) { + } else if (returnType === Phaser.Group.RETURN_ALL) { output.push(this.children[i]); } } @@ -33102,11 +33397,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (returnType === Phaser.Group.RETURN_TOTAL) { return total; - } - else if (returnType === Phaser.Group.RETURN_ALL) { + } else if (returnType === Phaser.Group.RETURN_ALL) { return output; - } - else { + } else { // RETURN_CHILD or RETURN_NONE return null; } @@ -33499,8 +33792,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (child[property] === value) { output.push(child); } - } - else { + } else { output.push(child); } } @@ -33774,7 +34066,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {integer} total * @readonly */ - Object.defineProperty(Phaser.Group.prototype, "total", { + Object.defineProperty(Phaser.Group.prototype, 'total', { get: function () { @@ -33791,7 +34083,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {integer} length * @readonly */ - Object.defineProperty(Phaser.Group.prototype, "length", { + Object.defineProperty(Phaser.Group.prototype, 'length', { get: function () { @@ -33812,7 +34104,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#angle * @property {number} angle */ - Object.defineProperty(Phaser.Group.prototype, "angle", { + Object.defineProperty(Phaser.Group.prototype, 'angle', { get: function () { return Phaser.Math.radToDeg(this.rotation); @@ -33833,7 +34125,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#centerX * @property {number} centerX */ - Object.defineProperty(Phaser.Group.prototype, "centerX", { + Object.defineProperty(Phaser.Group.prototype, 'centerX', { get: function () { @@ -33861,7 +34153,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#centerY * @property {number} centerY */ - Object.defineProperty(Phaser.Group.prototype, "centerY", { + Object.defineProperty(Phaser.Group.prototype, 'centerY', { get: function () { @@ -33889,7 +34181,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#left * @property {number} left */ - Object.defineProperty(Phaser.Group.prototype, "left", { + Object.defineProperty(Phaser.Group.prototype, 'left', { get: function () { @@ -33917,7 +34209,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#right * @property {number} right */ - Object.defineProperty(Phaser.Group.prototype, "right", { + Object.defineProperty(Phaser.Group.prototype, 'right', { get: function () { @@ -33945,7 +34237,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#top * @property {number} top */ - Object.defineProperty(Phaser.Group.prototype, "top", { + Object.defineProperty(Phaser.Group.prototype, 'top', { get: function () { @@ -33973,7 +34265,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Group#bottom * @property {number} bottom */ - Object.defineProperty(Phaser.Group.prototype, "bottom", { + Object.defineProperty(Phaser.Group.prototype, 'bottom', { get: function () { @@ -34272,7 +34564,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; /** - * Updates the size of this world. Note that this doesn't modify the world x/y coordinates, just the width and height. + * Updates this world's width and height (but not smaller than any previous {@link #setBounds defined size}). + * + * Phaser uses this to adapt to {@link Phaser.ScaleManager#updateDimensions layout changes}. + * You probably want to use {@link #setBounds} instead. * * @method Phaser.World#resize * @param {number} width - New width of the game world in pixels. @@ -34346,26 +34641,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!useBounds) { if (horizontal && sprite.x + padding < this.bounds.x) { sprite.x = this.bounds.right + padding; - } - else if (horizontal && sprite.x - padding > this.bounds.right) { + } else if (horizontal && sprite.x - padding > this.bounds.right) { sprite.x = this.bounds.left - padding; } if (vertical && sprite.y + padding < this.bounds.top) { sprite.y = this.bounds.bottom + padding; - } - else if (vertical && sprite.y - padding > this.bounds.bottom) { + } else if (vertical && sprite.y - padding > this.bounds.bottom) { sprite.y = this.bounds.top - padding; } - } - else { + } else { sprite.getBounds(); if (horizontal) { if ((sprite.x + sprite._currentBounds.width) < this.bounds.x) { sprite.x = this.bounds.right; - } - else if (sprite.x > this.bounds.right) { + } else if (sprite.x > this.bounds.right) { sprite.x = this.bounds.left; } } @@ -34373,8 +34664,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (vertical) { if ((sprite.y + sprite._currentBounds.height) < this.bounds.top) { sprite.y = this.bounds.bottom; - } - else if (sprite.y > this.bounds.bottom) { + } else if (sprite.y > this.bounds.bottom) { sprite.y = this.bounds.top; } } @@ -34382,11 +34672,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + /** + * @method Phaser.World#wrapAll + * @param {Phaser.Group} group - A group of sprites. + * @param {boolean} [checkExists=false] - Wrap only sprites having `exists=true`. + * @param {number} [padding=0] - Extra padding added equally to the sprite.x and y coordinates before checking if within the world bounds. Ignored if useBounds is true. + * @param {boolean} [useBounds=false] - If useBounds is false wrap checks the object.x/y coordinates. If true it does a more accurate bounds check, which is more expensive. + * @param {boolean} [horizontal=true] - If horizontal is false, wrap will not wrap the object.x coordinates horizontally. + * @param {boolean} [vertical=true] - If vertical is false, wrap will not wrap the object.y coordinates vertically. + */ + Phaser.World.prototype.wrapAll = function (group, checkExists, padding, useBounds, horizontal, vertical) { + + group.forEach(this.wrap, this, checkExists, padding, useBounds, horizontal, vertical); + + }; + /** * @name Phaser.World#width * @property {number} width - Gets or sets the current width of the game world. The world can never be smaller than the game (canvas) dimensions. */ - Object.defineProperty(Phaser.World.prototype, "width", { + Object.defineProperty(Phaser.World.prototype, 'width', { get: function () { return this.bounds.width; @@ -34410,7 +34715,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.World#height * @property {number} height - Gets or sets the current height of the game world. The world can never be smaller than the game (canvas) dimensions. */ - Object.defineProperty(Phaser.World.prototype, "height", { + Object.defineProperty(Phaser.World.prototype, 'height', { get: function () { return this.bounds.height; @@ -34435,7 +34740,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} centerX - Gets the X position corresponding to the center point of the world. * @readonly */ - Object.defineProperty(Phaser.World.prototype, "centerX", { + Object.defineProperty(Phaser.World.prototype, 'centerX', { get: function () { return this.bounds.halfWidth + this.bounds.x; @@ -34448,7 +34753,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} centerY - Gets the Y position corresponding to the center point of the world. * @readonly */ - Object.defineProperty(Phaser.World.prototype, "centerY", { + Object.defineProperty(Phaser.World.prototype, 'centerY', { get: function () { return this.bounds.halfHeight + this.bounds.y; @@ -34461,14 +34766,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} randomX - Gets a random integer which is lesser than or equal to the current width of the game world. * @readonly */ - Object.defineProperty(Phaser.World.prototype, "randomX", { + Object.defineProperty(Phaser.World.prototype, 'randomX', { get: function () { if (this.bounds.x < 0) { return this.game.rnd.between(this.bounds.x, (this.bounds.width - Math.abs(this.bounds.x))); - } - else { + } else { return this.game.rnd.between(this.bounds.x, this.bounds.width); } @@ -34481,14 +34785,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} randomY - Gets a random integer which is lesser than or equal to the current height of the game world. * @readonly */ - Object.defineProperty(Phaser.World.prototype, "randomY", { + Object.defineProperty(Phaser.World.prototype, 'randomY', { get: function () { if (this.bounds.y < 0) { return this.game.rnd.between(this.bounds.y, (this.bounds.height - Math.abs(this.bounds.y))); - } - else { + } else { return this.game.rnd.between(this.bounds.y, this.bounds.height); } @@ -34515,7 +34818,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * For example a Sprite has a `game` property, allowing you to talk to the various parts * of Phaser directly, without having to look after your own references. * - * In it's most simplest form, a Phaser game can be created by providing the arguments + * In its most simplest form, a Phaser game can be created by providing the arguments * to the constructor: * * ```javascript @@ -34562,7 +34865,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number|string|GameConfig} [width=800] - The width of your game in game pixels. If given as a string the value must be between 0 and 100 and will be used as the percentage width of the parent container, or the browser window if no parent is given. * @param {number|string} [height=600] - The height of your game in game pixels. If given as a string the value must be between 0 and 100 and will be used as the percentage height of the parent container, or the browser window if no parent is given. * @param {number} [renderer=Phaser.AUTO] - Which renderer to use: Phaser.AUTO will auto-detect, Phaser.WEBGL, Phaser.WEBGL_MULTI, Phaser.CANVAS or Phaser.HEADLESS (no rendering at all). - * @param {string|HTMLElement} [parent=''] - The DOM element into which this games canvas will be injected. Either a DOM ID (string) or the element itself. + * @param {string|HTMLElement} [parent=''] - The DOM element into which this game canvas will be injected. Either a DOM `id` (string) or the element itself. If omitted (or no such element exists), the game canvas is appended to the document body. * @param {object} [state=null] - The default state object. A object consisting of Phaser.State functions (preload, create, update, render) or null. * @param {boolean} [transparent=false] - Use a transparent canvas background or not. * @param {boolean} [antialias=true] - Draw all image textures anti-aliased or not. The default is for smooth textures, but disable if your game features pixel art. @@ -34651,7 +34954,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Has support for Multiple bound Textures in WebGL been enabled? This is a read-only property. - * To set it you need to either specify `Phaser.WEBGL_MULTI` as the renderer objType, or use the Game + * To set it you need to either specify `Phaser.WEBGL_MULTI` as the renderer type, or use the Game * Configuration object with the property `multiTexture` set to true. It has to be enabled before * Pixi boots, and cannot be changed after the game is running. Once enabled, take advantage of it * via the `game.renderer.setTexturePriority` method. @@ -34672,6 +34975,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Clear the Canvas each frame before rendering the display list. * You can set this to `false` to gain some performance if your game always contains a background that completely fills the display. * This must be `true` to show any {@link Phaser.Stage#backgroundColor} set on the Stage. + * This is effectively **read-only after the game has booted**. + * Use the {@link GameConfig} setting `clearBeforeRender` when creating the game, or set `game.renderer.clearBeforeRender` afterwards. * @property {boolean} clearBeforeRender * @default */ @@ -34684,7 +34989,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.renderer = null; /** - * @property {number} renderType - The Renderer this game will use. Either Phaser.AUTO, Phaser.CANVAS, Phaser.WEBGL, Phaser.WEBGL_MULTI or Phaser.HEADLESS. After the game boots, renderType reflects the renderer in use: AUTO changes to CANVAS or WEBGL and WEBGL_MULTI changes to WEBGL. HEADLESS skips `render` hooks but not `preRender` or `postRender`; set {@link lockRender} to skip those as well. + * @property {number} renderType - The Renderer this game will use. Either Phaser.AUTO, Phaser.CANVAS, Phaser.WEBGL, Phaser.WEBGL_MULTI or Phaser.HEADLESS. After the game boots, renderType reflects the renderer in use: AUTO changes to CANVAS or WEBGL and WEBGL_MULTI changes to WEBGL. HEADLESS skips `preRender`, `render, and `postRender` hooks, just like {@link #lockRender}. * @readonly */ this.renderType = Phaser.AUTO; @@ -34836,6 +35141,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.lockRender = false; + /** + * @property {boolean} pendingDestroy - Destroy the game at the next update. + * @default + */ + this.pendingDestroy = false; + /** * @property {boolean} stepping - Enable core loop stepping with Game.enableStep(). * @default @@ -34890,7 +35201,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this._codePaused = false; /** - * The ID of the current/last logic update applied this render frame, starting from 0. + * The ID of the current/last logic update applied this animation frame, starting from 0. * The first update is `currentUpdateID === 0` and the last update is `currentUpdateID === updatesThisFrame.` * @property {integer} currentUpdateID * @protected @@ -34898,12 +35209,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.currentUpdateID = 0; /** - * Number of logic updates expected to occur this render frame; will be 1 unless there are catch-ups required (and allowed). + * Number of logic updates expected to occur this animation frame; will be 1 unless there are catch-ups required (and allowed). * @property {integer} updatesThisFrame * @protected */ this.updatesThisFrame = 1; + /** + * Number of renders expected to occur this animation frame. May be 0 if {@link #dropFrames is on} or {@link #forceSingleRender} is off; otherwise it will be 1. + * @property {integer} updatesThisFrame + * @protected + */ + this.rendersThisFrame = 1; + /** * @property {number} _deltaTime - Accumulate elapsed time until a logic update is due. * @private @@ -34941,6 +35259,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.forceSingleUpdate = true; + /** + * @property {boolean} forceSingleRender - Should the game loop make one render per animation frame, even without a preceding logic update? (During spiraling conditions, {@link #dropFrames} is used instead.) + */ + this.forceSingleRender = true; + + /** + * @property {boolean} dropFrames - When {@link #forceSingleUpdate} is off, skip {@link #updateRender rendering} if logic updates are spiraling upwards. + */ + this.dropFrames = false; + /** * @property {number} _nextNotification - The soonest game.time.time value that the next fpsProblemNotifier can be dispatched. * @private @@ -34950,8 +35278,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Parse the configuration object (if any) if (arguments.length === 1 && typeof arguments[0] === 'object') { this.parseConfig(arguments[0]); - } - else { + } else { this.config = {enableDebug: true}; if (typeof width !== 'undefined') { @@ -34993,24 +35320,46 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A configuration object for {@link Phaser.Game}. * * @typedef {object} GameConfig - * @property {number|string} [GameConfig.antialias=true] - * @property {string} [GameConfig.backgroundColor=0] - Sets {@link Phaser.Stage#backgroundColor}. - * @property {boolean} [GameConfig.disableVisibilityChange=false] - Sets {@link Phaser.Stage#disableVisibilityChange} - * @property {number|string} [GameConfig.height=600] - * @property {boolean} [GameConfig.enableDebug=true] - Enable {@link Phaser.Utils.Debug}. You can gain a little performance by disabling this in production. - * @property {number} [GameConfig.fullScreenScaleMode] - The scaling method used by the ScaleManager when in fullscreen. - * @property {DOMElement} [GameConfig.fullScreenTarget] - The DOM element on which the Fullscreen API enter request will be invoked. - * @property {boolean} [GameConfig.multiTexture=false] - Enable support for multiple bound Textures in WebGL. Same as `{renderer: Phaser.WEBGL_MULTI}`. - * @property {string|HTMLElement} [GameConfig.parent=''] - * @property {object} [GameConfig.physicsConfig=null] - * @property {boolean} [GameConfig.preserveDrawingBuffer=false] - Whether or not the contents of the stencil buffer is retained after rendering. - * @property {number} [GameConfig.renderer=Phaser.AUTO] - * @property {number} [GameConfig.resolution=1] - The resolution of your game, as a ratio of canvas pixels to game pixels. - * @property {number} [GameConfig.scaleMode] - The scaling method used by the ScaleManager when not in fullscreen. - * @property {number} [GameConfig.seed] - Seed for {@link Phaser.RandomDataGenerator}. - * @property {object} [GameConfig.state=null] - * @property {boolean} [GameConfig.transparent=false] - * @property {number|string} [GameConfig.width=800] + * @property {boolean} [GameConfig.alignH=false] - Sets {@link Phaser.ScaleManager#pageAlignHorizontally}. + * @property {boolean} [GameConfig.alignV=false] - Sets {@link Phaser.ScaleManager#pageAlignVertically}. + * @property {number|string} [GameConfig.antialias=true] + * @property {number|string} [GameConfig.backgroundColor=0] - Sets {@link Phaser.Stage#backgroundColor}. + * @property {HTMLCanvasElement} [GameConfig.canvas] - An existing canvas to display the game in. + * @property {string} [GameConfig.canvasID] - `id` attribute value to assign to the game canvas. + * @property {string} [GameConfig.canvasStyle] - `style` attribute value to assign to the game canvas. + * @property {boolean} [GameConfig.clearBeforeRender=true] - Sets {@link Phaser.Game#clearBeforeRender}. + * @property {boolean} [GameConfig.crisp=false] - Sets the canvas's `image-rendering` property to `pixelated` or `crisp-edges`. See {@link Phaser.Canvas.setImageRenderingCrisp}. + * @property {boolean} [GameConfig.disableVisibilityChange=false] - Sets {@link Phaser.Stage#disableVisibilityChange} + * @property {boolean} [GameConfig.disableStart=false] - Prevents the game loop from starting, allowing you to call updates manually. Helpful for automated testing. + * @property {boolean} [GameConfig.enableDebug=true] - Enable {@link Phaser.Utils.Debug}. You can gain a little performance by disabling this in production. + * @property {boolean} [GameConfig.failIfMajorPerformanceCaveat] - Abort WebGL context creation if performance would be poor. You can use this with renderer AUTO. + * @property {boolean} [GameConfig.forceSetTimeout] - Use {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout setTimeOut} for the game loop even if {@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame} is available. + * @property {number} [GameConfig.fullScreenScaleMode] - The scaling method used by the ScaleManager when in fullscreen. + * @property {HTMLElement} [GameConfig.fullScreenTarget] - The DOM element on which the Fullscreen API enter request will be invoked. + * @property {number|string} [GameConfig.height=600] + * @property {boolean} [GameConfig.keyboard=true] - Starts the keyboard input handler. + * @property {number} [GameConfig.maxPointers=-1] - Sets {@link Phaser.Input#maxPointers}. + * @property {boolean} [GameConfig.mouse=true] - Starts the mouse input handler, if the mspointer and touch handlers were not started. + * @property {boolean} [GameConfig.mouseWheel=true] - Starts the {@link Phaser.MouseWheel mouse wheel} handler, if supported by the device. + * @property {boolean} [GameConfig.mspointer=true] - Starts the {@link Phaser.MSPointer Pointer Events} handler (mspointer), if supported by the device. + * @property {boolean} [GameConfig.multiTexture=false] - Enable support for multiple bound Textures in WebGL. Same as `{renderer: Phaser.WEBGL_MULTI}`. + * @property {string|HTMLElement} [GameConfig.parent=''] - The DOM element into which this games canvas will be injected. + * @property {object} [GameConfig.physicsConfig] + * @property {boolean} [GameConfig.pointerLock=true] - Starts the {@link Phaser.PointerLock Pointer Lock} handler, if supported by the device. + * @property {boolean} [GameConfig.preserveDrawingBuffer=false] - Whether or not the contents of the stencil buffer is retained after rendering. + * @property {number} [GameConfig.renderer=Phaser.AUTO] + * @property {number} [GameConfig.resolution=1] - The resolution of your game, as a ratio of canvas pixels to game pixels. + * @property {boolean} [GameConfig.roundPixels=false] - Round pixel coordinates for rendering (rather than interpolating). Handy for crisp pixel art and speed on legacy devices. + * @property {number} [GameConfig.scaleH=1] - Horizontal scaling factor for USER_SCALE scale mode. + * @property {number} [GameConfig.scaleMode] - The scaling method used by the ScaleManager when not in fullscreen. + * @property {number} [GameConfig.scaleV=1] - Vertical scaling factor for USER_SCALE scale mode. + * @property {number} [GameConfig.seed] - Seed for {@link Phaser.RandomDataGenerator}. + * @property {object} [GameConfig.state] + * @property {boolean} [GameConfig.touch=true] - Starts the {@link Phaser.Touch touch} handler, if supported by the device and the Pointer Events handler (mspointer) was not started. + * @property {boolean|string} [GameConfig.transparent=false] - Sets {@link Phaser.Game#transparent}. `'notMultiplied'` disables the WebGL context attribute `premultipliedAlpha`. + * @property {number} [GameConfig.trimH=0] - Horizontal trim for USER_SCALE scale mode. + * @property {number} [GameConfig.trimV=0] - Vertical trim for USER_SCALE scale mode. + * @property {number|string} [GameConfig.width=800] */ // Documentation stub for linking. @@ -35026,62 +35375,66 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.config = config; - if (config['enableDebug'] === undefined) { + if (config.enableDebug === undefined) { this.config.enableDebug = true; } - if (config['width']) { - this._width = config['width']; + if (config.width) { + this._width = config.width; } - if (config['height']) { - this._height = config['height']; + if (config.height) { + this._height = config.height; } - if (config['renderer']) { - this.renderType = config['renderer']; + if (config.renderer) { + this.renderType = config.renderer; } - if (config['parent']) { - this.parent = config['parent']; + if (config.parent) { + this.parent = config.parent; } - if (config['transparent'] !== undefined) { - this.transparent = config['transparent']; + if (config.transparent !== undefined) { + this.transparent = config.transparent; } - if (config['antialias'] !== undefined) { - this.antialias = config['antialias']; + if (config.antialias !== undefined) { + this.antialias = config.antialias; } - if (config['multiTexture'] !== undefined) { - this.multiTexture = config['multiTexture']; + if (config.clearBeforeRender !== undefined) { + this.clearBeforeRender = config.clearBeforeRender; } - if (config['resolution']) { - this.resolution = config['resolution']; + if (config.multiTexture !== undefined) { + this.multiTexture = config.multiTexture; } - if (config['preserveDrawingBuffer'] !== undefined) { - this.preserveDrawingBuffer = config['preserveDrawingBuffer']; + if (config.resolution) { + this.resolution = config.resolution; } - if (config['physicsConfig']) { - this.physicsConfig = config['physicsConfig']; + if (config.preserveDrawingBuffer !== undefined) { + this.preserveDrawingBuffer = config.preserveDrawingBuffer; + } + + if (config.physicsConfig) { + this.physicsConfig = config.physicsConfig; } var seed = [(Date.now() * Math.random()).toString()]; - if (config['seed']) { - seed = config['seed']; + if (config.seed) { + seed = config.seed; } this.rnd = new Phaser.RandomDataGenerator(seed); var state = null; - if (config['state']) { - state = config['state']; + if (config.state) { + state = config.state; } this.state = new Phaser.StateManager(this, state); @@ -35135,15 +35488,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.stage.boot(); this.world.boot(); this.scale.boot(); - this.input.boot(); + this.input.boot(this.config); this.sound.boot(); this.state.boot(); - if (this.config['enableDebug']) { + if (this.config.enableDebug) { this.debug = new Phaser.Utils.Debug(this); this.debug.boot(); - } - else { + } else { this.debug = { preUpdate: function () { }, update: function () { @@ -35156,25 +35508,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.isRunning = true; - if (this.config && this.config['forceSetTimeOut']) { - this.raf = new Phaser.RequestAnimationFrame(this, this.config['forceSetTimeOut']); - } - else { + if (this.config && this.config.forceSetTimeOut) { + this.raf = new Phaser.RequestAnimationFrame(this, this.config.forceSetTimeOut); + } else { this.raf = new Phaser.RequestAnimationFrame(this, false); } this._kickstart = true; - if (window['focus']) { - if (!window['PhaserGlobal'] || (window['PhaserGlobal'] && !window['PhaserGlobal'].stopFocus)) { - window.focus(); - } + this.focusWindow(); + + if (this.config.disableStart) { + return; } if (this.cache.isReady) { this.raf.start(); - } - else { + } else { this.cache.onReady.addOnce(function () { this.raf.start(); }, this); @@ -35190,7 +35540,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ showDebugHeader: function () { - if (window['PhaserGlobal'] && window['PhaserGlobal'].hideBanner) { + if (window.PhaserGlobal && window.PhaserGlobal.hideBanner) { return; } @@ -35202,8 +35552,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.renderType === Phaser.WEBGL) { r = 'WebGL'; c++; - } - else if (this.renderType === Phaser.HEADLESS) { + } else if (this.renderType === Phaser.HEADLESS) { r = 'Headless'; } @@ -35227,15 +35576,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ for (var i = 0; i < 3; i++) { if (i < c) { args.push('color: #ff2424; background: #fff'); - } - else { + } else { args.push('color: #959595; background: #fff'); } } console.log.apply(console, args); - } - else if (window['console']) { + } else if (window.console) { console.log('Phaser v' + v + ' | Pixi.js | ' + r + ' | ' + a + ' | http://phaser.io'); } @@ -35249,51 +35596,61 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ setUpRenderer: function () { - if (this.config['canvas']) { - this.canvas = this.config['canvas']; - } - else { - this.canvas = Phaser.Canvas.create(this, this.width, this.height, this.config['canvasID'], true); + if (!this.device.canvas) { + // Nothing else to do + throw new Error('Phaser.Game - Cannot create Canvas 2d context, aborting.'); } - if (this.config['canvasStyle']) { - this.canvas.style = this.config['canvasStyle']; + if (this.config.canvas) { + this.canvas = this.config.canvas; + } else { + this.canvas = Phaser.Canvas.create(this, this.width, this.height, this.config.canvasID, true); } - else { + + if (this.config.canvasStyle) { + this.canvas.style = this.config.canvasStyle; + } else { this.canvas.style['-webkit-full-screen'] = 'width: 100%; height: 100%'; } - if (this.renderType === Phaser.HEADLESS || this.renderType === Phaser.CANVAS || (this.renderType === Phaser.AUTO && !this.device.webGL)) { - if (this.device.canvas) { - this.renderer = new PIXI.CanvasRenderer(this); - - this.context = this.renderer.context; - - if (this.renderType === Phaser.AUTO) { - this.renderType = Phaser.CANVAS; - } - } - else { - throw new Error('Phaser.Game - Cannot create Canvas or WebGL context, aborting.'); - } + if (this.config.crisp) { + Phaser.Canvas.setImageRenderingCrisp(this.canvas); } - else { - // They requested WebGL and their browser supports it + if ((this.renderType === Phaser.WEBGL) || + (this.renderType === Phaser.WEBGL_MULTI) || + (this.renderType === Phaser.AUTO && this.device.webGL)) { if (this.multiTexture || this.renderType === Phaser.WEBGL_MULTI) { PIXI.enableMultiTexture(); - this.multiTexture = true; } - this.renderType = Phaser.WEBGL; + try { + this.renderer = new PIXI.WebGLRenderer(this, this.config); + this.renderType = Phaser.WEBGL; + this.context = null; + this.canvas.addEventListener('webglcontextlost', this.contextLost.bind(this), false); + this.canvas.addEventListener('webglcontextrestored', this.contextRestored.bind(this), false); + } catch (webGLRendererError) { + PIXI.defaultRenderer = null; + this.renderer = null; + this.multiTexture = false; + PIXI._enableMultiTextureToggle = false; - this.renderer = new PIXI.WebGLRenderer(this); + if (this.renderType === Phaser.WEBGL) { + // No fallback + throw webGLRendererError; + } + } + } - this.context = null; + if (!this.renderer) { + this.renderer = new PIXI.CanvasRenderer(this, this.config); + this.context = this.renderer.context; - this.canvas.addEventListener('webglcontextlost', this.contextLost.bind(this), false); - this.canvas.addEventListener('webglcontextrestored', this.contextRestored.bind(this), false); + if (this.renderType === Phaser.AUTO) { + this.renderType = Phaser.CANVAS; + } } if (this.device.cocoonJS) { @@ -35349,6 +35706,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ update: function (time) { + if (this.pendingDestroy) { + this.destroy(); + + return; + } + this.time.update(time); if (this._kickstart) { @@ -35373,14 +35736,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.fpsProblemNotifier.dispatch(); } - // reset the _deltaTime accumulator which will cause all pending dropped frames to be permanently skipped + // reset the _deltaTime accumulator which will cause all pending late updates to be permanently skipped this._deltaTime = 0; this._spiraling = 0; - // call the game render update exactly once every frame + if (this.dropFrames) { + this.rendersThisFrame = 0; + } else { this.updateRender(this.time.slowMotion * this.time.desiredFps); + this.rendersThisFrame = 1; } - else { + } else { // step size taking into account the slow motion speed var slowStep = this.time.slowMotion * 1000.0 / this.time.desiredFps; @@ -35397,6 +35763,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.updatesThisFrame = Math.min(1, this.updatesThisFrame); } + if (this.forceSingleRender) { + this.rendersThisFrame = 1; + } else { + this.rendersThisFrame = Math.min(1, this.updatesThisFrame); + } + while (this._deltaTime >= slowStep) { this._deltaTime -= slowStep; this.currentUpdateID = count; @@ -35407,8 +35779,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.forceSingleUpdate && count === 1) { break; - } - else { + } else { this.time.refresh(); } } @@ -35416,17 +35787,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // detect spiraling (if the catch-up loop isn't fast enough, the number of iterations will increase constantly) if (count > this._lastCount) { this._spiraling++; - } - else if (count < this._lastCount) { + } else if (count < this._lastCount) { // looks like it caught up successfully, reset the spiral alert counter this._spiraling = 0; } this._lastCount = count; - // call the game render update exactly once every frame unless we're playing catch-up from a spiral condition + if (this.rendersThisFrame > 0) { this.updateRender(this._deltaTime / slowStep); } + } }, @@ -35444,6 +35815,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.pendingStep = true; } + this.time.countUpdate(); + this.scale.preUpdate(); this.debug.preUpdate(); this.camera.preUpdate(); @@ -35461,13 +35834,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.plugins.update(); this.stage.postUpdate(); + this.state.postUpdate(); this.plugins.postUpdate(); - } - else { + } else { // Scaling and device orientation changes are still reflected when paused. this.scale.pauseUpdate(); this.state.pauseUpdate(timeStep); this.debug.preUpdate(); + this.input.pauseUpdate(); } this.stage.updateTransform(); @@ -35491,19 +35865,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ updateRender: function (elapsedTime) { - if (this.lockRender) { + if (this.lockRender || this.renderType === Phaser.HEADLESS) { return; } + this.time.countRender(); + this.state.preRender(elapsedTime); - if (this.renderType !== Phaser.HEADLESS) { - this.renderer.render(this.stage); + this.renderer.render(this.stage); - this.plugins.render(elapsedTime); + this.plugins.render(elapsedTime); - this.state.render(elapsedTime); - } + this.state.render(elapsedTime); this.plugins.postRender(elapsedTime); @@ -35556,6 +35930,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * Then sets all of those local handlers to null, destroys the renderer, removes the canvas from the DOM * and resets the PIXI default renderer. * + * To destroy the game during an update callback, set {@link #pendingDestroy} instead. + * * @method Phaser.Game#destroy */ destroy: function () { @@ -35573,6 +35949,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.input.destroy(); this.physics.destroy(); this.plugins.destroy(); + this.tweens.destroy(); this.debug = null; this.state = null; @@ -35582,6 +35959,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.input = null; this.physics = null; this.plugins = null; + this.tweens = null; this.cache = null; this.load = null; @@ -35594,6 +35972,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Phaser.Canvas.removeFromDOM(this.canvas); + if (PIXI.game === this) { + PIXI.game = null; + } PIXI.defaultRenderer = null; Phaser.GAMES[this.id] = null; @@ -35686,12 +36067,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ focusGain: function (event) { + this.focusWindow(); + this.onFocus.dispatch(event); if (!this.stage.disableVisibilityChange) { this.gameResumed(event); } + }, + + /** + * Try to focus the browsing context, unless prohibited by PhaserGlobal.stopFocus. + * + * @private + */ + focusWindow: function () { + + if (window.focus) { + if (!window.PhaserGlobal || (window.PhaserGlobal && !window.PhaserGlobal.stopFocus)) { + window.focus(); + } + } + } }; @@ -35704,7 +36102,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Game#paused * @property {boolean} paused - Gets and sets the paused state of the Game. */ - Object.defineProperty(Phaser.Game.prototype, "paused", { + Object.defineProperty(Phaser.Game.prototype, 'paused', { get: function () { return this._paused; @@ -35715,13 +36113,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value === true) { if (this._paused === false) { this._paused = true; + if (this.sound.muteOnPause) { this.sound.setMute(); + } this.time.gamePaused(); this.onPause.dispatch(this); } this._codePaused = true; - } - else { + } else { if (this._paused) { this._paused = false; this.input.reset(); @@ -35806,7 +36205,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * When enabled, input (eg. Keyboard, Mouse, Touch) will be processed - as long as the individual sources are enabled themselves. * - * When not enabled, _all_ input sources are ignored. To disable just one objType of input; for example, the Mouse, use `input.mouse.enabled = false`. + * When not enabled, _all_ input sources are ignored. To disable just one type of input; for example, the Mouse, use `input.mouse.enabled = false`. * @property {boolean} enabled * @default */ @@ -35842,8 +36241,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.scale = null; /** - * @property {integer} maxPointers - The maximum number of Pointers allowed to be active at any one time. A value of -1 is only limited by the total number of pointers. For lots of games it's useful to set this to 1. + * The maximum number of Pointers allowed to be *active* at any one time. + * A value of -1 is only limited by the total number of pointers (MAX_POINTERS). For lots of games it's useful to set this to 1. + * At least 2 Pointers will always be *created*, unless MAX_POINTERS is smaller. + * @property {integer} maxPointers * @default -1 (Limited by total pointers.) + * @see Phaser.Input.MAX_POINTERS */ this.maxPointers = -1; @@ -35960,8 +36363,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.pointer10 = null; /** - * An array of non-mouse pointers that have been added to the game. - * The properties `pointer1..N` are aliases for `pointers[0..N-1]`. + * A pool of non-mouse (contact) pointers that have been added to the game. + * They're activated and updated by {@link Phaser.Input#mspointer} and {@link Phaser.Input#touch}. + * The properties `pointer1..10` are aliases for `pointers[0..9]`. * @property {Phaser.Pointer[]} pointers * @public * @readonly @@ -35980,6 +36384,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The mouse has its own unique Phaser.Pointer object which you can use if making a desktop specific game. * + * The mouse pointer is updated by {@link Phaser.Input#mouse} and {@link Phaser.Input#mspointer}. + * * @property {Pointer} mousePointer */ this.mousePointer = null; @@ -36127,38 +36533,54 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @constant - * @objType {number} + * @type {number} */ Phaser.Input.MOUSE_OVERRIDES_TOUCH = 0; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Input.TOUCH_OVERRIDES_MOUSE = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Input.MOUSE_TOUCH_COMBINE = 2; /** * The maximum number of pointers that can be added. This excludes the mouse pointer. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Input.MAX_POINTERS = 10; Phaser.Input.prototype = { + /** + * @typedef {object} InputConfig + * @property {boolean} [keyboard=true] + * @property {boolean} [maxPointers=-1] + * @property {boolean} [mouse=true] + * @property {boolean} [mouseWheel=true] + * @property {boolean} [mspointer=true] + * @property {boolean} [pointerLock=true] + * @property {boolean} [touch=true] + */ + /** * Starts the Input Manager running. * * @method Phaser.Input#boot * @protected + * @param {InputConfig} config */ - boot: function () { + boot: function (config) { + + if ('maxPointers' in config) { + this.maxPointers = config.maxPointers; + } this.mousePointer = new Phaser.Pointer(this.game, 0, Phaser.PointerMode.CURSOR); this.addPointer(); @@ -36167,6 +36589,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.mouse = new Phaser.Mouse(this.game); this.touch = new Phaser.Touch(this.game); this.mspointer = new Phaser.MSPointer(this.game); + this.mouseWheel = new Phaser.MouseWheel(this.game); + this.pointerLock = new Phaser.PointerLock(this.game); if (Phaser.Keyboard) { this.keyboard = new Phaser.Keyboard(this.game); @@ -36186,23 +36610,34 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.position = new Phaser.Point(); this._oldPosition = new Phaser.Point(); - this.circle = new Phaser.Circle(0, 0, 44); + this.circle = new Phaser.Circle(0, 0, 45); this.activePointer = this.mousePointer; this.hitCanvas = Phaser.CanvasPool.create(this, 1, 1); this.hitContext = this.hitCanvas.getContext('2d'); - this.mouse.start(); - if (!this.game.device.mspointer) { - // Chrome >= 55 fires both PointerEvent and TouchEvent. - // Pick only one. + if (this.game.device.mspointer && (config.mspointer !== false)) { + this.mspointer.start(); + } else if (this.game.device.touch && (config.touch !== false)) { this.touch.start(); } - this.mspointer.start(); + + if (!this.mspointer.active && (config.mouse !== false)) { + this.mouse.start(); + } + this.mousePointer.active = true; - if (this.keyboard) { + if (config.mouseWheel !== false) { + this.mouseWheel.start(); + } + + if (config.pointerLock !== false) { + this.pointerLock.start(); + } + + if (this.keyboard && (config.keyboard !== false)) { this.keyboard.start(); } @@ -36224,8 +36659,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ destroy: function () { this.mouse.stop(); + this.mouseWheel.stop(); this.touch.stop(); this.mspointer.stop(); + this.pointerLock.stop(); if (this.keyboard) { this.keyboard.stop(); @@ -36275,12 +36712,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Adds a callback that is fired every time the activePointer receives a DOM move event such as a mousemove or touchmove. * - * The callback will be sent 4 parameters: + * The callback will be sent 5 parameters: * - * A reference to the Phaser.Pointer object that moved, - * The x position of the pointer, - * The y position, - * A boolean indicating if the movement was the result of a 'click' event (such as a mouse click or touch down). + * - A reference to the Phaser.Pointer object that moved + * - The x position of the pointer + * - The y position + * - A boolean indicating if the movement was the result of a 'click' event (such as a mouse click or touch down) + * - The DOM move event * * It will be called every time the activePointer moves, which in a multi-touch game can be a lot of times, so this is best * to only use if you've limited input to a single pointer (i.e. mouse or touch). @@ -36346,7 +36784,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, /** - * Execute any {@link #touchLockCallbacks} of the given objType. + * Execute any {@link #touchLockCallbacks} of the given type. * * @method Phaser.Input#executeTouchLockCallbacks * @private @@ -36396,12 +36834,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ addPointer: function () { if (this.pointers.length >= Phaser.Input.MAX_POINTERS) { - console.warn("Phaser.Input.addPointer: Maximum limit of " + Phaser.Input.MAX_POINTERS + " pointers reached."); + console.warn('Phaser.Input.addPointer: Maximum limit of ' + Phaser.Input.MAX_POINTERS + ' pointers reached.'); return null; } var id = this.pointers.length + 1; - var pointer = new Phaser.Pointer(this.game, id, Phaser.PointerMode.TOUCH); + var pointer = new Phaser.Pointer(this.game, id, Phaser.PointerMode.CONTACT); this.pointers.push(pointer); this['pointer' + id] = pointer; @@ -36445,6 +36883,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, + /** + * Update method while paused. + * + * @method Phaser.Input#pauseUpdate + * @private + */ + pauseUpdate: function () { + + if (this.gamepad && this.gamepad.active) { + this.gamepad.update(); + } + + }, + /** * Reset all of the Pointers and Input states. * @@ -36472,10 +36924,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.keyboard.reset(hard); } - if (this.gamepad) { - this.gamepad.reset(); - } - for (var i = 0; i < this.pointers.length; i++) { this.pointers[i].reset(); } @@ -36756,8 +37204,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (displayObject.hitArea && displayObject.hitArea.contains) { return (displayObject.hitArea.contains(this._localPoint.x, this._localPoint.y)); - } - else if (Phaser.Creature && displayObject instanceof Phaser.Creature) { + } else if (Phaser.Creature && displayObject instanceof Phaser.Creature) { var width = Math.abs(displayObject.width); var height = Math.abs(displayObject.height); var x1 = displayObject.x - (width * displayObject.anchorX); @@ -36769,8 +37216,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return true; } } - } - else if (displayObject instanceof Phaser.TileSprite) { + } else if (displayObject instanceof Phaser.TileSprite) { var width = displayObject.width; var height = displayObject.height; var x1 = -width * displayObject.anchor.x; @@ -36782,8 +37228,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return true; } } - } - else if (displayObject instanceof PIXI.Sprite) { + } else if (displayObject instanceof PIXI.Sprite) { var width = displayObject.texture.frame.width / displayObject.texture.baseTexture.resolution; var height = displayObject.texture.frame.height / displayObject.texture.baseTexture.resolution; var x1 = -width * displayObject.anchor.x; @@ -36795,8 +37240,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return true; } } - } - else if (displayObject instanceof Phaser.Graphics) { + } else if (displayObject instanceof Phaser.Graphics) { for (var i = 0; i < displayObject.graphicsData.length; i++) { var data = displayObject.graphicsData[i]; @@ -36846,7 +37290,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Input#x * @property {number} x */ - Object.defineProperty(Phaser.Input.prototype, "x", { + Object.defineProperty(Phaser.Input.prototype, 'x', { get: function () { return this._x; @@ -36864,7 +37308,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @name Phaser.Input#y * @property {number} y */ - Object.defineProperty(Phaser.Input.prototype, "y", { + Object.defineProperty(Phaser.Input.prototype, 'y', { get: function () { return this._y; @@ -36882,7 +37326,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {boolean} pollLocked * @readonly */ - Object.defineProperty(Phaser.Input.prototype, "pollLocked", { + Object.defineProperty(Phaser.Input.prototype, 'pollLocked', { get: function () { return (this.pollRate > 0 && this._pollCounter < this.pollRate); @@ -36896,7 +37340,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} totalInactivePointers * @readonly */ - Object.defineProperty(Phaser.Input.prototype, "totalInactivePointers", { + Object.defineProperty(Phaser.Input.prototype, 'totalInactivePointers', { get: function () { return this.pointers.length - this.countActivePointers(); @@ -36910,7 +37354,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {integers} totalActivePointers * @readonly */ - Object.defineProperty(Phaser.Input.prototype, "totalActivePointers", { + Object.defineProperty(Phaser.Input.prototype, 'totalActivePointers', { get: function () { return this.countActivePointers(); @@ -36924,7 +37368,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} worldX - The world X coordinate of the most recently active pointer. * @readonly */ - Object.defineProperty(Phaser.Input.prototype, "worldX", { + Object.defineProperty(Phaser.Input.prototype, 'worldX', { get: function () { return this.game.camera.view.x + this.x; @@ -36938,7 +37382,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} worldY - The world Y coordinate of the most recently active pointer. * @readonly */ - Object.defineProperty(Phaser.Input.prototype, "worldY", { + Object.defineProperty(Phaser.Input.prototype, 'worldY', { get: function () { return this.game.camera.view.y + this.y; @@ -37005,55 +37449,33 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.mouseOverCallback = null; /** - * @property {function} mouseWheelCallback - A callback that can be fired when the mousewheel is used. - */ - this.mouseWheelCallback = null; - - /** - * @property {boolean} capture - If true the DOM mouse events will have event.preventDefault applied to them, if false they will propagate fully. + * @property {boolean} capture - If true the DOM mouse events will have event.preventDefault applied to them. */ this.capture = false; /** - * This property was removed in Phaser 2.4 and should no longer be used. - * Instead please see the Pointer button properties such as `Pointer.leftButton`, `Pointer.rightButton` and so on. - * Or Pointer.button holds the DOM event button value if you require that. - * @property {number} button - * @default + * @property {boolean} - Whether the handler has started. + * @readOnly + * @see Phaser.Mouse#start + * @see Phaser.Mouse#stop */ - this.button = -1; + this.active = false; /** - * The direction of the _last_ mousewheel usage 1 for up -1 for down. - * @property {number} wheelDelta - */ - this.wheelDelta = 0; - - /** - * Mouse input will only be processed if enabled. + * Whether mouse input is passed to the Input Manager and Mouse Pointer. + * When enabled is false, `game.input` and `game.input.mousePointer` are not updated by this handler. + * The handler is still running and will call any added callbacks and apply {@link Phaser.Mouse#capture}. * @property {boolean} enabled * @default */ this.enabled = true; - /** - * @property {boolean} locked - If the mouse has been Pointer Locked successfully this will be set to true. - * @default - */ - this.locked = false; - /** * @property {boolean} stopOnGameOut - If true Pointer.stop will be called if the mouse leaves the game canvas. * @default */ this.stopOnGameOut = false; - /** - * @property {Phaser.Signal} pointerLock - This event is dispatched when the browser enters or leaves pointer lock state. - * @default - */ - this.pointerLock = new Phaser.Signal(); - /** * The browser mouse DOM event. Will be null if no mouse event has ever been received. * Access this property only inside a Mouse event handler and do not keep references to it. @@ -37092,66 +37514,57 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this._onMouseOver = null; - /** - * @property {function} _onMouseWheel - Internal event handler reference. - * @private - */ - this._onMouseWheel = null; - - /** - * Wheel proxy event object, if required. Shared for all wheel events for this mouse. - * @property {Phaser.Mouse~WheelEventProxy} _wheelEvent - * @private - */ - this._wheelEvent = null; - }; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Mouse.NO_BUTTON = -1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Mouse.LEFT_BUTTON = 0; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Mouse.MIDDLE_BUTTON = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Mouse.RIGHT_BUTTON = 2; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Mouse.BACK_BUTTON = 3; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Mouse.FORWARD_BUTTON = 4; /** * @constant - * @objType {number} + * @type {number} + * @deprecated + * @see Phaser.MouseWheel.UP */ Phaser.Mouse.WHEEL_UP = 1; /** * @constant - * @objType {number} + * @type {number} + * @deprecated + * @see Phaser.MouseWheel.DOWN */ Phaser.Mouse.WHEEL_DOWN = -1; @@ -37160,17 +37573,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Starts the event listeners running. * @method Phaser.Mouse#start + * @return {boolean} - Whether the handler was started. */ start: function () { - if (this.game.device.android && this.game.device.chrome === false) { + var device = this.game.device; + + if (device.isAndroidStockBrowser() && this.input.touch.active) { // Android stock browser fires mouse events even if you preventDefault on the touchStart, so ... - return; + return false; } if (this._onMouseDown !== null) { // Avoid setting multiple listeners - return; + return false; } var _this = this; @@ -37203,35 +37619,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return _this.onMouseOver(event); }; - this._onMouseWheel = function (event) { - return _this.onMouseWheel(event); - }; - var canvas = this.game.canvas; canvas.addEventListener('mousedown', this._onMouseDown, true); canvas.addEventListener('mousemove', this._onMouseMove, true); canvas.addEventListener('mouseup', this._onMouseUp, true); - if (!this.game.device.cocoonJS) { + if (!device.cocoonJS) { window.addEventListener('mouseup', this._onMouseUpGlobal, true); window.addEventListener('mouseout', this._onMouseOutGlobal, true); canvas.addEventListener('mouseover', this._onMouseOver, true); canvas.addEventListener('mouseout', this._onMouseOut, true); } - var wheelEvent = this.game.device.wheelEvent; + this.active = true; - if (wheelEvent) { - canvas.addEventListener(wheelEvent, this._onMouseWheel, true); - - if (wheelEvent === 'mousewheel') { - this._wheelEvent = new WheelEventProxy(-1 / 40, 1); - } - else if (wheelEvent === 'DOMMouseScroll') { - this._wheelEvent = new WheelEventProxy(1, 1); - } - } + return true; }, @@ -37256,7 +37659,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return; } - event['identifier'] = 0; + event.identifier = 0; this.input.mousePointer.start(event); @@ -37283,7 +37686,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return; } - event['identifier'] = 0; + event.identifier = 0; this.input.mousePointer.move(event); @@ -37310,7 +37713,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return; } - event['identifier'] = 0; + event.identifier = 0; this.input.mousePointer.stop(event); @@ -37329,7 +37732,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.mouseUpCallback.call(this.callbackContext, event); } - event['identifier'] = 0; + event.identifier = 0; this.input.mousePointer.stop(event); } @@ -37396,11 +37799,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } if (this.stopOnGameOut) { - event['identifier'] = 0; + event.identifier = 0; this.input.mousePointer.stop(event); } + var list = this.input.interactiveItems.list; + var i = list.length; + + while (i--) { + var item = list[i]; + + if (item.enabled) { + item._pointerOutHandler(this.input.mousePointer); + } + } + }, /** @@ -37426,29 +37840,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, /** - * The internal method that handles the mouse wheel event from the browser. - * - * @method Phaser.Mouse#onMouseWheel - * @param {MouseEvent} event - The native event from the browser. + * Exit a pointer-locked state. + * @method Phaser.Mouse#releasePointerLock + * @deprecated + * @see Phaser.PointerLock#exit */ - onMouseWheel: function (event) { + releasePointerLock: function () { - if (this._wheelEvent) { - event = this._wheelEvent.bindEvent(event); - } + console.warn('Deprecated. Please use `input.pointerLock.exit()` instead.'); - this.event = event; - - if (this.capture) { - event.preventDefault(); - } - - // reverse detail for firefox - this.wheelDelta = Phaser.Math.clamp(-event.deltaY, -1, 1); - - if (this.mouseWheelCallback) { - this.mouseWheelCallback.call(this.callbackContext, event); - } + return this.input.pointerLock.exit(); }, @@ -37457,65 +37858,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * This is classically known as 'FPS controls', where the pointer can't leave the browser until the user presses an exit key. * If the browser successfully enters a locked state the event Phaser.Mouse.pointerLock will be dispatched and the first parameter will be 'true'. * @method Phaser.Mouse#requestPointerLock + * @deprecated + * @see Phaser.PointerLock#request */ requestPointerLock: function () { - if (this.game.device.pointerLock) { - var element = this.game.canvas; + console.warn('Deprecated. Please use `input.pointerLock.request()` instead.'); - element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock; - - element.requestPointerLock(); - - var _this = this; - - this._pointerLockChange = function (event) { - return _this.pointerLockChange(event); - }; - - document.addEventListener('pointerlockchange', this._pointerLockChange, true); - document.addEventListener('mozpointerlockchange', this._pointerLockChange, true); - document.addEventListener('webkitpointerlockchange', this._pointerLockChange, true); - } - - }, - - /** - * Internal pointerLockChange handler. - * - * @method Phaser.Mouse#pointerLockChange - * @param {Event} event - The native event from the browser. This gets stored in Mouse.event. - */ - pointerLockChange: function (event) { - - var element = this.game.canvas; - - if (document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element) { - // Pointer was successfully locked - this.locked = true; - this.pointerLock.dispatch(true, event); - } - else { - // Pointer was unlocked - this.locked = false; - this.pointerLock.dispatch(false, event); - } - - }, - - /** - * Internal release pointer lock handler. - * @method Phaser.Mouse#releasePointerLock - */ - releasePointerLock: function () { - - document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock; - - document.exitPointerLock(); - - document.removeEventListener('pointerlockchange', this._pointerLockChange, true); - document.removeEventListener('mozpointerlockchange', this._pointerLockChange, true); - document.removeEventListener('webkitpointerlockchange', this._pointerLockChange, true); + return this.input.pointerLock.request(); }, @@ -37533,18 +37883,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ canvas.removeEventListener('mouseover', this._onMouseOver, true); canvas.removeEventListener('mouseout', this._onMouseOut, true); - var wheelEvent = this.game.device.wheelEvent; - - if (wheelEvent) { - canvas.removeEventListener(wheelEvent, this._onMouseWheel, true); - } - window.removeEventListener('mouseup', this._onMouseUpGlobal, true); window.removeEventListener('mouseout', this._onMouseOutGlobal, true); - document.removeEventListener('pointerlockchange', this._pointerLockChange, true); - document.removeEventListener('mozpointerlockchange', this._pointerLockChange, true); - document.removeEventListener('webkitpointerlockchange', this._pointerLockChange, true); + this.active = false; } @@ -37552,90 +37894,239 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Phaser.Mouse.prototype.constructor = Phaser.Mouse; - /* jshint latedef:nofunc */ /** - * A purely internal event support class to proxy 'wheelscroll' and 'DOMMouseWheel' - * events to 'wheel'-like events. + * If the mouse has been Pointer Locked successfully this will be set to true. * - * See https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel for choosing a scale and delta mode. - * - * @method Phaser.Mouse#WheelEventProxy - * @private - * @param {number} scaleFactor - Scale factor as applied to wheelDelta/wheelDeltaX or details. - * @param {integer} deltaMode - The reported delta mode. + * @name Phaser.Mouse#locked + * @property {boolean} locked + * @default + * @deprecated + * @see Phaser.PointerLock#locked */ - function WheelEventProxy(scaleFactor, deltaMode) { + Object.defineProperty(Phaser.Mouse.prototype, 'locked', { - /** - * @property {number} _scaleFactor - Scale factor as applied to wheelDelta/wheelDeltaX or details. - * @private - */ - this._scaleFactor = scaleFactor; - - /** - * @property {number} _deltaMode - The reported delta mode. - * @private - */ - this._deltaMode = deltaMode; - - /** - * @property {any} originalEvent - The original event _currently_ being proxied; the getters will follow suit. - * @private - */ - this.originalEvent = null; - - } - - WheelEventProxy.prototype = {}; - WheelEventProxy.prototype.constructor = WheelEventProxy; - - WheelEventProxy.prototype.bindEvent = function (event) { - - // Generate stubs automatically - if (!WheelEventProxy._stubsGenerated && event) { - var makeBinder = function (name) { - - return function () { - var v = this.originalEvent[name]; - return typeof v !== 'function' ? v : v.bind(this.originalEvent); - }; - - }; - - for (var prop in event) { - if (!(prop in WheelEventProxy.prototype)) { - Object.defineProperty(WheelEventProxy.prototype, prop, { - get: makeBinder(prop) - }); - } - } - WheelEventProxy._stubsGenerated = true; + get: function () { + return this.input.pointerLock.locked; } - this.originalEvent = event; - return this; + }); + + /** + * This event is dispatched when the browser enters or leaves pointer lock state. + * + * @name Phaser.Mouse#pointerLock + * @property {Phaser.Signal} pointerLock + * @default + * @deprecated + * @see Phaser.PointerLock#onChange + */ + Object.defineProperty(Phaser.Mouse.prototype, 'pointerLock', { + + get: function () { + return this.input.pointerLock.onChange; + } + + }); + + /** + * @property {function} mouseWheelCallback - A callback that can be fired when the mousewheel is used. + * @deprecated + * @see Phaser.MouseWheel#callback + */ + Object.defineProperty(Phaser.Mouse.prototype, 'mouseWheelCallback', { + + get: function () { + return this.input.mouseWheel.callback; + }, + + set: function (val) { + this.input.mouseWheel.callback = val; + } + + }); + + /** + * The direction of the _last_ mousewheel usage. 1 for up; -1 for down. + * @property {number} wheelDelta + * @deprecated + * @see Phaser.MouseWheel#delta + */ + Object.defineProperty(Phaser.Mouse.prototype, 'wheelDelta', { + get: function () { + return this.input.mouseWheel.delta; + } + }); + + /** + * The mouse wheel input handler. + * @class + * @constructor + * @param {Phaser.Game} game + */ + Phaser.MouseWheel = function (game) { + + /** + * The currently running game. + * @type {Phaser.Game} + */ + this.game = game; + + /** + * The Input Manager. + * @type {Phaser.Input} + */ + this.input = game.input; + + /** + * The element where event listeners are added (the game canvas). + * @type {HTMLElement} + */ + this.element = game.canvas; + + /** + * Whether the default mouse wheel actions (usually zoom or pan) are cancelled. + * @type {boolean} + * @default + */ + this.preventDefault = true; + + /** + * Whether the handler is active. + * @type {boolean} + * @readOnly + * @see Phaser.MouseWheel#start + * @see Phaser.MouseWheel#stop + */ + this.active = false; + + /** + * A callback to call for each wheel event. + * It receives an `event` parameter. + * @type {function} + */ + this.callback = null; + + /** + * The context for {@link Phaser.MouseWheel#callback}. + * The default is {@link Phaser.MouseWheel#game}. + * @type {any} + */ + this.callbackContext = game; + + /** + * The direction of the last wheel event. + * Between -1 (down) and 1 (up). + * @type {number} + * @readOnly + * @default + */ + this.delta = 0; + + /** + * The name of the wheel event supported by the device, if any. + * 'wheel' (standard), 'mousewheel' (deprecated), or 'DOMMouseScroll' (obsolete Firefox). + * @type {?string} + * @private + * @see https://developer.mozilla.org/en-US/docs/Web/Events/wheel + * @see https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel + * @see https://developer.mozilla.org/en-US/docs/Web/Events/DOMMouseScroll + */ + this.wheelEventName = game.device.wheelEvent; + + /** + * The wheel event handler, bound to this instance. + * @type {function} + * @private + * @see Phaser.MouseWheel#onWheelHandler + */ + this.boundOnWheelHandler = this.onWheelHandler.bind(this); + + /** + * Wheel proxy event object, if required. Shared for all wheel events for this mouse. + * @type {Phaser.WheelEventProxy} + * @private + */ + this.eventProxy = null; }; - Object.defineProperties(WheelEventProxy.prototype, { - "type": {value: "wheel"}, - "deltaMode": { - get: function () { - return this._deltaMode; - } - }, - "deltaY": { - get: function () { - return (this._scaleFactor * (this.originalEvent.wheelDelta || this.originalEvent.detail)) || 0; - } - }, - "deltaX": { - get: function () { - return (this._scaleFactor * this.originalEvent.wheelDeltaX) || 0; - } - }, - "deltaZ": {value: 0} - }); + /** + * @constant + * @type {number} + */ + Phaser.MouseWheel.UP = 1; + + /** + * @constant + * @type {number} + */ + Phaser.MouseWheel.DOWN = -1; + + /** + * Activates the handler, unless unsupported or already activate. + * @method Phaser.MouseWheel#start + * @returns {boolean} - True if the handler was started, otherwise false. + */ + Phaser.MouseWheel.prototype.start = function () { + + if (!this.wheelEventName || this.active) { + return false; + } + + this.element.addEventListener(this.wheelEventName, this.boundOnWheelHandler, true); + + if (this.wheelEventName === 'mousewheel') { + this.eventProxy = new Phaser.WheelEventProxy(-1 / 40, 1); + } else if (this.wheelEventName === 'DOMMouseScroll') { + this.eventProxy = new Phaser.WheelEventProxy(1, 1); + } + + this.active = true; + + return true; + + }; + + /** + * Deactivates the handler. + * @method Phaser.MouseWheel#stop + */ + Phaser.MouseWheel.prototype.stop = function () { + + if (!this.active) { + return; + } + + this.element.removeEventListener(this.wheelEventName, this.boundOnWheelHandler, true); + + this.active = false; + + }; + + /** + * Processes the wheel event from the browser. + * @method Phaser.MouseWheel#onWheelHandler + * @private + * @param {WheelEvent|MouseWheelEvent|MouseScrollEvent} event + */ + Phaser.MouseWheel.prototype.onWheelHandler = function (event) { + + if (this.eventProxy) { + event = this.eventProxy.bindEvent(event); + } + + if (this.preventDefault) { + event.preventDefault(); + } + + // reverse delta for firefox + this.delta = Phaser.Math.clamp(-event.deltaY, -1, 1); + + if (this.callback) { + this.callback.call(this.callbackContext, event); + } + + }; /** * @author Richard Davey @@ -37644,17 +38135,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ /** - * The MSPointer class handles {@link https://developers.google.com/web/updates/2016/10/pointer-events Pointer-event} interactions with the game via a dedicated {@link Phaser.Pointer}. (It's named after the nonstandard {@link https://msdn.microsoft.com/library/hh673557(v=vs.85).aspx MSPointerEvent} since that was the first browser implementation.) + * The MSPointer class handles pointer interactions with the game via the {@link https://developers.google.com/web/updates/2016/10/pointer-events Pointer Events API}. (It's named after the nonstandard {@link https://msdn.microsoft.com/library/hh673557(v=vs.85).aspx MSPointerEvent}, ancestor of the current API.) * * It's {@link http://caniuse.com/#feat=pointer currently supported in IE 10+, Edge, Chrome (including Android), and Opera}. * * You should not normally access this class directly, but instead use a {@link Phaser.Pointer} object which * normalises all game input for you including accurate button handling. * - * Please note that at the current time of writing Phaser does not yet support chorded button interactions: - * http://www.w3.org/TR/pointerevents/#chorded-button-interactions + * Phaser does not yet support {@link http://www.w3.org/TR/pointerevents/#chorded-button-interactions chorded button interactions}. * - * You can disable Phaser's use of Pointer Events by either of two ways: + * You can disable Phaser's use of Pointer Events by any of three ways: + * + * ```javascript + * new Phaser.Game({ mspointer: false }); + * ``` * * ```javascript * // **Before** `new Phaser.Game(…)`: @@ -37706,17 +38200,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.pointerUpCallback = null; /** - * @property {boolean} capture - If true the Pointer events will have event.preventDefault applied to them, canceling the corresponding MouseEvent or TouchEvent. + * If true the PointerEvent will call preventDefault(), canceling the corresponding MouseEvent or + * TouchEvent. + * + * If the {@link Phaser.Mouse Mouse} handler is active as well, you should set this to true to avoid + * duplicate events. + * + * "Mouse events can only be prevented when the pointer is down. Hovering pointers (e.g. a mouse with + * no buttons pressed) cannot have their mouse events prevented. And, the `mouseover` and `mouseout` + * events are never prevented (even if the pointer is down)." + * + * @property {boolean} capture + * @see https://www.w3.org/Submission/pointer-events/#mapping-for-devices-that-support-hover */ - this.capture = true; - - /** - * This property was removed in Phaser 2.4 and should no longer be used. - * Instead please see the Pointer button properties such as `Pointer.leftButton`, `Pointer.rightButton` and so on. - * Or Pointer.button holds the DOM event button value if you require that. - * @property {number} button - */ - this.button = -1; + this.capture = false; /** * The most recent PointerEvent from the browser. Will be null if no event has ever been received. @@ -37726,6 +38223,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.event = null; + /** + * Whether the input handler is active. + * @property {boolean} active + * @readOnly + * @default + */ + this.active = false; + /** * PointerEvent input will only be processed if enabled. * @property {boolean} enabled @@ -37779,64 +38284,70 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ start: function () { + if (!this.game.device.mspointer) { + return false; + } + if (this._onMSPointerDown !== null) { // Avoid setting multiple listeners - return; + return false; } var _this = this; - if (this.game.device.mspointer) { - this._onMSPointerDown = function (event) { - return _this.onPointerDown(event); - }; + this._onMSPointerDown = function (event) { + return _this.onPointerDown(event); + }; - this._onMSPointerMove = function (event) { - return _this.onPointerMove(event); - }; + this._onMSPointerMove = function (event) { + return _this.onPointerMove(event); + }; - this._onMSPointerUp = function (event) { - return _this.onPointerUp(event); - }; + this._onMSPointerUp = function (event) { + return _this.onPointerUp(event); + }; - this._onMSPointerUpGlobal = function (event) { - return _this.onPointerUpGlobal(event); - }; + this._onMSPointerUpGlobal = function (event) { + return _this.onPointerUpGlobal(event); + }; - this._onMSPointerOut = function (event) { - return _this.onPointerOut(event); - }; + this._onMSPointerOut = function (event) { + return _this.onPointerOut(event); + }; - this._onMSPointerOver = function (event) { - return _this.onPointerOver(event); - }; + this._onMSPointerOver = function (event) { + return _this.onPointerOver(event); + }; - var canvas = this.game.canvas; + var canvas = this.game.canvas; - canvas.addEventListener('MSPointerDown', this._onMSPointerDown, false); - canvas.addEventListener('MSPointerMove', this._onMSPointerMove, false); - canvas.addEventListener('MSPointerUp', this._onMSPointerUp, false); + canvas.addEventListener('MSPointerDown', this._onMSPointerDown, false); + canvas.addEventListener('MSPointerMove', this._onMSPointerMove, false); + canvas.addEventListener('MSPointerUp', this._onMSPointerUp, false); + + // IE11+ uses non-prefix events + canvas.addEventListener('pointerdown', this._onMSPointerDown, false); + canvas.addEventListener('pointermove', this._onMSPointerMove, false); + canvas.addEventListener('pointerup', this._onMSPointerUp, false); + + canvas.style['-ms-content-zooming'] = 'none'; + canvas.style['-ms-touch-action'] = 'none'; + + if (!this.game.device.cocoonJS) { + window.addEventListener('MSPointerUp', this._onMSPointerUpGlobal, true); + canvas.addEventListener('MSPointerOver', this._onMSPointerOver, true); + canvas.addEventListener('MSPointerOut', this._onMSPointerOut, true); // IE11+ uses non-prefix events - canvas.addEventListener('pointerdown', this._onMSPointerDown, false); - canvas.addEventListener('pointermove', this._onMSPointerMove, false); - canvas.addEventListener('pointerup', this._onMSPointerUp, false); - - canvas.style['-ms-content-zooming'] = 'none'; - canvas.style['-ms-touch-action'] = 'none'; - - if (!this.game.device.cocoonJS) { - window.addEventListener('MSPointerUp', this._onMSPointerUpGlobal, true); - canvas.addEventListener('MSPointerOver', this._onMSPointerOver, true); - canvas.addEventListener('MSPointerOut', this._onMSPointerOut, true); - - // IE11+ uses non-prefix events - window.addEventListener('pointerup', this._onMSPointerUpGlobal, true); - canvas.addEventListener('pointerover', this._onMSPointerOver, true); - canvas.addEventListener('pointerout', this._onMSPointerOut, true); - } + window.addEventListener('pointerup', this._onMSPointerUpGlobal, true); + canvas.addEventListener('pointerover', this._onMSPointerOver, true); + canvas.addEventListener('pointerout', this._onMSPointerOut, true); } + this.active = true; + + return true; + }, /** @@ -37867,8 +38378,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (event.pointerType === 'mouse' || event.pointerType === 0x00000004) { this.input.mousePointer.start(event); - } - else { + } else { this.input.startPointer(event); } @@ -37899,8 +38409,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (event.pointerType === 'mouse' || event.pointerType === 0x00000004) { this.input.mousePointer.move(event); - } - else { + } else { this.input.updatePointer(event); } @@ -37933,8 +38442,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (event.pointerType === 'mouse' || event.pointerType === 0x00000004) { this.input.mousePointer.stop(event); - } - else { + } else { this.input.stopPointer(event); } @@ -37950,8 +38458,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if ((event.pointerType === 'mouse' || event.pointerType === 0x00000004) && !this.input.mousePointer.withinGame) { this.onPointerUp(event); - } - else { + } else { var pointer = this.input.getPointerFromIdentifier(event.identifier); if (pointer && pointer.withinGame) { @@ -37977,8 +38484,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (event.pointerType === 'mouse' || event.pointerType === 0x00000004) { this.input.mousePointer.withinGame = false; - } - else { + } else { var pointer = this.input.getPointerFromIdentifier(event.identifier); if (pointer) { @@ -37995,12 +38501,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } if (this.input.mouse.stopOnGameOut) { - event['identifier'] = 0; + event.identifier = 0; if (pointer) { pointer.stop(event); - } - else { + } else { this.input.mousePointer.stop(event); } } @@ -38023,8 +38528,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (event.pointerType === 'mouse' || event.pointerType === 0x00000004) { this.input.mousePointer.withinGame = true; - } - else { + } else { var pointer = this.input.getPointerFromIdentifier(event.identifier); if (pointer) { @@ -38064,6 +38568,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ canvas.removeEventListener('pointerover', this._onMSPointerOver, true); canvas.removeEventListener('pointerout', this._onMSPointerOut, true); + this.active = false; + } }; @@ -38292,8 +38798,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (condition) { this.start(event, value); - } - else { + } else { this.stop(event, value); } @@ -38397,7 +38902,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} duration * @readonly */ - Object.defineProperty(Phaser.DeviceButton.prototype, "duration", { + Object.defineProperty(Phaser.DeviceButton.prototype, 'duration', { get: function () { @@ -38424,7 +38929,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @constructor * @param {Phaser.Game} game - A reference to the currently running game. * @param {number} id - The ID of the Pointer object within the game. Each game can have up to 10 active pointers. - * @param {Phaser.PointerMode} pointerMode=(CURSOR|CONTACT) - The operational mode of this pointer, eg. CURSOR or TOUCH. + * @param {Phaser.PointerMode} pointerMode=(CURSOR|CONTACT) - The operational mode of this pointer, eg. CURSOR or CONTACT. */ Phaser.Pointer = function (game, id, pointerMode) { @@ -38439,7 +38944,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.id = id; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.POINTER; @@ -38619,25 +39124,27 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.screenY = -1; /** - * @property {number} rawMovementX - The horizontal raw relative movement of the Pointer in pixels since last event. + * @property {number} rawMovementX - The horizontal raw relative movement of the Pointer in pixels at the last event, if this is a Mouse Pointer in a locked state. * @default + * @see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX */ this.rawMovementX = 0; /** - * @property {number} rawMovementY - The vertical raw relative movement of the Pointer in pixels since last event. + * @property {number} rawMovementY - The vertical raw relative movement of the Pointer in pixels at the last event, if this is a Mouse Pointer in a locked state. * @default + * @see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementY */ this.rawMovementY = 0; /** - * @property {number} movementX - The horizontal processed relative movement of the Pointer in pixels since last event. + * @property {number} movementX - The cumulative horizontal relative movement of the Pointer in pixels since resetMovement() was called, if this is a Mouse Pointer in a locked state. * @default */ this.movementX = 0; /** - * @property {number} movementY - The vertical processed relative movement of the Pointer in pixels since last event. + * @property {number} movementY - The cumulative vertical relative movement of the Pointer in pixels since resetMovement() was called, if this is a Mouse Pointer in a locked state.. * @default */ this.movementY = 0; @@ -38776,28 +39283,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * No buttons at all. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.NO_BUTTON = 0; /** * The Left Mouse button, or in PointerEvent devices a Touch contact or Pen contact. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.LEFT_BUTTON = 1; /** * The Right Mouse button, or in PointerEvent devices a Pen contact with a barrel button. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.RIGHT_BUTTON = 2; /** * The Middle Mouse button. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.MIDDLE_BUTTON = 4; @@ -38805,7 +39312,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The X1 button. This is typically the mouse Back button, but is often reconfigured. * On Linux (GTK) this is unsupported. On Windows if advanced pointer software (such as IntelliPoint) is installed this doesn't register. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.BACK_BUTTON = 8; @@ -38813,14 +39320,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The X2 button. This is typically the mouse Forward button, but is often reconfigured. * On Linux (GTK) this is unsupported. On Windows if advanced pointer software (such as IntelliPoint) is installed this doesn't register. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.FORWARD_BUTTON = 16; /** * The Eraser pen button on PointerEvent supported devices only. * @constant - * @objType {number} + * @type {number} */ Phaser.Pointer.ERASER_BUTTON = 32; @@ -38942,38 +39449,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.backButton.startStop(Phaser.Pointer.BACK_BUTTON & buttons, event); this.forwardButton.startStop(Phaser.Pointer.FORWARD_BUTTON & buttons, event); this.eraserButton.startStop(Phaser.Pointer.ERASER_BUTTON & buttons, event); - } - else { + } else { // No buttons property (like Safari on OSX when using a trackpad) // Attempt to use event.button property or fallback to default if (event.button !== undefined) { // On OS X (and other devices with trackpads) you have to press CTRL + the pad to initiate a right-click event. if (down && event.ctrlKey && event.button === 0) { this.rightButton.start(event); + } else if (down) { + this.processButtonsDown(event.button, event); + } else if (!move) { + this.processButtonsUp(event.button, event); } - else { - if (down) { - this.processButtonsDown(event.button, event); - } - else if (!move) { - this.processButtonsUp(event.button, event); - } - } - } - else { - if (down) { - // On OS X (and other devices with trackpads) you have to press CTRL + the pad to initiate a right-click event. - if (event.ctrlKey) { - this.rightButton.start(event); - } - else { - this.leftButton.start(event); - } - } - else { - this.leftButton.stop(event); - this.rightButton.stop(event); + } else if (down) { + // On OS X (and other devices with trackpads) you have to press CTRL + the pad to initiate a right-click event. + if (event.ctrlKey) { + this.rightButton.start(event); + } else { + this.leftButton.start(event); } + } else { + this.leftButton.stop(event); + this.rightButton.stop(event); } } @@ -39011,7 +39508,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var input = this.game.input; - if (event['pointerId']) { + if (event.pointerId) { this.pointerId = event.pointerId; } @@ -39020,8 +39517,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.isMouse) { this.updateButtons(event); - } - else { + } else { this.isDown = true; this.isUp = false; } @@ -39179,7 +39675,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var i = input.moveCallbacks.length; while (i--) { - input.moveCallbacks[i].callback.call(input.moveCallbacks[i].context, this, this.x, this.y, fromClick); + input.moveCallbacks[i].callback.call(input.moveCallbacks[i].context, this, this.x, this.y, fromClick, event); } // Easy out if we're dragging something and it still exists @@ -39187,8 +39683,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.targetObject.update(this) === false) { this.targetObject = null; } - } - else if (input.interactiveItems.total > 0) { + } else if (input.interactiveItems.total > 0) { this.processInteractiveObjects(fromClick); } @@ -39294,29 +39789,24 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.targetObject._pointerOutHandler(this, silent); this.targetObject = null; } - } - else { - if (this.targetObject === null) { + } else if (this.targetObject === null) { + // And now set the new one + this.targetObject = newTarget; + newTarget._pointerOverHandler(this, silent); + } else { + // We've got a target from the last update + if (this.targetObject === newTarget) { + // Same target as before, so update it + if (newTarget.update(this) === false) { + this.targetObject = null; + } + } else { + // The target has changed, so tell the old one we've left it + this.targetObject._pointerOutHandler(this, silent); + // And now set the new one this.targetObject = newTarget; - newTarget._pointerOverHandler(this, silent); - } - else { - // We've got a target from the last update - if (this.targetObject === newTarget) { - // Same target as before, so update it - if (newTarget.update(this) === false) { - this.targetObject = null; - } - } - else { - // The target has changed, so tell the old one we've left it - this.targetObject._pointerOutHandler(this, silent); - - // And now set the new one - this.targetObject = newTarget; - this.targetObject._pointerOverHandler(this, silent); - } + this.targetObject._pointerOverHandler(this, silent); } } @@ -39360,14 +39850,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Was it a tap? if (this.duration >= 0 && this.duration <= input.tapRate) { // Was it a double-tap? - if (this.timeUp - this.previousTapTime < input.doubleTapRate) { - // Yes, let's dispatch the signal then with the 2nd parameter set to true - input.onTap.dispatch(this, true); - } - else { - // Wasn't a double-tap, so dispatch a single tap signal - input.onTap.dispatch(this, false); - } + var doubleTap = (this.timeUp - this.previousTapTime < input.doubleTapRate); + + input.onTap.dispatch(this, doubleTap, event); this.previousTapTime = this.timeUp; } @@ -39375,8 +39860,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.isMouse) { this.updateButtons(event); - } - else { + } else { this.isDown = false; this.isUp = true; } @@ -39560,7 +40044,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} duration * @readonly */ - Object.defineProperty(Phaser.Pointer.prototype, "duration", { + Object.defineProperty(Phaser.Pointer.prototype, 'duration', { get: function () { @@ -39580,7 +40064,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} worldX - The X value of this Pointer in world coordinates based on the world camera. * @readonly */ - Object.defineProperty(Phaser.Pointer.prototype, "worldX", { + Object.defineProperty(Phaser.Pointer.prototype, 'worldX', { get: function () { @@ -39596,7 +40080,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} worldY - The Y value of this Pointer in world coordinates based on the world camera. * @readonly */ - Object.defineProperty(Phaser.Pointer.prototype, "worldY", { + Object.defineProperty(Phaser.Pointer.prototype, 'worldY', { get: function () { @@ -39635,6 +40119,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; + Phaser.PointerModes = {}; + + Phaser.PointerModes[Phaser.PointerMode.CURSOR] = 'CURSOR'; + + Phaser.PointerModes[Phaser.PointerMode.CONTACT] = 'CONTACT'; + /** * @author Richard Davey * @copyright 2016 Photon Storm Ltd. @@ -39657,6 +40147,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.game = game; + /** + * Whether the input handler is active. + * @property {boolean} active + * @readOnly + */ + this.active = false; + /** * Touch events will only be processed if enabled. * @property {boolean} enabled @@ -39763,64 +40260,54 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ start: function () { + if (!this.game.device.touch) { + return false; + } + if (this._onTouchStart !== null) { // Avoid setting multiple listeners - return; + return false; } var _this = this; - if (this.game.device.touch) { - this._onTouchStart = function (event) { - return _this.onTouchStart(event); - }; + this._onTouchStart = function (event) { + return _this.onTouchStart(event); + }; - this._onTouchMove = function (event) { - return _this.onTouchMove(event); - }; + this._onTouchMove = function (event) { + return _this.onTouchMove(event); + }; - this._onTouchEnd = function (event) { - return _this.onTouchEnd(event); - }; + this._onTouchEnd = function (event) { + return _this.onTouchEnd(event); + }; - this._onTouchEnter = function (event) { - return _this.onTouchEnter(event); - }; + this._onTouchEnter = function (event) { + return _this.onTouchEnter(event); + }; - this._onTouchLeave = function (event) { - return _this.onTouchLeave(event); - }; + this._onTouchLeave = function (event) { + return _this.onTouchLeave(event); + }; - this._onTouchCancel = function (event) { - return _this.onTouchCancel(event); - }; + this._onTouchCancel = function (event) { + return _this.onTouchCancel(event); + }; - this.game.canvas.addEventListener('touchstart', this._onTouchStart, false); - this.game.canvas.addEventListener('touchmove', this._onTouchMove, false); - this.game.canvas.addEventListener('touchend', this._onTouchEnd, false); - this.game.canvas.addEventListener('touchcancel', this._onTouchCancel, false); + this.game.canvas.addEventListener('touchstart', this._onTouchStart, false); + this.game.canvas.addEventListener('touchmove', this._onTouchMove, false); + this.game.canvas.addEventListener('touchend', this._onTouchEnd, false); + this.game.canvas.addEventListener('touchcancel', this._onTouchCancel, false); - if (!this.game.device.cocoonJS) { - this.game.canvas.addEventListener('touchenter', this._onTouchEnter, false); - this.game.canvas.addEventListener('touchleave', this._onTouchLeave, false); - } + if (!this.game.device.cocoonJS) { + this.game.canvas.addEventListener('touchenter', this._onTouchEnter, false); + this.game.canvas.addEventListener('touchleave', this._onTouchLeave, false); } - /** - * Adds a callback that is fired when a browser touchstart or touchend event is received. - * - * @method Phaser.Touch#addTouchLockCallback - * @deprecated Use {@link Phaser.Input#addTouchLockCallback} instead. - */ - this.addTouchLockCallback = this.game.input.addTouchLockCallback.bind(this.game.input); + this.active = true; - /** - * Removes the callback at the defined index from the touchLockCallbacks array. - * - * @method Phaser.Touch#removeTouchLockCallback - * @deprecated Use {@link Phaser.Input#removeTouchLockCallback} instead. - */ - this.removeTouchLockCallback = this.game.input.removeTouchLockCallback.bind(this.game.input); + return true; }, @@ -40001,15 +40488,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ stop: function () { - if (this.game.device.touch) { - this.game.canvas.removeEventListener('touchstart', this._onTouchStart); - this.game.canvas.removeEventListener('touchmove', this._onTouchMove); - this.game.canvas.removeEventListener('touchend', this._onTouchEnd); - this.game.canvas.removeEventListener('touchenter', this._onTouchEnter); - this.game.canvas.removeEventListener('touchleave', this._onTouchLeave); - this.game.canvas.removeEventListener('touchcancel', this._onTouchCancel); + if (!this.game.device.touch) { + return; } + this.game.canvas.removeEventListener('touchstart', this._onTouchStart); + this.game.canvas.removeEventListener('touchmove', this._onTouchMove); + this.game.canvas.removeEventListener('touchend', this._onTouchEnd); + this.game.canvas.removeEventListener('touchenter', this._onTouchEnter); + this.game.canvas.removeEventListener('touchleave', this._onTouchLeave); + this.game.canvas.removeEventListener('touchcancel', this._onTouchCancel); + + this.active = false; + } }; @@ -40385,8 +40876,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.enabled) { this._wasEnabled = true; this.stop(); - } - else { + } else { this._wasEnabled = false; } @@ -40428,8 +40918,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Turning off if (this.enabled === false) { return; - } - else { + } else { // De-register, etc this.enabled = false; this.game.input.interactiveItems.remove(this); @@ -40445,7 +40934,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.sprite) { if (this._setHandCursor) { - this.game.canvas.style.cursor = ""; + this.game.canvas.style.cursor = ''; this._setHandCursor = false; } @@ -40626,8 +41115,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } return false; - } - else { + } else { return this._pointerData[pointerId].isOver; } @@ -40652,8 +41140,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return true; } } - } - else { + } else { return this._pointerData[pointerId].isOut; } @@ -40734,8 +41221,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!fastTest && this.pixelPerfectClick) { return this.checkPixel(this._tempPoint.x, this._tempPoint.y); - } - else { + } else { return true; } } @@ -40773,8 +41259,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (!fastTest && this.pixelPerfectOver) { return this.checkPixel(this._tempPoint.x, this._tempPoint.y); - } - else { + } else { return true; } } @@ -40876,17 +41361,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } return true; - } - else if (this.draggable && this._draggedPointerID === pointer.id) { + } else if (this.draggable && this._draggedPointerID === pointer.id) { return this.updateDrag(pointer, false); - } - else if (this._pointerData[pointer.id].isOver) { + } else if (this._pointerData[pointer.id].isOver) { if (this.checkPointerOver(pointer)) { this._pointerData[pointer.id].x = pointer.x - this.sprite.x; this._pointerData[pointer.id].y = pointer.y - this.sprite.y; return true; - } - else { + } else { this._pointerOutHandler(pointer); return false; } @@ -40920,7 +41402,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ data.y = pointer.y - this.sprite.y; if (this.useHandCursor && data.isDragged === false) { - this.game.canvas.style.cursor = "pointer"; + this.game.canvas.style.cursor = 'pointer'; this._setHandCursor = true; } @@ -40957,7 +41439,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ data.timeOut = this.game.time.time; if (this.useHandCursor && data.isDragged === false) { - this.game.canvas.style.cursor = ""; + this.game.canvas.style.cursor = ''; this._setHandCursor = false; } @@ -41019,8 +41501,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.draggable && this.isDragged === false) { if (this.dragTimeThreshold === 0 && this.dragDistanceThreshold === 0) { this.startDrag(pointer); - } - else { + } else { this._pendingDrag = true; this._dragDistancePass = (this.dragDistanceThreshold === 0); @@ -41028,8 +41509,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.dragTimeThreshold > 0) { this._dragTimePass = false; this.game.time.events.add(this.dragTimeThreshold, this.dragTimeElapsed, this, pointer); - } - else { + } else { this._dragTimePass = true; } } @@ -41105,7 +41585,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ data.isOver = isOver; if (!isOver && this.useHandCursor) { - this.game.canvas.style.cursor = "default"; + this.game.canvas.style.cursor = 'default'; this._setHandCursor = false; } @@ -41133,6 +41613,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ updateDrag: function (pointer, fromStart) { + var camera = this.game.camera; + var dragOffset = this.dragOffset; + var dragPoint = this._dragPoint; + var pointerData = this._pointerData[pointer.id]; + var snapPoint = this.snapPoint; + var sprite = this.sprite; + if (fromStart === undefined) { fromStart = false; } @@ -41143,16 +41630,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } var pointerLocalCoord = this.globalToLocal(pointer); - var px = pointerLocalCoord.x + this._dragPoint.x + this.dragOffset.x; - var py = pointerLocalCoord.y + this._dragPoint.y + this.dragOffset.y; - if (this.sprite.fixedToCamera) { + if (sprite.fixedToCamera) { + var px = camera.scale.x * pointerLocalCoord.x + dragPoint.x + dragOffset.x; + var py = camera.scale.y * pointerLocalCoord.y + dragPoint.y + dragOffset.y; + } else { + var px = pointerLocalCoord.x + dragPoint.x + dragOffset.x; + var py = pointerLocalCoord.y + dragPoint.y + dragOffset.y; + } + + if (sprite.fixedToCamera) { + var cameraOffset = sprite.cameraOffset; + var prevX = cameraOffset.x; + var prevY = cameraOffset.y; + if (this.allowHorizontalDrag) { - this.sprite.cameraOffset.x = px - this.game.camera.x; + cameraOffset.x = px - camera.x; } if (this.allowVerticalDrag) { - this.sprite.cameraOffset.y = py - this.game.camera.y; + cameraOffset.y = py - camera.y; } if (this.boundsRect) { @@ -41164,21 +41661,25 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } if (this.snapOnDrag) { - this.sprite.cameraOffset.x = Math.round((this.sprite.cameraOffset.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX); - this.sprite.cameraOffset.y = Math.round((this.sprite.cameraOffset.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY); - this.snapPoint.set(this.sprite.cameraOffset.x, this.sprite.cameraOffset.y); + cameraOffset.x = Math.round((cameraOffset.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX); + cameraOffset.y = Math.round((cameraOffset.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY); + snapPoint.set(cameraOffset.x, cameraOffset.y); } - } - else { - var cx = this.game.camera.x - this._pointerData[pointer.id].camX; - var cy = this.game.camera.y - this._pointerData[pointer.id].camY; + + var dx = cameraOffset.x - prevX; + var dy = cameraOffset.y - prevY; + } else { + var cx = camera.x - pointerData.camX; + var cy = camera.y - pointerData.camY; + var prevX = sprite.x; + var prevY = sprite.y; if (this.allowHorizontalDrag) { - this.sprite.x = px + cx; + sprite.x = px + cx; } if (this.allowVerticalDrag) { - this.sprite.y = py + cy; + sprite.y = py + cy; } if (this.boundsRect) { @@ -41190,13 +41691,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } if (this.snapOnDrag) { - this.sprite.x = Math.round((this.sprite.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX); - this.sprite.y = Math.round((this.sprite.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY); - this.snapPoint.set(this.sprite.x, this.sprite.y); + sprite.x = Math.round((sprite.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX); + sprite.y = Math.round((sprite.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY); + snapPoint.set(sprite.x, sprite.y); } + + var dx = sprite.x - prevX; + var dy = sprite.y - prevY; } - this.sprite.events.onDragUpdate.dispatch(this.sprite, pointer, px, py, this.snapPoint, fromStart); + this.sprite.events.onDragUpdate.dispatch(sprite, pointer, px, py, snapPoint, fromStart, dx, dy); return true; @@ -41326,7 +41830,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * You can set either (or both) of these properties after enabling a Sprite for drag. * * For the duration of the drag the Sprite.events.onDragUpdate event is dispatched. This event is only dispatched when the pointer actually - * changes position and moves. The event sends 5 parameters: `sprite`, `pointer`, `dragX`, `dragY` and `snapPoint`. + * changes position and moves. The event sends 8 parameters: `sprite`, `pointer`, `dragX`, `dragY`, `snapPoint`, `fromStart`, `deltaX`, and `deltaY`. * * @method Phaser.InputHandler#enableDrag * @param {boolean} [lockCenter=false] - If false the Sprite will drag from where you click it minus the dragOffset. If true it will center itself to the tip of the mouse pointer. @@ -41427,8 +41931,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } this._dragPoint.setTo(this.sprite.cameraOffset.x - pointer.x, this.sprite.cameraOffset.y - pointer.y); - } - else { + } else { if (this.dragFromCenter) { var bounds = this.sprite.getBounds(); var boundsCenterLocalCoord = this.globalToLocal(new Phaser.Point(bounds.centerX, bounds.centerY)); @@ -41500,8 +42003,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.sprite.parent) { return this.game.input.getLocalPosition(this.sprite.parent, {x: globalCoord.x, y: globalCoord.y}); - } - else { + } else { return globalCoord; } @@ -41525,8 +42027,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.sprite.fixedToCamera) { this.sprite.cameraOffset.x = Math.round((this.sprite.cameraOffset.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX); this.sprite.cameraOffset.y = Math.round((this.sprite.cameraOffset.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY); - } - else { + } else { this.sprite.x = Math.round((this.sprite.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX); this.sprite.y = Math.round((this.sprite.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY); } @@ -41619,30 +42120,25 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.sprite.fixedToCamera) { if (this.sprite.cameraOffset.x < this.boundsRect.left) { this.sprite.cameraOffset.x = this.boundsRect.left; - } - else if ((this.sprite.cameraOffset.x + this.sprite.width) > this.boundsRect.right) { + } else if ((this.sprite.cameraOffset.x + this.sprite.width) > this.boundsRect.right) { this.sprite.cameraOffset.x = this.boundsRect.right - this.sprite.width; } if (this.sprite.cameraOffset.y < this.boundsRect.top) { this.sprite.cameraOffset.y = this.boundsRect.top; - } - else if ((this.sprite.cameraOffset.y + this.sprite.height) > this.boundsRect.bottom) { + } else if ((this.sprite.cameraOffset.y + this.sprite.height) > this.boundsRect.bottom) { this.sprite.cameraOffset.y = this.boundsRect.bottom - this.sprite.height; } - } - else { + } else { if (this.sprite.left < this.boundsRect.left) { this.sprite.x = this.boundsRect.x + this.sprite.offsetX; - } - else if (this.sprite.right > this.boundsRect.right) { + } else if (this.sprite.right > this.boundsRect.right) { this.sprite.x = this.boundsRect.right - (this.sprite.width - this.sprite.offsetX); } if (this.sprite.top < this.boundsRect.top) { this.sprite.y = this.boundsRect.top + this.sprite.offsetY; - } - else if (this.sprite.bottom > this.boundsRect.bottom) { + } else if (this.sprite.bottom > this.boundsRect.bottom) { this.sprite.y = this.boundsRect.bottom - (this.sprite.height - this.sprite.offsetY); } } @@ -41659,30 +42155,25 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.sprite.fixedToCamera && this.boundsSprite.fixedToCamera) { if (this.sprite.cameraOffset.x < this.boundsSprite.cameraOffset.x) { this.sprite.cameraOffset.x = this.boundsSprite.cameraOffset.x; - } - else if ((this.sprite.cameraOffset.x + this.sprite.width) > (this.boundsSprite.cameraOffset.x + this.boundsSprite.width)) { + } else if ((this.sprite.cameraOffset.x + this.sprite.width) > (this.boundsSprite.cameraOffset.x + this.boundsSprite.width)) { this.sprite.cameraOffset.x = (this.boundsSprite.cameraOffset.x + this.boundsSprite.width) - this.sprite.width; } if (this.sprite.cameraOffset.y < this.boundsSprite.cameraOffset.y) { this.sprite.cameraOffset.y = this.boundsSprite.cameraOffset.y; - } - else if ((this.sprite.cameraOffset.y + this.sprite.height) > (this.boundsSprite.cameraOffset.y + this.boundsSprite.height)) { + } else if ((this.sprite.cameraOffset.y + this.sprite.height) > (this.boundsSprite.cameraOffset.y + this.boundsSprite.height)) { this.sprite.cameraOffset.y = (this.boundsSprite.cameraOffset.y + this.boundsSprite.height) - this.sprite.height; } - } - else { + } else { if (this.sprite.left < this.boundsSprite.left) { this.sprite.x = this.boundsSprite.left + this.sprite.offsetX; - } - else if (this.sprite.right > this.boundsSprite.right) { + } else if (this.sprite.right > this.boundsSprite.right) { this.sprite.x = this.boundsSprite.right - (this.sprite.width - this.sprite.offsetX); } if (this.sprite.top < this.boundsSprite.top) { this.sprite.y = this.boundsSprite.top + this.sprite.offsetY; - } - else if (this.sprite.bottom > this.boundsSprite.bottom) { + } else if (this.sprite.bottom > this.boundsSprite.bottom) { this.sprite.y = this.boundsSprite.bottom - (this.sprite.height - this.sprite.offsetY); } } @@ -41693,6 +42184,179 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Phaser.InputHandler.prototype.constructor = Phaser.InputHandler; + /** + * The pointer lock input handler. + * @class + * @constructor + * @param {Phaser.Game} game + */ + Phaser.PointerLock = function (game) { + /** + * The currently running game. + * @type {Phaser.Game} + */ + this.game = game; + + /** + * The Input Manager. + * @type {Phaser.Input} + */ + this.input = game.input; + + /** + * The element where event listeners are added. + * @type {HTMLElement} + */ + this.element = game.canvas; + + /** + * Whether the input handler is active. + * @type {boolean} + * @readOnly + */ + this.active = false; + + /** + * Whether the pointer is locked to the game canvas. + * @type {boolean} + */ + this.locked = false; + + /** + * A signal dispatched when the pointer is locked or unlocked. + * Its arguments are {@link Phaser.PointerLock#locked} and the original event from the browser. + * @type {Phaser.Signal} + */ + this.onChange = new Phaser.Signal(); + + /** + * A signal dispatched when a request to lock or unlock the pointer fails. + * Its argument is the original event from the browser. + * @type {Phaser.Signal} + */ + this.onError = new Phaser.Signal(); + + /** + * The 'pointerlockchange' handler, bound to this instance. + * @type {function} + * @private + */ + this.boundOnChangeHandler = this.onChangeHandler.bind(this); + + /** + * The 'pointerlockerror' handler, bound to this instance. + * @type {function} + * @private + */ + this.boundOnErrorHandler = this.onErrorHandler.bind(this); + + var device = game.device; + + /** + * The name of the 'pointerLockElement' property (or its equivalent) on this device. + * @type {?string} + * @private + */ + this.pointerLockElement = device.pointerLockElement; + + /** + * The name of the 'pointerlockchange' event (or its equivalent) on this device. + * @type {?string} + * @private + */ + this.pointerlockchange = device.pointerlockchange; + + /** + * The name of the 'pointerlockerror' event (or its equivalent) on this device. + * @type {?string} + * @private + */ + this.pointerlockerror = device.pointerlockerror; + }; + + /** + * Activates the handler, unless already active or Pointer Lock is unsupported on this device. + * @method Phaser.PointerLock#start + * @return {boolean} - True if the handler was started, otherwise false. + */ + Phaser.PointerLock.prototype.start = function () { + if (!this.game.device.pointerLock || this.active) { + return false; + } + + if (!this.element.requestPointerLock) { + this.element.requestPointerLock = this.element.mozRequestPointerLock || this.element.webkitRequestPointerLock; + } + + if (!document.exitPointerLock) { + document.exitPointerLock = document.mozExitPointerLock || document.webkitExitPointerLock; + } + + document.addEventListener(this.pointerlockchange, this.boundOnChangeHandler, true); + document.addEventListener(this.pointerlockerror, this.boundOnErrorHandler, true); + + this.active = true; + + return true; + }; + + /** + * Deactivates the handler. + * @method Phaser.PointerLock#stop + */ + Phaser.PointerLock.prototype.stop = function () { + document.removeEventListener(this.pointerlockchange, this.boundOnChangeHandler, true); + document.removeEventListener(this.pointerlockerror, this.boundOnErrorHandler, true); + + this.active = false; + }; + + /** + * Requests the browser to lock the pointer to the game canvas. + * Use onChange and onError to track the result of the request. + * @method Phaser.PointerLock#request + */ + Phaser.PointerLock.prototype.request = function () { + if (!this.active || this.locked) { + return; + } + + this.element.requestPointerLock(); + }; + + /** + * Releases the locked pointer. + * Use onChange and onError to track the result of the request. + * @method Phaser.PointerLock#exit + */ + Phaser.PointerLock.prototype.exit = function () { + document.exitPointerLock(); + }; + + /** + * Handles the 'pointerlockchange' event from the browser. + * @method Phaser.PointerLock#onChangeHandler + * @private + * @param {Event} event + * @emits Phaser.PointerLock#onChange + */ + Phaser.PointerLock.prototype.onChangeHandler = function (event) { + this.locked = (document[this.pointerLockElement] === this.element); + + this.onChange.dispatch(this.locked, event); + }; + + /** + * Handles the 'pointerlockerror' event from the browser. + * @method Phaser.PointerLock#onErrorHandler + * @private + * @param {Event} event + * @emits Phaser.PointerLock#onError + */ + Phaser.PointerLock.prototype.onErrorHandler = function (event) { + this.onError.dispatch(event); + }; + /** * @author @karlmacklin * @copyright 2016 Photon Storm Ltd. @@ -41947,13 +42611,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return; } - if (navigator['getGamepads']) { + if (navigator.getGamepads) { var rawGamepads = navigator.getGamepads(); - } - else if (navigator['webkitGetGamepads']) { + } else if (navigator.webkitGetGamepads) { var rawGamepads = navigator.webkitGetGamepads(); - } - else if (navigator['webkitGamepads']) { + } else if (navigator.webkitGamepads) { var rawGamepads = navigator.webkitGamepads(); } @@ -42021,14 +42683,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (validConnections.rawIndices[rawPad.index]) { singlePad.disconnect(); continue; - } - else { + } else { singlePad.connect(rawPad); validConnections.rawIndices[rawPad.index] = true; validConnections.padIndices[l] = true; } - } - else { + } else { singlePad.disconnect(); } } @@ -42157,7 +42817,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {boolean} active - If the gamepad input is active or not. * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "active", { + Object.defineProperty(Phaser.Gamepad.prototype, 'active', { get: function () { return this._active; @@ -42171,7 +42831,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {boolean} supported - Whether or not gamepads are supported in current browser. * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "supported", { + Object.defineProperty(Phaser.Gamepad.prototype, 'supported', { get: function () { return this._gamepadSupportAvailable; @@ -42185,7 +42845,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {number} padsConnected - How many live gamepads are currently connected. * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "padsConnected", { + Object.defineProperty(Phaser.Gamepad.prototype, 'padsConnected', { get: function () { return this._rawPads.length; @@ -42199,7 +42859,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Phaser.SinglePad} pad1 - Gamepad #1; * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "pad1", { + Object.defineProperty(Phaser.Gamepad.prototype, 'pad1', { get: function () { return this._gamepads[0]; @@ -42213,7 +42873,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Phaser.SinglePad} pad2 - Gamepad #2 * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "pad2", { + Object.defineProperty(Phaser.Gamepad.prototype, 'pad2', { get: function () { return this._gamepads[1]; @@ -42227,7 +42887,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Phaser.SinglePad} pad3 - Gamepad #3 * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "pad3", { + Object.defineProperty(Phaser.Gamepad.prototype, 'pad3', { get: function () { return this._gamepads[2]; @@ -42241,7 +42901,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Phaser.SinglePad} pad4 - Gamepad #4 * @readonly */ - Object.defineProperty(Phaser.Gamepad.prototype, "pad4", { + Object.defineProperty(Phaser.Gamepad.prototype, 'pad4', { get: function () { return this._gamepads[3]; @@ -42482,8 +43142,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._buttons[buttonCode]) { return this._buttons[buttonCode]; - } - else { + } else { return null; } @@ -42506,11 +43165,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (rawButtonVal !== this._buttons[i].value) { if (rawButtonVal === 1) { this.processButtonDown(i, rawButtonVal); - } - else if (rawButtonVal === 0) { + } else if (rawButtonVal === 0) { this.processButtonUp(i, rawButtonVal); - } - else { + } else { this.processButtonFloat(i, rawButtonVal); } } @@ -42521,8 +43178,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if ((value > 0 && value > this.deadZone) || (value < 0 && value < -this.deadZone)) { this.processAxisChange(index, value); - } - else { + } else { this.processAxisChange(index, 0); } } @@ -43002,8 +43658,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.onHoldCallback) { this.onHoldCallback.call(this.onHoldContext, this); } - } - else { + } else { this.durationUp = this.game.time.time - this.timeUp; } @@ -43133,8 +43788,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, /** - * Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down, - * or was pressed down longer ago than then given duration. + * Returns `true` if the Key has been up *only* within the `duration` value given, or `false` if it either isn't up, + * or was has been up longer than the given duration. * * @method Phaser.Key#upDuration * @param {number} [duration=50] - The duration within which the key is considered as being just released. Given in ms. @@ -43189,7 +43844,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @memberof Phaser.Key * @default false */ - Object.defineProperty(Phaser.Key.prototype, "justDown", { + Object.defineProperty(Phaser.Key.prototype, 'justDown', { get: function () { @@ -43212,7 +43867,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @memberof Phaser.Key * @default false */ - Object.defineProperty(Phaser.Key.prototype, "justUp", { + Object.defineProperty(Phaser.Key.prototype, 'justUp', { get: function () { @@ -43232,7 +43887,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @memberof Phaser.Key * @default true */ - Object.defineProperty(Phaser.Key.prototype, "enabled", { + Object.defineProperty(Phaser.Key.prototype, 'enabled', { get: function () { @@ -43284,6 +43939,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ this.game = game; + /** + * Whether the handler has started. + * @property {boolean} active + * @default + */ + this.active = false; + /** * Keyboard input will only be processed if enabled. * @property {boolean} enabled @@ -43292,7 +43954,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.enabled = true; /** - * @property {object} event - The most recent DOM event from keydown or keyup. This is updated every time a new key is pressed or released. + * @property {KeyboardEvent} event - The most recent DOM event from keydown or keyup. This is updated every time a new key is pressed or released. */ this.event = null; @@ -43307,17 +43969,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.callbackContext = this; /** - * @property {function} onDownCallback - This callback is invoked every time a key is pressed down, including key repeats when a key is held down. + * @property {function} onDownCallback - This callback is invoked every time a key is pressed down, including key repeats when a key is held down. One argument is passed: {KeyboardEvent} event. */ this.onDownCallback = null; /** - * @property {function} onPressCallback - This callback is invoked every time a DOM onkeypress event is raised, which is only for printable keys. + * @property {function} onPressCallback - This callback is invoked every time a DOM onkeypress event is raised, which is only for printable keys. Two arguments are passed: {string} `String.fromCharCode(event.charCode)` and {KeyboardEvent} event. */ this.onPressCallback = null; /** - * @property {function} onUpCallback - This callback is invoked every time a key is released. + * @property {function} onUpCallback - This callback is invoked every time a key is released. One argument is passed: {KeyboardEvent} event. */ this.onUpCallback = null; @@ -43397,6 +44059,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, + /** + * Removes callbacks added by {@link #addCallbacks} and restores {@link #callbackContext}. + * + * @method Phaser.Keyboard#removeCallbacks + */ + removeCallbacks: function () { + + this.callbackContext = this; + this.onDownCallback = null; + this.onUpCallback = null; + this.onPressCallback = null; + + }, + /** * If you need more fine-grained control over a Key you can create a new Phaser.Key object via this method. * The Key object can then be polled, have events attached to it, etc. @@ -43467,10 +44143,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ createCursorKeys: function () { return this.addKeys({ - 'up': Phaser.KeyCode.UP, - 'down': Phaser.KeyCode.DOWN, - 'left': Phaser.KeyCode.LEFT, - 'right': Phaser.KeyCode.RIGHT + up: Phaser.KeyCode.UP, + down: Phaser.KeyCode.DOWN, + left: Phaser.KeyCode.LEFT, + right: Phaser.KeyCode.RIGHT }); }, @@ -43481,16 +44157,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * @method Phaser.Keyboard#start * @protected + * @return {boolean} */ start: function () { if (this.game.device.cocoonJS) { - return; + return false; } - if (this._onKeyDown !== null) { + if (this.active) { // Avoid setting multiple listeners - return; + return false; } var _this = this; @@ -43511,6 +44188,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ window.addEventListener('keyup', this._onKeyUp, false); window.addEventListener('keypress', this._onKeyPress, false); + this.active = true; + + return true; + }, /** @@ -43528,6 +44209,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this._onKeyUp = null; this._onKeyPress = null; + this.active = false; + }, /** @@ -43565,8 +44248,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ for (var key in keycode) { this._capture[keycode[key]] = true; } - } - else { + } else { this._capture[keycode] = true; } }, @@ -43738,16 +44420,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._keys[keycode]) { return this._keys[keycode].downDuration(duration); - } - else { + } else { return null; } }, /** - * Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down, - * or was pressed down longer ago than then given duration. + * Returns `true` if the Key has been up *only* within the `duration` value given, or `false` if it either isn't up, + * or was has been up longer than the given duration. * * @method Phaser.Keyboard#upDuration * @param {Phaser.KeyCode|integer} keycode - The keycode of the key to check, i.e. Phaser.KeyCode.UP or Phaser.KeyCode.SPACEBAR. @@ -43758,8 +44439,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._keys[keycode]) { return this._keys[keycode].upDuration(duration); - } - else { + } else { return null; } @@ -43769,8 +44449,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._keys[keycode]) { return this._keys[keycode].justPressed(); - } - else { + } else { return null; } @@ -43780,8 +44459,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._keys[keycode]) { return this._keys[keycode].justReleased(); - } - else { + } else { return null; } @@ -43798,8 +44476,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._keys[keycode]) { return this._keys[keycode].isDown; - } - else { + } else { return null; } @@ -43813,17 +44490,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {string} lastChar - The string value of the most recently pressed key. * @readonly */ - Object.defineProperty(Phaser.Keyboard.prototype, "lastChar", { + Object.defineProperty(Phaser.Keyboard.prototype, 'lastChar', { get: function () { if (this.event && this.event.charCode === 32) { return ''; - } - else if (this.pressEvent) { + } else if (this.pressEvent) { return String.fromCharCode(this.pressEvent.charCode); - } - else { + } else { return null; } @@ -43837,7 +44512,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @property {Phaser.Key} lastKey - The most recently pressed Key. * @readonly */ - Object.defineProperty(Phaser.Keyboard.prototype, "lastKey", { + Object.defineProperty(Phaser.Keyboard.prototype, 'lastKey', { get: function () { @@ -43866,207 +44541,308 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.KeyCode = { /** @static */ - A: "A".charCodeAt(0), + A: 'A'.charCodeAt(0), + /** @static */ - B: "B".charCodeAt(0), + B: 'B'.charCodeAt(0), + /** @static */ - C: "C".charCodeAt(0), + C: 'C'.charCodeAt(0), + /** @static */ - D: "D".charCodeAt(0), + D: 'D'.charCodeAt(0), + /** @static */ - E: "E".charCodeAt(0), + E: 'E'.charCodeAt(0), + /** @static */ - F: "F".charCodeAt(0), + F: 'F'.charCodeAt(0), + /** @static */ - G: "G".charCodeAt(0), + G: 'G'.charCodeAt(0), + /** @static */ - H: "H".charCodeAt(0), + H: 'H'.charCodeAt(0), + /** @static */ - I: "I".charCodeAt(0), + I: 'I'.charCodeAt(0), + /** @static */ - J: "J".charCodeAt(0), + J: 'J'.charCodeAt(0), + /** @static */ - K: "K".charCodeAt(0), + K: 'K'.charCodeAt(0), + /** @static */ - L: "L".charCodeAt(0), + L: 'L'.charCodeAt(0), + /** @static */ - M: "M".charCodeAt(0), + M: 'M'.charCodeAt(0), + /** @static */ - N: "N".charCodeAt(0), + N: 'N'.charCodeAt(0), + /** @static */ - O: "O".charCodeAt(0), + O: 'O'.charCodeAt(0), + /** @static */ - P: "P".charCodeAt(0), + P: 'P'.charCodeAt(0), + /** @static */ - Q: "Q".charCodeAt(0), + Q: 'Q'.charCodeAt(0), + /** @static */ - R: "R".charCodeAt(0), + R: 'R'.charCodeAt(0), + /** @static */ - S: "S".charCodeAt(0), + S: 'S'.charCodeAt(0), + /** @static */ - T: "T".charCodeAt(0), + T: 'T'.charCodeAt(0), + /** @static */ - U: "U".charCodeAt(0), + U: 'U'.charCodeAt(0), + /** @static */ - V: "V".charCodeAt(0), + V: 'V'.charCodeAt(0), + /** @static */ - W: "W".charCodeAt(0), + W: 'W'.charCodeAt(0), + /** @static */ - X: "X".charCodeAt(0), + X: 'X'.charCodeAt(0), + /** @static */ - Y: "Y".charCodeAt(0), + Y: 'Y'.charCodeAt(0), + /** @static */ - Z: "Z".charCodeAt(0), + Z: 'Z'.charCodeAt(0), + /** @static */ - ZERO: "0".charCodeAt(0), + ZERO: '0'.charCodeAt(0), + /** @static */ - ONE: "1".charCodeAt(0), + ONE: '1'.charCodeAt(0), + /** @static */ - TWO: "2".charCodeAt(0), + TWO: '2'.charCodeAt(0), + /** @static */ - THREE: "3".charCodeAt(0), + THREE: '3'.charCodeAt(0), + /** @static */ - FOUR: "4".charCodeAt(0), + FOUR: '4'.charCodeAt(0), + /** @static */ - FIVE: "5".charCodeAt(0), + FIVE: '5'.charCodeAt(0), + /** @static */ - SIX: "6".charCodeAt(0), + SIX: '6'.charCodeAt(0), + /** @static */ - SEVEN: "7".charCodeAt(0), + SEVEN: '7'.charCodeAt(0), + /** @static */ - EIGHT: "8".charCodeAt(0), + EIGHT: '8'.charCodeAt(0), + /** @static */ - NINE: "9".charCodeAt(0), + NINE: '9'.charCodeAt(0), + /** @static */ NUMPAD_0: 96, + /** @static */ NUMPAD_1: 97, + /** @static */ NUMPAD_2: 98, + /** @static */ NUMPAD_3: 99, + /** @static */ NUMPAD_4: 100, + /** @static */ NUMPAD_5: 101, + /** @static */ NUMPAD_6: 102, + /** @static */ NUMPAD_7: 103, + /** @static */ NUMPAD_8: 104, + /** @static */ NUMPAD_9: 105, + /** @static */ NUMPAD_MULTIPLY: 106, + /** @static */ NUMPAD_ADD: 107, + /** @static */ NUMPAD_ENTER: 108, + /** @static */ NUMPAD_SUBTRACT: 109, + /** @static */ NUMPAD_DECIMAL: 110, + /** @static */ NUMPAD_DIVIDE: 111, + /** @static */ F1: 112, + /** @static */ F2: 113, + /** @static */ F3: 114, + /** @static */ F4: 115, + /** @static */ F5: 116, + /** @static */ F6: 117, + /** @static */ F7: 118, + /** @static */ F8: 119, + /** @static */ F9: 120, + /** @static */ F10: 121, + /** @static */ F11: 122, + /** @static */ F12: 123, + /** @static */ F13: 124, + /** @static */ F14: 125, + /** @static */ F15: 126, + /** @static */ COLON: 186, + /** @static */ EQUALS: 187, + /** @static */ COMMA: 188, + /** @static */ UNDERSCORE: 189, + /** @static */ PERIOD: 190, + /** @static */ QUESTION_MARK: 191, + /** @static */ TILDE: 192, + /** @static */ OPEN_BRACKET: 219, + /** @static */ BACKWARD_SLASH: 220, + /** @static */ CLOSED_BRACKET: 221, + /** @static */ QUOTES: 222, + /** @static */ BACKSPACE: 8, + /** @static */ TAB: 9, + /** @static */ CLEAR: 12, + /** @static */ ENTER: 13, + /** @static */ SHIFT: 16, + /** @static */ CONTROL: 17, + /** @static */ ALT: 18, + /** @static */ CAPS_LOCK: 20, + /** @static */ ESC: 27, + /** @static */ SPACEBAR: 32, + /** @static */ PAGE_UP: 33, + /** @static */ PAGE_DOWN: 34, + /** @static */ END: 35, + /** @static */ HOME: 36, + /** @static */ LEFT: 37, + /** @static */ UP: 38, + /** @static */ RIGHT: 39, + /** @static */ DOWN: 40, + /** @static */ PLUS: 43, + /** @static */ MINUS: 44, + /** @static */ INSERT: 45, + /** @static */ DELETE: 46, + /** @static */ HELP: 47, + /** @static */ NUM_LOCK: 144 }; @@ -44283,7 +45059,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, /** - * The center x coordinate of the Game Object. + * The local center x coordinate of the Game Object. * This is the same as `(x - offsetX) + (width / 2)`. * * @property {number} centerX @@ -44305,7 +45081,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, /** - * The center y coordinate of the Game Object. + * The local center y coordinate of the Game Object. * This is the same as `(y - offsetY) + (height / 2)`. * * @property {number} centerY @@ -44644,7 +45420,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ /** - * The BringToTop Component features quick access to Group sorting related methods. + * The BringToTop Component features quick access to Group and DisplayObject sorting-related methods. * * @class */ @@ -44652,8 +45428,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; /** - * Brings this Game Object to the top of its parents display list. - * Visually this means it will render over the top of any old child in the same Group. + * Brings this Game Object to the top of its parent's display list (the last position). + * Visually this means it will render over the top of all other children of the same parent. * * If this Game Object hasn't been added to a custom Group then this method will bring it to the top of the Game World, * because the World is the root Group from which all Game Objects descend. @@ -44663,8 +45439,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Component.BringToTop.prototype.bringToTop = function () { - if (this.parent) { - this.parent.bringToTop(this); + if (this.parent && this.parent.bringChildToTop) { + this.parent.bringChildToTop(this); } return this; @@ -44672,8 +45448,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; /** - * Sends this Game Object to the bottom of its parents display list. - * Visually this means it will render below all other children in the same Group. + * Sends this Game Object to the bottom of its parent's display list (the first position). + * Visually this means it will render below all other children of the same parent. * * If this Game Object hasn't been added to a custom Group then this method will send it to the bottom of the Game World, * because the World is the root Group from which all Game Objects descend. @@ -44683,8 +45459,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Component.BringToTop.prototype.sendToBack = function () { - if (this.parent) { - this.parent.sendToBack(this); + if (this.parent && this.parent.sendChildToBack) { + this.parent.sendChildToBack(this); } return this; @@ -44692,7 +45468,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; /** - * Moves this Game Object up one place in its parents display list. + * Moves this Game Object up one place in its parent's display list. * This call has no effect if the Game Object is already at the top of the display list. * * If this Game Object hasn't been added to a custom Group then this method will move it one object up within the Game World, @@ -44746,7 +45522,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; /** - * @property {boolean} skipTypeChecks - Skip objType checks in {@link #init}. + * @property {boolean} skipTypeChecks - Skip type checks in {@link #init}. * @static * @default */ @@ -44843,7 +45619,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.pendingDestroy) { this.destroy(); - return; + return false; } this.previousPosition.set(this.world.x, this.world.y); @@ -45040,8 +45816,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ } this.visible = true; - } - else { + } else { this._exists = false; if (this.body && this.body.type === Phaser.Physics.P2JS) { @@ -45175,17 +45950,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (rect) { if (copy && this.cropRect !== null) { this.cropRect.setTo(rect.x, rect.y, rect.width, rect.height); - } - else if (copy && this.cropRect === null) { + } else if (copy && this.cropRect === null) { this.cropRect = new Phaser.Rectangle(rect.x, rect.y, rect.width, rect.height); - } - else { + } else { this.cropRect = rect; } this.updateCrop(); - } - else { + } else { this._crop = null; this.cropRect = null; @@ -45370,8 +46142,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.parent) { if (this.parent instanceof Phaser.Group) { this.parent.remove(this); - } - else { + } else { this.parent.removeChild(this); } } @@ -45400,8 +46171,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ while (i--) { this.children[i].destroy(destroyChildren); } - } - else { + } else { while (i--) { this.removeChild(this.children[i]); } @@ -45887,8 +46657,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value) { this._fixedToCamera = true; this.cameraOffset.set(this.x, this.y); - } - else { + } else { this._fixedToCamera = false; } @@ -46103,15 +46872,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.input === null) { this.input = new Phaser.InputHandler(this); this.input.start(); - } - else if (this.input && !this.input.enabled) { + } else if (this.input && !this.input.enabled) { this.input.start(); } - } - else { - if (this.input && this.input.enabled) { - this.input.stop(); - } + } else if (this.input && this.input.enabled) { + this.input.stop(); } } @@ -46144,6 +46909,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Component.InWorld.preUpdate = function () { + if (this.pendingDestroy) { + this.destroy(); + return false; + } + // Cache the bounds if we need it if (this.autoCull || this.checkWorldBounds) { this._bounds.copyFrom(this.getBounds()); @@ -46156,8 +46926,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.game.world.camera.view.intersects(this._bounds)) { this.renderable = true; this.game.world.camera.totalInView++; - } - else { + } else { this.renderable = false; if (this.outOfCameraBoundsKill) { @@ -46172,8 +46941,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._outOfBoundsFired && this.game.world.bounds.intersects(this._bounds)) { this._outOfBoundsFired = false; this.events.onEnterBounds$dispatch(this); - } - else if (!this._outOfBoundsFired && !this.game.world.bounds.intersects(this._bounds)) { + } else if (!this._outOfBoundsFired && !this.game.world.bounds.intersects(this._bounds)) { // The Sprite WAS in the screen, but has now left. this._outOfBoundsFired = true; this.events.onOutOfBounds$dispatch(this); @@ -46274,6 +47042,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Component.LifeSpan.preUpdate = function () { + if (this.pendingDestroy) { + this.destroy(); + return false; + } + if (this.lifespan > 0) { this.lifespan -= this.game.time.physicsElapsedMS; @@ -46435,8 +47208,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (key === Phaser.PENDING_ATLAS) { key = frame; frame = 0; - } - else { + } else { frame = frame || 0; } @@ -46454,20 +47226,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (Phaser.RenderTexture && key instanceof Phaser.RenderTexture) { this.key = key.key; this.setTexture(key); - } - else if (Phaser.BitmapData && key instanceof Phaser.BitmapData) { + } else if (Phaser.BitmapData && key instanceof Phaser.BitmapData) { this.customRender = true; this.setTexture(key.texture); if (cache.hasFrameData(key.key, Phaser.Cache.BITMAPDATA)) { setFrame = !this.animations.loadFrameData(cache.getFrameData(key.key, Phaser.Cache.BITMAPDATA), frame); - } - else { + } else { setFrame = !this.animations.loadFrameData(key.frameData, 0); } - } - else if (Phaser.Video && key instanceof Phaser.Video) { + } else if (Phaser.Video && key instanceof Phaser.Video) { this.customRender = true; // This works from a reference, which probably isn't what we need here @@ -46476,16 +47245,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.setFrame(key.texture.frame.clone()); key.onChangeSource.add(this.resizeFrame, this); this.texture.valid = valid; - } - else if (Phaser.Tilemap && key instanceof Phaser.TilemapLayer) { + } else if (Phaser.Tilemap && key instanceof Phaser.TilemapLayer) { // this.customRender = true; this.setTexture(PIXI.Texture.fromCanvas(key.canvas)); - } - else if (key instanceof PIXI.Texture) { + } else if (key instanceof PIXI.Texture) { this.setTexture(key); - } - else { + } else { var img = cache.getImage(key, true); this.key = img.key; @@ -46493,8 +47259,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (key === '__default') { this.texture.baseTexture.skipRender = true; - } - else { + } else { this.texture.baseTexture.skipRender = false; } @@ -46539,8 +47304,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.texture.trim.y = frame.spriteSourceSizeY; this.texture.trim.width = frame.sourceSizeW; this.texture.trim.height = frame.sourceSizeH; - } - else { + } else { this.texture.trim = { x: frame.spriteSourceSizeX, y: frame.spriteSourceSizeY, @@ -46553,8 +47317,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.texture.height = frame.sourceSizeH; this.texture.frame.width = frame.sourceSizeW; this.texture.frame.height = frame.sourceSizeH; - } - else if (!frame.trimmed && this.texture.trim) { + } else if (!frame.trimmed && this.texture.trim) { this.texture.trim = null; } @@ -46719,6 +47482,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ Phaser.Component.PhysicsBody.preUpdate = function () { + if (this.pendingDestroy) { + this.destroy(); + return false; + } + if (this.fresh && this.exists) { this.world.setTo(this.parent.position.x + this.position.x, this.parent.position.y + this.position.y); this.worldTransform.tx = this.world.x; @@ -47011,8 +47779,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (minY === undefined) { // 1 parameter, set all to it minY = maxX = maxY = minX; - } - else if (maxX === undefined) { + } else if (maxX === undefined) { // 2 parameters, the first is min, the second max maxX = maxY = minY; minY = minX; @@ -47020,32 +47787,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (minX === null) { this.scaleMin = null; - } - else { - if (this.scaleMin) { - this.scaleMin.set(minX, minY); - } - else { - this.scaleMin = new Phaser.Point(minX, minY); - } + } else if (this.scaleMin) { + this.scaleMin.set(minX, minY); + } else { + this.scaleMin = new Phaser.Point(minX, minY); } if (maxX === null) { this.scaleMax = null; - } - else { - if (this.scaleMax) { - this.scaleMax.set(maxX, maxY); - } - else { - this.scaleMax = new Phaser.Point(maxX, maxY); - } + } else if (this.scaleMax) { + this.scaleMax.set(maxX, maxY); + } else { + this.scaleMax = new Phaser.Point(maxX, maxY); } if (this.scaleMin === null) { this.transformCallback = null; - } - else { + } else { this.transformCallback = this.checkTransform; this.transformCallbackContext = this; } @@ -47092,12 +47850,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (value) { if (this.texture) { this.texture.baseTexture.scaleMode = 0; + this.texture.baseTexture.dirty(); } - } - else { - if (this.texture) { - this.texture.baseTexture.scaleMode = 1; - } + } else if (this.texture) { + this.texture.baseTexture.scaleMode = 1; + this.texture.baseTexture.dirty(); } } @@ -47200,7 +47957,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} [y=0] - The y coordinate of the Image. The coordinate is relative to any parent container this Image may be in. * @param {string|Phaser.RenderTexture|Phaser.BitmapData|Phaser.Video|PIXI.Texture} [key] - The image used as a texture by this display object during rendering. If a string Phaser will get for an entry in the Image Cache. Or it can be an instance of a RenderTexture, BitmapData, Video or PIXI.Texture. * @param {string|number} [frame] - If a Texture Atlas or Sprite Sheet is used this allows you to specify the frame to be used. Use either an integer for a Frame ID or a string for a frame name. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @returns {Phaser.Image} The newly created Image object. */ image: function (x, y, key, frame, group) { @@ -47225,7 +47982,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} [y=0] - The y coordinate of the sprite. The coordinate is relative to any parent container this sprite may be in. * @param {string|Phaser.RenderTexture|Phaser.BitmapData|Phaser.Video|PIXI.Texture} [key] - The image used as a texture by this display object during rendering. If a string Phaser will get for an entry in the Image Cache. Or it can be an instance of a RenderTexture, BitmapData, Video or PIXI.Texture. * @param {string|number} [frame] - If a Texture Atlas or Sprite Sheet is used this allows you to specify the frame to be used. Use either an integer for a Frame ID or a string for a frame name. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @returns {Phaser.Sprite} The newly created Sprite object. */ sprite: function (x, y, key, frame, group) { @@ -47234,7 +47991,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ group = this.world; } - return group.create(x, y, key, frame); + return group.add(new Phaser.Sprite(this.game, x, y, key, frame)); }, @@ -47256,7 +48013,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} [x=0] - The x coordinate of the creature. The coordinate is relative to any parent container this creature may be in. * @param {number} [y=0] - The y coordinate of the creature. The coordinate is relative to any parent container this creature may be in. * @param {string|PIXI.Texture} [key] - The image used as a texture by this creature object during rendering. If a string Phaser will get for an entry in the Image Cache. Or it can be an instance of a PIXI.Texture. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @returns {Phaser.Creature} The newly created Creature object. */ creature: function (x, y, key, mesh, group) { @@ -47295,8 +48052,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {any} [parent] - The parent Group or DisplayObjectContainer that will hold this group, if any. If set to null the Group won't be added to the display list. If undefined it will be added to World by default. * @param {string} [name='group'] - A name for this Group. Not used internally but useful for debugging. * @param {boolean} [addToStage=false] - If set to true this Group will be added directly to the Game.Stage instead of Game.World. - * @param {boolean} [enableBody=false] - If true all Sprites created with `Group.create` or `Group.createMulitple` will have a physics body created on them. Change the body objType with physicsBodyType. - * @param {number} [physicsBodyType=0] - If enableBody is true this is the objType of physics body that is created on new Sprites. Phaser.Physics.ARCADE, Phaser.Physics.P2, Phaser.Physics.NINJA, etc. + * @param {boolean} [enableBody=false] - If true all Sprites created with `Group.create` or `Group.createMulitple` will have a physics body created on them. Change the body type with physicsBodyType. + * @param {number} [physicsBodyType=0] - If enableBody is true this is the type of physics body that is created on new Sprites. Phaser.Physics.ARCADE, Phaser.Physics.P2, Phaser.Physics.NINJA, etc. * @return {Phaser.Group} The newly created Group. */ group: function (parent, name, addToStage, enableBody, physicsBodyType) { @@ -47312,7 +48069,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * are automatically given a physics body. * * @method Phaser.GameObjectFactory#physicsGroup - * @param {number} [physicsBodyType=Phaser.Physics.ARCADE] - If enableBody is true this is the objType of physics body that is created on new Sprites. Phaser.Physics.ARCADE, Phaser.Physics.P2JS, Phaser.Physics.NINJA, etc. + * @param {number} [physicsBodyType=Phaser.Physics.ARCADE] - If enableBody is true this is the type of physics body that is created on new Sprites. Phaser.Physics.ARCADE, Phaser.Physics.P2JS, Phaser.Physics.NINJA, etc. * @param {any} [parent] - The parent Group or DisplayObjectContainer that will hold this group, if any. If set to null the Group won't be added to the display list. If undefined it will be added to World by default. * @param {string} [name='group'] - A name for this Group. Not used internally but useful for debugging. * @param {boolean} [addToStage=false] - If set to true this Group will be added directly to the Game.Stage instead of Game.World. @@ -47406,7 +48163,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} height - The height of the TileSprite. * @param {string|Phaser.BitmapData|PIXI.Texture} key - This is the image or texture used by the TileSprite during rendering. It can be a string which is a reference to the Phaser Image Cache entry, or an instance of a PIXI.Texture or BitmapData. * @param {string|number} [frame] - If a Texture Atlas or Sprite Sheet is used this allows you to specify the frame to be used. Use either an integer for a Frame ID or a string for a frame name. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @return {Phaser.TileSprite} The newly created TileSprite object. */ tileSprite: function (x, y, width, height, key, frame, group) { @@ -47430,7 +48187,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {string|Phaser.RenderTexture|Phaser.BitmapData|Phaser.Video|PIXI.Texture} [key] - The image used as a texture by this display object during rendering. If a string Phaser will get for an entry in the Image Cache. Or it can be an instance of a RenderTexture, BitmapData, Video or PIXI.Texture. * @param {string|number} [frame] - If a Texture Atlas or Sprite Sheet is used this allows you to specify the frame to be used. Use either an integer for a Frame ID or a string for a frame name. * @param {Array} points - An array of {Phaser.Point}. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @return {Phaser.Rope} The newly created Rope object. */ rope: function (x, y, key, frame, points, group) { @@ -47451,7 +48208,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} [y=0] - The y coordinate of the Text. The coordinate is relative to any parent container this text may be in. * @param {string} [text=''] - The text string that will be displayed. * @param {object} [style] - The style object containing style attributes like font, font size , etc. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @return {Phaser.Text} The newly created text object. */ text: function (x, y, text, style, group) { @@ -47477,7 +48234,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {string|number} [outFrame] - This is the frame or frameName that will be set when this button is in an out state. Give either a number to use a frame ID or a string for a frame name. * @param {string|number} [downFrame] - This is the frame or frameName that will be set when this button is in a down state. Give either a number to use a frame ID or a string for a frame name. * @param {string|number} [upFrame] - This is the frame or frameName that will be set when this button is in an up state. Give either a number to use a frame ID or a string for a frame name. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @return {Phaser.Button} The newly created Button object. */ button: function (x, y, key, callback, callbackContext, overFrame, outFrame, downFrame, upFrame, group) { @@ -47496,7 +48253,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @method Phaser.GameObjectFactory#graphics * @param {number} [x=0] - The x coordinate of the Graphic. The coordinate is relative to any parent container this object may be in. * @param {number} [y=0] - The y coordinate of the Graphic. The coordinate is relative to any parent container this object may be in. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @return {Phaser.Graphics} The newly created graphics object. */ graphics: function (x, y, group) { @@ -47581,7 +48338,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {string} font - The key of the BitmapText as stored in Phaser.Cache. * @param {string} [text=''] - The text that will be rendered. This can also be set later via BitmapText.text. * @param {number} [size=32] - The size the font will be rendered at in pixels. - * @param {Phaser.Group} [group] - Optional Group to add the object to. If not specified it will be added to the World group. + * @param {Phaser.Group|Phaser.Stage} [group] - Optional Group to add the object to. If not specified it will be added to the World group. * @return {Phaser.BitmapText} The newly created bitmapText object. */ bitmapText: function (x, y, font, text, size, group) { @@ -47723,9 +48480,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {...*} parameter - Additional parameters that will be passed to the Plugin.init method. * @return {Phaser.Plugin} The Plugin that was added to the manager. */ - plugin: function (plugin) { + plugin: function () { - return this.game.plugins.add(plugin); + return this.game.plugins.add.apply(this.game.plugins, arguments); } @@ -47819,16 +48576,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * A Group is a container for display objects that allows for fast pooling, recycling and collision checks. * * @method Phaser.GameObjectCreator#group - * @param {any} parent - The parent Group or DisplayObjectContainer that will hold this group, if any. - * @param {string} [name='group'] - A name for this Group. Not used internally but useful for debugging. - * @param {boolean} [addToStage=false] - If set to true this Group will be added directly to the Game.Stage instead of Game.World. - * @param {boolean} [enableBody=false] - If true all Sprites created with `Group.create` or `Group.createMulitple` will have a physics body created on them. Change the body objType with physicsBodyType. - * @param {number} [physicsBodyType=0] - If enableBody is true this is the objType of physics body that is created on new Sprites. Phaser.Physics.ARCADE, Phaser.Physics.P2, Phaser.Physics.NINJA, etc. + * @param {any} [parent] - The parent Group or DisplayObjectContainer that will hold this group, if any. `undefined`, `null`, or `false` will assign no parent. + * @param {string} [name='group'] - A name for this Group. Not used internally but useful for your debugging. + * @param {boolean} [addToStage=false] - If set to true this Group will be added directly to `game.stage`. + * @param {boolean} [enableBody=false] - If true all Sprites created with `Group.create` or `Group.createMulitple` will have a physics body created on them. Change the body type with physicsBodyType. + * @param {number} [physicsBodyType=0] - If enableBody is true this is the type of physics body that is created on new Sprites. Phaser.Physics.ARCADE, Phaser.Physics.P2, Phaser.Physics.NINJA, etc. * @return {Phaser.Group} The newly created Group. */ group: function (parent, name, addToStage, enableBody, physicsBodyType) { - return new Phaser.Group(this.game, parent, name, addToStage, enableBody, physicsBodyType); + return new Phaser.Group(this.game, parent || null, name, addToStage, enableBody, physicsBodyType); }, @@ -48224,13 +48981,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ frame = frame || null; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ - this.objType = Phaser.SPRITE; + this.type = Phaser.SPRITE; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.SPRITE; @@ -48333,7 +49090,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ frame = frame || null; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.IMAGE; @@ -48392,7 +49149,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ */ /** - * Create a new `Button` object. A Button is a special objType of Sprite that is set-up to handle Pointer events automatically. + * Create a new `Button` object. A Button is a special type of Sprite that is set-up to handle Pointer events automatically. * * The four states a Button responds to are: * @@ -48412,7 +49169,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @param {number} [x=0] - X position of the Button. * @param {number} [y=0] - Y position of the Button. * @param {string} [key] - The image key (in the Game.Cache) to use as the texture for this Button. - * @param {function} [callback] - The function to call when this Button is pressed, receiving `this` (the Button), `pointer`, and `isOver` (see {@link Phaser.Events#onInputUp}.) + * @param {function} [callback] - The function to call when this Button is pressed, receiving `this` (the Button), `pointer` (the Pointer causing the input), and `isOver` (whether the Pointer is still on the Button). See {@link Phaser.Events#onInputUp}. * @param {object} [callbackContext] - The context in which the callback will be called (usually 'this'). * @param {string|integer} [overFrame] - The frame / frameName when the button is in the Over state. * @param {string|integer} [outFrame] - The frame / frameName when the button is in the Out state. @@ -48431,13 +49188,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The Phaser Object Type. - * @property {number} objType + * @property {number} type * @readonly */ this.type = Phaser.BUTTON; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.SPRITE; @@ -48529,24 +49286,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * The Signal (or event) dispatched when this Button is in an Over state. * @property {Phaser.Signal} onInputOver + * @see Phaser.Events#onInputOver */ this.onInputOver = new Phaser.Signal(); /** * The Signal (or event) dispatched when this Button is in an Out state. * @property {Phaser.Signal} onInputOut + * @see Phaser.Events#onInputOut */ this.onInputOut = new Phaser.Signal(); /** * The Signal (or event) dispatched when this Button is in an Down state. * @property {Phaser.Signal} onInputDown + * @see Phaser.Events#onInputDown */ this.onInputDown = new Phaser.Signal(); /** * The Signal (or event) dispatched when this Button is in an Up state. * @property {Phaser.Signal} onInputUp + * @see Phaser.Events#onInputUp */ this.onInputUp = new Phaser.Signal(); @@ -48566,7 +49327,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * * @property {Phaser.PointerMode?} justReleasedPreventsOver=ACTIVE_CURSOR */ - this.justReleasedPreventsOver = Phaser.PointerMode.TOUCH; + this.justReleasedPreventsOver = Phaser.PointerMode.CONTACT; /** * When true the the texture frame will not be automatically switched on up/down/over/out events. @@ -48644,8 +49405,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (switchImmediately) { this.changeStateFrame(state); } - } - else { + } else { this[frameKey] = null; } @@ -48671,12 +49431,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (typeof frame === 'string') { this.frameName = frame; return true; - } - else if (typeof frame === 'number') { + } else if (typeof frame === 'number') { this.frame = frame; return true; - } - else { + } else { return false; } @@ -48720,8 +49478,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (sound instanceof Phaser.Sound || sound instanceof Phaser.AudioSprite) { this[soundKey] = sound; this[markerKey] = typeof marker === 'string' ? marker : ''; - } - else { + } else { this[soundKey] = null; this[markerKey] = ''; } @@ -48747,8 +49504,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ sound.play(marker); return true; - } - else { + } else { return false; } @@ -48911,6 +49667,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @protected * @param {Phaser.Button} sprite - The Button that the event occurred on. * @param {Phaser.Pointer} pointer - The Pointer that activated the Button. + * @param {boolean} isOver - Is the Pointer still over the Game Object? */ Phaser.Button.prototype.onInputUpHandler = function (sprite, pointer, isOver) { @@ -48927,15 +49684,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.forceOut === true || (this.forceOut & pointer.pointerMode) === pointer.pointerMode) { this.changeStateFrame(STATE_OUT); - } - else { + } else { var changedUp = this.changeStateFrame(STATE_UP); if (!changedUp) { // No Up frame to show.. if (isOver) { this.changeStateFrame(STATE_OVER); - } - else { + } else { this.changeStateFrame(STATE_OUT); } } @@ -48974,7 +49729,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Phaser.Group.call(this, game, parent, name, addToStage); /** - * @property {number} objType - Internal Phaser Type value. + * @property {number} type - Internal Phaser Type value. * @protected */ this.type = Phaser.SPRITEBATCH; @@ -49086,8 +49841,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ((child.anchor.y) * (-frame.height * child.scale.y) + child.position.y + 0.5 + renderSession.shakeY) | 0, frame.width * child.scale.x, frame.height * child.scale.y); - } - else { + } else { if (!isRotated) { isRotated = true; } @@ -49102,8 +49856,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (renderSession.roundPixels) { context.setTransform(childTransform.a, childTransform.b, childTransform.c, childTransform.d, tx | 0, ty | 0); - } - else { + } else { context.setTransform(childTransform.a, childTransform.b, childTransform.c, childTransform.d, tx, ty); } @@ -49229,15 +49982,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.imageData.data.buffer) { this.buffer = this.imageData.data.buffer; this.pixels = new Uint32Array(this.buffer); - } - else { - if (window['ArrayBuffer']) { - this.buffer = new ArrayBuffer(this.imageData.data.length); - this.pixels = new Uint32Array(this.buffer); - } - else { - this.pixels = this.imageData.data; - } + } else if (window.ArrayBuffer) { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } else { + this.pixels = this.imageData.data; } } @@ -49267,7 +50016,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.texture.frame = this.textureFrame; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @default */ this.type = Phaser.BITMAPDATA; @@ -49426,8 +50175,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Rest of the image ctx.drawImage(src, distance, 0, w, h, 0, 0, w, h); - } - else { + } else { // Moving to the right var w = this.width - distance; @@ -49486,8 +50234,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Rest of the image ctx.drawImage(src, 0, distance, w, h, 0, 0, w, h); - } - else { + } else { // Moving down var h = this.height - distance; @@ -49518,12 +50265,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (Array.isArray(object)) { for (var i = 0; i < object.length; i++) { - if (object[i]['loadTexture']) { + if (object[i].loadTexture) { object[i].loadTexture(this); } } - } - else { + } else { object.loadTexture(this); } @@ -49550,8 +50296,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (source) { this.resize(source.width, source.height); this.cls(); - } - else { + } else { return; } @@ -49692,7 +50437,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }; } - image.src = this.canvas.toDataURL("image/png"); + image.src = this.canvas.toDataURL('image/png'); if (!callback) { var obj = cache.addImage(key, '', image); @@ -49781,15 +50526,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this.imageData.data.buffer) { this.buffer = this.imageData.data.buffer; this.pixels = new Uint32Array(this.buffer); - } - else { - if (window['ArrayBuffer']) { - this.buffer = new ArrayBuffer(this.imageData.data.length); - this.pixels = new Uint32Array(this.buffer); - } - else { - this.pixels = this.imageData.data; - } + } else if (window.ArrayBuffer) { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } else { + this.pixels = this.imageData.data; } return this; @@ -50022,9 +50763,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * The hue is wrapped to keep it within the range 0 to 1. Saturation and lightness are clamped to not exceed 1. * * @method Phaser.BitmapData#shiftHSL - * @param {number} [h=null] - The amount to shift the hue by. - * @param {number} [s=null] - The amount to shift the saturation by. - * @param {number} [l=null] - The amount to shift the lightness by. + * @param {number} [h=null] - The amount to shift the hue by. Within [-1, 1]. + * @param {number} [s=null] - The amount to shift the saturation by. Within [-1, 1]. + * @param {number} [l=null] - The amount to shift the lightness by. Within [-1, 1]. * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. * @return {Phaser.BitmapData} This BitmapData object for method chaining. */ @@ -50100,8 +50841,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { if (Phaser.Device.LITTLE_ENDIAN) { this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; - } - else { + } else { this.pixels[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; } @@ -50245,8 +50985,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (direction === 1) { v = -1; y = this.height; - } - else if (direction === 3) { + } else if (direction === 3) { v = -1; x = this.width; } @@ -50267,8 +51006,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ scan = true; } } - } - else if (direction === 2 || direction === 3) { + } else if (direction === 2 || direction === 3) { // Left to Right / Right to Left y++; @@ -50404,8 +51142,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (source.texture instanceof Phaser.RenderTexture) { this._image = source.texture.getCanvas(); - } - else { + } else { this._image = source.texture.baseTexture.source; } @@ -50431,8 +51168,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this._image = source.tintedTexture; this._pos.set(0); } - } - else { + } else { // Reset this._pos.set(0); this._scale.set(1); @@ -50442,14 +51178,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (source instanceof Phaser.BitmapData) { this._image = source.canvas; - } - else if (typeof source === 'string') { + } else if (typeof source === 'string') { source = this.game.cache.getImage(source); if (source === null) { - return; - } - else { + return this; + } else { this._image = source; } } @@ -50525,7 +51259,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (this._alpha.current <= 0 || this._scale.x === 0 || this._scale.y === 0 || this._size.x === 0 || this._size.y === 0) { // Why bother wasting CPU cycles drawing something you can't see? - return; + return this; } var ctx = this.context; @@ -50604,8 +51338,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (source.texture instanceof Phaser.RenderTexture) { this._image = source.texture.getCanvas(); - } - else { + } else { this._image = source.texture.baseTexture.source; } @@ -50761,15 +51494,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ this.copyTransform(child, blendMode, roundPx); } - if (child.objType === Phaser.GROUP && child.exists) { + if (child.type === Phaser.GROUP && child.exists) { this.drawGroup(child, blendMode, roundPx); - } - else { - if (child.hasOwnProperty('children') && child.children.length > 0) { - for (var i = 0; i < child.children.length; i++) { - if (child.children[i].exists) { - this.copyTransform(child.children[i], blendMode, roundPx); - } + } else if (child.hasOwnProperty('children') && child.children.length > 0) { + for (var i = 0; i < child.children.length; i++) { + if (child.children[i].exists) { + this.copyTransform(child.children[i], blendMode, roundPx); } } } @@ -50805,15 +51535,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ return this; } - if (parent.objType !== Phaser.GROUP && parent.objType !== Phaser.EMITTER && parent.objType !== Phaser.BITMAPTEXT) { - if (parent.objType === Phaser.GRAPHICS) { + if (parent.type !== Phaser.GROUP && parent.type !== Phaser.EMITTER && parent.type !== Phaser.BITMAPTEXT) { + if (parent.type === Phaser.GRAPHICS) { var bounds = parent.getBounds(); this.ctx.save(); this.ctx.translate(bounds.x, bounds.y); PIXI.CanvasGraphics.renderGraphics(parent, this.ctx); this.ctx.restore(); - } - else { + } else { this.copy(parent, null, null, null, null, parent.worldPosition.x, parent.worldPosition.y, null, null, parent.worldRotation, null, null, parent.worldScale.x, parent.worldScale.y, parent.worldAlpha, blendMode, roundPx); } } @@ -50846,12 +51575,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (color === undefined || color === null) { ctx.shadowColor = 'rgba(0,0,0,0)'; - } - else { + } else { ctx.shadowColor = color; - ctx.shadowBlur = blur || 5; - ctx.shadowOffsetX = x || 10; - ctx.shadowOffsetY = y || 10; + ctx.shadowBlur = (blur === 0) ? 0 : blur || 5; + ctx.shadowOffsetX = (x === 0) ? 0 : x || 10; + ctx.shadowOffsetY = (y === 0) ? 0 : y || 10; } return this; @@ -50872,15 +51600,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (maskRect === undefined || maskRect === null) { this.draw(mask).blendSourceAtop(); - } - else { + } else { this.draw(mask, maskRect.x, maskRect.y, maskRect.width, maskRect.height).blendSourceAtop(); } if (sourceRect === undefined || sourceRect === null) { this.draw(source).blendReset(); - } - else { + } else { this.draw(source, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height).blendReset(); } @@ -51088,6 +51814,60 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ }, + /** + * Draws a polygon. + * + * @method Phaser.BitmapData#polygon + * @param {object[]} points - An array of {@link Phaser.Point} or point-like objects. + * @param {CanvasGradient|CanvasPattern|string} [fillStyle] - A color, gradient, or pattern. + * @param {number} [lineWidth=0] - The line thickness. + * @param {CanvasGradient|CanvasPattern|string} [strokeStyle='#fff'] - The line color, gradient, or pattern (when `lineWidth` > 0). + * @return {Phaser.BitmapData} This BitmapData object for method chaining. + */ + polygon: function (points, fillStyle, lineWidth, strokeStyle) { + + // Could reject points.length < 3 + + if (strokeStyle === undefined) { + strokeStyle = '#fff'; + } + if (lineWidth === undefined) { + lineWidth = 0; + } + + var ctx = this.context; + + if (fillStyle) { + ctx.fillStyle = fillStyle; + } + + if (lineWidth) { + ctx.lineWidth = lineWidth; + ctx.strokeStyle = strokeStyle; + } + + ctx.beginPath(); + + ctx.moveTo(points[0].x, points[0].y); + + for (var i = 1, len = points.length; i < len; i++) { + var point = points[i]; + ctx.lineTo(point.x, point.y); + } + + ctx.closePath(); + + if (fillStyle) { + ctx.fill(); + } + if (lineWidth) { + ctx.stroke(); + } + + return this; + + }, + /** * Takes the given Line object and image and renders it to this BitmapData as a repeating texture line. * @@ -51540,7 +52320,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @memberof Phaser.BitmapData * @property {boolean} smoothed - Gets or sets this BitmapData.contexts smoothing enabled value. */ - Object.defineProperty(Phaser.BitmapData.prototype, "smoothed", { + Object.defineProperty(Phaser.BitmapData.prototype, 'smoothed', { get: function () { @@ -51560,7 +52340,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ * @memberof Phaser.BitmapData * @property {string} op - A short-hand code to get or set the global composite operation of the BitmapDatas canvas. */ - Object.defineProperty(Phaser.BitmapData.prototype, "op", { + Object.defineProperty(Phaser.BitmapData.prototype, 'op', { get: function () { @@ -51658,11 +52438,15 @@ THIS SOFTWARE. outerNode = Phaser.EarCut.linkedList(data, 0, outerLen, dim, true), triangles = []; - if (!outerNode) return triangles; + if (!outerNode) { + return triangles; + } var minX, minY, maxX, maxY, x, y, size; - if (hasHoles) outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim); + if (hasHoles) { + outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim); + } // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox if (data.length > 80 * dim) { @@ -51672,10 +52456,18 @@ THIS SOFTWARE. for (var i = dim; i < outerLen; i += dim) { x = data[i]; y = data[i + 1]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; + if (x < minX) { + minX = x; + } + if (y < minY) { + minY = y; + } + if (x > maxX) { + maxX = x; + } + if (y > maxY) { + maxY = y; + } } // minX, minY and size are later used to transform coords into integers for z-order calculation @@ -51701,9 +52493,13 @@ THIS SOFTWARE. // link points into circular doubly-linked list in the specified winding order if (clockwise === (sum > 0)) { - for (i = start; i < end; i += dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last); + for (i = start; i < end; i += dim) { + last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last); + } } else { - for (i = end - dim; i >= start; i -= dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last); + for (i = end - dim; i >= start; i -= dim) { + last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last); + } } return last; @@ -51712,8 +52508,12 @@ THIS SOFTWARE. // eliminate colinear or duplicate points Phaser.EarCut.filterPoints = function (start, end) { - if (!start) return start; - if (!end) end = start; + if (!start) { + return start; + } + if (!end) { + end = start; + } var p = start, again; @@ -51723,7 +52523,9 @@ THIS SOFTWARE. if (!p.steiner && (Phaser.EarCut.equals(p, p.next) || Phaser.EarCut.area(p.prev, p, p.next) === 0)) { Phaser.EarCut.removeNode(p); p = end = p.prev; - if (p === p.next) return null; + if (p === p.next) { + return null; + } again = true; } else { @@ -51737,10 +52539,14 @@ THIS SOFTWARE. // main ear slicing loop which triangulates a polygon (given as a linked list) Phaser.EarCut.earcutLinked = function (ear, triangles, dim, minX, minY, size, pass) { - if (!ear) return; + if (!ear) { + return; + } // interlink polygon nodes in z-order - if (!pass && size) Phaser.EarCut.indexCurve(ear, minX, minY, size); + if (!pass && size) { + Phaser.EarCut.indexCurve(ear, minX, minY, size); + } var stop = ear, prev, next; @@ -51795,14 +52601,18 @@ THIS SOFTWARE. b = ear, c = ear.next; - if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear + if (Phaser.EarCut.area(a, b, c) >= 0) { + return false; + } // reflex, can't be an ear // now make sure we don't have other points inside the potential ear var p = ear.next.next; while (p !== ear.prev) { if (Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false; + Phaser.EarCut.area(p.prev, p, p.next) >= 0) { + return false; + } p = p.next; } @@ -51814,7 +52624,9 @@ THIS SOFTWARE. b = ear, c = ear.next; - if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear + if (Phaser.EarCut.area(a, b, c) >= 0) { + return false; + } // reflex, can't be an ear // triangle bbox; min & max are calculated like this for speed var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x), @@ -51832,7 +52644,9 @@ THIS SOFTWARE. while (p && p.z <= maxZ) { if (p !== ear.prev && p !== ear.next && Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false; + Phaser.EarCut.area(p.prev, p, p.next) >= 0) { + return false; + } p = p.nextZ; } @@ -51842,7 +52656,9 @@ THIS SOFTWARE. while (p && p.z >= minZ) { if (p !== ear.prev && p !== ear.next && Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false; + Phaser.EarCut.area(p.prev, p, p.next) >= 0) { + return false; + } p = p.prevZ; } @@ -51913,11 +52729,13 @@ THIS SOFTWARE. start = holeIndices[i] * dim; end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; list = Phaser.EarCut.linkedList(data, start, end, dim, false); - if (list === list.next) list.steiner = true; + if (list === list.next) { + list.steiner = true; + } queue.push(Phaser.EarCut.getLeftmost(list)); } - queue.sort(compareX); + queue.sort(Phaser.EarCut.compareX); // process holes from left to right for (i = 0; i < queue.length; i++) { @@ -51964,9 +52782,13 @@ THIS SOFTWARE. p = p.next; } while (p !== outerNode); - if (!m) return null; + if (!m) { + return null; + } - if (hole.x === m.x) return m.prev; // hole touches outer segment; pick lower endpoint + if (hole.x === m.x) { + return m.prev; + } // hole touches outer segment; pick lower endpoint // look for points inside the triangle of hole point, segment intersection and endpoint; // if there are no points found, we have a valid connection; @@ -52001,7 +52823,9 @@ THIS SOFTWARE. Phaser.EarCut.indexCurve = function (start, minX, minY, size) { var p = start; do { - if (p.z === null) p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size); + if (p.z === null) { + p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size); + } p.prevZ = p.prev; p.nextZ = p.next; p = p.next; @@ -52033,7 +52857,9 @@ THIS SOFTWARE. for (i = 0; i < inSize; i++) { pSize++; q = q.nextZ; - if (!q) break; + if (!q) { + break; + } } qSize = inSize; @@ -52058,8 +52884,11 @@ THIS SOFTWARE. qSize--; } - if (tail) tail.nextZ = e; - else list = e; + if (tail) { + tail.nextZ = e; + } else { + list = e; + } e.prevZ = tail; tail = e; @@ -52102,7 +52931,9 @@ THIS SOFTWARE. var p = start, leftmost = start; do { - if (p.x < leftmost.x) leftmost = p; + if (p.x < leftmost.x) { + leftmost = p; + } p = p.next; } while (p !== start); @@ -52149,7 +52980,9 @@ THIS SOFTWARE. var p = a; do { if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && - Phaser.EarCut.intersects(p, p.next, a, b)) return true; + Phaser.EarCut.intersects(p, p.next, a, b)) { + return true; + } p = p.next; } while (p !== a); @@ -52172,8 +53005,9 @@ THIS SOFTWARE. px = (a.x + b.x) / 2, py = (a.y + b.y) / 2; do { - if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) + if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) { inside = !inside; + } p = p.next; } while (p !== a); @@ -52226,8 +53060,12 @@ THIS SOFTWARE. p.next.prev = p.prev; p.prev.next = p.next; - if (p.prevZ) p.prevZ.nextZ = p.nextZ; - if (p.nextZ) p.nextZ.prevZ = p.prevZ; + if (p.prevZ) { + p.prevZ.nextZ = p.nextZ; + } + if (p.nextZ) { + p.nextZ.prevZ = p.prevZ; + } }; Phaser.EarCut.Node = function (i, x, y) { @@ -52272,7 +53110,7 @@ THIS SOFTWARE. /** * The number of points beyond which Pixi swaps to using the Stencil Buffer to render the Graphics. * - * @objType {number} + * @type {number} */ PIXI.WebGLGraphics.stencilBufferLimit = 6; @@ -52285,7 +53123,7 @@ THIS SOFTWARE. * @param graphics {Graphics} * @param renderSession {Object} */ - PIXI.WebGLGraphics.renderGraphics = function (graphics, renderSession)//projection, offset) + PIXI.WebGLGraphics.renderGraphics = function (graphics, renderSession)// projection, offset) { var gl = renderSession.gl; var projection = renderSession.projection, @@ -52316,12 +53154,11 @@ THIS SOFTWARE. gl.drawElements(gl.TRIANGLE_FAN, 4, gl.UNSIGNED_SHORT, (webGLData.indices.length - 4) * 2); renderSession.stencilManager.popStencil(graphics, webGLData, renderSession); - } - else { + } else { webGLData = webGL.data[i]; - renderSession.shaderManager.setShader(shader);//activatePrimitiveShader(); + renderSession.shaderManager.setShader(shader);// activatePrimitiveShader(); shader = renderSession.shaderManager.primitiveShader; gl.uniformMatrix3fv(shader.translationMatrix, false, graphics.worldTransform.toArray(true)); @@ -52359,8 +53196,11 @@ THIS SOFTWARE. PIXI.WebGLGraphics.updateGraphics = function (graphics, gl) { // get the contexts graphics object var webGL = graphics._webGL[gl.id]; + // if the graphics object does not exist in the webGL context time to create it! - if (!webGL) webGL = graphics._webGL[gl.id] = {lastIndex: 0, data: [], gl: gl}; + if (!webGL) { + webGL = graphics._webGL[gl.id] = {lastIndex: 0, data: [], gl: gl}; + } // flag the graphics as not dirty as we are about to update it... graphics.dirty = false; @@ -52408,6 +53248,7 @@ THIS SOFTWARE. webGLData = PIXI.WebGLGraphics.switchMode(webGL, 0); var canDrawUsingSimple = PIXI.WebGLGraphics.buildPoly(data, webGLData); + // console.log(canDrawUsingSimple); if (!canDrawUsingSimple) { @@ -52416,30 +53257,26 @@ THIS SOFTWARE. PIXI.WebGLGraphics.buildComplexPoly(data, webGLData); } - } - else { + } else { webGLData = PIXI.WebGLGraphics.switchMode(webGL, 1); PIXI.WebGLGraphics.buildComplexPoly(data, webGLData); } } } - if (data.width > 0) { + if (data.lineWidth > 0) { webGLData = PIXI.WebGLGraphics.switchMode(webGL, 0); PIXI.WebGLGraphics.buildLine(data, webGLData); } - } - else { + } else { webGLData = PIXI.WebGLGraphics.switchMode(webGL, 0); if (data.type === Phaser.RECTANGLE) { PIXI.WebGLGraphics.buildRectangle(data, webGLData); - } - else if (data.type === Phaser.CIRCLE || data.type === Phaser.ELLIPSE) { + } else if (data.type === Phaser.CIRCLE || data.type === Phaser.ELLIPSE) { PIXI.WebGLGraphics.buildCircle(data, webGLData); - } - else if (data.type === Phaser.ROUNDEDRECTANGLE) { + } else if (data.type === Phaser.ROUNDEDRECTANGLE) { PIXI.WebGLGraphics.buildRoundedRectangle(data, webGLData); } } @@ -52450,7 +53287,9 @@ THIS SOFTWARE. // upload all the dirty data... for (i = 0; i < webGL.data.length; i++) { webGLData = webGL.data[i]; - if (webGLData.dirty) webGLData.upload(); + if (webGLData.dirty) { + webGLData.upload(); + } } }; @@ -52468,8 +53307,7 @@ THIS SOFTWARE. webGLData = PIXI.WebGLGraphics.graphicsDataPool.pop() || new PIXI.WebGLGraphicsData(webGL.gl); webGLData.mode = type; webGL.data.push(webGLData); - } - else { + } else { webGLData = webGL.data[webGL.data.length - 1]; if (webGLData.mode !== type || type === 1) { @@ -52688,8 +53526,7 @@ THIS SOFTWARE. if (graphicsData.type === Phaser.CIRCLE) { width = circleData.radius; height = circleData.radius; - } - else { + } else { width = circleData.width; height = circleData.height; } @@ -52756,7 +53593,9 @@ THIS SOFTWARE. // TODO OPTIMISE! var i = 0; var points = graphicsData.points; - if (points.length === 0) return; + if (points.length === 0) { + return; + } // if the line width is an odd number add 0.5 to align to a whole pixel if (graphicsData.lineWidth % 2) { @@ -52906,8 +53745,7 @@ THIS SOFTWARE. verts.push(r, g, b, alpha); indexCount++; - } - else { + } else { verts.push(px, py); verts.push(r, g, b, alpha); @@ -52957,9 +53795,11 @@ THIS SOFTWARE. * @param webGLData {Object} */ PIXI.WebGLGraphics.buildComplexPoly = function (graphicsData, webGLData) { - //TODO - no need to copy this as it gets turned into a FLoat32Array anyways.. + // TODO - no need to copy this as it gets turned into a FLoat32Array anyways.. var points = graphicsData.points.slice(); - if (points.length < 6) return; + if (points.length < 6) { + return; + } // get first and last point.. figure out the middle! var indices = webGLData.indices; @@ -52998,7 +53838,7 @@ THIS SOFTWARE. // push a quad onto the end.. - //TODO - this aint needed! + // TODO - this aint needed! var length = points.length / 2; for (i = 0; i < length; i++) { indices.push(i); @@ -53018,7 +53858,10 @@ THIS SOFTWARE. PIXI.WebGLGraphics.buildPoly = function (graphicsData, webGLData) { var points = graphicsData.points; - if (points.length < 6) return; + if (points.length < 6) { + return; + } + // get first and last point.. figure out the middle! var verts = webGLData.points; var indices = webGLData.indices; @@ -53034,7 +53877,9 @@ THIS SOFTWARE. var triangles = Phaser.EarCut.Triangulate(points, null, 2); - if (!triangles) return false; + if (!triangles) { + return false; + } var vertPos = verts.length / 6; @@ -53066,7 +53911,7 @@ THIS SOFTWARE. PIXI.WebGLGraphicsData = function (gl) { this.gl = gl; - //TODO does this need to be split before uploding?? + // TODO does this need to be split before uploding?? this.color = [0, 0, 0]; // color split! this.points = []; this.indices = []; @@ -53091,7 +53936,7 @@ THIS SOFTWARE. PIXI.WebGLGraphicsData.prototype.upload = function () { var gl = this.gl; -// this.lastIndex = graphics.graphicsData.length; + // this.lastIndex = graphics.graphicsData.length; this.glPoints = new Float32Array(this.points); gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); @@ -53142,7 +53987,7 @@ THIS SOFTWARE. var fillColor = data._fillTint; var lineColor = data._lineTint; - context.lineWidth = data.width; + context.lineWidth = data.lineWidth; if (data.type === Phaser.POLYGON) { context.beginPath(); @@ -53170,26 +54015,24 @@ THIS SOFTWARE. context.fill(); } - if (data.width) { + if (data.lineWidth) { context.globalAlpha = data.lineAlpha * worldAlpha; context.strokeStyle = '#' + ('00000' + (lineColor | 0).toString(16)).substr(-6); context.stroke(); } - } - else if (data.type === Phaser.RECTANGLE) { + } else if (data.type === Phaser.RECTANGLE) { if (data.fillColor || data.fillColor === 0) { context.globalAlpha = data.fillAlpha * worldAlpha; context.fillStyle = '#' + ('00000' + (fillColor | 0).toString(16)).substr(-6); context.fillRect(shape.x, shape.y, shape.width, shape.height); } - if (data.width) { + if (data.lineWidth) { context.globalAlpha = data.lineAlpha * worldAlpha; context.strokeStyle = '#' + ('00000' + (lineColor | 0).toString(16)).substr(-6); context.strokeRect(shape.x, shape.y, shape.width, shape.height); } - } - else if (data.type === Phaser.CIRCLE) { + } else if (data.type === Phaser.CIRCLE) { // TODO - need to be Undefined! context.beginPath(); context.arc(shape.x, shape.y, shape.radius, 0, 2 * Math.PI); @@ -53201,13 +54044,12 @@ THIS SOFTWARE. context.fill(); } - if (data.width) { + if (data.lineWidth) { context.globalAlpha = data.lineAlpha * worldAlpha; context.strokeStyle = '#' + ('00000' + (lineColor | 0).toString(16)).substr(-6); context.stroke(); } - } - else if (data.type === Phaser.ELLIPSE) { + } else if (data.type === Phaser.ELLIPSE) { // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas var w = shape.width * 2; @@ -53221,10 +54063,10 @@ THIS SOFTWARE. var kappa = 0.5522848, ox = (w / 2) * kappa, // control point offset horizontal oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle context.moveTo(x, ym); context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); @@ -53240,13 +54082,12 @@ THIS SOFTWARE. context.fill(); } - if (data.width) { + if (data.lineWidth) { context.globalAlpha = data.lineAlpha * worldAlpha; context.strokeStyle = '#' + ('00000' + (lineColor | 0).toString(16)).substr(-6); context.stroke(); } - } - else if (data.type === Phaser.ROUNDEDRECTANGLE) { + } else if (data.type === Phaser.ROUNDEDRECTANGLE) { var rx = shape.x; var ry = shape.y; var width = shape.width; @@ -53274,7 +54115,7 @@ THIS SOFTWARE. context.fill(); } - if (data.width) { + if (data.lineWidth) { context.globalAlpha = data.lineAlpha * worldAlpha; context.strokeStyle = '#' + ('00000' + (lineColor | 0).toString(16)).substr(-6); context.stroke(); @@ -53321,17 +54162,14 @@ THIS SOFTWARE. context.closePath(); } - } - else if (data.type === Phaser.RECTANGLE) { + } else if (data.type === Phaser.RECTANGLE) { context.rect(shape.x, shape.y, shape.width, shape.height); context.closePath(); - } - else if (data.type === Phaser.CIRCLE) { + } else if (data.type === Phaser.CIRCLE) { // TODO - need to be Undefined! context.arc(shape.x, shape.y, shape.radius, 0, 2 * Math.PI); context.closePath(); - } - else if (data.type === Phaser.ELLIPSE) { + } else if (data.type === Phaser.ELLIPSE) { // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas @@ -53344,10 +54182,10 @@ THIS SOFTWARE. var kappa = 0.5522848, ox = (w / 2) * kappa, // control point offset horizontal oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle context.moveTo(x, ym); context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); @@ -53355,8 +54193,7 @@ THIS SOFTWARE. context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); context.closePath(); - } - else if (data.type === Phaser.ROUNDEDRECTANGLE) { + } else if (data.type === Phaser.ROUNDEDRECTANGLE) { var rx = shape.x; var ry = shape.y; @@ -53465,7 +54302,7 @@ THIS SOFTWARE. this.shape = shape; /* - * @member {number} The objType of the shape, see the Const.Shapes file for all the existing types, + * @member {number} The type of the shape, see the Const.Shapes file for all the existing types, */ this.type = shape.type; @@ -53523,6 +54360,10 @@ THIS SOFTWARE. * As you can tell, Graphics objects are a bit of a trade-off. While they are extremely useful, you need to be careful * in their complexity and quantity of them in your game. * + * You may have to modify {@link Phaser.Graphics#scale} rather than {@link Phaser.Graphics#width} or + * {@link Phaser.Graphics#height} to avoid an unusual race condition + * ({@link #489 https://github.com/photonstorm/phaser-ce/issues/489}). + * * @class Phaser.Graphics * @constructor * @extends PIXI.DisplayObjectContainer @@ -53551,13 +54392,13 @@ THIS SOFTWARE. } /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @default */ this.type = Phaser.GRAPHICS; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.SPRITE; @@ -53576,7 +54417,7 @@ THIS SOFTWARE. * The alpha value used when filling the Graphics object. * * @property fillAlpha - * @objType Number + * @type Number */ this.fillAlpha = 1; @@ -53584,7 +54425,7 @@ THIS SOFTWARE. * The width (thickness) of any lines drawn. * * @property lineWidth - * @objType Number + * @type Number */ this.lineWidth = 0; @@ -53592,7 +54433,7 @@ THIS SOFTWARE. * The color of any lines drawn. * * @property lineColor - * @objType String + * @type String * @default 0 */ this.lineColor = 0; @@ -53601,16 +54442,16 @@ THIS SOFTWARE. * Graphics data * * @property graphicsData - * @objType Array + * @type Array * @private */ this.graphicsData = []; /** - * The tint applied to the graphic shape. This is a hex value. Apply a value of 0xFFFFFF to reset the tint. + * The tint applied to the graphic shape. This is a hex value. Apply a value of 0xFFFFFF (Phaser.Color.WHITE) to reset the tint. * * @property tint - * @objType Number + * @type Number * @default 0xFFFFFF */ this.tint = 0xFFFFFF; @@ -53619,7 +54460,7 @@ THIS SOFTWARE. * The blend mode to be applied to the graphic shape. Apply a value of PIXI.blendModes.NORMAL to reset the blend mode. * * @property blendMode - * @objType Number + * @type Number * @default PIXI.blendModes.NORMAL; */ this.blendMode = PIXI.blendModes.NORMAL; @@ -53628,7 +54469,7 @@ THIS SOFTWARE. * Current path * * @property currentPath - * @objType Object + * @type Object * @private */ this.currentPath = null; @@ -53637,7 +54478,7 @@ THIS SOFTWARE. * Array containing some WebGL-related properties used by the WebGL renderer. * * @property _webGL - * @objType Array + * @type Array * @private */ this._webGL = []; @@ -53646,7 +54487,7 @@ THIS SOFTWARE. * Whether this shape is being used as a mask. * * @property isMask - * @objType Boolean + * @type Boolean */ this.isMask = false; @@ -53654,7 +54495,7 @@ THIS SOFTWARE. * The bounds' padding used for bounds calculation. * * @property boundsPadding - * @objType Number + * @type Number */ this.boundsPadding = 0; @@ -53664,7 +54505,7 @@ THIS SOFTWARE. * Used to detect if the graphics object has changed. If this is set to true then the graphics object will be recalculated. * * @property dirty - * @objType Boolean + * @type Boolean * @private */ this.dirty = true; @@ -53674,7 +54515,7 @@ THIS SOFTWARE. * If this is set to true then the updateLocalBounds is called once in the postUpdate method. * * @property _boundsDirty - * @objType Boolean + * @type Boolean * @private */ this._boundsDirty = false; @@ -53683,7 +54524,7 @@ THIS SOFTWARE. * Used to detect if the webgl graphics object has changed. If this is set to true then the graphics object will be recalculated. * * @property webGLDirty - * @objType Boolean + * @type Boolean * @private */ this.webGLDirty = false; @@ -53692,7 +54533,7 @@ THIS SOFTWARE. * Used to detect if the cached sprite object needs to be updated. * * @property cachedSpriteDirty - * @objType Boolean + * @type Boolean * @private */ this.cachedSpriteDirty = false; @@ -53796,8 +54637,7 @@ THIS SOFTWARE. if (cameraToFace.dot(faceNormal) > 0) { this.drawPolygon(triangle); } - } - else { + } else { this.drawPolygon(triangle); } @@ -53828,8 +54668,7 @@ THIS SOFTWARE. for (i = 0; i < vertices.length / 3; i++) { this.drawTriangle([vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2]], cull); } - } - else { + } else { for (i = 0; i < vertices.length / 6; i++) { point1.x = vertices[i * 6 + 0]; point1.y = vertices[i * 6 + 1]; @@ -53840,30 +54679,26 @@ THIS SOFTWARE. this.drawTriangle([point1, point2, point3], cull); } } - } - else { - if (vertices[0] instanceof Phaser.Point) { - for (i = 0; i < indices.length / 3; i++) { - points.push(vertices[indices[i * 3]]); - points.push(vertices[indices[i * 3 + 1]]); - points.push(vertices[indices[i * 3 + 2]]); + } else if (vertices[0] instanceof Phaser.Point) { + for (i = 0; i < indices.length / 3; i++) { + points.push(vertices[indices[i * 3]]); + points.push(vertices[indices[i * 3 + 1]]); + points.push(vertices[indices[i * 3 + 2]]); - if (points.length === 3) { - this.drawTriangle(points, cull); - points = []; - } + if (points.length === 3) { + this.drawTriangle(points, cull); + points = []; } } - else { - for (i = 0; i < indices.length; i++) { - point1.x = vertices[indices[i] * 2]; - point1.y = vertices[indices[i] * 2 + 1]; - points.push(point1.copyTo({})); + } else { + for (i = 0; i < indices.length; i++) { + point1.x = vertices[indices[i] * 2]; + point1.y = vertices[indices[i] * 2 + 1]; + points.push(point1.copyTo({})); - if (points.length === 3) { - this.drawTriangle(points, cull); - points = []; - } + if (points.length === 3) { + this.drawTriangle(points, cull); + points = []; } } } @@ -53888,8 +54723,7 @@ THIS SOFTWARE. if (this.currentPath.shape.points.length) { // halfway through a line? start a new one! this.drawShape(new Phaser.Polygon(this.currentPath.shape.points.slice(-2))); - } - else { + } else { // otherwise its empty so lets just set the line properties this.currentPath.lineWidth = this.lineWidth; this.currentPath.lineColor = this.lineColor; @@ -53957,8 +54791,7 @@ THIS SOFTWARE. if (this.currentPath.shape.points.length === 0) { this.currentPath.shape.points = [0, 0]; } - } - else { + } else { this.moveTo(0, 0); } @@ -54009,8 +54842,7 @@ THIS SOFTWARE. if (this.currentPath.shape.points.length === 0) { this.currentPath.shape.points = [0, 0]; } - } - else { + } else { this.moveTo(0, 0); } @@ -54066,8 +54898,7 @@ THIS SOFTWARE. if (this.currentPath.shape.points.length === 0) { this.currentPath.shape.points.push(x1, y1); } - } - else { + } else { this.moveTo(x1, y1); } @@ -54084,8 +54915,7 @@ THIS SOFTWARE. if (points[points.length - 2] !== x1 || points[points.length - 1] !== y1) { points.push(x1, y1); } - } - else { + } else { var dd = a1 * a1 + b1 * b1, cc = a2 * a2 + b2 * b2, tt = a1 * a2 + b1 * b2, @@ -54141,8 +54971,7 @@ THIS SOFTWARE. if (!anticlockwise && endAngle <= startAngle) { endAngle += Math.PI * 2; - } - else if (anticlockwise && startAngle <= endAngle) { + } else if (anticlockwise && startAngle <= endAngle) { startAngle += Math.PI * 2; } @@ -54159,8 +54988,7 @@ THIS SOFTWARE. if (anticlockwise && this.filling) { this.moveTo(cx, cy); - } - else { + } else { this.moveTo(startX, startY); } @@ -54293,15 +55121,15 @@ THIS SOFTWARE. * Draws an ellipse. * * @method Phaser.Graphics#drawEllipse - * @param x {Number} The X coordinate of the center of the ellipse - * @param y {Number} The Y coordinate of the center of the ellipse - * @param width {Number} The half width of the ellipse - * @param height {Number} The half height of the ellipse + * @param centerX {Number} The X coordinate of the center of the ellipse + * @param centerY {Number} The Y coordinate of the center of the ellipse + * @param halfWidth {Number} The half width of the ellipse + * @param halfHeight {Number} The half height of the ellipse * @return {Graphics} */ - Phaser.Graphics.prototype.drawEllipse = function (x, y, width, height) { + Phaser.Graphics.prototype.drawEllipse = function (centerX, centerY, halfWidth, halfHeight) { - this.drawShape(new Phaser.Ellipse(x, y, width, height)); + this.drawShape({x: centerX, y: centerY, width: halfWidth, height: halfHeight, type: Phaser.ELLIPSE}); return this; @@ -54437,8 +55265,7 @@ THIS SOFTWARE. PIXI.Sprite.prototype._renderWebGL.call(this._cachedSprite, renderSession); return; - } - else { + } else { renderSession.spriteBatch.stop(); renderSession.blendModeManager.setBlendMode(this.blendMode); @@ -54528,8 +55355,7 @@ THIS SOFTWARE. PIXI.Sprite.prototype._renderCanvas.call(this._cachedSprite, renderSession); return; - } - else { + } else { var context = renderSession.context; var transform = this.worldTransform; @@ -54580,7 +55406,7 @@ THIS SOFTWARE. } // Return an empty object if the item is a mask! - if (!this.renderable) { + if (this.isMask) { return Phaser.EmptyRectangle; } @@ -54736,7 +55562,7 @@ THIS SOFTWARE. for (var i = 0; i < this.graphicsData.length; i++) { var data = this.graphicsData[i]; var type = data.type; - var lineWidth = data.width; + var lineWidth = data.lineWidth; shape = data.shape; if (type === Phaser.RECTANGLE || type === Phaser.ROUNDEDRECTANGLE) { @@ -54750,8 +55576,7 @@ THIS SOFTWARE. minY = y < minY ? y : minY; maxY = y + h > maxY ? y + h : maxY; - } - else if (type === Phaser.CIRCLE) { + } else if (type === Phaser.CIRCLE) { x = shape.x; y = shape.y; w = shape.radius + lineWidth / 2; @@ -54762,8 +55587,7 @@ THIS SOFTWARE. minY = y - h < minY ? y - h : minY; maxY = y + h > maxY ? y + h : maxY; - } - else if (type === Phaser.ELLIPSE) { + } else if (type === Phaser.ELLIPSE) { x = shape.x; y = shape.y; w = shape.width + lineWidth / 2; @@ -54774,8 +55598,7 @@ THIS SOFTWARE. minY = y - h < minY ? y - h : minY; maxY = y + h > maxY ? y + h : maxY; - } - else { + } else { // POLY - assumes points are sequential, not Point objects points = shape.points; @@ -54783,8 +55606,7 @@ THIS SOFTWARE. if (points[j] instanceof Phaser.Point) { x = points[j].x; y = points[j].y; - } - else { + } else { x = points[j]; y = points[j + 1]; @@ -54801,8 +55623,7 @@ THIS SOFTWARE. } } } - } - else { + } else { minX = 0; maxX = 0; minY = 0; @@ -54837,8 +55658,7 @@ THIS SOFTWARE. this._cachedSprite.buffer = canvasBuffer; this._cachedSprite.worldTransform = this.worldTransform; - } - else { + } else { this._cachedSprite.buffer.resize(bounds.width, bounds.height); } @@ -54913,7 +55733,7 @@ THIS SOFTWARE. this.currentPath = null; - // Handle mixed-objType polygons + // Handle mixed-type polygons if (shape instanceof Phaser.Polygon) { shape = shape.clone(); shape.flatten(); @@ -54942,7 +55762,7 @@ THIS SOFTWARE. * This is not recommended if you are constantly redrawing the graphics element. * * @property cacheAsBitmap - * @objType Boolean + * @type Boolean * @default false * @private */ @@ -54960,8 +55780,7 @@ THIS SOFTWARE. if (this._cacheAsBitmap) { this._generateCachedSprite(); - } - else { + } else { this.destroyCachedSprite(); } @@ -55026,7 +55845,7 @@ THIS SOFTWARE. this.key = key; /** - * @property {number} objType - Base Phaser object objType. + * @property {number} type - Base Phaser object type. */ this.type = Phaser.RENDERTEXTURE; @@ -55048,7 +55867,7 @@ THIS SOFTWARE. * The base texture object that this texture uses * * @property baseTexture - * @objType BaseTexture + * @type BaseTexture */ this.baseTexture = new PIXI.BaseTexture(); this.baseTexture.width = this.width * this.resolution; @@ -55066,7 +55885,7 @@ THIS SOFTWARE. * The renderer this RenderTexture uses. A RenderTexture can only belong to one renderer at the moment if its webGL. * * @property renderer - * @objType CanvasRenderer|WebGLRenderer + * @type CanvasRenderer|WebGLRenderer */ this.renderer = renderer; @@ -55079,15 +55898,14 @@ THIS SOFTWARE. this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; this.projection = new Phaser.Point(this.width * 0.5, -this.height * 0.5); - } - else { + } else { this.textureBuffer = new PIXI.CanvasBuffer(this.width * this.resolution, this.height * this.resolution); this.baseTexture.source = this.textureBuffer.canvas; } /** * @property valid - * @objType Boolean + * @type Boolean */ this.valid = true; @@ -55123,8 +55941,7 @@ THIS SOFTWARE. if (this.renderer.type === Phaser.WEBGL) { this._renderWebGL(displayObject, this._tempMatrix, clear); - } - else { + } else { this._renderCanvas(displayObject, this._tempMatrix, clear); } @@ -55149,8 +55966,7 @@ THIS SOFTWARE. if (this.renderer.type === Phaser.WEBGL) { this._renderWebGL(displayObject, this._tempMatrix, clear); - } - else { + } else { this._renderCanvas(displayObject, this._tempMatrix, clear); } @@ -55175,15 +55991,13 @@ THIS SOFTWARE. if (matrix === undefined || matrix === null) { this._tempMatrix.copyFrom(displayObject.worldTransform); - } - else { + } else { this._tempMatrix.copyFrom(matrix); } if (this.renderer.type === Phaser.WEBGL) { this._renderWebGL(displayObject, this._tempMatrix, clear); - } - else { + } else { this._renderCanvas(displayObject, this._tempMatrix, clear); } @@ -55397,8 +56211,7 @@ THIS SOFTWARE. tempCanvas.context.putImageData(canvasData, 0, 0); return tempCanvas.canvas; - } - else { + } else { return this.textureBuffer.canvas; } @@ -55413,7 +56226,7 @@ THIS SOFTWARE. /** * Create a new game object for displaying Text. * - * This uses a local hidden Canvas object and renders the objType into it. It then makes a texture from this for rendering to the view. + * This uses a local hidden Canvas object and renders the type into it. It then makes a texture from this for rendering to the view. * Because of this you can only display fonts that are currently loaded and available to the browser: fonts must be pre-loaded. * * See {@link http://www.jordanm.co.uk/tinytype this compatibility table} for the available default fonts across mobile browsers. @@ -55450,28 +56263,32 @@ THIS SOFTWARE. if (text === undefined || text === null) { text = ''; - } - else { + } else { text = text.toString(); } - style = Phaser.Utils.extend({}, style); + /** + * @property {HTMLCanvasElement} canvas - The canvas element that the text is rendered. + */ + this.canvas = Phaser.CanvasPool.create(this); + + Phaser.Sprite.call(this, game, x, y, PIXI.Texture.fromCanvas(this.canvas)); /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @default */ - this.objType = Phaser.TEXT; + this.type = Phaser.TEXT; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.SPRITE; /** * Specify a padding value which is added to the line width and height when calculating the Text size. - * ALlows you to add extra spacing if Phaser is unable to accurately determine the true font dimensions. + * Allows you to add extra spacing if Phaser is unable to accurately determine the true font dimensions. * @property {Phaser.Point} padding */ this.padding = new Phaser.Point(); @@ -55484,11 +56301,6 @@ THIS SOFTWARE. */ this.textBounds = null; - /** - * @property {HTMLCanvasElement} canvas - The canvas element that the text is rendered. - */ - this.canvas = Phaser.CanvasPool.create(this); - /** * @property {HTMLCanvasElement} context - The context of the canvas element that the text is rendered to. */ @@ -55555,6 +56367,12 @@ THIS SOFTWARE. */ this.characterLimitSuffix = ''; + /** The text to use to measure the font width and height. + * @property {string} _testString + * @private + */ + this._testString = '|MÉq'; + /** * @property {number} _res - Internal canvas resolution var. * @private @@ -55597,9 +56415,13 @@ THIS SOFTWARE. */ this._height = 0; - Phaser.Sprite.call(this, game, x, y, PIXI.Texture.fromCanvas(this.canvas)); + /** + * @property {object} style + * @private + */ + this.style = {}; - this.setStyle(style); + this.setStyle(style || {}); if (text !== '') { this.updateText(); @@ -55735,7 +56557,7 @@ THIS SOFTWARE. newStyle.align = (style.align || 'left').toLowerCase(); newStyle.boundsAlignH = (style.boundsAlignH || 'left').toLowerCase(); newStyle.boundsAlignV = (style.boundsAlignV || 'top').toLowerCase(); - newStyle.stroke = style.stroke || 'black'; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 + newStyle.stroke = style.stroke || 'black'; // provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 newStyle.strokeThickness = Number(style.strokeThickness) || 0; newStyle.wordWrap = style.wordWrap || false; newStyle.wordWrapWidth = style.wordWrapWidth || 100; @@ -55829,8 +56651,7 @@ THIS SOFTWARE. if (this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0) { lineWidth += this.measureLine(lines[i]); - } - else { + } else { lineWidth += this.context.measureText(lines[i]).width; } @@ -55838,8 +56659,7 @@ THIS SOFTWARE. if (this.style.wordWrap) { lineWidth -= this.context.measureText(' ').width; } - } - else { + } else { // Complex layout (tabs) var line = lines[i].split(/(?:\t)/); var lineWidth = this.padding.x + this.style.strokeThickness; @@ -55852,8 +56672,7 @@ THIS SOFTWARE. if (this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0) { section = this.measureLine(line[c]); - } - else { + } else { section = Math.ceil(this.context.measureText(line[c]).width); } @@ -55863,14 +56682,12 @@ THIS SOFTWARE. lineWidth = tab + section; } - } - else { + } else { for (var c = 0; c < line.length; c++) { // How far to the next tab? if (this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0) { lineWidth += this.measureLine(line[c]); - } - else { + } else { lineWidth += Math.ceil(this.context.measureText(line[c]).width); } @@ -55941,8 +56758,7 @@ THIS SOFTWARE. if (this.style.align === 'right') { linePositionX += maxLineWidth - lineWidths[i]; - } - else if (this.style.align === 'center') { + } else if (this.style.align === 'center') { linePositionX += (maxLineWidth - lineWidths[i]) / 2; } @@ -55953,15 +56769,13 @@ THIS SOFTWARE. if (this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0) { this.updateLine(lines[i], linePositionX, linePositionY); - } - else { + } else { if (this.style.stroke && this.style.strokeThickness) { this.updateShadow(this.style.shadowStroke); if (tabs === 0) { this.context.strokeText(lines[i], linePositionX, linePositionY); - } - else { + } else { this.renderTabLine(lines[i], linePositionX, linePositionY, false); } } @@ -55971,8 +56785,7 @@ THIS SOFTWARE. if (tabs === 0) { this.context.fillText(lines[i], linePositionX, linePositionY); - } - else { + } else { this.renderTabLine(lines[i], linePositionX, linePositionY, true); } } @@ -56014,13 +56827,11 @@ THIS SOFTWARE. if (fill) { this.context.fillText(text[c], snap, y); - } - else { + } else { this.context.strokeText(text[c], snap, y); } } - } - else { + } else { for (var c = 0; c < text.length; c++) { var section = Math.ceil(this.context.measureText(text[c]).width); @@ -56029,8 +56840,7 @@ THIS SOFTWARE. if (fill) { this.context.fillText(text[c], snap, y); - } - else { + } else { this.context.strokeText(text[c], snap, y); } @@ -56054,8 +56864,7 @@ THIS SOFTWARE. this.context.shadowOffsetY = this.style.shadowOffsetY; this.context.shadowColor = this.style.shadowColor; this.context.shadowBlur = this.style.shadowBlur; - } - else { + } else { this.context.shadowOffsetX = 0; this.context.shadowOffsetY = 0; this.context.shadowColor = 0; @@ -56330,8 +57139,7 @@ THIS SOFTWARE. if (this.useAdvancedWrap) { return this.advancedWordWrap(text); - } - else { + } else { return this.basicWordWrap(text); } @@ -56424,6 +57232,7 @@ THIS SOFTWARE. // collapse rest of sentence var remainder = words.slice(offset).join(' ') + // remove any trailing white space .replace(/[ \n]*$/gi, ''); @@ -56434,8 +57243,7 @@ THIS SOFTWARE. break; // processing on this line // append word with space to output - } - else { + } else { out += wordWithSpace; currentLineWidth -= wordWidth; } @@ -56479,8 +57287,7 @@ THIS SOFTWARE. } result += words[j] + ' '; spaceLeft = this.style.wordWrapWidth - wordWidth; - } - else { + } else { spaceLeft -= wordWidthWithSpace; result += words[j] + ' '; } @@ -56540,8 +57347,8 @@ THIS SOFTWARE. var family = m[5].trim(); // If it looks like the value should be quoted, but isn't, then quote it. - if (!/^(?:inherit|serif|sans-serif|cursive|fantasy|monospace)$/.exec(family) && !/['",]/.exec(family)) { - family = "'" + family + "'"; + if (!(/^(?:inherit|serif|sans-serif|cursive|fantasy|monospace)$/).exec(family) && !(/['",]/).exec(family)) { + family = '\'' + family + '\''; } return { @@ -56552,13 +57359,10 @@ THIS SOFTWARE. fontSize: m[4] || 'medium', fontFamily: family }; - } - else { - console.warn("Phaser.Text - unparsable CSS font: " + font); + } else { + console.warn('Phaser.Text - unparsable CSS font: ' + font); - return { - font: font - }; + return {font: font}; } }; @@ -56605,7 +57409,7 @@ THIS SOFTWARE. parts.push(components.font); } - return parts.join(" "); + return parts.join(' '); }; @@ -56630,12 +57434,17 @@ THIS SOFTWARE. immediate = false; } - this.text = text.toString() || ''; + text = text.toString() || ''; + + if (text === this._text) { + return this; + } + + this.text = text; if (immediate) { this.updateText(); - } - else { + } else { this.dirty = true; } @@ -56668,23 +57477,21 @@ THIS SOFTWARE. if (!Array.isArray(list)) { return this; - } - else { - var s = ""; + } else { + var s = ''; for (var i = 0; i < list.length; i++) { if (Array.isArray(list[i])) { - s += list[i].join("\t"); + s += list[i].join('\t'); if (i < list.length - 1) { - s += "\n"; + s += '\n'; } - } - else { + } else { s += list[i]; if (i < list.length - 1) { - s += "\t"; + s += '\t'; } } } @@ -56732,12 +57539,10 @@ THIS SOFTWARE. if (x === undefined) { this.textBounds = null; - } - else { + } else { if (!this.textBounds) { this.textBounds = new Phaser.Rectangle(x, y, width, height); - } - else { + } else { this.textBounds.setTo(x, y, width, height); } @@ -56789,15 +57594,13 @@ THIS SOFTWARE. // Align the canvas based on the bounds if (this.style.boundsAlignH === 'right') { x += this.textBounds.width - this.canvas.width / this.resolution; - } - else if (this.style.boundsAlignH === 'center') { + } else if (this.style.boundsAlignH === 'center') { x += this.textBounds.halfWidth - (this.canvas.width / this.resolution / 2); } if (this.style.boundsAlignV === 'bottom') { y += this.textBounds.height - this.canvas.height / this.resolution; - } - else if (this.style.boundsAlignV === 'middle') { + } else if (this.style.boundsAlignV === 'middle') { y += this.textBounds.halfHeight - (this.canvas.height / this.resolution / 2); } @@ -56860,6 +57663,7 @@ THIS SOFTWARE. Phaser.Text.prototype.determineFontProperties = function (fontStyle) { var properties = Phaser.Text.fontPropertiesCache[fontStyle]; + var measureText = this.testString || '|MÉq'; if (!properties) { properties = {}; @@ -56869,8 +57673,8 @@ THIS SOFTWARE. context.font = fontStyle; - var width = Math.ceil(context.measureText('|MÉq').width); - var baseline = Math.ceil(context.measureText('|MÉq').width); + var width = Math.ceil(context.measureText(measureText).width); + var baseline = Math.ceil(context.measureText(measureText).width); var height = 2 * baseline; baseline = baseline * 1.4 | 0; @@ -56885,7 +57689,7 @@ THIS SOFTWARE. context.textBaseline = 'alphabetic'; context.fillStyle = '#000'; - context.fillText('|MÉq', 0, baseline); + context.fillText(measureText, 0, baseline); if (!context.getImageData(0, 0, width, height)) { properties.ascent = baseline; @@ -56917,8 +57721,7 @@ THIS SOFTWARE. if (!stop) { idx += line; - } - else { + } else { break; } } @@ -56939,14 +57742,14 @@ THIS SOFTWARE. if (!stop) { idx -= line; - } - else { + } else { break; } } properties.descent = i - baseline; - //TODO might need a tweak. kind of a temp fix! + + // TODO might need a tweak. kind of a temp fix! properties.descent += 6; properties.fontSize = properties.ascent + properties.descent; @@ -57069,8 +57872,8 @@ THIS SOFTWARE. value = value.trim(); // If it looks like the value should be quoted, but isn't, then quote it. - if (!/^(?:inherit|serif|sans-serif|cursive|fantasy|monospace)$/.exec(value) && !/['",]/.exec(value)) { - value = "'" + value + "'"; + if (!(/^(?:inherit|serif|sans-serif|cursive|fantasy|monospace)$/).exec(value) && !(/['",]/).exec(value)) { + value = '\'' + value + '\''; } this._fontComponents.fontFamily = value; @@ -57095,10 +57898,9 @@ THIS SOFTWARE. var size = this._fontComponents.fontSize; - if (size && /(?:^0$|px$)/.exec(size)) { + if (size && (/(?:^0$|px$)/).exec(size)) { return parseInt(size, 10); - } - else { + } else { return size; } @@ -57608,6 +58410,28 @@ THIS SOFTWARE. }); + /** + * The text used to measure the font's width and height + * @name Phaser.Text#testString + * @default '|MÉq' + */ + Object.defineProperty(Phaser.Text.prototype, 'testString', { + + get: function () { + + return this._testString; + + }, + + set: function (value) { + + this._testString = value; + this.updateText(); + + } + }); + + Phaser.Text.fontPropertiesCache = {}; Phaser.Text.fontPropertiesCanvas = document.createElement('canvas'); @@ -57678,13 +58502,13 @@ THIS SOFTWARE. PIXI.DisplayObjectContainer.call(this); /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.BITMAPTEXT; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.SPRITE; @@ -57867,8 +58691,7 @@ THIS SOFTWARE. if (/(?:\r\n|\r|\n)/.test(text.charAt(i))) { return {width: w, text: text.substr(0, i), end: end, chars: chars}; - } - else { + } else { var charCode = text.charCodeAt(i); var charData = data.chars[charCode]; @@ -57899,11 +58722,10 @@ THIS SOFTWARE. return { width: wrappedWidth || w, text: text.substr(0, i - (i - lastSpace)), - end: end, + end: false, chars: chars }; - } - else { + } else { w += (charData.xAdvance + kerning) * scale; chars.push(x + (charData.xOffset + kerning) * scale); @@ -57943,7 +58765,7 @@ THIS SOFTWARE. } var re = /\r\n|\n\r|\n|\r/g; - var lines = text.replace(re, "\n").split("\n"); + var lines = text.replace(re, '\n').split('\n'); for (var i = 0; i < lines.length; i++) { var output = ''; @@ -57952,8 +58774,7 @@ THIS SOFTWARE. for (var c = 0; c < line.length; c++) { if (data.chars[line.charCodeAt(c)]) { output = output.concat(line[c]); - } - else { + } else { output = output.concat(replace); } } @@ -57961,7 +58782,7 @@ THIS SOFTWARE. lines[i] = output; } - return lines.join("\n"); + return lines.join('\n'); }; @@ -58016,8 +58837,7 @@ THIS SOFTWARE. if (this._align === 'right') { align = this.textWidth - line.width; - } - else if (this._align === 'center') { + } else if (this._align === 'center') { align = (this.textWidth - line.width) / 2; } @@ -58035,8 +58855,7 @@ THIS SOFTWARE. if (g) { // Sprite already exists in the glyphs pool, so we'll reuse it for this letter g.texture = charData.texture; - } - else { + } else { // We need a new sprite as the pool is empty or exhausted g = new PIXI.Sprite(charData.texture); g.name = line.text[c]; @@ -58088,8 +58907,7 @@ THIS SOFTWARE. for (var i = 0; i < this._glyphs.length; i++) { if (this._glyphs[i].parent !== this) { this._glyphs[i].destroy(); - } - else { + } else { kept.push(this._glyphs[i]); } } @@ -58283,10 +59101,10 @@ THIS SOFTWARE. if (value) { this._data.base.scaleMode = 0; - } - else { + } else { this._data.base.scaleMode = 1; } + this._data.base.dirty(); } @@ -58366,7 +59184,7 @@ THIS SOFTWARE. /** * @property {string} align - Alignment of the text when multiLine = true or a fixedWidth is set. Set to RetroFont.ALIGN_LEFT (default), RetroFont.ALIGN_RIGHT or RetroFont.ALIGN_CENTER. */ - this.align = "left"; + this.align = 'left'; /** * @property {boolean} multiLine - If set to true all carriage-returns in text will form new lines (see align). If false the font will only contain one single line of text (the default) @@ -58437,8 +59255,7 @@ THIS SOFTWARE. r = 0; currentX = this.offsetX; currentY += this.characterHeight + this.characterSpacingY; - } - else { + } else { currentX += this.characterWidth + this.characterSpacingX; } } @@ -58454,7 +59271,7 @@ THIS SOFTWARE. Phaser.RenderTexture.call(this, game, 100, 100, '', Phaser.scaleModes.NEAREST); /** - * @property {number} objType - Base Phaser object objType. + * @property {number} type - Base Phaser object type. */ this.type = Phaser.RETROFONT; @@ -58466,100 +59283,100 @@ THIS SOFTWARE. /** * Align each line of multi-line text to the left. * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.ALIGN_LEFT = "left"; + Phaser.RetroFont.ALIGN_LEFT = 'left'; /** * Align each line of multi-line text to the right. * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.ALIGN_RIGHT = "right"; + Phaser.RetroFont.ALIGN_RIGHT = 'right'; /** * Align each line of multi-line text in the center. * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.ALIGN_CENTER = "center"; + Phaser.RetroFont.ALIGN_CENTER = 'center'; /** * Text Set 1 = !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET1 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; + Phaser.RetroFont.TEXT_SET1 = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'; /** * Text Set 2 = !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET2 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Phaser.RetroFont.TEXT_SET2 = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ'; /** * Text Set 3 = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; + Phaser.RetroFont.TEXT_SET3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '; /** * Text Set 4 = ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET4 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"; + Phaser.RetroFont.TEXT_SET4 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789'; /** * Text Set 5 = ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789 * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET5 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789"; + Phaser.RetroFont.TEXT_SET5 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() \'!?-*:0123456789'; /** * Text Set 6 = ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789"(),-.' * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET6 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' "; + Phaser.RetroFont.TEXT_SET6 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789"(),-.\' '; /** * Text Set 7 = AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW")28FLRX-'39 * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET7 = "AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39"; + Phaser.RetroFont.TEXT_SET7 = 'AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW")28FLRX-\'39'; /** * Text Set 8 = 0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET8 = "0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Phaser.RetroFont.TEXT_SET8 = '0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ'; /** * Text Set 9 = ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'"?! * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET9 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!"; + Phaser.RetroFont.TEXT_SET9 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,\'"?!'; /** * Text Set 10 = ABCDEFGHIJKLMNOPQRSTUVWXYZ * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET10 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Phaser.RetroFont.TEXT_SET10 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; /** * Text Set 11 = ABCDEFGHIJKLMNOPQRSTUVWXYZ.,"-+!?()':;0123456789 * @constant - * @objType {string} + * @type {string} */ - Phaser.RetroFont.TEXT_SET11 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789"; + Phaser.RetroFont.TEXT_SET11 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.,"-+!?()\':;0123456789'; /** * If you need this RetroFont to have a fixed width and custom alignment you can set the width here. @@ -58602,8 +59419,7 @@ THIS SOFTWARE. if (allowLowerCase) { this.autoUpperCase = false; - } - else { + } else { this.autoUpperCase = true; } @@ -58628,12 +59444,11 @@ THIS SOFTWARE. this.clear(); if (this.multiLine) { - var lines = this._text.split("\n"); + var lines = this._text.split('\n'); if (this.fixedWidth > 0) { this.resize(this.fixedWidth, (lines.length * (this.characterHeight + this.customSpacingY)) - this.customSpacingY, true); - } - else { + } else { this.resize(this.getLongestLine() * (this.characterWidth + this.customSpacingX), (lines.length * (this.characterHeight + this.customSpacingY)) - this.customSpacingY, true); } @@ -58645,8 +59460,7 @@ THIS SOFTWARE. // This line of text is held in lines[i] - need to work out the alignment if (this.align === Phaser.RetroFont.ALIGN_RIGHT) { cx = this.width - (lines[i].length * (this.characterWidth + this.customSpacingX)); - } - else if (this.align === Phaser.RetroFont.ALIGN_CENTER) { + } else if (this.align === Phaser.RetroFont.ALIGN_CENTER) { cx = (this.width / 2) - ((lines[i].length * (this.characterWidth + this.customSpacingX)) / 2); cx += this.customSpacingX / 2; } @@ -58660,12 +59474,10 @@ THIS SOFTWARE. cy += this.characterHeight + this.customSpacingY; } - } - else { + } else { if (this.fixedWidth > 0) { this.resize(this.fixedWidth, this.characterHeight, true); - } - else { + } else { this.resize(this._text.length * (this.characterWidth + this.customSpacingX), this.characterHeight, true); } @@ -58674,8 +59486,7 @@ THIS SOFTWARE. if (this.align === Phaser.RetroFont.ALIGN_RIGHT) { cx = this.width - (this._text.length * (this.characterWidth + this.customSpacingX)); - } - else if (this.align === Phaser.RetroFont.ALIGN_CENTER) { + } else if (this.align === Phaser.RetroFont.ALIGN_CENTER) { cx = (this.width / 2) - ((this._text.length * (this.characterWidth + this.customSpacingX)) / 2); cx += this.customSpacingX / 2; } @@ -58707,10 +59518,9 @@ THIS SOFTWARE. for (var c = 0; c < line.length; c++) { // If it's a space then there is no point copying, so leave a blank space - if (line.charAt(c) === " ") { + if (line.charAt(c) === ' ') { x += this.characterWidth + customSpacingX; - } - else { + } else { // If the character doesn't exist in the font then we don't want a blank space, we just want to skip it if (this.grabData[line.charCodeAt(c)] >= 0) { this.stamp.frame = this.grabData[line.charCodeAt(c)]; @@ -58738,7 +59548,7 @@ THIS SOFTWARE. var longestLine = 0; if (this._text.length > 0) { - var lines = this._text.split("\n"); + var lines = this._text.split('\n'); for (var i = 0; i < lines.length; i++) { if (lines[i].length > longestLine) { @@ -58761,13 +59571,13 @@ THIS SOFTWARE. */ Phaser.RetroFont.prototype.removeUnsupportedCharacters = function (stripCR) { - var newString = ""; + var newString = ''; for (var c = 0; c < this._text.length; c++) { var aChar = this._text[c]; var code = aChar.charCodeAt(0); - if (this.grabData[code] >= 0 || (!stripCR && aChar === "\n")) { + if (this.grabData[code] >= 0 || (!stripCR && aChar === '\n')) { newString = newString.concat(aChar); } } @@ -58811,7 +59621,7 @@ THIS SOFTWARE. * @name Phaser.RetroFont#text * @property {string} text - Set this value to update the text in this sprite. Carriage returns are automatically stripped out if multiLine is false. Text is converted to upper case if autoUpperCase is true. */ - Object.defineProperty(Phaser.RetroFont.prototype, "text", { + Object.defineProperty(Phaser.RetroFont.prototype, 'text', { get: function () { @@ -58825,8 +59635,7 @@ THIS SOFTWARE. if (this.autoUpperCase) { newText = value.toUpperCase(); - } - else { + } else { newText = value; } @@ -58846,7 +59655,7 @@ THIS SOFTWARE. * @name Phaser.RetroFont#smoothed * @property {boolean} smoothed - Sets if the stamp is smoothed or not. */ - Object.defineProperty(Phaser.RetroFont.prototype, "smoothed", { + Object.defineProperty(Phaser.RetroFont.prototype, 'smoothed', { get: function () { @@ -58908,8 +59717,7 @@ THIS SOFTWARE. */ Phaser.Rope = function (game, x, y, key, frame, points) { - this.points = []; - this.points = points; + this.points = points || []; this._hasUpdateAnimation = false; this._updateAnimationCallback = null; x = x || 0; @@ -58918,13 +59726,11 @@ THIS SOFTWARE. frame = frame || null; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.ROPE; - this.points = points; - PIXI.DisplayObjectContainer.call(this); this.texture = Phaser.Cache.DEFAULT; @@ -58955,7 +59761,7 @@ THIS SOFTWARE. * Whether the strip is dirty or not * * @property dirty - * @objType Boolean + * @type Boolean */ this.dirty = true; @@ -58963,7 +59769,7 @@ THIS SOFTWARE. * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. * * @property canvasPadding - * @objType Number + * @type Number */ this.canvasPadding = 0; @@ -59103,8 +59909,7 @@ THIS SOFTWARE. uvs[index + 2] = amount; uvs[index + 3] = 1; - } - else { + } else { uvs[index] = amount; uvs[index + 1] = 0; @@ -59157,8 +59962,7 @@ THIS SOFTWARE. if (i < points.length - 1) { nextPoint = points[i + 1]; - } - else { + } else { nextPoint = point; } @@ -59300,15 +60104,13 @@ THIS SOFTWARE. // check if a texture is dirty.. if (this.texture.baseTexture._dirty[gl.id]) { renderSession.renderer.updateTexture(this.texture.baseTexture); - } - else { + } else { // bind the current texture gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]); } gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer); - } - else { + } else { this.dirty = false; gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer); @@ -59325,8 +60127,7 @@ THIS SOFTWARE. // check if a texture is dirty.. if (this.texture.baseTexture._dirty[gl.id]) { renderSession.renderer.updateTexture(this.texture.baseTexture); - } - else { + } else { gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]); } @@ -59356,15 +60157,13 @@ THIS SOFTWARE. if (renderSession.roundPixels) { context.setTransform(transform.a, transform.b, transform.c, transform.d, tx | 0, ty | 0); - } - else { + } else { context.setTransform(transform.a, transform.b, transform.c, transform.d, tx, ty); } if (this.drawMode === Phaser.Rope.TRIANGLE_STRIP) { this._renderCanvasTriangleStrip(context); - } - else { + } else { this._renderCanvasTriangles(context); } @@ -59589,7 +60388,7 @@ THIS SOFTWARE. } if (minX === -Infinity || maxY === Infinity) { - return PIXI.EmptyRectangle; + return Phaser.EmptyRectangle; } var bounds = this._bounds; @@ -59613,7 +60412,7 @@ THIS SOFTWARE. * @name Phaser.Rope#updateAnimation * @property {function} updateAnimation - Set to a function if you'd like the rope to animate during the update phase. Set to false or null to remove it. */ - Object.defineProperty(Phaser.Rope.prototype, "updateAnimation", { + Object.defineProperty(Phaser.Rope.prototype, 'updateAnimation', { get: function () { @@ -59626,8 +60425,7 @@ THIS SOFTWARE. if (value && typeof value === 'function') { this._hasUpdateAnimation = true; this._updateAnimation = value; - } - else { + } else { this._hasUpdateAnimation = false; this._updateAnimation = null; } @@ -59642,7 +60440,7 @@ THIS SOFTWARE. * @name Phaser.Rope#segments * @property {Phaser.Rectangles[]} updateAnimation - Returns an array of Phaser.Rectangles that represent the segments of the given rope */ - Object.defineProperty(Phaser.Rope.prototype, "segments", { + Object.defineProperty(Phaser.Rope.prototype, 'segments', { get: function () { @@ -59741,13 +60539,13 @@ THIS SOFTWARE. PIXI.Sprite.call(this, new PIXI.Texture(Phaser.Cache.DEFAULT.baseTexture), width, height); /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @readonly */ this.type = Phaser.TILESPRITE; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.SPRITE; @@ -60015,8 +60813,7 @@ THIS SOFTWARE. renderSession.renderer.updateTexture(this.tilingTexture.baseTexture); this.tilingTexture.needsUpdate = false; } - } - else { + } else { return; } } @@ -60091,8 +60888,7 @@ THIS SOFTWARE. if (this.tilingTexture) { this.tilePattern = context.createPattern(this.tilingTexture.baseTexture.source, 'repeat'); - } - else { + } else { return; } } @@ -60203,8 +60999,7 @@ THIS SOFTWARE. this.tilingTexture.baseTexture.width = targetWidth; this.tilingTexture.baseTexture.height = targetHeight; this.tilingTexture.needsUpdate = true; - } - else { + } else { this.canvasBuffer = new PIXI.CanvasBuffer(targetWidth, targetHeight); this.tilingTexture = PIXI.Texture.fromCanvas(this.canvasBuffer.canvas); this.tilingTexture.isTiling = true; @@ -60333,7 +61128,7 @@ THIS SOFTWARE. * The width of the sprite, setting this will actually modify the scale to achieve the value set * * @property width - * @objType Number + * @type Number */ Object.defineProperty(Phaser.TileSprite.prototype, 'width', { @@ -60355,7 +61150,7 @@ THIS SOFTWARE. * The height of the TilingSprite, setting this will actually modify the scale to achieve the value set * * @property height - * @objType Number + * @type Number */ Object.defineProperty(Phaser.TileSprite.prototype, 'height', { @@ -60411,8 +61206,7 @@ THIS SOFTWARE. Phaser.CanvasPool.pool.push(container); canvas = container.canvas; - } - else { + } else { Phaser.CanvasPool.pool[idx].parent = parent; canvas = Phaser.CanvasPool.pool[idx].canvas; @@ -60471,7 +61265,7 @@ THIS SOFTWARE. }, /** - * Looks up a canvas based on its objType, and if found puts it back in the pool, freeing it up for re-use. + * Looks up a canvas based on its type, and if found puts it back in the pool, freeing it up for re-use. * The canvas has its width and height set to 1, and its parent attribute nulled. * * @static @@ -60555,7 +61349,7 @@ THIS SOFTWARE. * The pool into which the canvas elements are placed. * * @property pool - * @objType Array + * @type Array * @static */ Phaser.CanvasPool.pool = []; @@ -60565,7 +61359,7 @@ THIS SOFTWARE. * The total number of canvas elements in the {@link Phaser.CanvasPool.pool pool}. * * @property length - * @objType number + * @type number * @static * @readonly */ @@ -60575,6 +61369,7 @@ THIS SOFTWARE. } }); + /* eslint-env browser, node */ /** * @author Richard Davey * @copyright 2016 Photon Storm Ltd. @@ -60590,7 +61385,18 @@ THIS SOFTWARE. * * Unless otherwise noted the device capabilities are only guaranteed after initialization. Initialization * occurs automatically and is guaranteed complete before {@link Phaser.Game} begins its "boot" phase. - * Feature detection can be modified in the {@link Phaser.Device.onInitialized onInitialized} signal. + * Feature detection can be modified in the {@link Phaser.Device.onInitialized onInitialized} signal, e.g., + * + * ```javascript + * Phaser.Device.onInitialized.add(function (device) { + * + * device.canvasBitBltShift = true; + * device.mspointer = false; + * + * }); + * + * var game = new Phaser.Game(); + * ``` * * When checking features using the exposed properties only the *truth-iness* of the value should be relied upon * unless the documentation states otherwise: properties may return `false`, `''`, `null`, or even `undefined` @@ -60836,7 +61642,7 @@ THIS SOFTWARE. this.mspointer = false; /** - * @property {?string} wheelType - The newest objType of Wheel/Scroll event supported: 'wheel', 'mousewheel', 'DOMMouseScroll' + * @property {?string} wheelType - The newest type of Wheel/Scroll event supported: 'wheel', 'mousewheel', 'DOMMouseScroll' * @default * @protected */ @@ -60963,6 +61769,7 @@ THIS SOFTWARE. /** * @property {boolean} webAudio - Is the WebAudio API available? * @default + * @see http://mohayonao.github.io/web-audio-test-api/ */ this.webAudio = false; @@ -61132,7 +61939,7 @@ THIS SOFTWARE. * _Note_: This signal is removed after the device has been readied; if a handler has not been * added _before_ `new Phaser.Game(..)` it is probably too late. * - * @objType {?Phaser.Signal} + * @type {?Phaser.Signal} * @static */ Phaser.Device.onInitialized = new Phaser.Signal(); @@ -61157,29 +61964,25 @@ THIS SOFTWARE. if (this.deviceReadyAt || !readyCheck) { callback.call(context, this); - } - else if (readyCheck._monitor || nonPrimer) { + } else if (readyCheck._monitor || nonPrimer) { readyCheck._queue = readyCheck._queue || []; readyCheck._queue.push([callback, context]); - } - else { + } else { readyCheck._monitor = readyCheck.bind(this); readyCheck._queue = readyCheck._queue || []; readyCheck._queue.push([callback, context]); var cordova = typeof window.cordova !== 'undefined'; - var cocoonJS = navigator['isCocoonJS']; + var cocoonJS = navigator.isCocoonJS; if (document.readyState === 'complete' || document.readyState === 'interactive') { // Why is there an additional timeout here? window.setTimeout(readyCheck._monitor, 0); - } - else if (cordova && !cocoonJS) { + } else if (cordova && !cocoonJS) { // Ref. http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready // Cordova, but NOT Cocoon? document.addEventListener('deviceready', readyCheck._monitor, false); - } - else { + } else { document.addEventListener('DOMContentLoaded', readyCheck._monitor, false); window.addEventListener('load', readyCheck._monitor, false); } @@ -61200,8 +62003,7 @@ THIS SOFTWARE. if (!document.body) { window.setTimeout(readyCheck._monitor, 20); - } - else if (!this.deviceReadyAt) { + } else if (!this.deviceReadyAt) { this.deviceReadyAt = Date.now(); document.removeEventListener('deviceready', readyCheck._monitor); @@ -61248,34 +62050,28 @@ THIS SOFTWARE. if (/Playstation Vita/.test(ua)) { device.vita = true; - } - else if (/Kindle/.test(ua) || /\bKF[A-Z][A-Z]+/.test(ua) || /Silk.*Mobile Safari/.test(ua)) { + } else if (/Kindle/.test(ua) || (/\bKF[A-Z][A-Z]+/).test(ua) || (/Silk.*Mobile Safari/).test(ua)) { device.kindle = true; + // This will NOT detect early generations of Kindle Fire, I think there is no reliable way... // E.g. "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true" - } - else if (/Android/.test(ua)) { + } else if (/Android/.test(ua)) { device.android = true; - } - else if (/CrOS/.test(ua)) { + } else if (/CrOS/.test(ua)) { device.chromeOS = true; - } - else if (/iP[ao]d|iPhone/i.test(ua)) { + } else if (/iP[ao]d|iPhone/i.test(ua)) { device.iOS = true; (navigator.appVersion).match(/OS (\d+)/); device.iOSVersion = parseInt(RegExp.$1, 10); - } - else if (/Linux/.test(ua)) { + } else if (/Linux/.test(ua)) { device.linux = true; - } - else if (/Mac OS/.test(ua)) { + } else if (/Mac OS/.test(ua)) { device.macOS = true; - } - else if (/Windows/.test(ua)) { + } else if (/Windows/.test(ua)) { device.windows = true; } - if (/Windows Phone/i.test(ua) || /IEMobile/i.test(ua)) { + if (/Windows Phone/i.test(ua) || (/IEMobile/i).test(ua)) { device.android = false; device.iOS = false; device.macOS = false; @@ -61283,7 +62079,7 @@ THIS SOFTWARE. device.windowsPhone = true; } - var silk = /Silk/.test(ua); // detected in browsers + var silk = (/Silk/).test(ua); // detected in browsers if (device.windows || device.macOS || (device.linux && !silk) || device.chromeOS) { device.desktop = true; @@ -61345,7 +62141,7 @@ THIS SOFTWARE. */ function _checkFeatures() { - device.canvas = !!window['CanvasRenderingContext2D'] || device.cocoonJS; + device.canvas = !!window.CanvasRenderingContext2D || device.cocoonJS; try { device.localStorage = !!localStorage.getItem; @@ -61353,24 +62149,26 @@ THIS SOFTWARE. device.localStorage = false; } - device.file = !!window['File'] && !!window['FileReader'] && !!window['FileList'] && !!window['Blob']; - device.fileSystem = !!window['requestFileSystem']; + device.file = !!window.File && !!window.FileReader && !!window.FileList && !!window.Blob; + device.fileSystem = !!window.requestFileSystem; - device.webGL = (function () { - try { - var canvas = document.createElement('canvas'); - /*Force screencanvas to false*/ - canvas.screencanvas = false; - return !!window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')); - } catch (e) { - return false; - } - })(); - device.webGL = !!device.webGL; + device.webGL = !!window.WebGLRenderingContext; - device.worker = !!window['Worker']; + device.worker = !!window.Worker; - device.pointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document; + device.pointerLockElement = (('pointerLockElement' in document) && 'pointerLockElement') || + (('mozPointerLockElement' in document) && 'mozPointerLockElement') || + (('webkitPointerLockElement' in document) && 'webkitPointerLockElement'); + + device.pointerlockchange = (('onpointerlockchange' in document) && 'pointerlockchange') || + (('onmozpointerlockchange' in document) && 'mozpointerlockchange') || + (('onwebkitpointerlockchange' in document) && 'webkitpointerlockchange'); + + device.pointerlockerror = (('onpointerlockerror' in document) && 'pointerlockerror') || + (('onmozpointerlockerror' in document) && 'mozpointerlockerror') || + (('onwebkitpointerlockerror' in document) && 'webkitpointerlockerror'); + + device.pointerLock = !!device.pointerLockElement; device.quirksMode = (document.compatMode === 'CSS1Compat') ? false : true; @@ -61418,12 +62216,10 @@ THIS SOFTWARE. if ('onwheel' in window || (device.ie && 'WheelEvent' in window)) { // DOM3 Wheel Event: FF 17+, IE 9+, Chrome 31+, Safari 7+ device.wheelEvent = 'wheel'; - } - else if ('onmousewheel' in window) { + } else if ('onmousewheel' in window) { // Non-FF legacy: IE 6-9, Chrome 1-31, Safari 5-7. device.wheelEvent = 'mousewheel'; - } - else if (device.firefox && 'MouseScrollEvent' in window) { + } else if (device.firefox && 'MouseScrollEvent' in window) { // FF prior to 17. This should probably be scrubbed. device.wheelEvent = 'DOMMouseScroll'; } @@ -61478,7 +62274,7 @@ THIS SOFTWARE. } // Keyboard Input? - if (window['Element'] && Element['ALLOW_KEYBOARD_INPUT']) { + if (window.Element && Element.ALLOW_KEYBOARD_INPUT) { device.fullscreenKeyboard = true; } @@ -61493,42 +62289,32 @@ THIS SOFTWARE. if (/Arora/.test(ua)) { device.arora = true; - } - else if (/Edge\/\d+/.test(ua)) { + } else if (/Edge\/\d+/.test(ua)) { device.edge = true; - } - else if (/Chrome\/(\d+)/.test(ua) && !device.windowsPhone) { + } else if (/Chrome\/(\d+)/.test(ua) && !device.windowsPhone) { device.chrome = true; device.chromeVersion = parseInt(RegExp.$1, 10); - } - else if (/Epiphany/.test(ua)) { + } else if (/Epiphany/.test(ua)) { device.epiphany = true; - } - else if (/Firefox\D+(\d+)/.test(ua)) { + } else if (/Firefox\D+(\d+)/.test(ua)) { device.firefox = true; device.firefoxVersion = parseInt(RegExp.$1, 10); - } - else if (/AppleWebKit/.test(ua) && device.iOS) { + } else if (/AppleWebKit/.test(ua) && device.iOS) { device.mobileSafari = true; - } - else if (/MSIE (\d+\.\d+);/.test(ua)) { + } else if (/MSIE (\d+\.\d+);/.test(ua)) { device.ie = true; device.ieVersion = parseInt(RegExp.$1, 10); - } - else if (/Midori/.test(ua)) { + } else if (/Midori/.test(ua)) { device.midori = true; - } - else if (/Opera/.test(ua)) { + } else if (/Opera/.test(ua)) { device.opera = true; - } - else if (/Safari\/(\d+)/.test(ua) && !device.windowsPhone) { + } else if (/Safari\/(\d+)/.test(ua) && !device.windowsPhone) { device.safari = true; if (/Version\/(\d+)\./.test(ua)) { device.safariVersion = parseInt(RegExp.$1, 10); } - } - else if (/Trident\/(\d+\.\d+)(.*)rv:(\d+\.\d+)/.test(ua)) { + } else if (/Trident\/(\d+\.\d+)(.*)rv:(\d+\.\d+)/.test(ua)) { device.ie = true; device.trident = true; device.tridentVersion = parseInt(RegExp.$1, 10); @@ -61541,7 +62327,7 @@ THIS SOFTWARE. } // WebApp mode in iOS - if (navigator['standalone']) { + if (navigator.standalone) { device.webApp = true; } @@ -61559,15 +62345,14 @@ THIS SOFTWARE. device.electron = !!process.versions.electron; } - if (navigator['isCocoonJS']) { + if (navigator.isCocoonJS) { device.cocoonJS = true; } if (device.cocoonJS) { try { device.cocoonJSApp = (typeof CocoonJS !== 'undefined'); - } - catch (error) { + } catch (error) { device.cocoonJSApp = false; } } @@ -61587,11 +62372,10 @@ THIS SOFTWARE. */ function _checkVideo() { - var videoElement = document.createElement("video"); - var result = false; + var videoElement = document.createElement('video'); try { - if (result = !!videoElement.canPlayType) { + if (videoElement.canPlayType) { if (videoElement.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, '')) { device.oggVideo = true; } @@ -61615,7 +62399,7 @@ THIS SOFTWARE. } } } catch (e) { - } + } // eslint-disable-line no-empty } /** @@ -61623,13 +62407,12 @@ THIS SOFTWARE. */ function _checkAudio() { - device.audioData = !!(window['Audio']); - device.webAudio = !!(window['AudioContext'] || window['webkitAudioContext']); + device.audioData = !!(window.Audio); + device.webAudio = !!(window.AudioContext || window.webkitAudioContext); var audioElement = document.createElement('audio'); - var result = false; try { - if (result = !!audioElement.canPlayType) { + if (audioElement.canPlayType) { if (audioElement.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, '')) { device.ogg = true; } @@ -61660,8 +62443,7 @@ THIS SOFTWARE. if (audioElement.canPlayType('audio/mp4;codecs="ec-3"') !== '') { if (device.edge) { device.dolby = true; - } - else if (device.safari && device.safariVersion >= 9) { + } else if (device.safari && device.safariVersion >= 9) { if (/Mac OS X (\d+)_(\d+)/.test(navigator.userAgent)) { var major = parseInt(RegExp.$1, 10); var minor = parseInt(RegExp.$2, 10); @@ -61674,7 +62456,7 @@ THIS SOFTWARE. } } } catch (e) { - } + } // eslint-disable-line no-empty } @@ -61700,8 +62482,7 @@ THIS SOFTWARE. if (c[0] === 0xa1b2c3d4) { return false; - } - else { + } else { // Could not determine endianness return null; } @@ -61739,15 +62520,14 @@ THIS SOFTWARE. */ function _checkDevice() { - device.pixelRatio = window['devicePixelRatio'] || 1; + device.pixelRatio = window.devicePixelRatio || 1; device.iPhone = navigator.userAgent.toLowerCase().indexOf('iphone') !== -1; device.iPhone4 = (device.pixelRatio === 2 && device.iPhone); device.iPad = navigator.userAgent.toLowerCase().indexOf('ipad') !== -1; if (typeof Int8Array !== 'undefined') { device.typedArray = true; - } - else { + } else { device.typedArray = false; } @@ -61774,11 +62554,11 @@ THIS SOFTWARE. var el = document.createElement('p'); var has3d; var transforms = { - 'webkitTransform': '-webkit-transform', - 'OTransform': '-o-transform', - 'msTransform': '-ms-transform', - 'MozTransform': '-moz-transform', - 'transform': 'transform' + webkitTransform: '-webkit-transform', + OTransform: '-o-transform', + msTransform: '-ms-transform', + MozTransform: '-moz-transform', + transform: 'transform' }; // Add it to the body to get the computed style. @@ -61786,13 +62566,13 @@ THIS SOFTWARE. for (var t in transforms) { if (el.style[t] !== undefined) { - el.style[t] = "translate3d(1px,1px,1px)"; + el.style[t] = 'translate3d(1px,1px,1px)'; has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]); } } document.body.removeChild(el); - device.css3D = (has3d !== undefined && has3d.length > 0 && has3d !== "none"); + device.css3D = (has3d !== undefined && has3d.length > 0 && has3d !== 'none'); } @@ -61816,29 +62596,23 @@ THIS SOFTWARE. * @method canPlayAudio * @memberof Phaser.Device.prototype * @param {string} type - One of 'mp3, 'ogg', 'm4a', 'wav', 'webm' or 'opus'. - * @return {boolean} True if the given file objType is supported by the browser, otherwise false. + * @return {boolean} True if the given file type is supported by the browser, otherwise false. */ Phaser.Device.canPlayAudio = function (type) { if (type === 'mp3' && this.mp3) { return true; - } - else if (type === 'ogg' && (this.ogg || this.opus)) { + } else if (type === 'ogg' && (this.ogg || this.opus)) { return true; - } - else if (type === 'm4a' && this.m4a) { + } else if (type === 'm4a' && this.m4a) { return true; - } - else if (type === 'opus' && this.opus) { + } else if (type === 'opus' && this.opus) { return true; - } - else if (type === 'wav' && this.wav) { + } else if (type === 'wav' && this.wav) { return true; - } - else if (type === 'webm' && this.webm) { + } else if (type === 'webm' && this.webm) { return true; - } - else if (type === 'mp4' && this.dolby) { + } else if (type === 'mp4' && this.dolby) { return true; } @@ -61852,20 +62626,17 @@ THIS SOFTWARE. * @method canPlayVideo * @memberof Phaser.Device.prototype * @param {string} type - One of 'mp4, 'ogg', 'webm' or 'mpeg'. - * @return {boolean} True if the given file objType is supported by the browser, otherwise false. + * @return {boolean} True if the given file type is supported by the browser, otherwise false. */ Phaser.Device.canPlayVideo = function (type) { if (type === 'webm' && (this.webmVideo || this.vp9Video)) { return true; - } - else if (type === 'mp4' && (this.mp4Video || this.h264Video)) { + } else if (type === 'mp4' && (this.mp4Video || this.h264Video)) { return true; - } - else if ((type === 'ogg' || type === 'ogv') && this.oggVideo) { + } else if ((type === 'ogg' || type === 'ogv') && this.oggVideo) { return true; - } - else if (type === 'mpeg' && this.hlsVideo) { + } else if (type === 'mpeg' && this.hlsVideo) { return true; } @@ -61884,22 +62655,6 @@ THIS SOFTWARE. return !!(!this.cocoonJS && (this.iOS || this.android) || (window.PhaserGlobal && window.PhaserGlobal.fakeiOSTouchLock)); }; - /** - * Returns false. - * - * @deprecated - * @method isConsoleOpen - * @memberof Phaser.Device.prototype - * @return false - */ - Phaser.Device.isConsoleOpen = function () { - - console.warn('Phaser.Device.isConsoleOpen is deprecated and will be removed.'); - - return false; - - }; - /** * Detect if the host is a an Android Stock browser. * This is available before the device "ready" event. @@ -62048,8 +62803,7 @@ THIS SOFTWARE. if (typeof parent === 'string') { // hopefully an element ID target = document.getElementById(parent); - } - else if (typeof parent === 'object' && parent.nodeType === 1) { + } else if (typeof parent === 'object' && parent.nodeType === 1) { // quick test for a HTMLelement target = parent; } @@ -62170,16 +62924,20 @@ THIS SOFTWARE. }, /** - * Sets the CSS image-rendering property on the given canvas to be 'crisp' (aka 'optimize contrast' on webkit). + * Sets the CSS image-rendering property to `pixelated` or `crisp-edges`. + * This can remove blurring when the game canvas is scaled up. + * In some browsers this has no visible effect in WEBGL mode. * Note that if this doesn't given the desired result then see the setSmoothingEnabled. * * @method Phaser.Canvas.setImageRenderingCrisp * @param {HTMLCanvasElement} canvas - The canvas to set image-rendering crisp on. * @return {HTMLCanvasElement} Returns the source canvas. + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering + * @see https://caniuse.com/#feat=css-crisp-edges */ setImageRenderingCrisp: function (canvas) { - var types = ['optimizeSpeed', 'crisp-edges', '-moz-crisp-edges', '-webkit-optimize-contrast', 'optimize-contrast', 'pixelated']; + var types = ['-webkit-optimize-contrast', '-moz-crisp-edges', 'crisp-edges', 'pixelated']; for (var i = 0; i < types.length; i++) { canvas.style['image-rendering'] = types[i]; @@ -62298,8 +63056,7 @@ THIS SOFTWARE. }; this._timeOutID = window.setTimeout(this._onLoop, 0); - } - else { + } else { this._isSetTimeOut = false; this._onLoop = function (time) { @@ -62348,8 +63105,7 @@ THIS SOFTWARE. if (this._isSetTimeOut) { clearTimeout(this._timeOutID); - } - else { + } else { window.cancelAnimationFrame(this._timeOutID); } @@ -62462,8 +63218,7 @@ THIS SOFTWARE. if (value > 0 && (value & (value - 1)) === 0) { // http://goo.gl/D9kPj return value; - } - else { + } else { var result = 1; while (result < value) { @@ -62866,6 +63621,24 @@ THIS SOFTWARE. }, + /** + * Truncates a number, removing any fractional part. + * Same as round-towards-zero. + * + * @method Phaser.Math#trunc + * @param {number} value - The value to truncate. + * @return {number} The truncated value. + */ + trunc: function (value) { + + if (!isFinite(value)) { + return value; + } + + return (value - value % 1) || (value < 0 ? -0 : value === 0 ? value : 0); + + }, + /** * Rotates currentAngle towards targetAngle, taking the shortest rotation distance. * The lerp argument is the amount to rotate by in this call. @@ -62888,21 +63661,18 @@ THIS SOFTWARE. if (Math.abs(targetAngle - currentAngle) <= lerp || Math.abs(targetAngle - currentAngle) >= (Phaser.Math.PI2 - lerp)) { currentAngle = targetAngle; - } - else { + } else { if (Math.abs(targetAngle - currentAngle) > Math.PI) { if (targetAngle < currentAngle) { targetAngle += Phaser.Math.PI2; - } - else { + } else { targetAngle -= Phaser.Math.PI2; } } if (targetAngle > currentAngle) { currentAngle += lerp; - } - else if (targetAngle < currentAngle) { + } else if (targetAngle < currentAngle) { currentAngle -= lerp; } } @@ -63150,8 +63920,7 @@ THIS SOFTWARE. if (arguments.length === 1 && typeof arguments[0] === 'object') { var data = arguments[0]; - } - else { + } else { var data = arguments; } @@ -63178,8 +63947,7 @@ THIS SOFTWARE. if (arguments.length === 1 && typeof arguments[0] === 'object') { var data = arguments[0]; - } - else { + } else { var data = arguments; } @@ -63204,8 +63972,7 @@ THIS SOFTWARE. if (arguments.length === 2 && typeof arguments[1] === 'object') { var data = arguments[1]; - } - else { + } else { var data = arguments.slice(1); } @@ -63230,8 +63997,7 @@ THIS SOFTWARE. if (arguments.length === 2 && typeof arguments[1] === 'object') { var data = arguments[1]; - } - else { + } else { var data = arguments.slice(1); } @@ -63264,7 +64030,7 @@ THIS SOFTWARE. * * @method Phaser.Math#linearInterpolation * @param {Array} v - The input array of values to interpolate between. - * @param {number} k - The percentage of interpolation, between 0 and 1. + * @param {number} k - The amount of interpolation, between 0 (start) and 1 (end). * @return {number} The interpolated value */ linearInterpolation: function (v, k) { @@ -63326,8 +64092,7 @@ THIS SOFTWARE. } return this.catmullRom(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i); - } - else { + } else { if (k < 0) { return v[0] - (this.catmullRom(v[0], v[0], v[1], v[1], -f) - v[0]); } @@ -63404,7 +64169,10 @@ THIS SOFTWARE. */ catmullRom: function (p0, p1, p2, p3, t) { - var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2; + var v0 = (p2 - p0) * 0.5, + v1 = (p3 - p1) * 0.5, + t2 = t * t, + t3 = t * t2; return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; @@ -63571,11 +64339,9 @@ THIS SOFTWARE. if (v < min) { return min; - } - else if (max < v) { + } else if (max < v) { return max; - } - else { + } else { return v; } @@ -63697,11 +64463,9 @@ THIS SOFTWARE. if (a > b || base > b) { return 1; - } - else if (a < base || base > a) { + } else if (a < base || base > a) { return 0; - } - else { + } else { return (a - base) / b; } @@ -63763,8 +64527,7 @@ THIS SOFTWARE. if (typeof seeds === 'string') { this.state(seeds); - } - else { + } else { this.sow(seeds); } @@ -63874,7 +64637,7 @@ THIS SOFTWARE. */ frac: function () { - return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53 + return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53 }, @@ -63957,7 +64720,7 @@ THIS SOFTWARE. var b = ''; for (b = a = ''; a++ < 36; b += ~a % 5 | a * 3 & 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : '-') { - } + } // eslint-disable-line no-empty return b; @@ -64248,8 +65011,7 @@ THIS SOFTWARE. if (index !== -1) { // this is expensive - see what we can do about it this.nodes[index].insert(this.objects.splice(i, 1)[0]); - } - else { + } else { i++; } } @@ -64273,19 +65035,16 @@ THIS SOFTWARE. if (rect.y < this.bounds.bottom && rect.bottom < this.bounds.bottom) { // rect fits within the top-left quadrant of this quadtree index = 1; - } - else if (rect.y > this.bounds.bottom) { + } else if (rect.y > this.bounds.bottom) { // rect fits within the bottom-left quadrant of this quadtree index = 2; } - } - else if (rect.x > this.bounds.right) { + } else if (rect.x > this.bounds.right) { // rect can completely fit within the right quadrants if (rect.y < this.bounds.bottom && rect.bottom < this.bounds.bottom) { // rect fits within the top-right quadrant of this quadtree index = 0; - } - else if (rect.y > this.bounds.bottom) { + } else if (rect.y > this.bounds.bottom) { // rect fits within the bottom-right quadrant of this quadtree index = 3; } @@ -64308,8 +65067,7 @@ THIS SOFTWARE. var returnObjects = this.objects; var index = this.getIndex(source); - } - else { + } else { if (!source.body) { return this._empty; } @@ -64323,8 +65081,7 @@ THIS SOFTWARE. // If rect fits into a subnode .. if (index !== -1) { returnObjects = returnObjects.concat(this.nodes[index].retrieve(source)); - } - else { + } else { // If rect does not fit into a subnode, check it against all subnodes (unrolled for speed) returnObjects = returnObjects.concat(this.nodes[0].retrieve(source)); returnObjects = returnObjects.concat(this.nodes[1].retrieve(source)); @@ -64469,38 +65226,32 @@ THIS SOFTWARE. } var output = ''; - var re = new RegExp("([?|&])" + key + "=.*?(&|#|$)(.*)", "gi"); + var re = new RegExp('([?|&])' + key + '=.*?(&|#|$)(.*)', 'gi'); if (re.test(url)) { if (typeof value !== 'undefined' && value !== null) { - output = url.replace(re, '$1' + key + "=" + value + '$2$3'); - } - else { + output = url.replace(re, '$1' + key + '=' + value + '$2$3'); + } else { output = url.replace(re, '$1$3').replace(/(&|\?)$/, ''); } - } - else { - if (typeof value !== 'undefined' && value !== null) { - var separator = url.indexOf('?') !== -1 ? '&' : '?'; - var hash = url.split('#'); - url = hash[0] + separator + key + '=' + value; - - if (hash[1]) { - url += '#' + hash[1]; - } - - output = url; + } else if (typeof value !== 'undefined' && value !== null) { + var separator = url.indexOf('?') !== -1 ? '&' : '?'; + var hash = url.split('#'); + url = hash[0] + separator + key + '=' + value; + if (hash[1]) { + url += '#' + hash[1]; } - else { - output = url; - } + + output = url; + + } else { + output = url; } if (redirect) { window.location.href = output; - } - else { + } else { return output; } @@ -64529,8 +65280,7 @@ THIS SOFTWARE. if (key.length > 1) { if (parameter && parameter === this.decodeURI(key[0])) { return this.decodeURI(key[1]); - } - else { + } else { output[this.decodeURI(key[0])] = this.decodeURI(key[1]); } } @@ -64549,7 +65299,7 @@ THIS SOFTWARE. * @return {string} The decoded value. */ decodeURI: function (value) { - return decodeURIComponent(value.replace(/\+/g, " ")); + return decodeURIComponent(value.replace(/\+/g, ' ')); } }; @@ -64609,56 +65359,56 @@ THIS SOFTWARE. this.easeMap = { - "Power0": Phaser.Easing.Power0, - "Power1": Phaser.Easing.Power1, - "Power2": Phaser.Easing.Power2, - "Power3": Phaser.Easing.Power3, - "Power4": Phaser.Easing.Power4, + Power0: Phaser.Easing.Power0, + Power1: Phaser.Easing.Power1, + Power2: Phaser.Easing.Power2, + Power3: Phaser.Easing.Power3, + Power4: Phaser.Easing.Power4, - "Linear": Phaser.Easing.Linear.None, - "Quad": Phaser.Easing.Quadratic.Out, - "Cubic": Phaser.Easing.Cubic.Out, - "Quart": Phaser.Easing.Quartic.Out, - "Quint": Phaser.Easing.Quintic.Out, - "Sine": Phaser.Easing.Sinusoidal.Out, - "Expo": Phaser.Easing.Exponential.Out, - "Circ": Phaser.Easing.Circular.Out, - "Elastic": Phaser.Easing.Elastic.Out, - "Back": Phaser.Easing.Back.Out, - "Bounce": Phaser.Easing.Bounce.Out, + Linear: Phaser.Easing.Linear.None, + Quad: Phaser.Easing.Quadratic.Out, + Cubic: Phaser.Easing.Cubic.Out, + Quart: Phaser.Easing.Quartic.Out, + Quint: Phaser.Easing.Quintic.Out, + Sine: Phaser.Easing.Sinusoidal.Out, + Expo: Phaser.Easing.Exponential.Out, + Circ: Phaser.Easing.Circular.Out, + Elastic: Phaser.Easing.Elastic.Out, + Back: Phaser.Easing.Back.Out, + Bounce: Phaser.Easing.Bounce.Out, - "Quad.easeIn": Phaser.Easing.Quadratic.In, - "Cubic.easeIn": Phaser.Easing.Cubic.In, - "Quart.easeIn": Phaser.Easing.Quartic.In, - "Quint.easeIn": Phaser.Easing.Quintic.In, - "Sine.easeIn": Phaser.Easing.Sinusoidal.In, - "Expo.easeIn": Phaser.Easing.Exponential.In, - "Circ.easeIn": Phaser.Easing.Circular.In, - "Elastic.easeIn": Phaser.Easing.Elastic.In, - "Back.easeIn": Phaser.Easing.Back.In, - "Bounce.easeIn": Phaser.Easing.Bounce.In, + 'Quad.easeIn': Phaser.Easing.Quadratic.In, + 'Cubic.easeIn': Phaser.Easing.Cubic.In, + 'Quart.easeIn': Phaser.Easing.Quartic.In, + 'Quint.easeIn': Phaser.Easing.Quintic.In, + 'Sine.easeIn': Phaser.Easing.Sinusoidal.In, + 'Expo.easeIn': Phaser.Easing.Exponential.In, + 'Circ.easeIn': Phaser.Easing.Circular.In, + 'Elastic.easeIn': Phaser.Easing.Elastic.In, + 'Back.easeIn': Phaser.Easing.Back.In, + 'Bounce.easeIn': Phaser.Easing.Bounce.In, - "Quad.easeOut": Phaser.Easing.Quadratic.Out, - "Cubic.easeOut": Phaser.Easing.Cubic.Out, - "Quart.easeOut": Phaser.Easing.Quartic.Out, - "Quint.easeOut": Phaser.Easing.Quintic.Out, - "Sine.easeOut": Phaser.Easing.Sinusoidal.Out, - "Expo.easeOut": Phaser.Easing.Exponential.Out, - "Circ.easeOut": Phaser.Easing.Circular.Out, - "Elastic.easeOut": Phaser.Easing.Elastic.Out, - "Back.easeOut": Phaser.Easing.Back.Out, - "Bounce.easeOut": Phaser.Easing.Bounce.Out, + 'Quad.easeOut': Phaser.Easing.Quadratic.Out, + 'Cubic.easeOut': Phaser.Easing.Cubic.Out, + 'Quart.easeOut': Phaser.Easing.Quartic.Out, + 'Quint.easeOut': Phaser.Easing.Quintic.Out, + 'Sine.easeOut': Phaser.Easing.Sinusoidal.Out, + 'Expo.easeOut': Phaser.Easing.Exponential.Out, + 'Circ.easeOut': Phaser.Easing.Circular.Out, + 'Elastic.easeOut': Phaser.Easing.Elastic.Out, + 'Back.easeOut': Phaser.Easing.Back.Out, + 'Bounce.easeOut': Phaser.Easing.Bounce.Out, - "Quad.easeInOut": Phaser.Easing.Quadratic.InOut, - "Cubic.easeInOut": Phaser.Easing.Cubic.InOut, - "Quart.easeInOut": Phaser.Easing.Quartic.InOut, - "Quint.easeInOut": Phaser.Easing.Quintic.InOut, - "Sine.easeInOut": Phaser.Easing.Sinusoidal.InOut, - "Expo.easeInOut": Phaser.Easing.Exponential.InOut, - "Circ.easeInOut": Phaser.Easing.Circular.InOut, - "Elastic.easeInOut": Phaser.Easing.Elastic.InOut, - "Back.easeInOut": Phaser.Easing.Back.InOut, - "Bounce.easeInOut": Phaser.Easing.Bounce.InOut + 'Quad.easeInOut': Phaser.Easing.Quadratic.InOut, + 'Cubic.easeInOut': Phaser.Easing.Cubic.InOut, + 'Quart.easeInOut': Phaser.Easing.Quartic.InOut, + 'Quint.easeInOut': Phaser.Easing.Quintic.InOut, + 'Sine.easeInOut': Phaser.Easing.Sinusoidal.InOut, + 'Expo.easeInOut': Phaser.Easing.Exponential.InOut, + 'Circ.easeInOut': Phaser.Easing.Circular.InOut, + 'Elastic.easeInOut': Phaser.Easing.Elastic.InOut, + 'Back.easeInOut': Phaser.Easing.Back.InOut, + 'Bounce.easeInOut': Phaser.Easing.Bounce.InOut }; @@ -64714,13 +65464,11 @@ THIS SOFTWARE. for (i = 0, len = obj.length; i < len; i++) { this.removeFrom(obj[i]); } - } - else if (obj.type === Phaser.GROUP && children) { + } else if (obj.type === Phaser.GROUP && children) { for (var i = 0, len = obj.children.length; i < len; i++) { this.removeFrom(obj.children[i]); } - } - else { + } else { for (i = 0, len = this._tweens.length; i < len; i++) { if (obj === this._tweens[i].target) { this.remove(this._tweens[i]); @@ -64775,8 +65523,7 @@ THIS SOFTWARE. if (i !== -1) { this._tweens[i].pendingDelete = true; - } - else { + } else { i = this._add.indexOf(tween); if (i !== -1) { @@ -64806,8 +65553,7 @@ THIS SOFTWARE. while (i < numTweens) { if (this._tweens[i].update(this.game.time.time)) { i++; - } - else { + } else { this._tweens.splice(i, 1); numTweens--; @@ -64827,14 +65573,21 @@ THIS SOFTWARE. /** * Checks to see if a particular Sprite is currently being tweened. * + * The `checkIsRunning` parameter will exclude tweens that have **just** completed or been stopped but haven't yet been removed from the manager. + * * @method Phaser.TweenManager#isTweening * @param {object} object - The object to check for tweens against. + * @param {boolean} [checkIsRunning=false] - Also check that the tween is running and is not marked for deletion. * @returns {boolean} Returns true if the object is currently being tweened, false if not. */ - isTweening: function (object) { + isTweening: function (object, checkIsRunning) { + + if (!checkIsRunning) { + checkIsRunning = false; + } return this._tweens.some(function (tween) { - return tween.target === object; + return (tween.target === object) && (!checkIsRunning || (tween.isRunning && !tween.pendingDelete)); }); }, @@ -64891,6 +65644,22 @@ THIS SOFTWARE. this._tweens[i].resume(true); } + }, + + /** + * Removes all tweens and deletes queues. + * + * @method Phaser.TweenManager#destroy + */ + destroy: function () { + + this.game.onPause.remove(this._pauseAll, this); + this.game.onResume.remove(this._resumeAll, this); + + this.game = null; + this._add = null; + this._tweens = null; + } }; @@ -65226,9 +65995,11 @@ THIS SOFTWARE. }, /** - * Starts the tween running. Can also be called by the autoStart parameter of `Tween.to` or `Tween.from`. - * This sets the `Tween.isRunning` property to `true` and dispatches a `Tween.onStart` signal. - * If the Tween has a delay set then nothing will start tweening until the delay has expired. + * Starts the tween running. Can also be called by the `autoStart` parameter of {@link #to} or {@link #from}. + * This sets the {@link #isRunning} property to `true` and dispatches the {@link #onStart} signal. + * If the tween has a delay set then nothing will start tweening until the delay has expired. + * If the tween is already running, is flagged for deletion (such as after {@link #stop}), + * or has an empty timeline, calling start has no effect and the `onStart` signal is not dispatched. * * @method Phaser.Tween#start * @param {number} [index=0] - If this Tween contains child tweens you can specify which one to start from. The default is zero, i.e. the first tween created. @@ -65240,6 +66011,11 @@ THIS SOFTWARE. index = 0; } + if (this.pendingDelete) { + console.warn('Phaser.Tween.start cannot be called after Tween.stop'); + return this; + } + if (this.game === null || this.target === null || this.timeline.length === 0 || this.isRunning) { return this; } @@ -65278,9 +66054,10 @@ THIS SOFTWARE. }, /** - * Stops the tween if running and flags it for deletion from the TweenManager. - * If called directly the `Tween.onComplete` signal is not dispatched and no chained tweens are started unless the complete parameter is set to `true`. - * If you just wish to pause a tween then use Tween.pause instead. + * Stops the tween if running and flags it for deletion from the TweenManager. The tween can't be {@link #start restarted} after this. + * The {@link #onComplete} signal is not dispatched and no chained tweens are started unless the `complete` parameter is set to `true`. + * If you just wish to pause a tween then use {@link #pause} instead. + * If the tween is not running, it is **not** flagged for deletion and can be started again. * * @method Phaser.Tween#stop * @param {boolean} [complete=false] - Set to `true` to dispatch the Tween.onComplete signal. @@ -65337,8 +66114,7 @@ THIS SOFTWARE. for (var i = 0; i < this.timeline.length; i++) { this.timeline[i][property] = value; } - } - else { + } else { this.timeline[index][property] = value; } @@ -65382,6 +66158,7 @@ THIS SOFTWARE. } this.updateTweenData('repeatCounter', total, index); + this.updateTweenData('repeatTotal', total, index); return this.updateTweenData('repeatDelay', repeatDelay, index); @@ -65532,8 +66309,7 @@ THIS SOFTWARE. while (i--) { if (i > 0) { arguments[i - 1].chainedTween = arguments[i]; - } - else { + } else { this.chainedTween = arguments[i]; } } @@ -65656,8 +66432,7 @@ THIS SOFTWARE. if (this._codePaused) { return; - } - else { + } else { this.resume(); } @@ -65684,8 +66459,7 @@ THIS SOFTWARE. if (status === Phaser.TweenData.PENDING) { return true; - } - else if (status === Phaser.TweenData.RUNNING) { + } else if (status === Phaser.TweenData.RUNNING) { if (!this._hasStarted) { this.onStart.dispatch(this.target, this); this._hasStarted = true; @@ -65697,18 +66471,15 @@ THIS SOFTWARE. // In case the update callback modifies this tween return this.isRunning; - } - else if (status === Phaser.TweenData.LOOPED) { + } else if (status === Phaser.TweenData.LOOPED) { if (this.timeline[this.current].repeatCounter === -1) { this.onLoop.dispatch(this.target, this); - } - else { + } else { this.onRepeat.dispatch(this.target, this); } return true; - } - else if (status === Phaser.TweenData.COMPLETE) { + } else if (status === Phaser.TweenData.COMPLETE) { var complete = false; // What now? @@ -65719,8 +66490,7 @@ THIS SOFTWARE. this.current = this.timeline.length - 1; complete = true; } - } - else { + } else { this.current++; if (this.current === this.timeline.length) { @@ -65735,15 +66505,13 @@ THIS SOFTWARE. this.timeline[this.current].start(); this.onLoop.dispatch(this.target, this); return true; - } - else if (this.repeatCounter > 0) { + } else if (this.repeatCounter > 0) { this.repeatCounter--; this.timeline[this.current].start(); this.onRepeat.dispatch(this.target, this); return true; - } - else { + } else { // No more repeats and no more children, so we're done this.isRunning = false; this.onComplete.dispatch(this.target, this); @@ -65755,8 +66523,7 @@ THIS SOFTWARE. return false; } - } - else { + } else { // We've still got some children to go this.onChildComplete.dispatch(this.target, this); this.timeline[this.current].start(); @@ -65819,7 +66586,7 @@ THIS SOFTWARE. /** * @name Phaser.Tween#totalDuration - * @property {Phaser.TweenData} totalDuration - Gets the total duration of this Tween, including all child tweens, in milliseconds. + * @property {number} totalDuration - Gets the total duration of this Tween, including all child tweens, in milliseconds. */ Object.defineProperty(Phaser.Tween.prototype, 'totalDuration', { @@ -65909,7 +66676,7 @@ THIS SOFTWARE. this.value = 0; /** - * @property {number} repeatCounter - If the Tween is set to repeat this contains the current repeat count. + * @property {number} repeatCounter - If the Tween is set to repeat this is the number of repeats remaining (and `repeatTotal - repeatCounter` is the number of repeats completed). */ this.repeatCounter = 0; @@ -65998,25 +66765,25 @@ THIS SOFTWARE. /** * @constant - * @objType {number} + * @type {number} */ Phaser.TweenData.PENDING = 0; /** * @constant - * @objType {number} + * @type {number} */ Phaser.TweenData.RUNNING = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.TweenData.LOOPED = 2; /** * @constant - * @objType {number} + * @type {number} */ Phaser.TweenData.COMPLETE = 3; @@ -66090,15 +66857,13 @@ THIS SOFTWARE. if (this.parent.reverse) { this.dt = this.duration; - } - else { + } else { this.dt = 0; } if (this.delay > 0) { this.isRunning = false; - } - else { + } else { this.isRunning = true; } @@ -66112,7 +66877,6 @@ THIS SOFTWARE. } this.value = 0; - this.yoyoCounter = 0; this.repeatCounter = this.repeatTotal; return this; @@ -66152,8 +66916,7 @@ THIS SOFTWARE. } this.parent.properties[property] = this.vEnd[property]; - } - else { + } else { // Null tween this.vEnd[property] = this.vStart[property]; } @@ -66179,12 +66942,10 @@ THIS SOFTWARE. if (!this.isRunning) { if (time >= this.startTime) { this.isRunning = true; - } - else { + } else { return Phaser.TweenData.PENDING; } - } - else { + } else { // Is Running, but is waiting to repeat if (time < this.startTime) { return Phaser.TweenData.RUNNING; @@ -66196,8 +66957,7 @@ THIS SOFTWARE. if (this.parent.reverse) { this.dt -= ms * this.parent.timeScale; this.dt = Math.max(this.dt, 0); - } - else { + } else { this.dt += ms * this.parent.timeScale; this.dt = Math.min(this.dt, this.duration); } @@ -66212,8 +66972,7 @@ THIS SOFTWARE. if (Array.isArray(end)) { this.parent.target[property] = this.interpolationFunction.call(this.interpolationContext, end, this.value); - } - else { + } else { this.parent.target[property] = start + ((end - start) * this.value); } } @@ -66239,8 +66998,7 @@ THIS SOFTWARE. if (this.parent.reverse) { this.dt = this.duration; - } - else { + } else { this.dt = 0; } @@ -66252,8 +67010,7 @@ THIS SOFTWARE. if (this.parent.reverse) { this.dt -= fps; this.dt = Math.max(this.dt, 0); - } - else { + } else { this.dt += fps; this.dt = Math.min(this.dt, this.duration); } @@ -66270,8 +67027,7 @@ THIS SOFTWARE. if (Array.isArray(end)) { blob[property] = this.interpolationFunction.call(this.interpolationContext, end, this.value); - } - else { + } else { blob[property] = start + ((end - start) * this.value); } } @@ -66319,11 +67075,8 @@ THIS SOFTWARE. } this.inReverse = !this.inReverse; - } - else { - if (this.repeatCounter === 0) { - return Phaser.TweenData.COMPLETE; - } + } else if (this.repeatCounter === 0) { + return Phaser.TweenData.COMPLETE; } if (this.inReverse) { @@ -66332,8 +67085,7 @@ THIS SOFTWARE. this.vStart[property] = this.vEndCache[property]; this.vEnd[property] = this.vStartCache[property]; } - } - else { + } else { // If not inReverse we're just repopulating the cache again for (var property in this.vStartCache) { this.vStart[property] = this.vStartCache[property]; @@ -66351,15 +67103,13 @@ THIS SOFTWARE. if (this.yoyo && this.inReverse) { this.startTime += this.yoyoDelay; - } - else if (!this.inReverse) { + } else if (!this.inReverse) { this.startTime += this.repeatDelay; } if (this.parent.reverse) { this.dt = this.duration; - } - else { + } else { this.dt = 0; } @@ -66450,7 +67200,9 @@ THIS SOFTWARE. */ InOut: function (k) { - if ((k *= 2) < 1) return 0.5 * k * k; + if ((k *= 2) < 1) { + return 0.5 * k * k; + } return -0.5 * (--k * (k - 2) - 1); } @@ -66499,7 +67251,9 @@ THIS SOFTWARE. */ InOut: function (k) { - if ((k *= 2) < 1) return 0.5 * k * k * k; + if ((k *= 2) < 1) { + return 0.5 * k * k * k; + } return 0.5 * ((k -= 2) * k * k + 2); } @@ -66548,7 +67302,9 @@ THIS SOFTWARE. */ InOut: function (k) { - if ((k *= 2) < 1) return 0.5 * k * k * k * k; + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k; + } return -0.5 * ((k -= 2) * k * k * k - 2); } @@ -66597,7 +67353,9 @@ THIS SOFTWARE. */ InOut: function (k) { - if ((k *= 2) < 1) return 0.5 * k * k * k * k * k; + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k * k; + } return 0.5 * ((k -= 2) * k * k * k * k + 2); } @@ -66620,8 +67378,12 @@ THIS SOFTWARE. */ In: function (k) { - if (k === 0) return 0; - if (k === 1) return 1; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } return 1 - Math.cos(k * Math.PI / 2); }, @@ -66635,8 +67397,12 @@ THIS SOFTWARE. */ Out: function (k) { - if (k === 0) return 0; - if (k === 1) return 1; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } return Math.sin(k * Math.PI / 2); }, @@ -66650,8 +67416,12 @@ THIS SOFTWARE. */ InOut: function (k) { - if (k === 0) return 0; - if (k === 1) return 1; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } return 0.5 * (1 - Math.cos(Math.PI * k)); } @@ -66700,9 +67470,15 @@ THIS SOFTWARE. */ InOut: function (k) { - if (k === 0) return 0; - if (k === 1) return 1; - if ((k *= 2) < 1) return 0.5 * Math.pow(1024, k - 1); + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if ((k *= 2) < 1) { + return 0.5 * Math.pow(1024, k - 1); + } return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2); } @@ -66751,7 +67527,9 @@ THIS SOFTWARE. */ InOut: function (k) { - if ((k *= 2) < 1) return -0.5 * (Math.sqrt(1 - k * k) - 1); + if ((k *= 2) < 1) { + return -0.5 * (Math.sqrt(1 - k * k) - 1); + } return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1); } @@ -66774,14 +67552,21 @@ THIS SOFTWARE. */ In: function (k) { - var s, a = 0.1, p = 0.4; - if (k === 0) return 0; - if (k === 1) return 1; + var s, + a = 0.1, + p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } if (!a || a < 1) { a = 1; s = p / 4; + } else { + s = p * Math.asin(1 / a) / (2 * Math.PI); } - else s = p * Math.asin(1 / a) / (2 * Math.PI); return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); }, @@ -66795,14 +67580,21 @@ THIS SOFTWARE. */ Out: function (k) { - var s, a = 0.1, p = 0.4; - if (k === 0) return 0; - if (k === 1) return 1; + var s, + a = 0.1, + p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } if (!a || a < 1) { a = 1; s = p / 4; + } else { + s = p * Math.asin(1 / a) / (2 * Math.PI); } - else s = p * Math.asin(1 / a) / (2 * Math.PI); return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1); }, @@ -66816,15 +67608,24 @@ THIS SOFTWARE. */ InOut: function (k) { - var s, a = 0.1, p = 0.4; - if (k === 0) return 0; - if (k === 1) return 1; + var s, + a = 0.1, + p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } if (!a || a < 1) { a = 1; s = p / 4; + } else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + if ((k *= 2) < 1) { + return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); } - else s = p * Math.asin(1 / a) / (2 * Math.PI); - if ((k *= 2) < 1) return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1; } @@ -66876,7 +67677,9 @@ THIS SOFTWARE. InOut: function (k) { var s = 1.70158 * 1.525; - if ((k *= 2) < 1) return 0.5 * (k * k * ((s + 1) * k - s)); + if ((k *= 2) < 1) { + return 0.5 * (k * k * ((s + 1) * k - s)); + } return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); } @@ -66941,7 +67744,9 @@ THIS SOFTWARE. */ InOut: function (k) { - if (k < 0.5) return Phaser.Easing.Bounce.In(k * 2) * 0.5; + if (k < 0.5) { + return Phaser.Easing.Bounce.In(k * 2) * 0.5; + } return Phaser.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5; } @@ -67035,6 +67840,8 @@ THIS SOFTWARE. * * This value _may_ include time that the game is paused/inactive. * + * While the game is active, this will be similar to (1000 / {@link #fps}). + * * _Note:_ This is updated only once per game loop - even if multiple logic update steps are done. * Use {@link Phaser.Timer#physicsTime physicsTime} as a basis of game/logic calculations instead. * @@ -67129,7 +67936,7 @@ THIS SOFTWARE. this.advancedTiming = false; /** - * Advanced timing result: The number of render frames record in the last second. + * Advanced timing result: The number of animation frames received from the browser in the last second. * * Only calculated if {@link Phaser.Time#advancedTiming advancedTiming} is enabled. * @property {integer} frames @@ -67137,6 +67944,24 @@ THIS SOFTWARE. */ this.frames = 0; + /** + * Advanced timing result: The number of {@link Phaser.Game#updateLogic logic updates} made in the last second. + * + * Only calculated if {@link Phaser.Time#advancedTiming advancedTiming} is enabled. + * @property {integer} updates + * @readonly + */ + this.updates = 0; + + /** + * Advanced timing result: The number of {@link Phaser.Game#updateRender renders} made in the last second. + * + * Only calculated if {@link Phaser.Time#advancedTiming advancedTiming} is enabled. + * @property {integer} renders + * @readonly + */ + this.renders = 0; + /** * Advanced timing result: Frames per second. * @@ -67146,6 +67971,24 @@ THIS SOFTWARE. */ this.fps = 0; + /** + * Advanced timing result: Logic updates per second. + * + * Only calculated if {@link Phaser.Time#advancedTiming advancedTiming} is enabled. + * @property {number} ups + * @readonly + */ + this.ups = 0; + + /** + * Advanced timing result: Renders per second. + * + * Only calculated if {@link Phaser.Time#advancedTiming advancedTiming} is enabled. + * @property {number} rps + * @readonly + */ + this.rps = 0; + /** * Advanced timing result: The lowest rate the fps has dropped to. * @@ -67412,8 +68255,7 @@ THIS SOFTWARE. while (i < len) { if (this._timers[i].update(this.time)) { i++; - } - else { + } else { // Timer requests to be removed this._timers.splice(i, 1); len--; @@ -67449,11 +68291,44 @@ THIS SOFTWARE. this.frames++; if (this.now > this._timeLastSecond + 1000) { - this.fps = Math.round((this.frames * 1000) / (this.now - this._timeLastSecond)); + var interval = this.now - this._timeLastSecond; + this.fps = Math.round((this.frames * 1000) / interval); + this.ups = Math.round((this.updates * 1000) / interval); + this.rps = Math.round((this.renders * 1000) / interval); this.fpsMin = Math.min(this.fpsMin, this.fps); this.fpsMax = Math.max(this.fpsMax, this.fps); this._timeLastSecond = this.now; this.frames = 0; + this.updates = 0; + this.renders = 0; + } + + }, + + /** + * Counts one logic update (if advanced timing is enabled). + * + * @method Phaser.Time#countUpdate + * @private + */ + countUpdate: function () { + + if (this.advancedTiming) { + this.updates++; + } + + }, + + /** + * Counts one render (if advanced timing is enabled). + * + * @method Phaser.Time#countRender + * @private + */ + countRender: function () { + + if (this.advancedTiming) { + this.renders++; } }, @@ -67548,14 +68423,17 @@ THIS SOFTWARE. }; /** - * The desired frame rate of the game. + * The number of logic updates per second. * * This is used is used to calculate the physic / logic multiplier and how to apply catch-up logic updates. * + * The render rate is unaffected unless you also turn off {@link Phaser.Game#forceSingleRender}. + * * @name Phaser.Time#desiredFps - * @property {integer} desiredFps - The desired frame rate of the game. Defaults to 60. + * @type {integer} + * @default 60 */ - Object.defineProperty(Phaser.Time.prototype, "desiredFps", { + Object.defineProperty(Phaser.Time.prototype, 'desiredFps', { get: function () { @@ -67741,28 +68619,28 @@ THIS SOFTWARE. /** * Number of milliseconds in a minute. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Timer.MINUTE = 60000; /** * Number of milliseconds in a second. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Timer.SECOND = 1000; /** * Number of milliseconds in half a second. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Timer.HALF = 500; /** * Number of milliseconds in a quarter of a second. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Timer.QUARTER = 250; @@ -67791,8 +68669,7 @@ THIS SOFTWARE. if (this._now === 0) { tick += this.game.time.time; - } - else { + } else { tick += this._now; } @@ -67957,8 +68834,7 @@ THIS SOFTWARE. if (a.tick < b.tick) { return -1; - } - else if (a.tick > b.tick) { + } else if (a.tick > b.tick) { return 1; } @@ -68032,21 +68908,18 @@ THIS SOFTWARE. if (event.loop === true) { event.tick = this._newTick; event.callback.apply(event.callbackContext, event.args); - } - else if (event.repeatCount > 0) { + } else if (event.repeatCount > 0) { event.repeatCount--; event.tick = this._newTick; event.callback.apply(event.callbackContext, event.args); - } - else { + } else { this._marked++; event.pendingDelete = true; event.callback.apply(event.callbackContext, event.args); } this._i++; - } - else { + } else { break; } } @@ -68054,8 +68927,7 @@ THIS SOFTWARE. // Are there any events left? if (this.events.length > this._marked) { this.order(); - } - else { + } else { this.expired = true; this.onComplete.dispatch(this); } @@ -68063,8 +68935,7 @@ THIS SOFTWARE. if (this.expired && this.autoDestroy) { return false; - } - else { + } else { return true; } @@ -68135,8 +69006,7 @@ THIS SOFTWARE. if (d < 0) { this.nextTick = this._now; - } - else { + } else { this.nextTick = this._now + d; } @@ -68173,8 +69043,7 @@ THIS SOFTWARE. if (this._codePaused) { return; - } - else { + } else { this.resume(); } @@ -68219,7 +69088,7 @@ THIS SOFTWARE. * @property {number} next - The time at which the next event will occur. * @readonly */ - Object.defineProperty(Phaser.Timer.prototype, "next", { + Object.defineProperty(Phaser.Timer.prototype, 'next', { get: function () { return this.nextTick; @@ -68232,14 +69101,13 @@ THIS SOFTWARE. * @property {number} duration - The duration in ms remaining until the next event will occur. * @readonly */ - Object.defineProperty(Phaser.Timer.prototype, "duration", { + Object.defineProperty(Phaser.Timer.prototype, 'duration', { get: function () { if (this.running && this.nextTick > this._now) { return this.nextTick - this._now; - } - else { + } else { return 0; } @@ -68252,7 +69120,7 @@ THIS SOFTWARE. * @property {number} length - The number of pending events in the queue. * @readonly */ - Object.defineProperty(Phaser.Timer.prototype, "length", { + Object.defineProperty(Phaser.Timer.prototype, 'length', { get: function () { return this.events.length; @@ -68265,14 +69133,13 @@ THIS SOFTWARE. * @property {number} ms - The duration in milliseconds that this Timer has been running for. * @readonly */ - Object.defineProperty(Phaser.Timer.prototype, "ms", { + Object.defineProperty(Phaser.Timer.prototype, 'ms', { get: function () { if (this.running) { return this._now - this._started - this._pauseTotal; - } - else { + } else { return 0; } @@ -68285,14 +69152,13 @@ THIS SOFTWARE. * @property {number} seconds - The duration in seconds that this Timer has been running for. * @readonly */ - Object.defineProperty(Phaser.Timer.prototype, "seconds", { + Object.defineProperty(Phaser.Timer.prototype, 'seconds', { get: function () { if (this.running) { return this.ms * 0.001; - } - else { + } else { return 0; } @@ -68486,14 +69352,10 @@ THIS SOFTWARE. if (frame === undefined || frame === null) { this.frame = 0; - } - else { - if (typeof frame === 'string') { - this.frameName = frame; - } - else { - this.frame = frame; - } + } else if (typeof frame === 'string') { + this.frameName = frame; + } else { + this.frame = frame; } this.isLoaded = true; @@ -68524,14 +69386,10 @@ THIS SOFTWARE. if (frame === undefined || frame === null) { this.frame = 0; - } - else { - if (typeof frame === 'string') { - this.frameName = frame; - } - else { - this.frame = frame; - } + } else if (typeof frame === 'string') { + this.frameName = frame; + } else { + this.frame = frame; } this.isLoaded = true; @@ -68564,8 +69422,7 @@ THIS SOFTWARE. if (useNumericIndex === undefined) { if (frames && typeof frames[0] === 'number') { useNumericIndex = true; - } - else { + } else { useNumericIndex = false; } } @@ -68605,11 +69462,8 @@ THIS SOFTWARE. if (frames[i] > this._frameData.total) { return false; } - } - else { - if (this._frameData.checkFrameName(frames[i]) === false) { - return false; - } + } else if (this._frameData.checkFrameName(frames[i]) === false) { + return false; } } @@ -68643,8 +69497,7 @@ THIS SOFTWARE. } return this.currentAnim; - } - else { + } else { if (this.currentAnim && this.currentAnim.isPlaying) { this.currentAnim.stop(); } @@ -68903,8 +69756,7 @@ THIS SOFTWARE. this.currentFrame = gotFrame; this._frameIndex = this.currentFrame.index; this.sprite.setFrame(this.currentFrame); - } - else { + } else { console.warn('Cannot set frameName: ' + value); } } @@ -69204,18 +70056,16 @@ THIS SOFTWARE. } // Find the index to the desired frame. - if (typeof frameId === "string") { + if (typeof frameId === 'string') { for (var i = 0; i < this._frames.length; i++) { if (this._frameData.getFrame(this._frames[i]).name === frameId) { frameIndex = i; } } - } - else if (typeof frameId === "number") { + } else if (typeof frameId === 'number') { if (useLocalFrameIndex) { frameIndex = frameId; - } - else { + } else { for (var i = 0; i < this._frames.length; i++) { if (this._frames[i] === frameId) { frameIndex = i; @@ -69319,8 +70169,7 @@ THIS SOFTWARE. // We need to skip a frame, work out how many this._frameSkip = Math.floor(this._frameDiff / this.delay); this._frameDiff -= (this._frameSkip * this.delay); - } - else { + } else { this._frameDiff = 0; } @@ -69329,8 +70178,7 @@ THIS SOFTWARE. if (this.isReversed) { this._frameIndex -= this._frameSkip; - } - else { + } else { this._frameIndex += this._frameSkip; } @@ -69359,17 +70207,14 @@ THIS SOFTWARE. // False if the animation was destroyed from within a callback return !!this._frameData; - } - else { + } else { return true; } - } - else { + } else { this.complete(); return false; } - } - else { + } else { return this.updateCurrentFrame(true); } } @@ -69415,8 +70260,7 @@ THIS SOFTWARE. // False if the animation was destroyed from within a callback return !!this._frameData; - } - else { + } else { return true; } @@ -69439,8 +70283,7 @@ THIS SOFTWARE. if (frame >= this._frames.length) { if (this.loop) { frame %= this._frames.length; - } - else { + } else { frame = this._frames.length - 1; } } @@ -69469,8 +70312,7 @@ THIS SOFTWARE. if (frame < 0) { if (this.loop) { frame = this._frames.length + frame; - } - else { + } else { frame++; } } @@ -69537,6 +70379,7 @@ THIS SOFTWARE. this._frameIndex = this._frames.length - 1; this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]); + this.updateCurrentFrame(false); this.isPlaying = false; this.isFinished = true; @@ -69575,8 +70418,7 @@ THIS SOFTWARE. if (value) { // Paused this._pauseStartTime = this.game.time.time; - } - else { + } else { // Un-paused if (this.isPlaying) { this._timeNextFrame = this.game.time.time + this.delay; @@ -69630,8 +70472,7 @@ THIS SOFTWARE. if (this.currentFrame !== null) { return this.currentFrame.index; - } - else { + } else { return this._frameIndex; } @@ -69692,8 +70533,7 @@ THIS SOFTWARE. if (value && this.onUpdate === null) { this.onUpdate = new Phaser.Signal(); - } - else if (!value && this.onUpdate !== null) { + } else if (!value && this.onUpdate !== null) { this.onUpdate.dispose(); this.onUpdate = null; } @@ -69712,7 +70552,7 @@ THIS SOFTWARE. * @param {string} prefix - The start of the filename. If the filename was 'explosion_0001-large' the prefix would be 'explosion_'. * @param {number} start - The number to start sequentially counting from. If your frames are named 'explosion_0001' to 'explosion_0034' the start is 1. * @param {number} stop - The number to count to. If your frames are named 'explosion_0001' to 'explosion_0034' the stop value is 34. - * @param {string} [suffix=''] - The end of the filename. If the filename was 'explosion_0001-large' the prefix would be '-large'. + * @param {string} [suffix=''] - The end of the filename. If the filename was 'explosion_0001-large' the suffix would be '-large'. * @param {number} [zeroPad=0] - The number of zeros to pad the min and max values with. If your frames are named 'explosion_0001' to 'explosion_0034' then the zeroPad is 4. * @return {string[]} An array of framenames. */ @@ -69730,8 +70570,7 @@ THIS SOFTWARE. if (typeof zeroPad === 'number') { // str, len, pad, dir frame = Phaser.Utils.pad(i.toString(), zeroPad, '0', 1); - } - else { + } else { frame = i.toString(); } @@ -69739,14 +70578,12 @@ THIS SOFTWARE. output.push(frame); } - } - else { + } else { for (var i = start; i >= stop; i--) { if (typeof zeroPad === 'number') { // str, len, pad, dir frame = Phaser.Utils.pad(i.toString(), zeroPad, '0', 1); - } - else { + } else { frame = i.toString(); } @@ -69971,8 +70808,7 @@ THIS SOFTWARE. if (out === undefined) { out = new Phaser.Rectangle(this.x, this.y, this.width, this.height); - } - else { + } else { out.setTo(this.x, this.y, this.width, this.height); } @@ -70159,16 +70995,14 @@ THIS SOFTWARE. // We only need the indexes output.push(this._frames[i]); } - } - else { + } else { // Input array given, loop through that instead for (var i = 0; i < frames.length; i++) { // Does the input array contain names or indexes? if (useNumericIndex) { // The actual frame output.push(this.getFrame(frames[i])); - } - else { + } else { // The actual frame output.push(this.getFrameByName(frames[i])); } @@ -70203,18 +71037,14 @@ THIS SOFTWARE. for (var i = 0; i < this._frames.length; i++) { output.push(this._frames[i].index); } - } - else { + } else { // Input array given, loop through that instead for (var i = 0; i < frames.length; i++) { // Does the frames array contain names or indexes? if (useNumericIndex && this._frames[frames[i]]) { output.push(this._frames[frames[i]].index); - } - else { - if (this.getFrameByName(frames[i])) { - output.push(this.getFrameByName(frames[i]).index); - } + } else if (this.getFrameByName(frames[i])) { + output.push(this.getFrameByName(frames[i]).index); } } } @@ -70244,7 +71074,7 @@ THIS SOFTWARE. * @property {number} total - The total number of frames in this FrameData set. * @readonly */ - Object.defineProperty(Phaser.FrameData.prototype, "total", { + Object.defineProperty(Phaser.FrameData.prototype, 'total', { get: function () { return this._frames.length; @@ -70279,6 +71109,8 @@ THIS SOFTWARE. * @param {number} [spacing=0] - If the frames have been drawn with spacing between them, specify the amount here. * @param {number} [skipFrames=0] - Skip a number of frames. Useful when there are multiple sprite sheets in one image. * @return {Phaser.FrameData} A FrameData object containing the parsed frames. + * + * @see Phaser.Loader#spritesheet */ spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) { @@ -70299,47 +71131,94 @@ THIS SOFTWARE. if (typeof key === 'string') { img = game.cache.getImage(key); + } else { + key = img.name; } if (img === null) { return null; } + if (frameWidth <= 0 || frameHeight <= 0) { + console.warn('Phaser.AnimationParser.spriteSheet: \'%s\' frameWidth (%s) or frameHeight (%s) must be positive', + key, frameWidth, frameHeight); + + return null; + } + var width = img.width; var height = img.height; - if (frameWidth <= 0) { - frameWidth = Math.floor(-width / Math.min(-1, frameWidth)); + if (width === 0 || height === 0) { + console.warn('Phaser.AnimationParser.spriteSheet: \'%s\' width (%s) or height (%s) is zero', key, width, height); + + return null; } - if (frameHeight <= 0) { - frameHeight = Math.floor(-height / Math.min(-1, frameHeight)); + if (width < frameWidth || height < frameHeight) { + console.warn('Phaser.AnimationParser.spriteSheet: \'%s\' width (%s) or height (%s) is less than the given frameWidth (%s) or frameHeight (%s)', + key, width, height, frameWidth, frameHeight); + + return null; } var row = Math.floor((width - margin) / (frameWidth + spacing)); var column = Math.floor((height - margin) / (frameHeight + spacing)); var total = row * column; + var totalAvailable = total; + var lastAvailable = total - 1; + var firstFrame = 0; + var lastFrame = lastAvailable; if (skipFrames > total || skipFrames < -total) { - console.warn( - "Phaser.AnimationParser.spriteSheet: skipFrames = " + - skipFrames.toString() + " is larger than total sprite number " + - total.toString()); + console.warn('Phaser.AnimationParser.spriteSheet: \'%s\' skipFrames = %s is larger than the frame total %s', + key, skipFrames, total); + return null; } - if (skipFrames < 0) { - // Allow negative skipframes. - skipFrames = total + skipFrames; + if (frameMax > -1) { + total = frameMax; + lastFrame = total - 1; } - if (frameMax !== -1) { - total = skipFrames + frameMax; + if (row < 1) { + console.warn('Phaser.AnimationParser.spriteSheet: image \'%s\' has width %d, but it should be at least %d (frameWidth=%s, margin=%s, spacing=%s)', + key, width, frameWidth + margin + spacing, frameWidth, margin, spacing); } - // Zero or smaller than frame sizes? - if (width === 0 || height === 0 || width < frameWidth || height < frameHeight || total === 0) { - console.warn("Phaser.AnimationParser.spriteSheet: '" + key + "'s width/height zero or width/height < given frameWidth/frameHeight"); + if (column < 1) { + console.warn('Phaser.AnimationParser.spriteSheet: image \'%s\' has height %d, but it should be at least %d (frameHeight=%s, margin=%s, spacing=%s)', + key, height, frameHeight + margin + spacing, frameHeight, margin, spacing); + } + + if (totalAvailable === 0) { + console.warn('Phaser.AnimationParser.spriteSheet: \'%s\' zero frames were produced', key); + + return null; + } + + if (skipFrames > 0) { + // Offset from start + firstFrame = skipFrames; + total = Math.min(total, totalAvailable - skipFrames); + lastFrame = firstFrame + total - 1; + } else if (skipFrames < 0) { + // Offset from end + lastFrame = lastAvailable + skipFrames; + total = Math.min(total, totalAvailable + skipFrames); + firstFrame = lastFrame - total + 1; + } + + if (firstFrame < 0) { + console.warn('First frame index %s is outside of range [0, %d]', firstFrame, lastAvailable); + + return null; + } + + if (lastFrame > lastAvailable) { + console.warn('Last frame index %s is outside of range [0, %d]', lastFrame, lastAvailable); + return null; } @@ -70347,9 +71226,16 @@ THIS SOFTWARE. var data = new Phaser.FrameData(); var x = margin; var y = margin; + var frameIndex = 0; - for (var i = 0; i < total; i++) { - data.addFrame(new Phaser.Frame(i, x, y, frameWidth, frameHeight, '')); + for (var i = 0; i < totalAvailable; i++) { + if (i > lastFrame) { + break; + } + + if (i >= firstFrame) { + data.addFrame(new Phaser.Frame(frameIndex++, x, y, frameWidth, frameHeight, '')); + } x += frameWidth + spacing; @@ -70374,8 +71260,8 @@ THIS SOFTWARE. JSONData: function (game, json) { // Malformed? - if (!json['frames']) { - console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"); + if (!json.frames) { + console.warn('Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing \'frames\' array'); console.log(json); return; } @@ -70384,7 +71270,7 @@ THIS SOFTWARE. var data = new Phaser.FrameData(); // By this stage frames is a fully parsed array - var frames = json['frames']; + var frames = json.frames; var newFrame; for (var i = 0; i < frames.length; i++) { @@ -70440,7 +71326,7 @@ THIS SOFTWARE. }); // For this purpose, I only care about parsing tilemaps with a single layer. - if (json['layers'].length !== 1) { + if (json.layers.length !== 1) { console.warn('Phaser.AnimationParser.JSONDataPyxel: Too many layers, this parser only supports flat Tilemaps.'); console.log(json); return; @@ -70448,10 +71334,10 @@ THIS SOFTWARE. var data = new Phaser.FrameData(); - var tileheight = json['tileheight']; - var tilewidth = json['tilewidth']; + var tileheight = json.tileheight; + var tilewidth = json.tilewidth; - var frames = json['layers'][0]['tiles']; + var frames = json.layers[0].tiles; var newFrame; for (var i = 0; i < frames.length; i++) { @@ -70461,7 +71347,7 @@ THIS SOFTWARE. frames[i].y, tilewidth, tileheight, - "frame_" + i // No names are included in pyxel tilemap data. + 'frame_' + i // No names are included in pyxel tilemap data. )); // No trim data is included. @@ -70483,8 +71369,8 @@ THIS SOFTWARE. JSONDataHash: function (game, json) { // Malformed? - if (!json['frames']) { - console.warn("Phaser.AnimationParser.JSONDataHash: Invalid Texture Atlas JSON given, missing 'frames' object"); + if (!json.frames) { + console.warn('Phaser.AnimationParser.JSONDataHash: Invalid Texture Atlas JSON given, missing \'frames\' object'); console.log(json); return; } @@ -70493,7 +71379,7 @@ THIS SOFTWARE. var data = new Phaser.FrameData(); // By this stage frames is a fully parsed array - var frames = json['frames']; + var frames = json.frames; var newFrame; var i = 0; @@ -70542,7 +71428,7 @@ THIS SOFTWARE. // Malformed? if (!xml.getElementsByTagName('TextureAtlas')) { - console.warn("Phaser.AnimationParser.XMLData: Invalid Texture Atlas XML given, missing tag"); + console.warn('Phaser.AnimationParser.XMLData: Invalid Texture Atlas XML given, missing tag'); return; } @@ -70729,149 +71615,149 @@ THIS SOFTWARE. /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.CANVAS = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.IMAGE = 2; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.TEXTURE = 3; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.SOUND = 4; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.TEXT = 5; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.PHYSICS = 6; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.TILEMAP = 7; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.BINARY = 8; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.BITMAPDATA = 9; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.BITMAPFONT = 10; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.JSON = 11; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.XML = 12; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.VIDEO = 13; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.SHADER = 14; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Cache.RENDER_TEXTURE = 15; /** * The default image used for a texture when no other is specified. * @constant - * @objType {PIXI.Texture} + * @type {PIXI.Texture} */ Phaser.Cache.DEFAULT = null; /** * Key for the DEFAULT texture. * @constant - * @objType {string} + * @type {string} */ Phaser.Cache.DEFAULT_KEY = '__default'; /** * URL for the DEFAULT texture. * @constant - * @objType {string} + * @type {string} */ Phaser.Cache.DEFAULT_SRC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg=='; /** * The default image used for a texture when the source image is missing. * @constant - * @objType {PIXI.Texture} + * @type {PIXI.Texture} */ Phaser.Cache.MISSING = null; /** * Key for the MISSING texture. * @constant - * @objType {string} + * @type {string} */ Phaser.Cache.MISSING_KEY = '__missing'; /** * URL for the MISSING texture. * @constant - * @objType {string} + * @type {string} */ Phaser.Cache.MISSING_SRC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg=='; /** * The maximum amount of time (ms) to wait for the built-in DEFAULT and MISSING images to load. * @static - * @objType {number} + * @type {number} * @default */ Phaser.Cache.READY_TIMEOUT = 1000; Phaser.Cache.prototype = { - ////////////////// + // //////////////// // Add Methods // - ////////////////// + // //////////////// /** * Add a new canvas object in to the cache. @@ -70969,8 +71855,7 @@ THIS SOFTWARE. if (key === '__default') { Phaser.Cache.DEFAULT = new PIXI.Texture(img.base); - } - else if (key === '__missing') { + } else if (key === '__missing') { Phaser.Cache.MISSING = new PIXI.Texture(img.base); } @@ -71195,8 +72080,7 @@ THIS SOFTWARE. if (atlasType === 'json') { obj.font = Phaser.LoaderParser.jsonBitmapFont(atlasData, obj.base, xSpacing, ySpacing, false, this.game.resolution); - } - else { + } else { obj.font = Phaser.LoaderParser.xmlBitmapFont(atlasData, obj.base, xSpacing, ySpacing, false, this.game.resolution); } @@ -71252,8 +72136,7 @@ THIS SOFTWARE. if (dataType === 'json') { fontData = this.getJSON(dataKey); obj.font = Phaser.LoaderParser.jsonBitmapFont(fontData, obj.base, xSpacing, ySpacing, frame, this.game.resolution); - } - else { + } else { fontData = this.getXML(dataKey); obj.font = Phaser.LoaderParser.xmlBitmapFont(fontData, obj.base, xSpacing, ySpacing, frame, this.game.resolution); } @@ -71408,16 +72291,13 @@ THIS SOFTWARE. if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) { obj.frameData = Phaser.AnimationParser.XMLData(this.game, atlasData, key); - } - else if (format === Phaser.Loader.TEXTURE_ATLAS_JSON_PYXEL) { + } else if (format === Phaser.Loader.TEXTURE_ATLAS_JSON_PYXEL) { obj.frameData = Phaser.AnimationParser.JSONDataPyxel(this.game, atlasData, key); - } - else { + } else { // Let's just work it out from the frames array if (Array.isArray(atlasData.frames)) { obj.frameData = Phaser.AnimationParser.JSONData(this.game, atlasData, key); - } - else { + } else { obj.frameData = Phaser.AnimationParser.JSONDataHash(this.game, atlasData, key); } } @@ -71428,9 +72308,9 @@ THIS SOFTWARE. }, - //////////////////////////// + // ////////////////////////// // Sound Related Methods // - //////////////////////////// + // ////////////////////////// /** * Reload a Sound file from the server. @@ -71541,12 +72421,12 @@ THIS SOFTWARE. }, - //////////////////////// + // ////////////////////// // Check Key Methods // - //////////////////////// + // ////////////////////// /** - * Checks if a key for the given cache object objType exists. + * Checks if a key for the given cache object type exists. * * @method Phaser.Cache#checkKey * @param {integer} cache - The cache to search. One of the Cache consts such as `Phaser.Cache.IMAGE` or `Phaser.Cache.SOUND`. @@ -71778,9 +72658,9 @@ THIS SOFTWARE. }, - //////////////// + // ////////////// // Get Items // - //////////////// + // ////////////// /** * Get an item from a cache based on the given key and property. @@ -71801,14 +72681,10 @@ THIS SOFTWARE. if (method) { console.warn('Phaser.Cache.' + method + ': Key "' + key + '" not found in Cache.'); } - } - else { - if (property === undefined) { - return this._cacheMap[cache][key]; - } - else { - return this._cacheMap[cache][key][property]; - } + } else if (property === undefined) { + return this._cacheMap[cache][key]; + } else { + return this._cacheMap[cache][key][property]; } return null; @@ -71866,8 +72742,7 @@ THIS SOFTWARE. if (full) { return img; - } - else { + } else { return img.data; } @@ -71960,33 +72835,28 @@ THIS SOFTWARE. if (data === null || object === undefined || object === null) { return data; - } - else { - if (data[object]) { - var fixtures = data[object]; + } else if (data[object]) { + var fixtures = data[object]; - // Try to find a fixture by its fixture key if given - if (fixtures && fixtureKey) { - for (var fixture in fixtures) { - // This contains the fixture data of a polygon or a circle - fixture = fixtures[fixture]; + // Try to find a fixture by its fixture key if given + if (fixtures && fixtureKey) { + for (var fixture in fixtures) { + // This contains the fixture data of a polygon or a circle + fixture = fixtures[fixture]; - // Test the key - if (fixture.fixtureKey === fixtureKey) { - return fixture; - } + // Test the key + if (fixture.fixtureKey === fixtureKey) { + return fixture; } + } - // We did not find the requested fixture - console.warn('Phaser.Cache.getPhysicsData: Could not find given fixtureKey: "' + fixtureKey + ' in ' + key + '"'); - } - else { - return fixtures; - } - } - else { - console.warn('Phaser.Cache.getPhysicsData: Invalid key/object: "' + key + ' / ' + object + '"'); + // We did not find the requested fixture + console.warn('Phaser.Cache.getPhysicsData: Could not find given fixtureKey: "' + fixtureKey + ' in ' + key + '"'); + } else { + return fixtures; } + } else { + console.warn('Phaser.Cache.getPhysicsData: Invalid key/object: "' + key + ' / ' + object + '"'); } return null; @@ -72083,12 +72953,10 @@ THIS SOFTWARE. if (data) { if (clone) { return Phaser.Utils.extend(true, Array.isArray(data) ? [] : {}, data); - } - else { + } else { return data; } - } - else { + } else { return null; } @@ -72162,9 +73030,9 @@ THIS SOFTWARE. }, - //////////////////////////// + // ////////////////////////// // Frame Related Methods // - //////////////////////////// + // ////////////////////////// /** * Gets a PIXI.BaseTexture by key from the given Cache. @@ -72216,8 +73084,7 @@ THIS SOFTWARE. if (data) { return data.total; - } - else { + } else { return 0; } @@ -72298,8 +73165,7 @@ THIS SOFTWARE. if (data) { return data.getFrame(index); - } - else { + } else { return null; } @@ -72320,8 +73186,7 @@ THIS SOFTWARE. if (data) { return data.getFrameByName(name); - } - else { + } else { return null; } @@ -72342,8 +73207,7 @@ THIS SOFTWARE. if (url) { return this._urlMap[url]; - } - else { + } else { console.warn('Phaser.Cache.getUrl: Invalid url: "' + url + '" or Cache.autoResolveURL was false'); return null; } @@ -72377,9 +73241,9 @@ THIS SOFTWARE. }, - ///////////////////// + // /////////////////// // Remove Methods // - ///////////////////// + // /////////////////// /** * Removes a canvas from the cache. @@ -72722,8 +73586,7 @@ THIS SOFTWARE. if (item.destroy) { item.destroy(); - } - else { + } else { if (item.base && item.base.destroy) { item.base.destroy(); } @@ -72766,8 +73629,7 @@ THIS SOFTWARE. self._ready(); } }, Phaser.Cache.READY_TIMEOUT); - } - else { + } else { this._ready(); } @@ -72927,10 +73789,12 @@ THIS SOFTWARE. /** * The value of `path`, if set, is placed before any _relative_ file path given. For example: * - * `load.path = "images/sprites/"; + * ```javascript + * load.path = "images/sprites/"; * load.image("ball", "ball.png"); * load.image("tree", "level1/oaktree.png"); - * load.image("boom", "http://server.com/explode.png");` + * load.image("boom", "http://server.com/explode.png"); + * ``` * * Would load the `ball` file from `images/sprites/ball.png` and the tree from * `images/sprites/level1/oaktree.png` but the file `boom` would load from the URL @@ -72952,19 +73816,23 @@ THIS SOFTWARE. * This object can also be used to set the `X-Requested-With` header to * `XMLHttpRequest` (or any other value you need). To enable this do: * - * `this.load.headers.requestedWith = 'XMLHttpRequest'` + * ```javascript + * this.load.headers.requestedWith = 'XMLHttpRequest' + * ``` * * before adding anything to the Loader. The XHR loader will then call: * - * `setRequestHeader('X-Requested-With', this.headers['requestedWith'])` + * ```javascript + * setRequestHeader('X-Requested-With', this.headers['requestedWith']) + * ``` * * @property {object} headers * @default */ this.headers = { - "requestedWith": false, - "json": "application/json", - "xml": "application/xml" + requestedWith: false, + json: 'application/json', + xml: 'application/xml' }; /** @@ -72976,7 +73844,16 @@ THIS SOFTWARE. this.onLoadStart = new Phaser.Signal(); /** - * This event is dispatched when the final file in the load queue has either loaded or failed. + * This event is dispatched when the final file in the load queue has either loaded or failed, + * before {@link #onLoadComplete} and before the loader is {@link #reset}. + * + * @property {Phaser.Signal} onBeforeLoadComplete + */ + this.onBeforeLoadComplete = new Phaser.Signal(); + + /** + * This event is dispatched when the final file in the load queue has either loaded or failed, + * after the loader is {@link #reset}. * * @property {Phaser.Signal} onLoadComplete */ @@ -73027,22 +73904,6 @@ THIS SOFTWARE. */ this.onFileError = new Phaser.Signal(); - /** - * If true and if the browser supports XDomainRequest, it will be used in preference for XHR. - * - * This is only relevant for IE 9 and should _only_ be enabled for IE 9 clients when required by the server/CDN. - * - * @property {boolean} useXDomainRequest - * @deprecated This is only relevant for IE 9. - */ - this.useXDomainRequest = false; - - /** - * @private - * @property {boolean} _warnedAboutXDomainRequest - Control number of warnings for using XDR outside of IE 9. - */ - this._warnedAboutXDomainRequest = false; - /** * If true (the default) then parallel downloading will be enabled. * @@ -73142,37 +74003,37 @@ THIS SOFTWARE. /** * @constant - * @objType {number} + * @type {number} */ Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY = 0; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Loader.TEXTURE_ATLAS_JSON_HASH = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Loader.TEXTURE_ATLAS_XML_STARLING = 2; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Loader.PHYSICS_LIME_CORONA_JSON = 3; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Loader.PHYSICS_PHASER_JSON = 4; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Loader.TEXTURE_ATLAS_JSON_PYXEL = 5; @@ -73205,8 +74066,7 @@ THIS SOFTWARE. if (direction === 0) { // Horizontal rect this.preloadSprite.rect = new Phaser.Rectangle(0, 0, 1, sprite.height); - } - else { + } else { // Vertical rect this.preloadSprite.rect = new Phaser.Rectangle(0, 0, sprite.width, 1); } @@ -73239,7 +74099,7 @@ THIS SOFTWARE. * To access a loaded asset use Phaser.Cache, eg. {@link Phaser.Cache#checkImageKey} * * @method Phaser.Loader#checkKeyExists - * @param {string} type - The objType asset you want to check. + * @param {string} type - The type asset you want to check. * @param {string} key - Key of the asset you want to check. * @return {boolean} Return true if exists, otherwise return false. */ @@ -73255,7 +74115,7 @@ THIS SOFTWARE. * Only assets in the download file queue will be found. * * @method Phaser.Loader#getAssetIndex - * @param {string} type - The objType asset you want to check. + * @param {string} type - The type asset you want to check. * @param {string} key - Key of the asset you want to check. * @return {number} The index of this key in the filelist, or -1 if not found. * The index may change and should only be used immediately following this call @@ -73287,7 +74147,7 @@ THIS SOFTWARE. * Only assets in the download file queue will be found. * * @method Phaser.Loader#getAsset - * @param {string} type - The objType asset you want to check. + * @param {string} type - The type asset you want to check. * @param {string} key - Key of the asset you want to check. * @return {any} Returns an object if found that has 2 properties: `index` and `file`; otherwise a non-true value is returned. * The index may change and should only be used immediately following this call. @@ -73358,11 +74218,11 @@ THIS SOFTWARE. * * @method Phaser.Loader#addToFileList * @protected - * @param {string} type - The objType of resource to add to the list (image, audio, xml, etc). + * @param {string} type - The type of resource to add to the list (image, audio, xml, etc). * @param {string} key - The unique Cache ID key of this resource. * @param {string} [url] - The URL the asset will be loaded from. * @param {object} [properties=(none)] - Any additional properties needed to load the file. These are added directly to the added file object and overwrite any defaults. - * @param {boolean} [overwrite=false] - If true then this will overwrite a file asset of the same objType/key. Otherwise it will only add a new asset. If overwrite is true, and the asset is already being loaded (or has been loaded), then it is appended instead. + * @param {boolean} [overwrite=false] - If true then this will overwrite a file asset of the same type/key. Otherwise it will only add a new asset. If overwrite is true, and the asset is already being loaded (or has been loaded), then it is appended instead. * @param {string} [extension] - If no URL is given the Loader will sometimes auto-generate the URL based on the key, using this as the extension. * @return {Phaser.Loader} This instance of the Phaser Loader. */ @@ -73373,16 +74233,15 @@ THIS SOFTWARE. } if (key === undefined || key === '') { - console.warn("Phaser.Loader: Invalid or no key given of objType " + type); + console.warn('Phaser.Loader: Invalid or no key given of type ' + type); return this; } if (url === undefined || url === null) { if (extension) { url = key + extension; - } - else { - console.warn("Phaser.Loader: No URL given for file objType: " + type + " key: " + key); + } else { + console.warn('Phaser.Loader: No URL given for file type: ' + type + ' key: ' + key); return this; } } @@ -73412,13 +74271,11 @@ THIS SOFTWARE. if (!currentFile.loading && !currentFile.loaded) { this._fileList[fileIndex] = file; - } - else { + } else { this._fileList.push(file); this._totalFileCount++; } - } - else if (fileIndex === -1) { + } else if (fileIndex === -1) { this._fileList.push(file); this._totalFileCount++; } @@ -73432,7 +74289,7 @@ THIS SOFTWARE. * * @method Phaser.Loader#replaceInFileList * @protected - * @param {string} type - The objType of resource to add to the list (image, audio, xml, etc). + * @param {string} type - The type of resource to add to the list (image, audio, xml, etc). * @param {string} key - The unique Cache ID key of this resource. * @param {string} url - The URL the asset will be loaded from. * @param {object} properties - Any additional properties needed to load the file. @@ -73577,8 +74434,7 @@ THIS SOFTWARE. if (typeof url === 'object') { return this.texture(key, url, overwrite); - } - else { + } else { return this.addToFileList('image', key, url, undefined, overwrite, '.png'); } @@ -73599,6 +74455,30 @@ THIS SOFTWARE. }, + /** + * Generate a grid image and add it to the current load queue. + * + * @method Phaser.Loader#imageFromGrid + * @see Phaser.Create#grid + */ + imageFromGrid: function (key, width, height, cellWidth, cellHeight, color) { + + return this.imageFromBitmapData(key, this.game.create.grid(key, width, height, cellWidth, cellHeight, color, false)); + + }, + + /** + * Generate a texture image and add it to the current load queue. + * + * @method Phaser.Loader#imageFromTexture + * @see Phaser.Create#texture + */ + imageFromTexture: function (key, data, pixelWidth, pixelHeight, palette) { + + return this.imageFromBitmapData(key, this.game.create.texture(key, data, pixelWidth, pixelHeight, palette, false)); + + }, + /** * Adds a Compressed Texture Image to the current load queue. * @@ -73659,8 +74539,8 @@ THIS SOFTWARE. // Check if we have a truecolor texture to fallback. // Also catches calls to this function that are from a Canvas renderer - if (object['truecolor']) { - this.addToFileList('image', key, object['truecolor'], undefined, overwrite, '.png'); + if (object.truecolor) { + this.addToFileList('image', key, object.truecolor, undefined, overwrite, '.png'); } return this; @@ -73697,8 +74577,7 @@ THIS SOFTWARE. for (var i = 0; i < keys.length; i++) { this.image(keys[i], urls[i]); } - } - else { + } else { for (var i = 0; i < keys.length; i++) { this.image(keys[i]); } @@ -73927,14 +74806,36 @@ THIS SOFTWARE. * and no URL is given then the Loader will set the URL to be "alien.png". It will always add `.png` as the extension. * If you do not desire this action then provide a URL. * + * An image with four frames, `margin = 1`, and `spacing = 2` looks like this: + * + * ``` + * ........ + * .# # . + * . . + * . . + * .# # . + * . . + * . . + * ........ + * + * . margin + * spacing + * # sprite frame + * ``` + * + * `spacing` must be on only the right and bottom edges of each frame, including the last row and column. + * + * The first sprite frame is found at (margin) px from the left of the image. + * The second sprite frame is found at (margin + frameWidth + spacing) px from the left of the image, and so on. + * * @method Phaser.Loader#spritesheet * @param {string} key - Unique asset key of the sheet file. * @param {string} url - URL of the sprite sheet file. If undefined or `null` the url will be set to `.png`, i.e. if `key` was "alien" then the URL will be "alien.png". * @param {number} frameWidth - Width in pixels of a single frame in the sprite sheet. * @param {number} frameHeight - Height in pixels of a single frame in the sprite sheet. * @param {number} [frameMax=-1] - How many frames in this sprite sheet. If not specified it will divide the whole image into frames. - * @param {number} [margin=0] - If the frames have been drawn with a margin, specify the amount here. - * @param {number} [spacing=0] - If the frames have been drawn with spacing between them, specify the amount here. + * @param {number} [margin=0] - The distance from the top-left of the image to the top-left of the first frame, if any. + * @param {number} [spacing=0] - The distance from the right edge of a frame to the left edge of the next frame on the same row, from the right edge of the last frame of a row to the margin, from the bottom edge of a frame to the top edge of the next frame on the same column, and from the bottom edge of the last frame of a column to the margin. * @param {number} [skipFrames=0] - Skip a number of frames. Useful when there are multiple sprite sheets in one image. * @return {Phaser.Loader} This Loader instance. */ @@ -73981,9 +74882,9 @@ THIS SOFTWARE. * * @method Phaser.Loader#audio * @param {string} key - Unique asset key of the audio file. - * @param {string|string[]|object[]} urls - Either a single string or an array of URIs or pairs of `{uri: .., objType: ..}`. + * @param {string|string[]|object[]} urls - Either a single string or an array of URIs or pairs of `{uri: .., type: ..}`. * If an array is specified then the first URI (or URI + mime pair) that is device-compatible will be selected. - * For example: `"jump.mp3"`, `['jump.mp3', 'jump.ogg', 'jump.m4a']`, or `[{uri: "data:", objType: 'opus'}, 'fallback.mp3']`. + * For example: `"jump.mp3"`, `['jump.mp3', 'jump.ogg', 'jump.m4a']`, or `[{uri: "data:", type: 'opus'}, 'fallback.mp3']`. * BLOB and DATA URIs can be used but only support automatic detection when used in the pair form; otherwise the format must be manually checked before adding the resource. * @param {boolean} [autoDecode=true] - When using Web Audio the audio files can either be decoded at load time or run-time. * Audio files can't be played until they are decoded and, if specified, this enables immediate decoding. Decoding is a non-blocking async process, however it consumes huge amounts of CPU time on mobiles especially. @@ -74051,15 +74952,13 @@ THIS SOFTWARE. if (jsonURL) { this.json(key + '-audioatlas', jsonURL); - } - else if (jsonData) { + } else if (jsonData) { if (typeof jsonData === 'string') { jsonData = JSON.parse(jsonData); } this.cache.addJSON(key + '-audioatlas', '', jsonData); - } - else { + } else { console.warn('Phaser.Loader.audiosprite - You must specify either a jsonURL or provide a jsonData object'); } @@ -74100,9 +74999,9 @@ THIS SOFTWARE. * * @method Phaser.Loader#video * @param {string} key - Unique asset key of the video file. - * @param {string|string[]|object[]} urls - Either a single string or an array of URIs or pairs of `{uri: .., objType: ..}`. + * @param {string|string[]|object[]} urls - Either a single string or an array of URIs or pairs of `{uri: .., type: ..}`. * If an array is specified then the first URI (or URI + mime pair) that is device-compatible will be selected. - * For example: `"boom.mp4"`, `['boom.mp4', 'boom.ogg', 'boom.webm']`, or `[{uri: "data:", objType: 'opus'}, 'fallback.mp4']`. + * For example: `"boom.mp4"`, `['boom.mp4', 'boom.ogg', 'boom.webm']`, or `[{uri: "data:", type: 'opus'}, 'fallback.mp4']`. * BLOB and DATA URIs can be used but only support automatic detection when used in the pair form; otherwise the format must be manually checked before adding the resource. * @param {string} [loadEvent='canplaythrough'] - This sets the Video source event to listen for before the load is considered complete. * 'canplaythrough' implies the video has downloaded enough, and bandwidth is high enough that it can be played to completion. @@ -74119,8 +75018,7 @@ THIS SOFTWARE. if (loadEvent === undefined) { if (this.game.device.firefox) { loadEvent = 'loadeddata'; - } - else { + } else { loadEvent = 'canplaythrough'; } } @@ -74185,8 +75083,7 @@ THIS SOFTWARE. if (!url && !data) { if (format === Phaser.Tilemap.CSV) { url = key + '.csv'; - } - else { + } else { url = key + '.json'; } } @@ -74194,6 +75091,7 @@ THIS SOFTWARE. // A map data object has been given if (data) { switch (format) { + // A csv string or object has been given case Phaser.Tilemap.CSV: break; @@ -74208,8 +75106,7 @@ THIS SOFTWARE. } this.cache.addTilemap(key, null, data, format); - } - else { + } else { this.addToFileList('tilemap', key, url, {format: format}); } @@ -74271,8 +75168,7 @@ THIS SOFTWARE. } this.cache.addPhysicsData(key, null, data, format); - } - else { + } else { this.addToFileList('physics', key, url, {format: format}); } @@ -74349,26 +75245,24 @@ THIS SOFTWARE. xSpacing: xSpacing, ySpacing: ySpacing }); - } - else { + } else { // A stringified xml/json atlas has been given if (typeof atlasData === 'string') { var json, xml; try { json = JSON.parse(atlasData); - } - catch (e) { + } catch (e) { xml = this.parseXml(atlasData); } if (!xml && !json) { - throw new Error("Phaser.Loader. Invalid Bitmap Font atlas given"); + throw new Error('Phaser.Loader. Invalid Bitmap Font atlas given'); } this.addToFileList('bitmapfont', key, textureURL, { atlasURL: null, atlasData: json || xml, - atlasType: (!!json ? 'json' : 'xml'), xSpacing: xSpacing, ySpacing: ySpacing + atlasType: (json ? 'json' : 'xml'), xSpacing: xSpacing, ySpacing: ySpacing }); } } @@ -74584,8 +75478,7 @@ THIS SOFTWARE. if (!atlasURL && !atlasData) { if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) { atlasURL = key + '.xml'; - } - else { + } else { atlasURL = key + '.json'; } } @@ -74593,9 +75486,9 @@ THIS SOFTWARE. // A URL to a json/xml file has been given if (atlasURL) { this.addToFileList('textureatlas', key, textureURL, {atlasURL: atlasURL, format: format}); - } - else { + } else { switch (format) { + // A json string or object has been given case Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY: @@ -74611,7 +75504,7 @@ THIS SOFTWARE. var xml = this.parseXml(atlasData); if (!xml) { - throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + throw new Error('Phaser.Loader. Invalid Texture Atlas XML given'); } atlasData = xml; @@ -74663,7 +75556,7 @@ THIS SOFTWARE. * This has no effect on already loaded assets. * * @method Phaser.Loader#addSyncPoint - * @param {string} type - The objType of resource to turn into a sync point (image, audio, xml, etc). + * @param {string} type - The type of resource to turn into a sync point (image, audio, xml, etc). * @param {string} key - Key of the file you want to turn into a sync point. * @return {Phaser.Loader} This Loader instance. * @see {@link Phaser.Loader#withSyncPoint withSyncPoint} @@ -74686,7 +75579,7 @@ THIS SOFTWARE. * * @method Phaser.Loader#removeFile * @protected - * @param {string} type - The objType of resource to add to the list (image, audio, xml, etc). + * @param {string} type - The type of resource to add to the list (image, audio, xml, etc). * @param {string} key - Key of the file you want to remove. */ removeFile: function (type, key) { @@ -74774,8 +75667,7 @@ THIS SOFTWARE. if (file.type !== 'packfile') { this._loadedFileCount++; this.onFileComplete.dispatch(this.progress, file.key, !file.error, this._loadedFileCount, this._totalFileCount); - } - else if (file.type === 'packfile' && file.error) { + } else if (file.type === 'packfile' && file.error) { // Non-error pack files are handled when processing the file queue this._loadedPackCount++; this.onPackComplete.dispatch(file.key, !file.error, this._loadedPackCount, this._totalPackCount); @@ -74806,8 +75698,7 @@ THIS SOFTWARE. if (i === this._processingHead) { this._processingHead = i + 1; } - } - else if (!file.loading && this._flightQueue.length < inflightLimit) { + } else if (!file.loading && this._flightQueue.length < inflightLimit) { // -> not loaded/failed, not loading if (file.type === 'packfile' && !file.data) { // Fetches the pack data: the pack is processed above as it reaches queue-start. @@ -74816,8 +75707,7 @@ THIS SOFTWARE. file.loading = true; this.loadFile(file); - } - else if (!syncblock) { + } else if (!syncblock) { if (!this._fileLoadStarted) { this._fileLoadStarted = true; this.onLoadStart.dispatch(); @@ -74849,11 +75739,10 @@ THIS SOFTWARE. // (There should be no inflight items as they are complete - loaded/error.) if (this._processingHead >= this._fileList.length) { this.finishedLoading(); - } - else if (!this._flightQueue.length) { + } else if (!this._flightQueue.length) { // Flight queue is empty but file list is not done being processed. // This indicates a critical internal error with no known recovery. - console.warn("Phaser.Loader - aborting: processing queue empty, loading may have stalled"); + console.warn('Phaser.Loader - aborting: processing queue empty, loading may have stalled'); var _this = this; @@ -74886,11 +75775,17 @@ THIS SOFTWARE. this.onLoadStart.dispatch(); } + this.game.state.loadUpdate(); + this.onBeforeLoadComplete.dispatch(); + this.reset(); this.onLoadComplete.dispatch(); - this.game.state.loadComplete(); + // Check if the state still exists since destroy could have occurred while loading + if (this.game.state) { + this.game.state.loadComplete(); + } }, @@ -74942,75 +75837,75 @@ THIS SOFTWARE. var file = packData[i]; switch (file.type) { - case "image": + case 'image': this.image(file.key, file.url, file.overwrite); break; - case "text": + case 'text': this.text(file.key, file.url, file.overwrite); break; - case "json": + case 'json': this.json(file.key, file.url, file.overwrite); break; - case "xml": + case 'xml': this.xml(file.key, file.url, file.overwrite); break; - case "script": + case 'script': this.script(file.key, file.url, file.callback, pack.callbackContext || this); break; - case "binary": + case 'binary': this.binary(file.key, file.url, file.callback, pack.callbackContext || this); break; - case "spritesheet": + case 'spritesheet': this.spritesheet(file.key, file.url, file.frameWidth, file.frameHeight, file.frameMax, file.margin, file.spacing, file.skipFrames); break; - case "video": + case 'video': this.video(file.key, file.urls); break; - case "audio": + case 'audio': this.audio(file.key, file.urls, file.autoDecode); break; - case "audiosprite": + case 'audiosprite': this.audiosprite(file.key, file.urls, file.jsonURL, file.jsonData, file.autoDecode); break; - case "tilemap": + case 'tilemap': this.tilemap(file.key, file.url, file.data, Phaser.Tilemap[file.format]); break; - case "physics": + case 'physics': this.physics(file.key, file.url, file.data, Phaser.Loader[file.format]); break; - case "bitmapFont": + case 'bitmapFont': this.bitmapFont(file.key, file.textureURL, file.atlasURL, file.atlasData, file.xSpacing, file.ySpacing); break; - case "atlasJSONArray": + case 'atlasJSONArray': this.atlasJSONArray(file.key, file.textureURL, file.atlasURL, file.atlasData); break; - case "atlasJSONHash": + case 'atlasJSONHash': this.atlasJSONHash(file.key, file.textureURL, file.atlasURL, file.atlasData); break; - case "atlasXML": + case 'atlasXML': this.atlasXML(file.key, file.textureURL, file.atlasURL, file.atlasData); break; - case "atlas": + case 'atlas': this.atlas(file.key, file.textureURL, file.atlasURL, file.atlasData, Phaser.Loader[file.format]); break; - case "shader": + case 'shader': this.shader(file.key, file.url, file.overwrite); break; } @@ -75037,8 +75932,7 @@ THIS SOFTWARE. if (url.match(/^(?:blob:|data:|http:\/\/|https:\/\/|\/\/)/)) { return url; - } - else { + } else { return this.baseURL + file.path + url; } @@ -75075,12 +75969,10 @@ THIS SOFTWARE. // WebAudio or Audio Tag? if (this.game.sound.usingWebAudio) { this.xhrLoad(file, this.transformUrl(file.url, file), 'arraybuffer', this.fileComplete); - } - else if (this.game.sound.usingAudioTag) { + } else if (this.game.sound.usingAudioTag) { this.loadAudioTag(file); } - } - else { + } else { this.fileError(file, null, 'No supported audio URL specified or device does not have audio playback support'); } break; @@ -75091,12 +75983,10 @@ THIS SOFTWARE. if (file.url) { if (file.asBlob) { this.xhrLoad(file, this.transformUrl(file.url, file), 'blob', this.fileComplete); - } - else { + } else { this.loadVideoTag(file); } - } - else { + } else { this.fileError(file, null, 'No supported video URL specified or device does not have video playback support'); } break; @@ -75115,12 +76005,10 @@ THIS SOFTWARE. if (file.format === Phaser.Tilemap.TILED_JSON) { this.xhrLoad(file, this.transformUrl(file.url, file), 'text', this.jsonLoadComplete); - } - else if (file.format === Phaser.Tilemap.CSV) { + } else if (file.format === Phaser.Tilemap.CSV) { this.xhrLoad(file, this.transformUrl(file.url, file), 'text', this.csvLoadComplete); - } - else { - this.asyncComplete(file, "invalid Tilemap format: " + file.format); + } else { + this.asyncComplete(file, 'invalid Tilemap format: ' + file.format); } break; @@ -75135,8 +76023,7 @@ THIS SOFTWARE. if (file.key.split('_').pop() === 'truecolor') { this.loadImageTag(file); - } - else { + } else { this.xhrLoad(file, this.transformUrl(file.url, file), 'arraybuffer', this.fileComplete); } break; @@ -75199,7 +76086,7 @@ THIS SOFTWARE. var _this = this; - file.data = document.createElement("video"); + file.data = document.createElement('video'); file.data.name = file.key; file.data.controls = false; file.data.autoplay = false; @@ -75243,8 +76130,7 @@ THIS SOFTWARE. file.data.src = this.transformUrl(file.url, file); this.fileComplete(file); - } - else { + } else { file.data = new Audio(); file.data.name = file.key; @@ -75283,17 +76169,12 @@ THIS SOFTWARE. */ xhrLoad: function (file, url, type, onload, onerror) { - if (this.useXDomainRequest && window.XDomainRequest) { - this.xhrLoadWithXDR(file, url, type, onload, onerror); - return; - } - var xhr = new XMLHttpRequest(); - xhr.open("GET", url, true); + xhr.open('GET', url, true); xhr.responseType = type; - if (this.headers['requestedWith'] !== false) { - xhr.setRequestHeader('X-Requested-With', this.headers['requestedWith']); + if (this.headers.requestedWith !== false) { + xhr.setRequestHeader('X-Requested-With', this.headers.requestedWith); } if (this.headers[file.type]) { @@ -75309,8 +76190,7 @@ THIS SOFTWARE. try { if (xhr.readyState === 4 && xhr.status >= 400 && xhr.status <= 599) { // Handle HTTP status codes of 4xx and 5xx as errors, even if xhr.onerror was not called. return onerror.call(_this, file, xhr); - } - else { + } else { return onload.call(_this, file, xhr); } } catch (e) { @@ -75320,11 +76200,8 @@ THIS SOFTWARE. if (!_this.hasLoaded) { _this.asyncComplete(file, e.message || 'Exception'); - } - else { - if (window['console']) { - console.error(e); - } + } else if (window.console) { + console.error(e); } } }; @@ -75339,11 +76216,8 @@ THIS SOFTWARE. if (!_this.hasLoaded) { _this.asyncComplete(file, e.message || 'Exception'); - } - else { - if (window['console']) { - console.error(e); - } + } else if (window.console) { + console.error(e); } } @@ -75356,92 +76230,10 @@ THIS SOFTWARE. }, - /** - * Starts the xhr loader - using XDomainRequest. - * This should _only_ be used with IE 9. Phaser does not support IE 8 and XDR is deprecated in IE 10. - * - * This is designed specifically to use with asset file processing. - * - * @method Phaser.Loader#xhrLoad - * @private - * @param {object} file - The file/pack to load. - * @param {string} url - The URL of the file. - * @param {string} type - The xhr responseType. - * @param {function} onload - The function to call on success. Invoked in `this` context and supplied with `(file, xhr)` arguments. - * @param {function} [onerror=fileError] The function to call on error. Invoked in `this` context and supplied with `(file, xhr)` arguments. - * @deprecated This is only relevant for IE 9. - */ - xhrLoadWithXDR: function (file, url, type, onload, onerror) { - - // Special IE9 magic .. only - if (!this._warnedAboutXDomainRequest && - (!this.game.device.ie || this.game.device.ieVersion >= 10)) { - this._warnedAboutXDomainRequest = true; - console.warn("Phaser.Loader - using XDomainRequest outside of IE 9"); - } - - // Ref: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx - var xhr = new window.XDomainRequest(); - xhr.open('GET', url, true); - xhr.responseType = type; - - // XDomainRequest has a few quirks. Occasionally it will abort requests - // A way to avoid this is to make sure ALL callbacks are set even if not used - // More info here: http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9 - xhr.timeout = 3000; - - onerror = onerror || this.fileError; - - var _this = this; - - xhr.onerror = function () { - try { - return onerror.call(_this, file, xhr); - } catch (e) { - _this.asyncComplete(file, e.message || 'Exception'); - } - }; - - xhr.ontimeout = function () { - try { - return onerror.call(_this, file, xhr); - } catch (e) { - _this.asyncComplete(file, e.message || 'Exception'); - } - }; - - xhr.onprogress = function () { - }; - - xhr.onload = function () { - try { - if (xhr.readyState === 4 && xhr.status >= 400 && xhr.status <= 599) { // Handle HTTP status codes of 4xx and 5xx as errors, even if xhr.onerror was not called. - return onerror.call(_this, file, xhr); - } - else { - return onload.call(_this, file, xhr); - } - return onload.call(_this, file, xhr); - } catch (e) { - _this.asyncComplete(file, e.message || 'Exception'); - } - }; - - file.requestObject = xhr; - file.requestUrl = url; - - // Note: The xdr.send() call is wrapped in a timeout to prevent an issue with the interface where some requests are lost - // if multiple XDomainRequests are being sent at the same time. - setTimeout(function () { - xhr.send(); - }, 0); - - }, - /** * Give a bunch of URLs, return the first URL that has an extension this device thinks it can play. * - * It is assumed that the device can play "blob:" or "data:" URIs - There is no mime-objType checking on data URIs. + * It is assumed that the device can play "blob:" or "data:" URIs - There is no mime-type checking on data URIs. * * @method Phaser.Loader#getVideoURL * @private @@ -75454,7 +76246,7 @@ THIS SOFTWARE. var url = urls[i]; var videoType; - if (url.uri) // {uri: .., objType: ..} pair + if (url.uri) // {uri: .., type: ..} pair { videoType = url.type; url = url.uri; @@ -75462,19 +76254,18 @@ THIS SOFTWARE. if (this.game.device.canPlayVideo(videoType)) { return url; } - } - else { + } else { // Assume direct-data URI can be played if not in a paired form; select immediately - if (url.indexOf("blob:") === 0 || url.indexOf("data:") === 0) { + if (url.indexOf('blob:') === 0 || url.indexOf('data:') === 0) { return url; } - if (url.indexOf("?") >= 0) // Remove query from URL + if (url.indexOf('?') >= 0) // Remove query from URL { - url = url.substr(0, url.indexOf("?")); + url = url.substr(0, url.indexOf('?')); } - var extension = url.substr((Math.max(0, url.lastIndexOf(".")) || Infinity) + 1); + var extension = url.substr((Math.max(0, url.lastIndexOf('.')) || Infinity) + 1); videoType = extension.toLowerCase(); @@ -75491,7 +76282,7 @@ THIS SOFTWARE. /** * Give a bunch of URLs, return the first URL that has an extension this device thinks it can play. * - * It is assumed that the device can play "blob:" or "data:" URIs - There is no mime-objType checking on data URIs. + * It is assumed that the device can play "blob:" or "data:" URIs - There is no mime-type checking on data URIs. * * @method Phaser.Loader#getAudioURL * @private @@ -75508,7 +76299,7 @@ THIS SOFTWARE. var url = urls[i]; var audioType; - if (url.uri) // {uri: .., objType: ..} pair + if (url.uri) // {uri: .., type: ..} pair { audioType = url.type; url = url.uri; @@ -75516,19 +76307,18 @@ THIS SOFTWARE. if (this.game.device.canPlayAudio(audioType)) { return url; } - } - else { + } else { // Assume direct-data URI can be played if not in a paired form; select immediately - if (url.indexOf("blob:") === 0 || url.indexOf("data:") === 0) { + if (url.indexOf('blob:') === 0 || url.indexOf('data:') === 0) { return url; } - if (url.indexOf("?") >= 0) // Remove query from URL + if (url.indexOf('?') >= 0) // Remove query from URL { - url = url.substr(0, url.indexOf("?")); + url = url.substr(0, url.indexOf('?')); } - var extension = url.substr((Math.max(0, url.lastIndexOf(".")) || Infinity) + 1); + var extension = url.substr((Math.max(0, url.lastIndexOf('.')) || Infinity) + 1); audioType = extension.toLowerCase(); @@ -75590,11 +76380,10 @@ THIS SOFTWARE. case 'texture': - var extension = /\.([^.]+)$/.exec(file.url.split('?', 1)[0])[1].toLowerCase(); + var extension = (/\.([^.]+)$/).exec(file.url.split('?', 1)[0])[1].toLowerCase(); if (file.data !== null) { this.cache.addCompressedTextureMetaData(file.key, file.url, extension, file.data); - } - else { + } else { this.cache.addCompressedTextureMetaData(file.key, file.url, extension, xhr.response); } break; @@ -75613,19 +76402,16 @@ THIS SOFTWARE. if (file.atlasURL == null) { this.cache.addTextureAtlas(file.key, file.url, file.data, file.atlasData, file.format); - } - else { + } else { // Load the JSON or XML before carrying on with the next file loadNext = false; if (file.format === Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY || file.format === Phaser.Loader.TEXTURE_ATLAS_JSON_HASH || file.format === Phaser.Loader.TEXTURE_ATLAS_JSON_PYXEL) { this.xhrLoad(file, this.transformUrl(file.atlasURL, file), 'text', this.jsonLoadComplete); - } - else if (file.format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) { + } else if (file.format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) { this.xhrLoad(file, this.transformUrl(file.atlasURL, file), 'text', this.xmlLoadComplete); - } - else { - throw new Error("Phaser.Loader. Invalid Texture Atlas format: " + file.format); + } else { + throw new Error('Phaser.Loader. Invalid Texture Atlas format: ' + file.format); } } break; @@ -75634,8 +76420,7 @@ THIS SOFTWARE. if (!file.atlasURL) { this.cache.addBitmapFont(file.key, file.url, file.data, file.atlasData, file.atlasType, file.xSpacing, file.ySpacing); - } - else { + } else { // Load the XML before carrying on with the next file loadNext = false; this.xhrLoad(file, this.transformUrl(file.atlasURL, file), 'text', function (file, xhr) { @@ -75644,15 +76429,13 @@ THIS SOFTWARE. try { // Try to parse as JSON, if it fails, then it's hopefully XML json = JSON.parse(xhr.responseText); - } - catch (e) { - } + } catch (e) { + } // eslint-disable-line no-empty - if (!!json) { + if (json) { file.atlasType = 'json'; this.jsonLoadComplete(file, xhr); - } - else { + } else { file.atlasType = 'xml'; this.xmlLoadComplete(file, xhr); } @@ -75665,9 +76448,8 @@ THIS SOFTWARE. if (file.asBlob) { try { file.data = xhr.response; - } - catch (e) { - throw new Error("Phaser.Loader. Unable to parse video file as Blob: " + file.key); + } catch (e) { + throw new Error('Phaser.Loader. Unable to parse video file as Blob: ' + file.key); } } @@ -75684,8 +76466,7 @@ THIS SOFTWARE. if (file.autoDecode) { this.game.sound.decode(file.key); } - } - else { + } else { this.cache.addSound(file.key, file.url, file.data, false, true); } break; @@ -75720,8 +76501,7 @@ THIS SOFTWARE. case 'binary': if (file.callback) { file.data = file.callback.call(file.callbackContext, file.key, xhr.response); - } - else { + } else { file.data = xhr.response; } @@ -75750,14 +76530,11 @@ THIS SOFTWARE. if (file.type === 'tilemap') { this.cache.addTilemap(file.key, file.url, data, file.format); - } - else if (file.type === 'bitmapfont') { + } else if (file.type === 'bitmapfont') { this.cache.addBitmapFont(file.key, file.url, file.data, data, file.atlasType, file.xSpacing, file.ySpacing); - } - else if (file.type === 'json') { + } else if (file.type === 'json') { this.cache.addJSON(file.key, file.url, data); - } - else { + } else { this.cache.addTextureAtlas(file.key, file.url, file.data, data, file.format); } @@ -75792,24 +76569,22 @@ THIS SOFTWARE. */ xmlLoadComplete: function (file, xhr) { - // Always try parsing the content as XML, regardless of actually response objType + // Always try parsing the content as XML, regardless of actually response type var data = xhr.responseText; var xml = this.parseXml(data); if (!xml) { var responseType = xhr.responseType || xhr.contentType; // contentType for MS-XDomainRequest console.warn('Phaser.Loader - ' + file.key + ': invalid XML (' + responseType + ')'); - this.asyncComplete(file, "invalid XML"); + this.asyncComplete(file, 'invalid XML'); return; } if (file.type === 'bitmapfont') { this.cache.addBitmapFont(file.key, file.url, file.data, xml, file.atlasType, file.xSpacing, file.ySpacing); - } - else if (file.type === 'textureatlas') { + } else if (file.type === 'textureatlas') { this.cache.addTextureAtlas(file.key, file.url, file.data, xml, file.format); - } - else if (file.type === 'xml') { + } else if (file.type === 'xml') { this.cache.addXML(file.key, file.url, xml); } @@ -75830,25 +76605,23 @@ THIS SOFTWARE. var xml; try { - if (window['DOMParser']) { + if (window.DOMParser) { var domparser = new DOMParser(); - xml = domparser.parseFromString(data, "text/xml"); - } - else { - xml = new ActiveXObject("Microsoft.XMLDOM"); + xml = domparser.parseFromString(data, 'text/xml'); + } else { + xml = new ActiveXObject('Microsoft.XMLDOM'); + // Why is this 'false'? xml.async = 'false'; xml.loadXML(data); } - } - catch (e) { + } catch (e) { xml = null; } - if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + if (!xml || !xml.documentElement || xml.getElementsByTagName('parsererror').length) { return null; - } - else { + } else { return xml; } @@ -75857,25 +76630,21 @@ THIS SOFTWARE. /** * Update the loading sprite progress. * - * @method Phaser.Loader#nextFile + * @method Phaser.Loader#updateProgress * @private - * @param {object} previousFile - * @param {boolean} success - Whether the previous asset loaded successfully or not. */ updateProgress: function () { if (this.preloadSprite) { if (this.preloadSprite.direction === 0) { this.preloadSprite.rect.width = Math.floor((this.preloadSprite.width / 100) * this.progress); - } - else { + } else { this.preloadSprite.rect.height = Math.floor((this.preloadSprite.height / 100) * this.progress); } if (this.preloadSprite.sprite) { this.preloadSprite.sprite.updateCrop(); - } - else { + } else { // We seem to have lost our sprite - maybe it was destroyed? this.preloadSprite = null; } @@ -75946,7 +76715,7 @@ THIS SOFTWARE. * @name Phaser.Loader#progressFloat * @property {number} */ - Object.defineProperty(Phaser.Loader.prototype, "progressFloat", { + Object.defineProperty(Phaser.Loader.prototype, 'progressFloat', { get: function () { var progress = (this._loadedFileCount / this._totalFileCount) * 100; @@ -75961,7 +76730,7 @@ THIS SOFTWARE. * @name Phaser.Loader#progress * @property {integer} */ - Object.defineProperty(Phaser.Loader.prototype, "progress", { + Object.defineProperty(Phaser.Loader.prototype, 'progress', { get: function () { return Math.round(this.progressFloat); @@ -76037,9 +76806,9 @@ THIS SOFTWARE. for (var i = 0; i < letters.length; i++) { var charCode = parseInt(letters[i].getAttribute('id'), 10); - data.chars[charCode] = { - x: x + parseInt(letters[i].getAttribute('x'), 10), - y: y + parseInt(letters[i].getAttribute('y'), 10), + var char = data.chars[charCode] = { + x: parseInt(letters[i].getAttribute('x'), 10), + y: parseInt(letters[i].getAttribute('y'), 10), width: parseInt(letters[i].getAttribute('width'), 10), height: parseInt(letters[i].getAttribute('height'), 10), xOffset: parseInt(letters[i].getAttribute('xoffset'), 10) / resolution, @@ -76047,6 +76816,28 @@ THIS SOFTWARE. xAdvance: (parseInt(letters[i].getAttribute('xadvance'), 10) + xSpacing) / resolution, kerning: {} }; + if (frame && frame.trimmed) { + if (char.x + char.width > frame.spriteSourceSizeX + frame.spriteSourceSizeW) { + char.width -= char.x + char.width - frame.spriteSourceSizeX - frame.spriteSourceSizeW; + } + if (char.y + char.height > frame.spriteSourceSizeY + frame.spriteSourceSizeH) { + char.height -= char.y + char.height - frame.spriteSourceSizeY - frame.spriteSourceSizeH; + } + if (char.x < frame.spriteSourceSizeX) { + var diff = frame.spriteSourceSizeX - char.x; + char.x = 0; + char.width -= diff; + char.xOffset += diff; + } + if (char.y < frame.spriteSourceSizeY) { + var diff = frame.spriteSourceSizeY - char.y; + char.y = 0; + char.height -= diff; + char.yOffset += diff; + } + } + char.x += x; + char.y += y; } var kernings = xml.getElementsByTagName('kerning'); @@ -76091,14 +76882,14 @@ THIS SOFTWARE. var x = (frame) ? frame.x : 0; var y = (frame) ? frame.y : 0; - json.font.chars["char"].forEach( + json.font.chars.char.forEach( function parseChar(letter) { var charCode = parseInt(letter._id, 10); - data.chars[charCode] = { - x: x + parseInt(letter._x, 10), - y: y + parseInt(letter._y, 10), + var char = data.chars[charCode] = { + x: parseInt(letter._x, 10), + y: parseInt(letter._y, 10), width: parseInt(letter._width, 10), height: parseInt(letter._height, 10), xOffset: parseInt(letter._xoffset, 10) / resolution, @@ -76106,6 +76897,28 @@ THIS SOFTWARE. xAdvance: (parseInt(letter._xadvance, 10) + xSpacing) / resolution, kerning: {} }; + if (frame && frame.trimmed) { + if (char.x + char.width > frame.spriteSourceSizeX + frame.spriteSourceSizeW) { + char.width -= char.x + char.width - frame.spriteSourceSizeX - frame.spriteSourceSizeW; + } + if (char.y + char.height > frame.spriteSourceSizeY + frame.spriteSourceSizeH) { + char.height -= char.y + char.height - frame.spriteSourceSizeY - frame.spriteSourceSizeH; + } + if (char.x < frame.spriteSourceSizeX) { + var diff = frame.spriteSourceSizeX - char.x; + char.x = 0; + char.width -= diff; + char.xOffset += diff; + } + if (char.y < frame.spriteSourceSizeY) { + var diff = frame.spriteSourceSizeY - char.y; + char.y = 0; + char.height -= diff; + char.yOffset += diff; + } + } + char.x += x; + char.y += y; } ); @@ -76164,7 +76977,7 @@ THIS SOFTWARE. // address: 4, size: 4 bytes flags // address: 8, size: 8 bytes pixel format // address: 16, size: 4 bytes color space - // address: 20, size: 4 bytes channel objType + // address: 20, size: 4 bytes channel type // address: 24, size: 4 bytes height // address: 28, size: 4 bytes width // address: 32, size: 4 bytes depth @@ -76337,6 +77150,10 @@ THIS SOFTWARE. ddsHeader.miscFlag = uintArray[33]; ddsHeader.arraySize = uintArray[34]; ddsHeader.miscFlag = uintArray[35]; + } else if (ddsHeader.formatFourCC === 'DXT5') { + ddsHeader.glExtensionFormat = 0x83F3; + } else if (ddsHeader.formatFourCC === 'DXT3') { + ddsHeader.glExtensionFormat = 0x83F2; } } @@ -76358,8 +77175,8 @@ THIS SOFTWARE. // --------------------------------------- // address: 0, size 12 bytes: Identifier '«KTX 11»\r\n\x1A\n' // address: 12, size 4 bytes: endianness - // address: 16, size 4 bytes: GL objType - // address: 20, size 4 bytes: GL objType size + // address: 16, size 4 bytes: GL type + // address: 20, size 4 bytes: GL type size // address: 24, size 4 bytes: GL format // address: 28, size 4 bytes: GL internal format // address: 32, size 4 bytes: GL base internal format @@ -76389,12 +77206,15 @@ THIS SOFTWARE. byteArray[6] === 0x31 && byteArray[7] === 0xBB && byteArray[8] === 0x0D && byteArray[9] === 0x0A && byteArray[10] === 0x1A && byteArray[11] === 0x0A && - //Check if internal GL format is supported by WebGL + + // Check if internal GL format is supported by WebGL [ // ETC1 0x8D64, + // PVRTC 0x8C00, 0x8C01, 0x8C02, 0x8C03, + // DXTC | S3TC 0x83F0, 0x83F1, 0x83F2, 0x83F3 ].indexOf(glInternalFormat) >= 0) { @@ -76456,7 +77276,7 @@ THIS SOFTWARE. // --------------------------------------- // address: 0, size 4 bytes: for 'PKM ' // address: 4, size 2 bytes: for version - // address: 6, size 2 bytes: for objType + // address: 6, size 2 bytes: for type // address: 8, size 2 bytes: for extended width // address: 10, size 2 bytes: for extended height // address: 12, size 2 bytes: for original width @@ -76594,8 +77414,7 @@ THIS SOFTWARE. for (var key in this.sounds) { this.sounds[key].stop(); } - } - else { + } else { this.sounds[marker].stop(); } @@ -76769,6 +77588,12 @@ THIS SOFTWARE. */ this.allowMultiple = false; + /** + * @property {boolean} playOnce - Marks the Sound for deletion from SoundManager._sounds after playing once - useful for playing several identical sounds overlapping without flooding the sound channel + * @default + */ + this.playOnce = false; + /** * @property {boolean} usingWebAudio - true if this sound is being played with Web Audio. * @readonly @@ -76819,6 +77644,7 @@ THIS SOFTWARE. */ this._removeFromSoundManager = false; + this._sourceId = 0; if (this.usingWebAudio) { this.context = this.game.sound.context; @@ -76826,18 +77652,16 @@ THIS SOFTWARE. if (this.context.createGain === undefined) { this.gainNode = this.context.createGainNode(); - } - else { + } else { this.gainNode = this.context.createGain(); } - this.gainNode.gain.value = volume * this.game.sound.volume; + this.gainNode.gain.value = volume; if (connect) { this.gainNode.connect(this.masterGainNode); } - } - else if (this.usingAudioTag) { + } else if (this.usingAudioTag) { if (this.game.cache.getSound(key) && this.game.cache.isSoundReady(key)) { this._sound = this.game.cache.getSoundData(key); this.totalDuration = 0; @@ -76845,54 +77669,53 @@ THIS SOFTWARE. if (this._sound.duration) { this.totalDuration = this._sound.duration; } - } - else { + } else { this.game.cache.onSoundUnlock.add(this.soundHasUnlocked, this); } } /** - * @property {Phaser.Signal} onDecoded - The onDecoded event is dispatched when the sound has finished decoding (typically for mp3 files) + * @property {Phaser.Signal} onDecoded - The onDecoded event is dispatched when the sound has finished decoding (typically for mp3 files). It passes one argument, this sound. */ this.onDecoded = new Phaser.Signal(); /** - * @property {Phaser.Signal} onPlay - The onPlay event is dispatched each time this sound is played. + * @property {Phaser.Signal} onPlay - The onPlay event is dispatched each time this sound is played or a looping marker is restarted. It passes one argument, this sound. */ this.onPlay = new Phaser.Signal(); /** - * @property {Phaser.Signal} onPause - The onPause event is dispatched when this sound is paused. + * @property {Phaser.Signal} onPause - The onPause event is dispatched when this sound is paused. It passes one argument, this sound. */ this.onPause = new Phaser.Signal(); /** - * @property {Phaser.Signal} onResume - The onResume event is dispatched when this sound is resumed from a paused state. + * @property {Phaser.Signal} onResume - The onResume event is dispatched when this sound is resumed from a paused state. It passes one argument, this sound. */ this.onResume = new Phaser.Signal(); /** - * @property {Phaser.Signal} onLoop - The onLoop event is dispatched when this sound loops during playback. + * @property {Phaser.Signal} onLoop - The onLoop event is dispatched when this sound loops during playback. It passes one argument, this sound. */ this.onLoop = new Phaser.Signal(); /** - * @property {Phaser.Signal} onStop - The onStop event is dispatched when this sound stops playback. + * @property {Phaser.Signal} onStop - The onStop event is dispatched when this sound stops playback or when a non-looping marker completes. It passes two arguments: this sound and any {@link #currentMarker marker} that was playing. */ this.onStop = new Phaser.Signal(); /** - * @property {Phaser.Signal} onMute - The onMute event is dispatched when this sound is muted. + * @property {Phaser.Signal} onMute - The onMute event is dispatched when this sound is muted. It passes one argument, this sound. */ this.onMute = new Phaser.Signal(); /** - * @property {Phaser.Signal} onMarkerComplete - The onMarkerComplete event is dispatched when a marker within this sound completes playback. + * @property {Phaser.Signal} onMarkerComplete - The onMarkerComplete event is dispatched when a marker within this sound completes playback. It passes two arguments: the {@link #currentMarker} and this sound. */ this.onMarkerComplete = new Phaser.Signal(); /** - * @property {Phaser.Signal} onFadeComplete - The onFadeComplete event is dispatched when this sound finishes fading either in or out. + * @property {Phaser.Signal} onFadeComplete - The onFadeComplete event is dispatched when this sound finishes fading either in or out. It passes two arguments: this sound and its current {@link #volume}. */ this.onFadeComplete = new Phaser.Signal(); @@ -77035,24 +77858,22 @@ THIS SOFTWARE. * @protected */ onEndedHandler: function () { - - this._sound.onended = null; + this._removeOnEndedHandler(); this.isPlaying = false; this.currentTime = this.durationMS; this.stop(); + if (this.playOnce) { + this._markedToDelete = true; + this._removeFromSoundManager = true; + } + if (this._markedToDelete) { - if (this.externalNode) { - this._sound.disconnect(this.externalNode); - } - else if (this.gainNode) { - this._sound.disconnect(this.gainNode); - } + this._disconnectSource(); if (this._removeFromSoundManager) { this.game.sound.remove(this); - } - else { + } else { this.markers = {}; this.context = null; this._buffer = null; @@ -77108,36 +77929,30 @@ THIS SOFTWARE. this.currentTime = 0; this.startTime = this.game.time.time; this.isPlaying = true; // play not called again in this case - } - else { + } else { this.onMarkerComplete.dispatch(this.currentMarker, this); this.play(this.currentMarker, 0, this.volume, true, true); } - } - else { + } else { // Stop if we're using an audio marker, otherwise we let onended handle it if (this.currentMarker !== '') { this.stop(); } } - } - else { - if (this.loop) { - this.onLoop.dispatch(this); + } else if (this.loop) { + this.onLoop.dispatch(this); - if (this.currentMarker === '') { - this.currentTime = 0; - this.startTime = this.game.time.time; - } - - // Gets reset by the play function - this.isPlaying = false; - - this.play(this.currentMarker, 0, this.volume, true, true); - } - else { - this.stop(); + if (this.currentMarker === '') { + this.currentTime = 0; + this.startTime = this.game.time.time; } + + // Gets reset by the play function + this.isPlaying = false; + + this.play(this.currentMarker, 0, this.volume, true, true); + } else { + this.stop(); } } } @@ -77183,25 +77998,8 @@ THIS SOFTWARE. if (this._sound && this.isPlaying && !this.allowMultiple && (this.override || forceRestart)) { if (this.usingWebAudio) { - if (this._sound.stop === undefined) { - this._sound.noteOff(0); - } - else { - try { - this._sound.stop(0); - } - catch (e) { - } - } - - if (this.externalNode) { - this._sound.disconnect(this.externalNode); - } - else if (this.gainNode) { - this._sound.disconnect(this.gainNode); - } - } - else if (this.usingAudioTag) { + this._stopSourceAndDisconnect(); + } else if (this.usingAudioTag) { this._sound.pause(); this._sound.currentTime = 0; } @@ -77238,13 +78036,11 @@ THIS SOFTWARE. this._tempPosition = this.position; this._tempVolume = this.volume; this._tempLoop = this.loop; - } - else { - console.warn("Phaser.Sound.play: audio marker " + marker + " doesn't exist"); + } else { + console.warn('Phaser.Sound.play: audio marker ' + marker + ' doesn\'t exist'); return this; } - } - else { + } else { position = position || 0; if (volume === undefined) { @@ -77269,24 +78065,14 @@ THIS SOFTWARE. if (this.usingWebAudio) { // Does the sound need decoding? if (this.game.cache.isSoundDecoded(this.key)) { - this._sound = this.context.createBufferSource(); - - if (this.externalNode) { - this._sound.connect(this.externalNode); - } - else { - this._sound.connect(this.gainNode); - } - - this._buffer = this.game.cache.getSoundData(this.key); - this._sound.buffer = this._buffer; + this._createSourceAndConnect(); if (this.loop && marker === '') { this._sound.loop = true; } if (!this.loop && marker === '') { - this._sound.onended = this.onEndedHandler.bind(this); + this._addOnEndedHandler(); } this.totalDuration = this._sound.buffer.duration; @@ -77296,70 +78082,68 @@ THIS SOFTWARE. this.durationMS = Math.ceil(this.totalDuration * 1000); } - // Useful to cache this somewhere perhaps? - if (this._sound.start === undefined) { - this._sound.noteGrainOn(0, this.position, this.duration); - } - else { - if (this.loop && marker === '') { - this._sound.start(0, 0); - } - else { - this._sound.start(0, this.position, this.duration); - } + if (this.loop && marker === '') { + this._startSource(0, 0); + } else { + this._startSource(0, this.position, this.duration); } this.isPlaying = true; + this.paused = false; this.startTime = this.game.time.time; this.currentTime = 0; this.stopTime = this.startTime + this.durationMS; this.onPlay.dispatch(this); - } - else { + } else { this.pendingPlayback = true; if (this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).isDecoding === false) { this.game.sound.decode(this.key, this); } } + } else if (this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).locked) { + this.game.cache.reloadSound(this.key); + this.pendingPlayback = true; + } else if (this._sound && (this.game.device.cocoonJS || this._sound.readyState === 4)) { + this._sound.play(); + + this._sound.loop = this.loop; + + // This doesn't become available until you call play(), wonderful ... + this.totalDuration = this._sound.duration; + + if (this.duration === 0) { + this.duration = this.totalDuration; + this.durationMS = this.totalDuration * 1000; + } + + this._sound.currentTime = this.position; + this._sound.muted = this._muted; + + if (this._muted || this.game.sound.mute) { + this._sound.volume = 0; + } else { + this._sound.volume = this._volume; + } + + this.isPlaying = true; + this.paused = false; + this.startTime = this.game.time.time; + this.currentTime = 0; + this.stopTime = this.startTime + this.durationMS; + + this.onPlay.dispatch(this); + } else { + this.pendingPlayback = true; } - else { - if (this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).locked) { - this.game.cache.reloadSound(this.key); - this.pendingPlayback = true; + + if (this.playOnce) { + if (this.loop) { + console.warn('Phaser.Sound.play: audio clip ' + this.name + ' cannot be deleted while looping.'); } - else { - if (this._sound && (this.game.device.cocoonJS || this._sound.readyState === 4)) { - this._sound.play(); - // This doesn't become available until you call play(), wonderful ... - this.totalDuration = this._sound.duration; - if (this.duration === 0) { - this.duration = this.totalDuration; - this.durationMS = this.totalDuration * 1000; - } - - this._sound.currentTime = this.position; - this._sound.muted = this._muted; - - if (this._muted || this.game.sound.mute) { - this._sound.volume = 0; - } - else { - this._sound.volume = this._volume; - } - - this.isPlaying = true; - this.startTime = this.game.time.time; - this.currentTime = 0; - this.stopTime = this.startTime + this.durationMS; - - this.onPlay.dispatch(this); - } - else { - this.pendingPlayback = true; - } - } + this._markedToDelete = true; + this._removeFromSoundManager = true; } return this; @@ -77395,7 +78179,7 @@ THIS SOFTWARE. */ pause: function () { - if (this.isPlaying && this._sound) { + if (this.isPlaying) { this.paused = true; this.pausedPosition = this.currentTime; this.pausedTime = this.game.time.time; @@ -77413,50 +78197,28 @@ THIS SOFTWARE. */ resume: function () { - if (this.paused && this._sound) { + if (this.paused) { if (this.usingWebAudio) { var p = Math.max(0, this.position + (this.pausedPosition / 1000)); - this._sound = this.context.createBufferSource(); - this._sound.buffer = this._buffer; + this._createSourceAndConnect(); - if (this.externalNode) { - this._sound.connect(this.externalNode); - } - else { - this._sound.connect(this.gainNode); - } - - if (this.loop) { + if (this.currentMarker === '') { + if (this.loop) { this._sound.loop = true; - } - - if (!this.loop && this.currentMarker === '') { - this._sound.onended = this.onEndedHandler.bind(this); + } else { + this._addOnEndedHandler(); + } } var duration = this.duration - (this.pausedPosition / 1000); - if (this._sound.start === undefined) { - this._sound.noteGrainOn(0, p, duration); - //this._sound.noteOn(0); // the zero is vitally important, crashes iOS6 without it + if (this.loop && this.currentMarker === '') { + this._startSource(0, p); + } else { + this._startSource(0, p, duration); } - else { - if (this.loop && this.game.device.chrome) { - // Handle chrome bug: https://code.google.com/p/chromium/issues/detail?id=457099 - if (this.game.device.chromeVersion === 42) { - this._sound.start(0); - } - else { - this._sound.start(0, p); - } - } - else { - this._sound.start(0, p, duration); - } - } - } - else { + } else { this._sound.currentTime = this._tempPause; this._sound.play(); } @@ -77478,27 +78240,9 @@ THIS SOFTWARE. if (this.isPlaying && this._sound) { if (this.usingWebAudio) { - if (this._sound.stop === undefined) { - this._sound.noteOff(0); - } - else { - try { - this._sound.stop(0); - } - catch (e) { - // Thanks Android 4.4 - } - } + this._stopSourceAndDisconnect(); - if (this.externalNode) { - this._sound.disconnect(this.externalNode); - } - else if (this.gainNode) { - this._sound.disconnect(this.gainNode); - } - - } - else if (this.usingAudioTag) { + } else if (this.usingAudioTag) { this._sound.pause(); this._sound.currentTime = 0; } @@ -77590,7 +78334,7 @@ THIS SOFTWARE. } if (volume === undefined) { - console.warn("Phaser.Sound.fadeTo: No Volume Specified."); + console.warn('Phaser.Sound.fadeTo: No Volume Specified.'); return; } @@ -77656,8 +78400,7 @@ THIS SOFTWARE. if (remove) { this.game.sound.remove(this); - } - else { + } else { this.markers = {}; this.context = null; this._buffer = null; @@ -77672,6 +78415,57 @@ THIS SOFTWARE. this.onMute.dispose(); this.onMarkerComplete.dispose(); } + }, + + _createSourceAndConnect: function () { + + this._sound = this.context.createBufferSource(); + this._sound.connect(this.externalNode || this.gainNode); + this._buffer = this.game.cache.getSoundData(this.key); + this._sound.buffer = this._buffer; + this._sourceId++; + + }, + + _disconnectSource: function () { + + this._sound.disconnect(this.externalNode || this.gainNode); + + }, + + _startSource: function (when, offset, duration) { + + this._sound.start(when || 0, offset, duration); + + }, + + _stopSourceAndDisconnect: function () { + + // Firefox calls onended() after _sound.stop(). Chrome and Safari do not. (#530) + this._removeOnEndedHandler(); + + try { + this._sound.stop(0); + } catch (e) { + // Thanks Android 4.4 + } + + this._disconnectSource(); + + this._sound = null; + + }, + + _addOnEndedHandler: function () { + + this._sound.onended = this.onEndedHandler.bind(this); + + }, + + _removeOnEndedHandler: function () { + + this._sound.onended = null; + } }; @@ -77683,7 +78477,7 @@ THIS SOFTWARE. * @property {boolean} isDecoding - Returns true if the sound file is still decoding. * @readonly */ - Object.defineProperty(Phaser.Sound.prototype, "isDecoding", { + Object.defineProperty(Phaser.Sound.prototype, 'isDecoding', { get: function () { return this.game.cache.getSound(this.key).isDecoding; @@ -77696,7 +78490,7 @@ THIS SOFTWARE. * @property {boolean} isDecoded - Returns true if the sound file has decoded. * @readonly */ - Object.defineProperty(Phaser.Sound.prototype, "isDecoded", { + Object.defineProperty(Phaser.Sound.prototype, 'isDecoded', { get: function () { return this.game.cache.isSoundDecoded(this.key); @@ -77708,7 +78502,7 @@ THIS SOFTWARE. * @name Phaser.Sound#mute * @property {boolean} mute - Gets or sets the muted state of this sound. */ - Object.defineProperty(Phaser.Sound.prototype, "mute", { + Object.defineProperty(Phaser.Sound.prototype, 'mute', { get: function () { @@ -77730,18 +78524,15 @@ THIS SOFTWARE. if (this.usingWebAudio) { this.gainNode.gain.value = 0; - } - else if (this.usingAudioTag && this._sound) { + } else if (this.usingAudioTag && this._sound) { this._sound.volume = 0; } - } - else { + } else { this._muted = false; if (this.usingWebAudio) { this.gainNode.gain.value = this._muteVolume; - } - else if (this.usingAudioTag && this._sound) { + } else if (this.usingAudioTag && this._sound) { this._sound.volume = this._muteVolume; } } @@ -77756,7 +78547,7 @@ THIS SOFTWARE. * @name Phaser.Sound#volume * @property {number} volume - Gets or sets the volume of this sound, a value between 0 and 1. The value given is clamped to the range 0 to 1. */ - Object.defineProperty(Phaser.Sound.prototype, "volume", { + Object.defineProperty(Phaser.Sound.prototype, 'volume', { get: function () { return this._volume; @@ -77779,14 +78570,21 @@ THIS SOFTWARE. if (this.usingWebAudio) { this.gainNode.gain.value = value; - } - else if (this.usingAudioTag && this._sound) { + } else if (this.usingAudioTag && this._sound) { this._sound.volume = this._globalVolume * value; } } }); + Object.defineProperty(Phaser.Sound.prototype, 'sourceId', { + + get: function () { + return this._sound ? this._sourceId : null; + } + + }); + /** * @author Richard Davey * @copyright 2016 Photon Storm Ltd. @@ -77796,7 +78594,7 @@ THIS SOFTWARE. /** * The Sound Manager is responsible for playing back audio via either the Legacy HTML Audio tag or via Web Audio if the browser supports it. * Note: On Firefox 25+ on Linux if you have media.gstreamer disabled in about:config then it cannot play back mp3 or m4a files. - * The audio file objType and the encoding of those files are extremely important. Not all browsers can play all audio formats. + * The audio file type and the encoding of those files are extremely important. Not all browsers can play all audio formats. * There is a good guide to what's supported here: http://hpr.dogphilosophy.net/test/ * * If you are reloading a Phaser Game on a page that never properly refreshes (such as in an AngularJS project) then you will quickly run out @@ -77842,6 +78640,13 @@ THIS SOFTWARE. */ this.onUnMute = new Phaser.Signal(); + /** + * This signal is dispatched when the SoundManager is touch-unlocked. + * If the device doesn't {@link Phaser.Device.needsTouchUnlock need touch-unlocking}, the signal won't be dispatched. + * @property {Phaser.Signal} onTouchUnlock + */ + this.onTouchUnlock = new Phaser.Signal(); + /** * @property {AudioContext} context - The AudioContext being used for playback. * @default @@ -77952,6 +78757,12 @@ THIS SOFTWARE. */ this._watchContext = null; + /** + * @property {function} _resumeWebAudioOnClick - Bound 'click' handler. Added in boot(), if necessary. + * @private + */ + this._resumeWebAudioOnClick = this._resumeWebAudioOnClick.bind(this); + }; Phaser.SoundManager.prototype = { @@ -77963,82 +78774,86 @@ THIS SOFTWARE. */ boot: function () { - if (this.game.device.iOS && this.game.device.webAudio === false) { + var device = this.game.device; + var PhaserGlobal = window.PhaserGlobal; + + if (device.iOS && device.webAudio === false) { this.channels = 1; } // PhaserGlobal overrides - if (window['PhaserGlobal']) { + if (PhaserGlobal) { // Check to see if all audio playback is disabled (i.e. handled by a 3rd party class) - if (window['PhaserGlobal'].disableAudio === true) { + if (PhaserGlobal.disableAudio === true) { this.noAudio = true; this.touchLocked = false; return; } // Check if the Web Audio API is disabled (for testing Audio Tag playback during development) - if (window['PhaserGlobal'].disableWebAudio === true) { + if (PhaserGlobal.disableWebAudio === true) { this.usingAudioTag = true; this.touchLocked = false; return; } } - if (window['PhaserGlobal'] && window['PhaserGlobal'].audioContext) { - this.context = window['PhaserGlobal'].audioContext; - } - else { - if (!!window['AudioContext']) { + if (PhaserGlobal && PhaserGlobal.audioContext) { + this.context = PhaserGlobal.audioContext; + } else { + var AudioContext = window.AudioContext || window.webkitAudioContext; + + if (AudioContext) { try { - this.context = new window['AudioContext'](); - } catch (error) { - this.context = null; - this.usingWebAudio = false; - this.touchLocked = false; - } - } - else if (!!window['webkitAudioContext']) { - try { - this.context = new window['webkitAudioContext'](); + this.context = new AudioContext(); } catch (error) { this.context = null; this.usingWebAudio = false; this.touchLocked = false; + + console.warn(error); } } } if (this.context === null) { // No Web Audio support - how about legacy Audio? - if (window['Audio'] === undefined) { + if (window.Audio === undefined) { this.noAudio = true; return; - } - else { + } else { this.usingAudioTag = true; } - } - else { + } else { this.usingWebAudio = true; if (this.context.createGain === undefined) { this.masterGain = this.context.createGainNode(); - } - else { + } else { this.masterGain = this.context.createGain(); } this.masterGain.gain.value = 1; this.masterGain.connect(this.context.destination); + + // A suspended context is actually normal (momentarily) in Firefox. + // In that case the input handler will do nothing, which is fine. + if (this.context.state === 'suspended') { + this.game.canvas.addEventListener('click', this._resumeWebAudioOnClick); + } } if (!this.noAudio) { // On mobile we need a native touch event before we can play anything, so capture it here - if (this.game.device.needsTouchUnlock()) { + if (device.needsTouchUnlock()) { this.setTouchLock(); } } + if (this.usingWebAudio && device.chrome && device.chromeVersion <= 65) { + console.log('A "GainNode.gain.value setter smoothing is deprecated" notice in Chrome is normal. '); + } + }, /** @@ -78049,21 +78864,45 @@ THIS SOFTWARE. */ setTouchLock: function () { - if (this.noAudio || (window['PhaserGlobal'] && window['PhaserGlobal'].disableAudio === true)) { + if (this.noAudio || (window.PhaserGlobal && window.PhaserGlobal.disableAudio === true)) { return; } - if (this.game.device.iOSVersion > 8 || this.game.device.chromeVersion >= 55) { - this.game.input.addTouchLockCallback(this.unlock, this, true); - } - else { - this.game.input.addTouchLockCallback(this.unlock, this); - } + this.game.input.addTouchLockCallback(this.unlock, this, true); this.touchLocked = true; }, + /** + * Turns off {@link #touchLocked} and dispatches {@link #onTouchUnlock}. + * + * @method Phaser.SoundManager#setTouchUnlock + * @private + */ + setTouchUnlock: function () { + + this.touchLocked = false; + this._unlockSource = null; + this.onTouchUnlock.dispatch(); + + }, + + /** + * Try to resume a suspended WebAudio context. + * + * If the context isn't suspended, or if WebAudio isn't in use, nothing is done. + * + * @return {?Promise} - A Promise, if resume was called. See {@link https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/resume}. + */ + resumeWebAudio: function () { + + if (this.usingWebAudio && this.context.state === 'suspended') { + return this.context.resume(); + } + + }, + /** * Enables the audio, usually after the first touch. * @@ -78078,29 +78917,31 @@ THIS SOFTWARE. // Global override (mostly for Audio Tag testing) if (this.usingAudioTag) { - this.touchLocked = false; - this._unlockSource = null; - } - else if (this.usingWebAudio) { + this.setTouchUnlock(); + } else if (this.usingWebAudio) { // Create empty buffer and play it - // The SoundManager.update loop captures the state of it and then resets touchLocked to false + // The onended handler will set touchLocked to false var buffer = this.context.createBuffer(1, 1, 22050); this._unlockSource = this.context.createBufferSource(); this._unlockSource.buffer = buffer; this._unlockSource.connect(this.context.destination); + var _this = this; + + this._unlockSource.onended = function unlockSourceOnEndedHandler() { + _this.setTouchUnlock(); + _this.resumeWebAudio(); + }; + if (this._unlockSource.start === undefined) { this._unlockSource.noteOn(0); - } - else { + } else { this._unlockSource.start(0); } - //This fixes locked audio in Chrome > 55 cross origin iframes - if (this._unlockSource.context.state === 'suspended') { - this._unlockSource.context.resume(); - } + // This fixes locked audio in Chrome > 55 cross origin iframes? + this.resumeWebAudio(); } // We can remove the event because we've done what we needed (started the unlock sound playing) @@ -78192,9 +79033,8 @@ THIS SOFTWARE. _this.onSoundDecode.dispatch(key, sound); } }); - } - catch (e) { - } + } catch (e) { + } // eslint-disable-line no-empty } } @@ -78224,8 +79064,7 @@ THIS SOFTWARE. if (!this.game.cache.isSoundDecoded(files[i].key)) { this._watchList.add(files[i].key); } - } - else if (!this.game.cache.isSoundDecoded(files[i])) { + } else if (!this.game.cache.isSoundDecoded(files[i])) { this._watchList.add(files[i]); } } @@ -78234,8 +79073,7 @@ THIS SOFTWARE. if (this._watchList.total === 0) { this._watching = false; callback.call(callbackContext); - } - else { + } else { this._watching = true; this._watchCallback = callback; this._watchContext = callbackContext; @@ -78255,11 +79093,6 @@ THIS SOFTWARE. return; } - if (this.touchLocked && this._unlockSource !== null && (this._unlockSource.playbackState === this._unlockSource.PLAYING_STATE || this._unlockSource.playbackState === this._unlockSource.FINISHED_STATE)) { - this.touchLocked = false; - this._unlockSource = null; - } - for (var i = 0; i < this._sounds.length; i++) { this._sounds[i].update(); } @@ -78351,6 +79184,26 @@ THIS SOFTWARE. }, + /** + * Removes all Sounds from the SoundManager. + * The removed Sounds are destroyed before removal. + * + * @method Phaser.SoundManager#removeAll + */ + removeAll: function () { + + this.stopAll(); + + for (var i = 0; i < this._sounds.length; i++) { + if (this._sounds[i]) { + this._sounds[i].destroy(); + } + } + + this._sounds.length = 0; + + }, + /** * Removes all Sounds from the SoundManager that have an asset key matching the given value. * The removed Sounds are destroyed before removal. @@ -78465,30 +79318,27 @@ THIS SOFTWARE. */ destroy: function () { - this.stopAll(); - - for (var i = 0; i < this._sounds.length; i++) { - if (this._sounds[i]) { - this._sounds[i].destroy(); - } - } - - this._sounds = []; + this.removeAll(); this.onSoundDecode.dispose(); + this.game.canvas.removeEventListener('click', this._resumeWebAudioOnClick); + if (this.context) { - if (window['PhaserGlobal']) { + if (window.PhaserGlobal) { // Store this in the PhaserGlobal window var, if set, to allow for re-use if the game is created again without the page refreshing - window['PhaserGlobal'].audioContext = this.context; - } - else { - if (this.context.close) { - this.context.close(); - } + window.PhaserGlobal.audioContext = this.context; + } else if (this.context.close) { + this.context.close(); } } + }, + + _resumeWebAudioOnClick: function () { + this.resumeWebAudio(); + + this.game.canvas.removeEventListener('click', this._resumeWebAudioOnClick); } }; @@ -78499,7 +79349,7 @@ THIS SOFTWARE. * @name Phaser.SoundManager#mute * @property {boolean} mute - Gets or sets the muted state of the SoundManager. This effects all sounds in the game. */ - Object.defineProperty(Phaser.SoundManager.prototype, "mute", { + Object.defineProperty(Phaser.SoundManager.prototype, 'mute', { get: function () { @@ -78518,8 +79368,7 @@ THIS SOFTWARE. this._codeMuted = true; this.setMute(); - } - else { + } else { if (!this._muted) { return; } @@ -78535,7 +79384,7 @@ THIS SOFTWARE. * @name Phaser.SoundManager#volume * @property {number} volume - Gets or sets the global volume of the SoundManager, a value between 0 and 1. The value given is clamped to the range 0 to 1. */ - Object.defineProperty(Phaser.SoundManager.prototype, "volume", { + Object.defineProperty(Phaser.SoundManager.prototype, 'volume', { get: function () { @@ -78547,8 +79396,7 @@ THIS SOFTWARE. if (value < 0) { value = 0; - } - else if (value > 1) { + } else if (value > 1) { value = 1; } @@ -78557,8 +79405,7 @@ THIS SOFTWARE. if (this.usingWebAudio) { this.masterGain.gain.value = value; - } - else { + } else { // Loop through the sound cache and change the volume of all html audio tags for (var i = 0; i < this._sounds.length; i++) { if (this._sounds[i].usingAudioTag) { @@ -79030,8 +79877,9 @@ THIS SOFTWARE. this._fullScreenScaleMode = Phaser.ScaleManager.NO_SCALE; /** - * If the parent container of the Game canvas is the browser window itself (i.e. document.body), - * rather than another div, this should set to `true`. + * True if the the browser window (instead of the display canvas's DOM parent) should be used as the bounding parent. + * + * This is set automatically based on the `parent` argument passed to {@link Phaser.Game}. * * The {@link #parentNode} property is generally ignored while this is in effect. * @@ -79043,6 +79891,8 @@ THIS SOFTWARE. * The _original_ DOM element for the parent of the Display canvas. * This may be different in fullscreen - see {@link #createFullScreenTarget}. * + * This is set automatically based on the `parent` argument passed to {@link Phaser.Game}. + * * This should only be changed after moving the Game canvas to a different DOM parent. * * @property {?DOMElement} parentNode @@ -79202,7 +80052,7 @@ THIS SOFTWARE. * A scale mode that stretches content to fill all available space - see {@link Phaser.ScaleManager#scaleMode scaleMode}. * * @constant - * @objType {integer} + * @type {integer} */ Phaser.ScaleManager.EXACT_FIT = 0; @@ -79210,7 +80060,7 @@ THIS SOFTWARE. * A scale mode that prevents any scaling - see {@link Phaser.ScaleManager#scaleMode scaleMode}. * * @constant - * @objType {integer} + * @type {integer} */ Phaser.ScaleManager.NO_SCALE = 1; @@ -79218,7 +80068,7 @@ THIS SOFTWARE. * A scale mode that shows the entire game while maintaining proportions - see {@link Phaser.ScaleManager#scaleMode scaleMode}. * * @constant - * @objType {integer} + * @type {integer} */ Phaser.ScaleManager.SHOW_ALL = 2; @@ -79226,7 +80076,7 @@ THIS SOFTWARE. * A scale mode that causes the Game size to change - see {@link Phaser.ScaleManager#scaleMode scaleMode}. * * @constant - * @objType {integer} + * @type {integer} */ Phaser.ScaleManager.RESIZE = 3; @@ -79234,10 +80084,24 @@ THIS SOFTWARE. * A scale mode that allows a custom scale factor - see {@link Phaser.ScaleManager#scaleMode scaleMode}. * * @constant - * @objType {integer} + * @type {integer} */ Phaser.ScaleManager.USER_SCALE = 4; + /** + * Names of the scale modes, indexed by value. + * + * @constant + * @type {string[]} + */ + Phaser.ScaleManager.MODES = [ + 'EXACT_FIT', + 'NO_SCALE', + 'SHOW_ALL', + 'RESIZE', + 'USER_SCALE' + ]; + Phaser.ScaleManager.prototype = { /** @@ -79258,8 +80122,7 @@ THIS SOFTWARE. if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { if (this.game.device.android && !this.game.device.chrome) { compat.scrollTo = new Phaser.Point(0, 1); - } - else { + } else { compat.scrollTo = new Phaser.Point(0, 0); } } @@ -79267,8 +80130,7 @@ THIS SOFTWARE. if (this.game.device.desktop) { compat.orientationFallback = 'screen'; compat.clickTrampoline = 'when-not-mouse'; - } - else { + } else { compat.orientationFallback = ''; compat.clickTrampoline = ''; } @@ -79344,21 +80206,27 @@ THIS SOFTWARE. */ parseConfig: function (config) { - if (config['scaleMode'] !== undefined) { + if (config.scaleMode !== undefined) { if (this._booted) { - this.scaleMode = config['scaleMode']; - } - else { - this._pendingScaleMode = config['scaleMode']; + this.scaleMode = config.scaleMode; + } else { + this._pendingScaleMode = config.scaleMode; } } - if (config['fullScreenScaleMode'] !== undefined) { - this.fullScreenScaleMode = config['fullScreenScaleMode']; + if (config.fullScreenScaleMode !== undefined) { + this.fullScreenScaleMode = config.fullScreenScaleMode; } - if (config['fullScreenTarget']) { - this.fullScreenTarget = config['fullScreenTarget']; + if (config.fullScreenTarget) { + this.fullScreenTarget = config.fullScreenTarget; + } + + this.pageAlignHorizontally = config.alignH || false; + this.pageAlignVertically = config.alignV || false; + + if (config.scaleH && config.scaleV) { + this.setUserScale(config.scaleH, config.scaleV, config.trimH, config.trimV); } }, @@ -79382,8 +80250,7 @@ THIS SOFTWARE. if (typeof this.game.parent === 'string') { // hopefully an element ID target = document.getElementById(this.game.parent); - } - else if (this.game.parent && this.game.parent.nodeType === 1) { + } else if (this.game.parent && this.game.parent.nodeType === 1) { // quick test for a HTMLelement target = this.game.parent; } @@ -79399,12 +80266,11 @@ THIS SOFTWARE. rect.height = this.dom.visualBounds.height; this.offset.set(0, 0); - } - else { + } else { this.parentNode = target; this.parentIsWindow = false; - this.getParentBounds(this._parentBounds); + this.getParentBounds(this._parentBounds, this.parentNode); rect.width = this._parentBounds.width; rect.height = this._parentBounds.height; @@ -79417,8 +80283,7 @@ THIS SOFTWARE. if (typeof width === 'number') { newWidth = width; - } - else { + } else { // Percentage based this.parentScaleFactor.x = parseInt(width, 10) / 100; newWidth = rect.width * this.parentScaleFactor.x; @@ -79426,8 +80291,7 @@ THIS SOFTWARE. if (typeof height === 'number') { newHeight = height; - } - else { + } else { // Percentage based this.parentScaleFactor.y = parseInt(height, 10) / 100; newHeight = rect.height * this.parentScaleFactor.y; @@ -79787,11 +80651,9 @@ THIS SOFTWARE. if (orientation === 'portrait-primary' || orientation === 'portrait-secondary') { return 'portrait'; - } - else if (orientation === 'landscape-primary' || orientation === 'landscape-secondary') { + } else if (orientation === 'landscape-primary' || orientation === 'landscape-secondary') { return 'landscape'; - } - else { + } else { return null; } @@ -79820,8 +80682,7 @@ THIS SOFTWARE. if (correctnessChanged) { if (this.incorrectOrientation) { this.enterIncorrectOrientation.dispatch(); - } - else { + } else { this.leaveIncorrectOrientation.dispatch(); } } @@ -79932,33 +80793,26 @@ THIS SOFTWARE. if (this.incorrectOrientation) { this.setMaximum(); - } - else { - if (scaleMode === Phaser.ScaleManager.EXACT_FIT) { - this.setExactFit(); - } - else if (scaleMode === Phaser.ScaleManager.SHOW_ALL) { - if (!this.isFullScreen && this.boundingParent && - this.compatibility.canExpandParent) { - // Try to expand parent out, but choosing maximizing dimensions. - // Then select minimize dimensions which should then honor parent - // maximum bound applications. - this.setShowAll(true); - this.resetCanvas(); - this.setShowAll(); - } - else { - this.setShowAll(); - } - } - else if (scaleMode === Phaser.ScaleManager.NO_SCALE) { - this.width = this.game.width; - this.height = this.game.height; - } - else if (scaleMode === Phaser.ScaleManager.USER_SCALE) { - this.width = (this.game.width * this._userScaleFactor.x) - this._userScaleTrim.x; - this.height = (this.game.height * this._userScaleFactor.y) - this._userScaleTrim.y; + } else if (scaleMode === Phaser.ScaleManager.EXACT_FIT) { + this.setExactFit(); + } else if (scaleMode === Phaser.ScaleManager.SHOW_ALL) { + if (!this.isFullScreen && this.boundingParent && + this.compatibility.canExpandParent) { + // Try to expand parent out, but choosing maximizing dimensions. + // Then select minimize dimensions which should then honor parent + // maximum bound applications. + this.setShowAll(true); + this.resetCanvas(); + this.setShowAll(); + } else { + this.setShowAll(); } + } else if (scaleMode === Phaser.ScaleManager.NO_SCALE) { + this.width = this.game.width; + this.height = this.game.height; + } else if (scaleMode === Phaser.ScaleManager.USER_SCALE) { + this.width = (this.game.width * this._userScaleFactor.x) - this._userScaleTrim.x; + this.height = (this.game.height * this._userScaleFactor.y) - this._userScaleTrim.y; } if (!this.compatibility.canExpandParent && @@ -79990,19 +80844,19 @@ THIS SOFTWARE. * @method Phaser.ScaleManager#getParentBounds * @protected * @param {Phaser.Rectangle} [target=(new Rectangle)] - The rectangle to update; a new one is created as needed. + * @param {HTMLElement} [parent] - Ignore {@link #boundingParent} and use this node instead. * @return {Phaser.Rectangle} The established parent bounds. */ - getParentBounds: function (target) { + getParentBounds: function (target, parent) { var bounds = target || new Phaser.Rectangle(); - var parentNode = this.boundingParent; + var parentNode = parent || this.boundingParent; var visualBounds = this.dom.visualBounds; var layoutBounds = this.dom.layoutBounds; if (!parentNode) { bounds.setTo(0, 0, visualBounds.width, visualBounds.height); - } - else { + } else { // Ref. http://msdn.microsoft.com/en-us/library/hh781509(v=vs.85).aspx for getBoundingClientRect var clientRect = parentNode.getBoundingClientRect(); var parentRect = (parentNode.offsetParent) ? parentNode.offsetParent.getBoundingClientRect() : parentNode.getBoundingClientRect(); @@ -80156,8 +81010,7 @@ THIS SOFTWARE. if (!this.compatibility.noMargins) { if (this.isFullScreen && this._createdFullScreenTarget) { this.alignCanvas(true, true); - } - else { + } else { this.alignCanvas(this.pageAlignHorizontally, this.pageAlignVertically); } } @@ -80259,8 +81112,7 @@ THIS SOFTWARE. if (expanding) { multiplier = Math.max((height / this.game.height), (width / this.game.width)); - } - else { + } else { multiplier = Math.min((height / this.game.height), (width / this.game.width)); } @@ -80367,7 +81219,7 @@ THIS SOFTWARE. if (input.activePointer && input.activePointer !== input.mousePointer && (allowTrampoline || allowTrampoline !== false)) { - input.activePointer.addClickTrampoline("startFullScreen", this.startFullScreen, this, [antialias, false]); + input.activePointer.addClickTrampoline('startFullScreen', this.startFullScreen, this, [antialias, false]); return; } } @@ -80385,9 +81237,7 @@ THIS SOFTWARE. fsTarget = this._createdFullScreenTarget; } - var initData = { - targetElement: fsTarget - }; + var initData = {targetElement: fsTarget}; this.hasPhaserSetFullScreen = true; @@ -80404,8 +81254,7 @@ THIS SOFTWARE. if (this.game.device.fullscreenKeyboard) { fsTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT); - } - else { + } else { fsTarget[this.game.device.requestFullscreen](); } @@ -80483,8 +81332,7 @@ THIS SOFTWARE. fsTarget.style.height = '100%'; } } - } - else { + } else { // Have restore information if (this._fullScreenRestore) { fsTarget.style.width = this._fullScreenRestore.targetWidth; @@ -80516,8 +81364,7 @@ THIS SOFTWARE. this.updateLayout(); this.queueUpdate(true); - } - else { + } else { this.prepScreenMode(false); this.cleanupCreatedTarget(); @@ -80577,7 +81424,7 @@ THIS SOFTWARE. letterBox = false; } - if (!sprite || !sprite['scale']) { + if (!sprite || !sprite.scale) { return sprite; } @@ -80598,16 +81445,14 @@ THIS SOFTWARE. if (scaleOnWidth) { scaleOnWidth = letterBox; - } - else { + } else { scaleOnWidth = !letterBox; } if (scaleOnWidth) { sprite.width = Math.floor(scaleX1); sprite.height = Math.floor(scaleY1); - } - else { + } else { sprite.width = Math.floor(scaleX2); sprite.height = Math.floor(scaleY2); } @@ -80662,7 +81507,7 @@ THIS SOFTWARE. * @property {?DOMElement} boundingParent * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "boundingParent", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'boundingParent', { get: function () { @@ -80716,7 +81561,7 @@ THIS SOFTWARE. * @name Phaser.ScaleManager#scaleMode * @property {integer} scaleMode */ - Object.defineProperty(Phaser.ScaleManager.prototype, "scaleMode", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'scaleMode', { get: function () { @@ -80749,7 +81594,7 @@ THIS SOFTWARE. * @name Phaser.ScaleManager#fullScreenScaleMode * @property {integer} fullScreenScaleMode */ - Object.defineProperty(Phaser.ScaleManager.prototype, "fullScreenScaleMode", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'fullScreenScaleMode', { get: function () { @@ -80767,8 +81612,7 @@ THIS SOFTWARE. this.prepScreenMode(true); this.queueUpdate(true); - } - else { + } else { this._fullScreenScaleMode = value; } } @@ -80789,7 +81633,7 @@ THIS SOFTWARE. * @protected * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "currentScaleMode", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'currentScaleMode', { get: function () { @@ -80811,7 +81655,7 @@ THIS SOFTWARE. * @property {boolean} pageAlignHorizontally * @default false */ - Object.defineProperty(Phaser.ScaleManager.prototype, "pageAlignHorizontally", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'pageAlignHorizontally', { get: function () { @@ -80849,7 +81693,7 @@ THIS SOFTWARE. * @property {boolean} pageAlignVertically * @default false */ - Object.defineProperty(Phaser.ScaleManager.prototype, "pageAlignVertically", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'pageAlignVertically', { get: function () { @@ -80874,13 +81718,13 @@ THIS SOFTWARE. * @property {boolean} isFullScreen * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "isFullScreen", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'isFullScreen', { get: function () { - return !!(document['fullscreenElement'] || - document['webkitFullscreenElement'] || - document['mozFullScreenElement'] || - document['msFullscreenElement']); + return !!(document.fullscreenElement || + document.webkitFullscreenElement || + document.mozFullScreenElement || + document.msFullscreenElement); } }); @@ -80892,7 +81736,7 @@ THIS SOFTWARE. * @property {boolean} isPortrait * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'isPortrait', { get: function () { return this.classifyOrientation(this.screenOrientation) === 'portrait'; @@ -80907,7 +81751,7 @@ THIS SOFTWARE. * @property {boolean} isLandscape * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "isLandscape", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'isLandscape', { get: function () { return this.classifyOrientation(this.screenOrientation) === 'landscape'; @@ -80925,7 +81769,7 @@ THIS SOFTWARE. * @property {boolean} isGamePortrait * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "isGamePortrait", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'isGamePortrait', { get: function () { return (this.height > this.width); @@ -80943,7 +81787,7 @@ THIS SOFTWARE. * @property {boolean} isGameLandscape * @readonly */ - Object.defineProperty(Phaser.ScaleManager.prototype, "isGameLandscape", { + Object.defineProperty(Phaser.ScaleManager.prototype, 'isGameLandscape', { get: function () { return (this.width > this.height); @@ -80961,7 +81805,7 @@ THIS SOFTWARE. * A collection of methods for displaying debug information about game objects. * * If your game is running in Canvas mode, then you should invoke all of the Debug methods from - * your games `render` function. This is because they are drawn directly onto the game canvas + * your game's `render` function. This is because they are drawn directly onto the game canvas * itself, so if you call any debug methods outside of `render` they are likely to be overwritten * by the game itself. * @@ -81004,7 +81848,7 @@ THIS SOFTWARE. * @property {string} font - The font that the debug information is rendered in. * @default */ - this.font = '14px Courier'; + this.font = '14px monospace'; /** * @property {number} columnWidth - The spacing between columns. @@ -81019,7 +81863,7 @@ THIS SOFTWARE. this.lineHeight = 16; /** - * @property {number} width - The width of the stroke on lines and shapes. A positive number. + * @property {number} lineWidth - The width of the stroke on lines and shapes. A positive number. * @default */ this.lineWidth = 1; @@ -81030,6 +81874,13 @@ THIS SOFTWARE. */ this.renderShadow = true; + /** + * @property {string} currentColor - The color last set by {@link #start} or {@link #text}. + * @default + * @protected + */ + this.currentColor = null; + /** * @property {number} currentX - The current X position the debug information will be rendered at. * @default @@ -81075,6 +81926,42 @@ THIS SOFTWARE. }; + /** + * @constant + * @type {integer} + */ + Phaser.Utils.Debug.GEOM_AUTO = 0; + + /** + * @constant + * @type {integer} + */ + Phaser.Utils.Debug.GEOM_RECTANGLE = 1; + + /** + * @constant + * @type {integer} + */ + Phaser.Utils.Debug.GEOM_CIRCLE = 2; + + /** + * @constant + * @type {integer} + */ + Phaser.Utils.Debug.GEOM_POINT = 3; + + /** + * @constant + * @type {integer} + */ + Phaser.Utils.Debug.GEOM_LINE = 4; + + /** + * @constant + * @type {integer} + */ + Phaser.Utils.Debug.GEOM_ELLIPSE = 5; + Phaser.Utils.Debug.prototype = { /** @@ -81087,8 +81974,7 @@ THIS SOFTWARE. if (this.game.renderType === Phaser.CANVAS) { this.context = this.game.context; - } - else { + } else { this.bmd = new Phaser.BitmapData(this.game, '__DEBUG', this.game.width, this.game.height, true); this.sprite = this.game.make.image(0, 0, this.bmd); this.game.stage.addChild(this.sprite); @@ -81232,6 +82118,34 @@ THIS SOFTWARE. }, + /** + * Render Sound Manager information, including volume, mute, audio mode, and locked status. + * + * @method Phaser.Utils.Debug#sound + * @param {number} x - X position of the debug info to be rendered. + * @param {number} y - Y position of the debug info to be rendered. + * @param {string} [color='rgb(255,255,255)'] - color of the debug info to be rendered. (format is css color string). + */ + sound: function (x, y, color) { + + var sound = this.game.sound; + + this.start(x, y, color); + + if (sound.noAudio) { + this.line('Audio is disabled'); + } else { + this.line('Volume: ' + sound.volume.toFixed(2) + (sound.mute ? ' (Mute)' : '')); + this.line('Mute on pause: ' + sound.muteOnPause); + this.line('Using: ' + (sound.usingWebAudio ? ('Web Audio - ' + sound.context.state) : 'Audio Tag')); + this.line('Touch locked: ' + sound.touchLocked); + this.line('Sounds: ' + sound._sounds.length); + } + + this.stop(); + + }, + /** * Render Sound information, including decoded state, duration, volume and more. * @@ -81244,17 +82158,18 @@ THIS SOFTWARE. soundInfo: function (sound, x, y, color) { this.start(x, y, color); - this.line('Sound: ' + sound.key + ' Locked: ' + sound.game.sound.touchLocked); - this.line('Is Ready?: ' + this.game.cache.isSoundReady(sound.key) + ' Pending Playback: ' + sound.pendingPlayback); - this.line('Decoded: ' + sound.isDecoded + ' Decoding: ' + sound.isDecoding); - this.line('Total Duration: ' + sound.totalDuration + ' Playing: ' + sound.isPlaying); - this.line('Time: ' + sound.currentTime); - this.line('Volume: ' + sound.volume + ' Muted: ' + sound.mute); - this.line('WebAudio: ' + sound.usingWebAudio + ' Audio: ' + sound.usingAudioTag); + this.line('Sound: ' + sound.key + ' Touch locked: ' + sound.game.sound.touchLocked); + this.line('Is Ready?: ' + this.game.cache.isSoundReady(sound.key) + ' Pending Playback: ' + sound.pendingPlayback); + this.line('Decoded: ' + sound.isDecoded + ' Decoding: ' + sound.isDecoding); + this.line('Playing: ' + sound.isPlaying + ' Loop: ' + sound.loop); + this.line('Time: ' + (sound.currentTime / 1000).toFixed(3) + 's Total: ' + sound.totalDuration.toFixed(3) + 's'); + this.line('Volume: ' + sound.volume.toFixed(2) + (sound.mute ? ' (Mute)' : '')); + this.line('Using: ' + (sound.usingWebAudio ? 'Web Audio' : 'Audio Tag') + ' ' + + (sound.usingWebAudio ? ('Source: ' + (sound.sourceId || 'none')) : '')); if (sound.currentMarker !== '') { - this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration + ' (ms: ' + sound.durationMS + ')'); - this.line('Start: ' + sound.markers[sound.currentMarker].start + ' Stop: ' + sound.markers[sound.currentMarker].stop); + this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration.toFixed(3) + 's (' + sound.durationMS + 'ms)'); + this.line('Start: ' + sound.markers[sound.currentMarker].start + ' Stop: ' + sound.markers[sound.currentMarker].stop); this.line('Position: ' + sound.position); } @@ -81308,16 +82223,12 @@ THIS SOFTWARE. this.start(x, y, color); this.line('Camera (' + camera.width + ' x ' + camera.height + ')'); this.line('x: ' + camera.x + ' y: ' + camera.y); - - if (bounds) { - this.line('Bounds x: ' + bounds.x + ' y: ' + bounds.y + ' w: ' + bounds.width + ' h: ' + bounds.height); - } - - this.line('View x: ' + view.x + ' y: ' + view.y + ' w: ' + view.width + ' h: ' + view.height); + this.line('Bounds: ' + (bounds ? ('x: ' + bounds.x + ' y: ' + bounds.y + ' w: ' + bounds.width + ' h: ' + bounds.height) : 'none')); + this.line('View: x: ' + view.x + ' y: ' + view.y + ' w: ' + view.width + ' h: ' + view.height); this.line('Deadzone: ' + (deadzone ? ('x: ' + deadzone.x + ' y: ' + deadzone.y + ' w: ' + deadzone.width + ' h: ' + deadzone.height) : deadzone)); this.line('Total in view: ' + camera.totalInView); this.line('At limit: x: ' + camera.atLimit.x + ' y: ' + camera.atLimit.y); - this.line('Target: ' + (target ? (target.name || target) : target)); + this.line('Target: ' + (target ? (target.name || target) : 'none')); this.stop(); }, @@ -81342,16 +82253,17 @@ THIS SOFTWARE. }, /** - * Renders the Pointer.circle object onto the stage in green if down or red if up along with debug text. + * Renders the Pointer.circle object onto the stage in green if down or yellow if up along with debug text. * * @method Phaser.Utils.Debug#pointer * @param {Phaser.Pointer} pointer - The Pointer you wish to display. * @param {boolean} [hideIfUp=false] - Doesn't render the circle if the pointer is up. - * @param {string} [downColor='rgba(0,255,0,0.5)'] - The color the circle is rendered in if down. - * @param {string} [upColor='rgba(255,0,0,0.5)'] - The color the circle is rendered in if up (and hideIfUp is false). + * @param {string} [downColor='rgba(0,255,0,0.5)'] - The color the circle is rendered in if the Pointer is down. + * @param {string} [upColor='rgba(255,255,0,0.5)'] - The color the circle is rendered in if the Pointer is up (and hideIfUp is false). * @param {string} [color='rgb(255,255,255)'] - color of the debug info to be rendered. (format is css color string). + * @param {string} [inactiveColor='rgb(255,0,0,0.5)'] - The color the circle is rendered in if the Pointer is inactive. */ - pointer: function (pointer, hideIfUp, downColor, upColor, color) { + pointer: function (pointer, hideIfUp, downColor, upColor, color, inactiveColor) { if (pointer == null) { return; @@ -81360,22 +82272,23 @@ THIS SOFTWARE. if (hideIfUp === undefined) { hideIfUp = false; } + downColor = downColor || 'rgba(0,255,0,0.5)'; - upColor = upColor || 'rgba(255,0,0,0.5)'; + upColor = upColor || 'rgba(255,255,0,0.5)'; + inactiveColor = inactiveColor || 'rgba(255,0,0,0.5)'; if (hideIfUp === true && pointer.isUp === true) { return; } - this.start(pointer.x, pointer.y - 100, color); + this.start(pointer.x, pointer.y - 150, color); this.context.beginPath(); this.context.arc(pointer.x, pointer.y, pointer.circle.radius, 0, Math.PI * 2); if (pointer.active) { - this.context.fillStyle = downColor; - } - else { - this.context.fillStyle = upColor; + this.context.fillStyle = pointer.isDown ? downColor : upColor; + } else { + this.context.fillStyle = inactiveColor; } this.context.fill(); @@ -81389,16 +82302,46 @@ THIS SOFTWARE. this.context.stroke(); this.context.closePath(); + var mx = pointer.movementX; + var my = pointer.movementY; + + if (mx || my) { + this.context.beginPath(); + this.context.moveTo(mx + pointer.position.x, my + pointer.position.y); + this.context.lineTo(pointer.position.x, pointer.position.y); + this.context.lineWidth = 2; + this.context.stroke(); + this.context.closePath(); + } + // Render the text - this.line('ID: ' + pointer.id + " Active: " + pointer.active); - this.line('World X: ' + pointer.worldX + " World Y: " + pointer.worldY); - this.line('Screen X: ' + pointer.x + " Screen Y: " + pointer.y + " In: " + pointer.withinGame); - this.line('Duration: ' + pointer.duration + " ms"); - this.line('is Down: ' + pointer.isDown + " is Up: " + pointer.isUp); + this.line('ID: ' + pointer.id + ' Active: ' + pointer.active); + this.line('World X: ' + pointer.worldX.toFixed(1) + ' World Y: ' + pointer.worldY.toFixed(1)); + this.line('Screen X: ' + pointer.x.toFixed(1) + ' Screen Y: ' + pointer.y.toFixed(1) + ' In: ' + pointer.withinGame); + this.line('Movement: X: ' + mx + ' Y: ' + my); + this.line('Duration: ' + pointer.duration + ' ms'); + this.line('is Down: ' + pointer.isDown + ' is Up: ' + pointer.isUp); + + if (pointer.isMouse) { + this.line('Buttons: ' + this._pointerButtonIcon(pointer.leftButton) + ' ' + + this._pointerButtonIcon(pointer.middleButton) + ' ' + + this._pointerButtonIcon(pointer.rightButton)); + } + this.stop(); }, + _pointerButtonIcon: function (btn) { + if (btn.isDown) { + return 'x'; + } else if (btn.isUp) { + return 'o'; + } + + return '-'; + }, + /** * Render Sprite Input Debug information. * @@ -81448,17 +82391,73 @@ THIS SOFTWARE. * @param {number} x - X position of the debug info to be rendered. * @param {number} y - Y position of the debug info to be rendered. * @param {string} [color='rgb(255,255,255)'] - color of the debug info to be rendered. (format is css color string). + * @param {boolean} [showDetails=true] - Also describe input sources and pointers. */ - inputInfo: function (x, y, color) { + inputInfo: function (x, y, color, showDetails) { + + var input = this.game.input; + + if (showDetails === undefined) { + showDetails = true; + } this.start(x, y, color); + this.line('Input'); - this.line('X: ' + this.game.input.x + ' Y: ' + this.game.input.y); - this.line('World X: ' + this.game.input.worldX + ' World Y: ' + this.game.input.worldY); - this.line('Scale X: ' + this.game.input.scale.x.toFixed(1) + ' Scale Y: ' + this.game.input.scale.x.toFixed(1)); - this.line('Screen X: ' + this.game.input.activePointer.screenX + ' Screen Y: ' + this.game.input.activePointer.screenY); + this.line('X: ' + input.x + ' Y: ' + input.y); + this.line('World X: ' + input.worldX + ' World Y: ' + input.worldY); + this.line('Scale X: ' + input.scale.x.toFixed(2) + ' Scale Y: ' + input.scale.x.toFixed(2)); + this.line('Screen X: ' + input.activePointer.screenX.toFixed(1) + ' Screen Y: ' + input.activePointer.screenY.toFixed(1)); + + if (!showDetails) { this.stop(); + return; + } + + this.line('Sources:'); + this.line(' ' + this._inputHandler(input.mouse, 'mouse')); + this.line(' ' + this._inputHandler(input.mspointer, 'mspointer')); + this.line(' ' + this._inputHandler(input.touch, 'touch')); + + var pointers = input.pointers; + var mousePointer = input.mousePointer; + var modes = Phaser.PointerModes; + + this.line('Pointers: (Max: ' + input.maxPointers + ')'); + this.line(' ' + (mousePointer.isDown ? 'x' : 'o') + ' ' + modes[mousePointer.pointerMode]); + + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + this.line(' ' + (p.active ? '+' : '-') + ' ' + modes[p.pointerMode]); + } + + this.stop(); + + }, + + _inputHandler: function (handler, name) { + return this._inputHandlerStatusIcon(handler) + ' ' + name + ' ' + this._inputHandlerCaptureIcon(handler); + }, + + _inputHandlerStatusIcon: function (handler) { + + if (!handler.active) { + return ' '; + } + + return handler.enabled ? '+' : '-'; + + }, + + _inputHandlerCaptureIcon: function (handler) { + + if (!handler.active) { + return ' '; + } + + return (handler.capture || handler.preventDefault) ? '*' : ' '; + }, /** @@ -81513,11 +82512,12 @@ THIS SOFTWARE. this.start(x, y, color); - this.line('Sprite: ' + ' (' + sprite.width + ' x ' + sprite.height + ') anchor: ' + sprite.anchor.x + ' x ' + sprite.anchor.y); + this.line('Sprite: ' + (sprite.name || '') + ' (' + sprite.width + ' x ' + sprite.height + ') anchor: ' + sprite.anchor.x + ' x ' + sprite.anchor.y); this.line('x: ' + sprite.x.toFixed(1) + ' y: ' + sprite.y.toFixed(1)); this.line('angle: ' + sprite.angle.toFixed(1) + ' rotation: ' + sprite.rotation.toFixed(1)); this.line('visible: ' + sprite.visible + ' in camera: ' + sprite.inCamera); this.line('bounds x: ' + sprite._bounds.x.toFixed(1) + ' y: ' + sprite._bounds.y.toFixed(1) + ' w: ' + sprite._bounds.width.toFixed(1) + ' h: ' + sprite._bounds.height.toFixed(1)); + this.line('parent: ' + (sprite.parent ? (sprite.parent.name || '(DisplayObject)') : '(none)')); this.stop(); @@ -81574,7 +82574,7 @@ THIS SOFTWARE. * @param {number} x - X position of the pixel to be rendered. * @param {number} y - Y position of the pixel to be rendered. * @param {string} [color] - Color of the pixel (format is css color string). - * @param {number} [size=2] - The 'size' to render the pixel at. + * @param {number} [size=2] - The width and height of the rendered pixel. */ pixel: function (x, y, color, size) { @@ -81594,7 +82594,7 @@ THIS SOFTWARE. * @param {Phaser.Rectangle|Phaser.Circle|Phaser.Ellipse|Phaser.Point|Phaser.Line} object - The geometry object to render. * @param {string} [color] - Color of the debug info to be rendered (format is css color string). * @param {boolean} [filled=true] - Render the objected as a filled (default, true) or a stroked (false) - * @param {number} [forceType=0] - Force rendering of a specific objType. If 0 no objType will be forced, otherwise 1 = Rectangle, 2 = Circle,3 = Point, 4 = Line and 5 = Ellipse. + * @param {number} [forceType=Phaser.Utils.Debug.GEOM_AUTO] - Force rendering of a specific type: (0) GEOM_AUTO, 1 GEOM_RECTANGLE, (2) GEOM_CIRCLE, (3) GEOM_POINT, (4) GEOM_LINE, (5) GEOM_ELLIPSE. */ geom: function (object, color, filled, forceType) { @@ -81613,45 +82613,40 @@ THIS SOFTWARE. this.context.strokeStyle = color; this.context.lineWidth = this.lineWidth; - if (object instanceof Phaser.Rectangle || forceType === 1) { + var Debug = Phaser.Utils.Debug; + + if (forceType === Debug.GEOM_RECTANGLE || object instanceof Phaser.Rectangle) { if (filled) { this.context.fillRect(object.x - this.game.camera.x, object.y - this.game.camera.y, object.width, object.height); - } - else { + } else { this.context.strokeRect(object.x - this.game.camera.x, object.y - this.game.camera.y, object.width, object.height); } - } - else if (object instanceof Phaser.Circle || forceType === 2) { + } else if (forceType === Debug.GEOM_CIRCLE || object instanceof Phaser.Circle) { this.context.beginPath(); this.context.arc(object.x - this.game.camera.x, object.y - this.game.camera.y, object.radius, 0, Math.PI * 2, false); this.context.closePath(); if (filled) { this.context.fill(); - } - else { + } else { this.context.stroke(); } - } - else if (object instanceof Phaser.Point || forceType === 3) { + } else if (forceType === Debug.GEOM_POINT || object instanceof Phaser.Point) { this.context.fillRect(object.x - this.game.camera.x, object.y - this.game.camera.y, 4, 4); - } - else if (object instanceof Phaser.Line || forceType === 4) { + } else if (forceType === Debug.GEOM_LINE || object instanceof Phaser.Line) { this.context.beginPath(); this.context.moveTo((object.start.x + 0.5) - this.game.camera.x, (object.start.y + 0.5) - this.game.camera.y); this.context.lineTo((object.end.x + 0.5) - this.game.camera.x, (object.end.y + 0.5) - this.game.camera.y); this.context.closePath(); this.context.stroke(); - } - else if (object instanceof Phaser.Ellipse || forceType === 5) { + } else if (forceType === Debug.GEOM_ELLIPSE || object instanceof Phaser.Ellipse) { this.context.beginPath(); - this.context.ellipse(object.x - this.game.camera.x, object.y - this.game.camera.y, object.width / 2, object.height / 2, 0, 2 * Math.PI, false); + this.context.ellipse(object.centerX - this.game.camera.x, object.centerY - this.game.camera.y, object.width / 2, object.height / 2, 0, 2 * Math.PI, false); this.context.closePath(); if (filled) { this.context.fill(); - } - else { + } else { this.context.stroke(); } } @@ -81681,8 +82676,7 @@ THIS SOFTWARE. if (filled) { this.context.fillStyle = color; this.context.fillRect(object.x - this.game.camera.x, object.y - this.game.camera.y, object.width, object.height); - } - else { + } else { this.context.lineWidth = this.lineWidth; this.context.strokeStyle = color; this.context.strokeRect(object.x - this.game.camera.x, object.y - this.game.camera.y, object.width, object.height); @@ -81705,7 +82699,7 @@ THIS SOFTWARE. text: function (text, x, y, color, font) { color = color || 'rgb(255,255,255)'; - font = font || '16px Courier'; + font = font || this.font; this.start(); this.context.font = font; @@ -81747,8 +82741,7 @@ THIS SOFTWARE. for (var i = 0; i < quadtree.objects.length; i++) { this.context.strokeRect(quadtree.objects[i].x, quadtree.objects[i].y, quadtree.objects[i].width, quadtree.objects[i].height); } - } - else { + } else { for (var i = 0; i < quadtree.nodes.length; i++) { this.quadTree(quadtree.nodes[i]); } @@ -81775,11 +82768,9 @@ THIS SOFTWARE. if (sprite.body.type === Phaser.Physics.ARCADE) { Phaser.Physics.Arcade.Body.render(this.context, sprite.body, color, filled, this.lineWidth); - } - else if (sprite.body.type === Phaser.Physics.NINJA) { + } else if (sprite.body.type === Phaser.Physics.NINJA) { Phaser.Physics.Ninja.Body.render(this.context, sprite.body, color, filled); - } - else if (sprite.body.type === Phaser.Physics.BOX2D) { + } else if (sprite.body.type === Phaser.Physics.BOX2D) { Phaser.Physics.Box2D.renderBody(this.context, sprite.body, color); } @@ -81804,8 +82795,7 @@ THIS SOFTWARE. if (sprite.body.type === Phaser.Physics.ARCADE) { Phaser.Physics.Arcade.Body.renderBodyInfo(this, sprite.body); - } - else if (sprite.body.type === Phaser.Physics.BOX2D) { + } else if (sprite.body.type === Phaser.Physics.BOX2D) { this.game.physics.box2d.renderBodyInfo(this, sprite.body); } @@ -81866,8 +82856,7 @@ THIS SOFTWARE. if (displayObject.hasOwnProperty('renderOrderID')) { console.log('[' + displayObject.renderOrderID + ']', displayObject); - } - else { + } else { console.log('[]', displayObject); } @@ -81913,8 +82902,7 @@ THIS SOFTWARE. this.line(' maxTextureSize: ' + r.maxTextureSize); this.line(' maxTextureAvailableSpace: ' + s.maxTextureAvailableSpace); this.line(' roundPixels: ' + s.roundPixels); - } - else { + } else { this.line(' roundPixels: ' + s.roundPixels); this.line(' scaleMode: ' + (s.scaleMode === 0 ? 'LINEAR' : (s.scaleMode === 1 ? 'NEAREST' : s.scaleMode))); } @@ -81966,6 +82954,103 @@ THIS SOFTWARE. }, + /** + * Prints game/canvas dimensions and {@link Phaser.ScaleManager game scale} settings. + * + * @method Phaser.Utils.Debug#scale + * @param {number} x - The X value the debug info will start from. + * @param {number} y - The Y value the debug info will start from. + * @param {string} [color='rgb(255,255,255)'] - The color the debug text will drawn in. + */ + scale: function (x, y, color) { + + this.start(x, y, color); + + var scale = this.game.scale; + var factor = scale.scaleFactorInversed; + var bounds = scale._parentBounds; + var x = ' x '; + + this.line('Game: ' + this.game.width + x + this.game.height); + this.line('Canvas: ' + scale.width + x + scale.height + + ' (' + factor.x.toFixed(2) + x + factor.y.toFixed(2) + ')' + + ' [' + scale.aspectRatio.toFixed(2) + ']'); + this.line('Mode: ' + Phaser.ScaleManager.MODES[scale.currentScaleMode] + + (scale.currentScaleMode === Phaser.ScaleManager.USER_SCALE ? + (' (' + scale._userScaleFactor.x + x + scale._userScaleFactor.y + ')') : + '')); + this.line('Parent: ' + (scale.parentIsWindow ? 'window' : scale.parentNode) + + (bounds.empty ? '' : (' (' + bounds.width + x + bounds.height + ')'))); + this.line('Screen: ' + scale.classifyOrientation(scale.screenOrientation) + + (scale.incorrectOrientation ? ' (incorrect)' : '')); + + this.stop(); + + }, + + /** + * Prints the progress of a {@link Phaser.Loader}. + * + * Typically you would call this within a {@link State#loadRender} callback and pass `game.load` ({@link Phaser.Game#load}). + * + * You can enable {@link Phaser.Loader#resetLocked} to temporarily hold the loader in its 'complete' state. + * Just remember to disable it before restarting the loader (such as when changing states). + * + * @method Phaser.Utils.Debug#loader + * @param {Phaser.Loader} loader - The loader. Usually `game.load` ({@link Phaser.Game#load}). + * @param {number} x - The X value the debug info will start from. + * @param {number} y - The Y value the debug info will start from. + * @param {string} [color='rgb(255,255,255)'] - The color the debug text will drawn in. + */ + loader: function (loader, x, y, color) { + + var pad = Phaser.Utils.pad; + + this.start(x, y, color); + + if (loader.hasLoaded) { + this.line('Complete' + (loader.resetLocked ? ' [locked]' : '')); + } else if (loader.isLoading) { + this.line('Loading'); + } else { + this.line('Not started'); + } + + if (!loader.hasLoaded || loader.resetLocked) { + this.line('Progress: ' + (pad(loader.progress, 3) + '%')); + this.line('Files: ' + loader._loadedFileCount + ' of ' + + loader._totalFileCount); + this.line('Packs: ' + loader._loadedPackCount + ' of ' + + loader._loadedPackCount); + } + + this.stop(); + + }, + + /** + * Shows device capabilities: Pointer Events, Touch Events, Web Audio, WebGL. + * + * @method Phaser.Utils.Debug#device + * @param {number} x + * @param {number} y + * @param {string} [color] + */ + device: function (x, y, color) { + var device = this.game.device; + + this.start(x, y, color); + + this.line('Device'); + this.line('Pointer Events: ' + device.mspointer); + this.line('Touch: ' + device.touch); + this.line('Web Audio: ' + device.webAudio); + this.line('WebGL: ' + device.webGL); + + this.stop(); + + }, + /** * Destroy this object. * @@ -82051,8 +83136,7 @@ THIS SOFTWARE. if (!element || element.nodeType !== 1) { return false; - } - else { + } else { return this.calibrate(element.getBoundingClientRect(), cushion); } @@ -82089,10 +83173,10 @@ THIS SOFTWARE. */ getAspectRatio: function (object) { - object = null == object ? this.visualBounds : 1 === object.nodeType ? this.getBounds(object) : object; + object = object == null ? this.visualBounds : object.nodeType === 1 ? this.getBounds(object) : object; - var w = object['width']; - var h = object['height']; + var w = object.width; + var h = object.height; if (typeof w === 'function') { w = w.call(object); @@ -82160,8 +83244,7 @@ THIS SOFTWARE. if (orientation && typeof orientation.type === 'string') { // Screen Orientation API specification return orientation.type; - } - else if (typeof orientation === 'string') { + } else if (typeof orientation === 'string') { // moz/ms-orientation are strings return orientation; } @@ -82171,19 +83254,15 @@ THIS SOFTWARE. if (primaryFallback === 'screen') { return (screen.height > screen.width) ? PORTRAIT : LANDSCAPE; - } - else if (primaryFallback === 'viewport') { + } else if (primaryFallback === 'viewport') { return (this.visualBounds.height > this.visualBounds.width) ? PORTRAIT : LANDSCAPE; - } - else if (primaryFallback === 'window.orientation' && typeof window.orientation === 'number') { + } else if (primaryFallback === 'window.orientation' && typeof window.orientation === 'number') { // This may change by device based on "natural" orientation. return (window.orientation === 0 || window.orientation === 180) ? PORTRAIT : LANDSCAPE; - } - else if (window.matchMedia) { - if (window.matchMedia("(orientation: portrait)").matches) { + } else if (window.matchMedia) { + if (window.matchMedia('(orientation: portrait)').matches) { return PORTRAIT; - } - else if (window.matchMedia("(orientation: landscape)").matches) { + } else if (window.matchMedia('(orientation: landscape)').matches) { return LANDSCAPE; } } @@ -82202,7 +83281,7 @@ THIS SOFTWARE. * * The properties change dynamically. * - * @objType {Phaser.Rectangle} + * @type {Phaser.Rectangle} * @property {number} x - Scroll, left offset - eg. "scrollX" * @property {number} y - Scroll, top offset - eg. "scrollY" * @property {number} width - Viewport width in pixels. @@ -82225,7 +83304,7 @@ THIS SOFTWARE. * * The properties change dynamically. * - * @objType {Phaser.Rectangle} + * @type {Phaser.Rectangle} * @property {number} width - Viewport width in pixels. * @property {number} height - Viewport height in pixels. * @readonly @@ -82239,7 +83318,7 @@ THIS SOFTWARE. * * The properties change dynamically. * - * @objType {Phaser.Rectangle} + * @type {Phaser.Rectangle} * @property {number} width - Document width in pixels. * @property {number} height - Document height in pixels. * @readonly @@ -82275,9 +83354,7 @@ THIS SOFTWARE. * @readonly * @protected */ - Object.defineProperty(Phaser.DOM, "scrollX", { - get: scrollX - }); + Object.defineProperty(Phaser.DOM, 'scrollX', {get: scrollX}); /** * A cross-browser window.scrollY. @@ -82287,25 +83364,15 @@ THIS SOFTWARE. * @readonly * @protected */ - Object.defineProperty(Phaser.DOM, "scrollY", { - get: scrollY - }); + Object.defineProperty(Phaser.DOM, 'scrollY', {get: scrollY}); - Object.defineProperty(Phaser.DOM.visualBounds, "x", { - get: scrollX - }); + Object.defineProperty(Phaser.DOM.visualBounds, 'x', {get: scrollX}); - Object.defineProperty(Phaser.DOM.visualBounds, "y", { - get: scrollY - }); + Object.defineProperty(Phaser.DOM.visualBounds, 'y', {get: scrollY}); - Object.defineProperty(Phaser.DOM.layoutBounds, "x", { - value: 0 - }); + Object.defineProperty(Phaser.DOM.layoutBounds, 'x', {value: 0}); - Object.defineProperty(Phaser.DOM.layoutBounds, "y", { - value: 0 - }); + Object.defineProperty(Phaser.DOM.layoutBounds, 'y', {value: 0}); var treatAsDesktop = device.desktop && (document.documentElement.clientWidth <= window.innerWidth) && @@ -82326,37 +83393,29 @@ THIS SOFTWARE. }; // Interested in area sans-scrollbar - Object.defineProperty(Phaser.DOM.visualBounds, "width", { - get: clientWidth - }); + Object.defineProperty(Phaser.DOM.visualBounds, 'width', {get: clientWidth}); - Object.defineProperty(Phaser.DOM.visualBounds, "height", { - get: clientHeight - }); + Object.defineProperty(Phaser.DOM.visualBounds, 'height', {get: clientHeight}); - Object.defineProperty(Phaser.DOM.layoutBounds, "width", { - get: clientWidth - }); + Object.defineProperty(Phaser.DOM.layoutBounds, 'width', {get: clientWidth}); - Object.defineProperty(Phaser.DOM.layoutBounds, "height", { - get: clientHeight - }); + Object.defineProperty(Phaser.DOM.layoutBounds, 'height', {get: clientHeight}); } else { - Object.defineProperty(Phaser.DOM.visualBounds, "width", { + Object.defineProperty(Phaser.DOM.visualBounds, 'width', { get: function () { return window.innerWidth; } }); - Object.defineProperty(Phaser.DOM.visualBounds, "height", { + Object.defineProperty(Phaser.DOM.visualBounds, 'height', { get: function () { return window.innerHeight; } }); - Object.defineProperty(Phaser.DOM.layoutBounds, "width", { + Object.defineProperty(Phaser.DOM.layoutBounds, 'width', { get: function () { var a = document.documentElement.clientWidth; @@ -82367,7 +83426,7 @@ THIS SOFTWARE. }); - Object.defineProperty(Phaser.DOM.layoutBounds, "height", { + Object.defineProperty(Phaser.DOM.layoutBounds, 'height', { get: function () { var a = document.documentElement.clientHeight; @@ -82383,15 +83442,11 @@ THIS SOFTWARE. // For Phaser.DOM.documentBounds // Ref. http://www.quirksmode.org/mobile/tableViewport_desktop.html - Object.defineProperty(Phaser.DOM.documentBounds, "x", { - value: 0 - }); + Object.defineProperty(Phaser.DOM.documentBounds, 'x', {value: 0}); - Object.defineProperty(Phaser.DOM.documentBounds, "y", { - value: 0 - }); + Object.defineProperty(Phaser.DOM.documentBounds, 'y', {value: 0}); - Object.defineProperty(Phaser.DOM.documentBounds, "width", { + Object.defineProperty(Phaser.DOM.documentBounds, 'width', { get: function () { var d = document.documentElement; @@ -82400,7 +83455,7 @@ THIS SOFTWARE. }); - Object.defineProperty(Phaser.DOM.documentBounds, "height", { + Object.defineProperty(Phaser.DOM.documentBounds, 'height', { get: function () { var d = document.documentElement; @@ -82624,7 +83679,7 @@ THIS SOFTWARE. * @name Phaser.ArraySet#total * @property {integer} total */ - Object.defineProperty(Phaser.ArraySet.prototype, "total", { + Object.defineProperty(Phaser.ArraySet.prototype, 'total', { get: function () { return this.list.length; @@ -82638,7 +83693,7 @@ THIS SOFTWARE. * @name Phaser.ArraySet#first * @property {any} first */ - Object.defineProperty(Phaser.ArraySet.prototype, "first", { + Object.defineProperty(Phaser.ArraySet.prototype, 'first', { get: function () { @@ -82646,8 +83701,7 @@ THIS SOFTWARE. if (this.list.length > 0) { return this.list[0]; - } - else { + } else { return null; } @@ -82661,7 +83715,7 @@ THIS SOFTWARE. * @name Phaser.ArraySet#next * @property {any} next */ - Object.defineProperty(Phaser.ArraySet.prototype, "next", { + Object.defineProperty(Phaser.ArraySet.prototype, 'next', { get: function () { @@ -82669,8 +83723,7 @@ THIS SOFTWARE. this.position++; return this.list[this.position]; - } - else { + } else { return null; } @@ -82753,8 +83806,7 @@ THIS SOFTWARE. if (randomIndex < objects.length) { var removed = objects.splice(randomIndex, 1); return removed[0] === undefined ? null : removed[0]; - } - else { + } else { return null; } @@ -82861,12 +83913,10 @@ THIS SOFTWARE. if (direction === 90 || direction === -270 || direction === 'rotateLeft') { matrix = Phaser.ArrayUtils.transposeMatrix(matrix); matrix = matrix.reverse(); - } - else if (direction === -90 || direction === 270 || direction === 'rotateRight') { + } else if (direction === -90 || direction === 270 || direction === 'rotateRight') { matrix = matrix.reverse(); matrix = Phaser.ArrayUtils.transposeMatrix(matrix); - } - else if (Math.abs(direction) === 180 || direction === 'rotate180') { + } else if (Math.abs(direction) === 180 || direction === 'rotate180') { for (var i = 0; i < matrix.length; i++) { matrix[i].reverse(); } @@ -82891,8 +83941,7 @@ THIS SOFTWARE. if (!arr.length) { return NaN; - } - else if (arr.length === 1 || value < arr[0]) { + } else if (arr.length === 1 || value < arr[0]) { return arr[0]; } @@ -82952,29 +84001,6 @@ THIS SOFTWARE. }, - /** - * Moves the element from the start of the array to the end, shifting all items in the process. - * The "rotation" happens to the left. - * - * Before: `[ A, B, C, D, E, F ]` - * After: `[ B, C, D, E, F, A ]` - * - * See also Phaser.ArrayUtils.rotateRight - * - * @method Phaser.ArrayUtils.rotate - * @deprecated Please use Phaser.ArrayUtils.rotate instead. - * @param {any[]} array - The array to rotate. The array is modified. - * @return {any} The rotated value. - */ - rotate: function (array) { - - var s = array.shift(); - array.push(s); - - return s; - - }, - /** * Create an array representing the inclusive range of numbers (usually integers) in `[start, end]` (or `[0, start]`, if `end` is omitted). * This is equivalent to `numberArrayStep(start, 1 + end, 1)`. @@ -83195,8 +84221,7 @@ THIS SOFTWARE. if (item === this.first) { // It was 'first', make 'first' point to first.next this.first = this.first.next; - } - else if (item === this.last) { + } else if (item === this.last) { // It was 'last', make 'last' point to last.prev this.last = this.last.prev; } @@ -83392,35 +84417,35 @@ THIS SOFTWARE. /** * A 16 color palette by [Arne](http://androidarts.com/palette/16pal.htm) * @constant - * @objType {number} + * @type {number} */ Phaser.Create.PALETTE_ARNE = 0; /** * A 16 color JMP inspired palette. * @constant - * @objType {number} + * @type {number} */ Phaser.Create.PALETTE_JMP = 1; /** * A 16 color CGA inspired palette. * @constant - * @objType {number} + * @type {number} */ Phaser.Create.PALETTE_CGA = 2; /** * A 16 color C64 inspired palette. * @constant - * @objType {number} + * @type {number} */ Phaser.Create.PALETTE_C64 = 3; /** * A 16 color palette inspired by Japanese computers like the MSX. * @constant - * @objType {number} + * @type {number} */ Phaser.Create.PALETTE_JAPANESE_MACHINE = 4; @@ -83449,6 +84474,8 @@ THIS SOFTWARE. * The above will create a new texture called `bob`, which will look like a little man wearing a hat. You can then use it * for sprites the same way you use any other texture: `game.add.sprite(0, 0, 'bob');` * + * Use {@link Phaser.Loader#imageFromTexture} to preload an image of the same. + * * @method Phaser.Create#texture * @param {string} key - The key used to store this texture in the Phaser Cache. * @param {array} data - An array of pixel data. @@ -83511,6 +84538,8 @@ THIS SOFTWARE. /** * Creates a grid texture based on the given dimensions. * + * Use {@link Phaser.Loader#imageFromGrid} to preload an image of the same. + * * @method Phaser.Create#grid * @param {string} key - The key used to store this texture in the Phaser Cache. * @param {integer} width - The width of the grid in pixels. @@ -83714,7 +84743,7 @@ THIS SOFTWARE. this.layers.push(layer); - if (typeof children !== 'undefined' && typeof children !== null) { + if (children) { layer.addMultiple(children); } @@ -83743,7 +84772,7 @@ THIS SOFTWARE. this.layers.push(layer); - if (typeof children !== 'undefined' && typeof children !== null) { + if (children) { layer.addMultiple(children); } @@ -83944,7 +84973,7 @@ THIS SOFTWARE. /** * Should the FlexLayer remain through a State swap? * - * @objType {boolean} + * @type {boolean} */ this.persist = false; @@ -84035,6 +85064,96 @@ THIS SOFTWARE. */ Phaser.Color = { + /** + * Red (0xff0000) + * + * @type number + * @constant + * @default + */ + RED: 0xff0000, + + /** + * Orange (0xff9900) + * + * @type number + * @constant + * @default + */ + ORANGE: 0xff9900, + + /** + * Yellow (0xffff00) + * + * @type number + * @constant + * @default + */ + YELLOW: 0xffff00, + + /** + * Green (0x00ff00) + * + * @type number + * @constant + * @default + */ + GREEN: 0x00ff00, + + /** + * Aqua (0x00ffff) + * + * @type number + * @constant + * @default + */ + AQUA: 0x00ffff, + + /** + * Blue (0x0000ff) + * + * @type number + * @constant + * @default + */ + BLUE: 0x0000ff, + + /** + * Violet/purple (0xff00ff) + * + * @type number + * @constant + * @default + */ + VIOLET: 0xff00ff, + + /** + * White (0xffffff) + * + * @type number + * @constant + * @default + */ + WHITE: 0xffffff, + + /** + * Black (0x000000) + * + * @type number + * @constant + * @default + */ + BLACK: 0, + + /** + * Gray (0x666666) + * + * @type number + * @constant + * @default + */ + GRAY: 0x666666, + /** * Packs the r, g, b, a components into a single integer, for use with Int32Array. * If device is little endian then ABGR order is used. Otherwise RGBA order is used. @@ -84052,8 +85171,7 @@ THIS SOFTWARE. if (Phaser.Device.LITTLE_ENDIAN) { return ((a << 24) | (b << 16) | (g << 8) | r) >>> 0; - } - else { + } else { return ((r << 24) | (g << 16) | (b << 8) | a) >>> 0; } @@ -84095,8 +85213,7 @@ THIS SOFTWARE. out.b = ((rgba & 0x00ff0000) >>> 16); out.g = ((rgba & 0x0000ff00) >>> 8); out.r = ((rgba & 0x000000ff)); - } - else { + } else { out.r = ((rgba & 0xff000000) >>> 24); out.g = ((rgba & 0x00ff0000) >>> 16); out.b = ((rgba & 0x0000ff00) >>> 8); @@ -84252,11 +85369,9 @@ THIS SOFTWARE. if (max === r) { out.h = (g - b) / d + (g < b ? 6 : 0); - } - else if (max === g) { + } else if (max === g) { out.h = (b - r) / d + 2; - } - else if (max === b) { + } else if (max === b) { out.h = (r - g) / d + 4; } @@ -84285,8 +85400,7 @@ THIS SOFTWARE. if (!out) { out = Phaser.Color.createColor(l, l, l); - } - else { + } else { // achromatic by default out.r = l; out.g = l; @@ -84351,11 +85465,9 @@ THIS SOFTWARE. if (max !== min) { if (max === r) { out.h = (g - b) / d + (g < b ? 6 : 0); - } - else if (max === g) { + } else if (max === g) { out.h = (b - r) / d + 2; - } - else if (max === b) { + } else if (max === b) { out.h = (r - g) / d + 4; } @@ -84587,8 +85699,7 @@ THIS SOFTWARE. if (prefix === '#') { return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); - } - else { + } else { return '0x' + Phaser.Color.componentToHex(a) + Phaser.Color.componentToHex(r) + Phaser.Color.componentToHex(g) + Phaser.Color.componentToHex(b); } @@ -84632,7 +85743,7 @@ THIS SOFTWARE. return r + r + g + g + b + b; }); - var result = /^(?:#|0x)?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + var result = (/^(?:#|0x)?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i).exec(hex); if (result) { var r = parseInt(result[1], 16); @@ -84641,8 +85752,7 @@ THIS SOFTWARE. if (!out) { out = Phaser.Color.createColor(r, g, b); - } - else { + } else { out.r = r; out.g = g; out.b = b; @@ -84670,13 +85780,13 @@ THIS SOFTWARE. out = Phaser.Color.createColor(); } - var result = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+(?:\.\d+)?))?\s*\)$/.exec(web); + var result = (/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+(?:\.\d+)?))?\s*\)$/).exec(web); if (result) { - out.r = parseInt(result[1], 10); - out.g = parseInt(result[2], 10); - out.b = parseInt(result[3], 10); - out.a = result[4] !== undefined ? parseFloat(result[4]) : 1; + out.r = ~~Number(result[1]); + out.g = ~~Number(result[2]); + out.b = ~~Number(result[3]); + out.a = result[4] !== undefined ? Number(result[4]) : 1; Phaser.Color.updateColor(out); } @@ -84708,14 +85818,12 @@ THIS SOFTWARE. if (typeof value === 'string') { if (value.indexOf('rgb') === 0) { return Phaser.Color.webToColor(value, out); - } - else { + } else { // `hexToColor` does not support alpha; match `createColor`. out.a = 1; return Phaser.Color.hexToColor(value, out); } - } - else if (typeof value === 'number') { + } else if (typeof value === 'number') { // `getRGB` does not take optional object to modify; // alpha is also adjusted to match `createColor`. var tempColor = Phaser.Color.getRGB(value); @@ -84724,8 +85832,7 @@ THIS SOFTWARE. out.b = tempColor.b; out.a = tempColor.a / 255; return out; - } - else { + } else { return out; } @@ -84947,7 +86054,7 @@ THIS SOFTWARE. * * @method Phaser.Color.linearInterpolation * @param {number[]} colors - The input array of color values to interpolate between. - * @param {number} t - A value between 0 and 1. + * @param {number} t - The amount of interpolation, between 0 (start) and 1 (end). * @return {number} The interpolated color value. */ linearInterpolation: function (colors, t) { @@ -85021,8 +86128,7 @@ THIS SOFTWARE. g: color >> 8 & 0xFF, b: color & 0xFF }; - } - else { + } else { return { alpha: 255, red: color >> 16 & 0xFF, @@ -85049,8 +86155,7 @@ THIS SOFTWARE. if (typeof color === 'object') { return 'rgba(' + color.r.toString() + ',' + color.g.toString() + ',' + color.b.toString() + ',' + (color.a / 255).toString() + ')'; - } - else { + } else { var rgb = Phaser.Color.getRGB(color); return 'rgba(' + rgb.r.toString() + ',' + rgb.g.toString() + ',' + rgb.b.toString() + ',' + (rgb.a / 255).toString() + ')'; } @@ -85556,37 +86661,37 @@ THIS SOFTWARE. /** * @const - * @objType {number} + * @type {number} */ Phaser.Physics.ARCADE = 0; /** * @const - * @objType {number} + * @type {number} */ Phaser.Physics.P2JS = 1; /** * @const - * @objType {number} + * @type {number} */ Phaser.Physics.NINJA = 2; /** * @const - * @objType {number} + * @type {number} */ Phaser.Physics.BOX2D = 3; /** * @const - * @objType {number} + * @type {number} */ Phaser.Physics.CHIPMUNK = 4; /** * @const - * @objType {number} + * @type {number} */ Phaser.Physics.MATTERJS = 5; @@ -85599,24 +86704,24 @@ THIS SOFTWARE. */ parseConfig: function () { - if ((!this.config.hasOwnProperty('arcade') || this.config['arcade'] === true) && Phaser.Physics.hasOwnProperty('Arcade')) { + if ((!this.config.hasOwnProperty('arcade') || this.config.arcade === true) && Phaser.Physics.hasOwnProperty('Arcade')) { // If Arcade isn't specified, we create it automatically if we can this.arcade = new Phaser.Physics.Arcade(this.game); } - if (this.config.hasOwnProperty('ninja') && this.config['ninja'] === true && Phaser.Physics.hasOwnProperty('Ninja')) { + if (this.config.hasOwnProperty('ninja') && this.config.ninja === true && Phaser.Physics.hasOwnProperty('Ninja')) { this.ninja = new Phaser.Physics.Ninja(this.game); } - if (this.config.hasOwnProperty('p2') && this.config['p2'] === true && Phaser.Physics.hasOwnProperty('P2')) { + if (this.config.hasOwnProperty('p2') && this.config.p2 === true && Phaser.Physics.hasOwnProperty('P2')) { this.p2 = new Phaser.Physics.P2(this.game, this.config); } - if (this.config.hasOwnProperty('box2d') && this.config['box2d'] === true && Phaser.Physics.hasOwnProperty('BOX2D')) { - this.box2d = new Phaser.Physics.BOX2D(this.game, this.config); + if (this.config.hasOwnProperty('box2d') && this.config.box2d === true && Phaser.Physics.hasOwnProperty('BOX2D')) { + this.box2d = new Phaser.Physics.Box2D(this.game, this.config); } - if (this.config.hasOwnProperty('matter') && this.config['matter'] === true && Phaser.Physics.hasOwnProperty('Matter')) { + if (this.config.hasOwnProperty('matter') && this.config.matter === true && Phaser.Physics.hasOwnProperty('Matter')) { this.matter = new Phaser.Physics.Matter(this.game, this.config); } @@ -85646,31 +86751,24 @@ THIS SOFTWARE. if (system === Phaser.Physics.ARCADE) { this.arcade = new Phaser.Physics.Arcade(this.game); - } - else if (system === Phaser.Physics.P2JS) { + } else if (system === Phaser.Physics.P2JS) { if (this.p2 === null) { this.p2 = new Phaser.Physics.P2(this.game, this.config); - } - else { + } else { this.p2.reset(); } - } - else if (system === Phaser.Physics.NINJA) { + } else if (system === Phaser.Physics.NINJA) { this.ninja = new Phaser.Physics.Ninja(this.game); - } - else if (system === Phaser.Physics.BOX2D) { + } else if (system === Phaser.Physics.BOX2D) { if (this.box2d === null) { this.box2d = new Phaser.Physics.Box2D(this.game, this.config); - } - else { + } else { this.box2d.reset(); } - } - else if (system === Phaser.Physics.MATTERJS) { + } else if (system === Phaser.Physics.MATTERJS) { if (this.matter === null) { this.matter = new Phaser.Physics.Matter(this.game, this.config); - } - else { + } else { this.matter.reset(); } } @@ -85689,7 +86787,7 @@ THIS SOFTWARE. * Phaser.Physics.MATTER - A full-body and light-weight advanced physics system (still in development) * Phaser.Physics.CHIPMUNK is still in development. * - * If you require more control over what objType of body is created, for example to create a Ninja Physics Circle instead of the default AABB, then see the + * If you require more control over what type of body is created, for example to create a Ninja Physics Circle instead of the default AABB, then see the * individual physics systems `enable` methods instead of using this generic one. * * @method Phaser.Physics#enable @@ -85708,20 +86806,15 @@ THIS SOFTWARE. if (system === Phaser.Physics.ARCADE) { this.arcade.enable(object); - } - else if (system === Phaser.Physics.P2JS && this.p2) { + } else if (system === Phaser.Physics.P2JS && this.p2) { this.p2.enable(object, debug); - } - else if (system === Phaser.Physics.NINJA && this.ninja) { + } else if (system === Phaser.Physics.NINJA && this.ninja) { this.ninja.enableAABB(object); - } - else if (system === Phaser.Physics.BOX2D && this.box2d) { + } else if (system === Phaser.Physics.BOX2D && this.box2d) { this.box2d.enable(object); - } - else if (system === Phaser.Physics.MATTERJS && this.matter) { + } else if (system === Phaser.Physics.MATTERJS && this.matter) { this.matter.enable(object); - } - else { + } else { console.warn(object.key + ' is attempting to enable a physics body using an unknown physics system.'); } @@ -85928,7 +87021,8 @@ THIS SOFTWARE. this.maxLevels = 4; /** - * @property {number} OVERLAP_BIAS - A value added to the delta values during collision checks. + * @property {number} OVERLAP_BIAS - A value added to the delta values during collision checks. Increase it to prevent sprite tunneling. + * @default */ this.OVERLAP_BIAS = 4; @@ -85975,7 +87069,7 @@ THIS SOFTWARE. * A constant used for the sortDirection value. * Use this if you don't wish to perform any pre-collision sorting at all, or will manually sort your Groups. * @constant - * @objType {number} + * @type {number} */ Phaser.Physics.Arcade.SORT_NONE = 0; @@ -85983,7 +87077,7 @@ THIS SOFTWARE. * A constant used for the sortDirection value. * Use this if your game world is wide but short and scrolls from the left to the right (i.e. Mario) * @constant - * @objType {number} + * @type {number} */ Phaser.Physics.Arcade.LEFT_RIGHT = 1; @@ -85991,7 +87085,7 @@ THIS SOFTWARE. * A constant used for the sortDirection value. * Use this if your game world is wide but short and scrolls from the right to the left (i.e. Mario backwards) * @constant - * @objType {number} + * @type {number} */ Phaser.Physics.Arcade.RIGHT_LEFT = 2; @@ -85999,7 +87093,7 @@ THIS SOFTWARE. * A constant used for the sortDirection value. * Use this if your game world is narrow but tall and scrolls from the top to the bottom (i.e. Dig Dug) * @constant - * @objType {number} + * @type {number} */ Phaser.Physics.Arcade.TOP_BOTTOM = 3; @@ -86007,7 +87101,7 @@ THIS SOFTWARE. * A constant used for the sortDirection value. * Use this if your game world is narrow but tall and scrolls from the bottom to the top (i.e. Commando or a vertically scrolling shoot-em-up) * @constant - * @objType {number} + * @type {number} */ Phaser.Physics.Arcade.BOTTOM_TOP = 4; @@ -86062,8 +87156,7 @@ THIS SOFTWARE. if (object[i] instanceof Phaser.Group) { // If it's a Group then we do it on the children regardless this.enable(object[i].children, children); - } - else { + } else { this.enableBody(object[i]); if (children && object[i].hasOwnProperty('children') && object[i].children.length > 0) { @@ -86071,18 +87164,14 @@ THIS SOFTWARE. } } } - } - else { - if (object instanceof Phaser.Group) { - // If it's a Group then we do it on the children regardless - this.enable(object.children, children); - } - else { - this.enableBody(object); + } else if (object instanceof Phaser.Group) { + // If it's a Group then we do it on the children regardless + this.enable(object.children, children); + } else { + this.enableBody(object); - if (children && object.hasOwnProperty('children') && object.children.length > 0) { - this.enable(object.children, true); - } + if (children && object.hasOwnProperty('children') && object.children.length > 0) { + this.enable(object.children, true); } } @@ -86150,32 +87239,27 @@ THIS SOFTWARE. if (axis === 1 && body.allowGravity) { velocity += (this.gravity.x + body.gravity.x) * this.game.time.physicsElapsed; - } - else if (axis === 2 && body.allowGravity) { + } else if (axis === 2 && body.allowGravity) { velocity += (this.gravity.y + body.gravity.y) * this.game.time.physicsElapsed; } if (acceleration) { velocity += acceleration * this.game.time.physicsElapsed; - } - else if (drag && body.allowDrag) { + } else if (drag && body.allowDrag) { drag *= this.game.time.physicsElapsed; if (velocity - drag > 0) { velocity -= drag; - } - else if (velocity + drag < 0) { + } else if (velocity + drag < 0) { velocity += drag; - } - else { + } else { velocity = 0; } } if (velocity > max) { velocity = max; - } - else if (velocity < -max) { + } else if (velocity < -max) { velocity = -max; } @@ -86384,26 +87468,20 @@ THIS SOFTWARE. if (group.physicsSortDirection !== null) { sortDirection = group.physicsSortDirection; - } - else { - if (sortDirection === undefined) { - sortDirection = this.sortDirection; - } + } else if (sortDirection === undefined) { + sortDirection = this.sortDirection; } if (sortDirection === Phaser.Physics.Arcade.LEFT_RIGHT) { // Game world is say 2000x600 and you start at 0 group.hash.sort(this.sortLeftRight); - } - else if (sortDirection === Phaser.Physics.Arcade.RIGHT_LEFT) { + } else if (sortDirection === Phaser.Physics.Arcade.RIGHT_LEFT) { // Game world is say 2000x600 and you start at 2000 group.hash.sort(this.sortRightLeft); - } - else if (sortDirection === Phaser.Physics.Arcade.TOP_BOTTOM) { + } else if (sortDirection === Phaser.Physics.Arcade.TOP_BOTTOM) { // Game world is say 800x2000 and you start at 0 group.hash.sort(this.sortTopBottom); - } - else if (sortDirection === Phaser.Physics.Arcade.BOTTOM_TOP) { + } else if (sortDirection === Phaser.Physics.Arcade.BOTTOM_TOP) { // Game world is say 800x2000 and you start at 2000 group.hash.sort(this.sortBottomTop); } @@ -86426,8 +87504,7 @@ THIS SOFTWARE. this.collideHandler(object1, object2[i], collideCallback, processCallback, callbackContext, overlapOnly); } - } - else if (Array.isArray(object1) && !Array.isArray(object2)) { + } else if (Array.isArray(object1) && !Array.isArray(object2)) { for (var i = 0; i < object1.length; i++) { if (!object1[i]) { continue; @@ -86435,8 +87512,7 @@ THIS SOFTWARE. this.collideHandler(object1[i], object2, collideCallback, processCallback, callbackContext, overlapOnly); } - } - else if (Array.isArray(object1) && Array.isArray(object2)) { + } else if (Array.isArray(object1) && Array.isArray(object2)) { for (var i = 0; i < object1.length; i++) { if (!object1[i]) { continue; @@ -86450,8 +87526,7 @@ THIS SOFTWARE. this.collideHandler(object1[i], object2[j], collideCallback, processCallback, callbackContext, overlapOnly); } } - } - else { + } else { this.collideHandler(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly); } @@ -86498,32 +87573,29 @@ THIS SOFTWARE. if (object1.physicsType === Phaser.SPRITE) { if (object2.physicsType === Phaser.SPRITE) { this.collideSpriteVsSprite(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly); - } - else if (object2.physicsType === Phaser.GROUP) { + } else if (object2.physicsType === Phaser.GROUP) { this.collideSpriteVsGroup(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly); - } - else if (object2.physicsType === Phaser.TILEMAPLAYER) { + } else if (object2.physicsType === Phaser.TILEMAPLAYER) { this.collideSpriteVsTilemapLayer(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly); } } + // GROUPS else if (object1.physicsType === Phaser.GROUP) { if (object2.physicsType === Phaser.SPRITE) { this.collideSpriteVsGroup(object2, object1, collideCallback, processCallback, callbackContext, overlapOnly); - } - else if (object2.physicsType === Phaser.GROUP) { + } else if (object2.physicsType === Phaser.GROUP) { this.collideGroupVsGroup(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly); - } - else if (object2.physicsType === Phaser.TILEMAPLAYER) { + } else if (object2.physicsType === Phaser.TILEMAPLAYER) { this.collideGroupVsTilemapLayer(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly); } } + // TILEMAP LAYERS else if (object1.physicsType === Phaser.TILEMAPLAYER) { if (object2.physicsType === Phaser.SPRITE) { this.collideSpriteVsTilemapLayer(object2, object1, collideCallback, processCallback, callbackContext, overlapOnly); - } - else if (object2.physicsType === Phaser.GROUP) { + } else if (object2.physicsType === Phaser.GROUP) { this.collideGroupVsTilemapLayer(object2, object1, collideCallback, processCallback, callbackContext, overlapOnly); } } @@ -86597,40 +87669,32 @@ THIS SOFTWARE. if (this.sortDirection === Phaser.Physics.Arcade.LEFT_RIGHT) { if (sprite.body.right < bounds.x) { break; - } - else if (bounds.right < sprite.body.x) { + } else if (bounds.right < sprite.body.x) { continue; } - } - else if (this.sortDirection === Phaser.Physics.Arcade.RIGHT_LEFT) { + } else if (this.sortDirection === Phaser.Physics.Arcade.RIGHT_LEFT) { if (sprite.body.x > bounds.right) { break; - } - else if (bounds.x > sprite.body.right) { + } else if (bounds.x > sprite.body.right) { continue; } - } - else if (this.sortDirection === Phaser.Physics.Arcade.TOP_BOTTOM) { + } else if (this.sortDirection === Phaser.Physics.Arcade.TOP_BOTTOM) { if (sprite.body.bottom < bounds.y) { break; - } - else if (bounds.bottom < sprite.body.y) { + } else if (bounds.bottom < sprite.body.y) { continue; } - } - else if (this.sortDirection === Phaser.Physics.Arcade.BOTTOM_TOP) { + } else if (this.sortDirection === Phaser.Physics.Arcade.BOTTOM_TOP) { if (sprite.body.y > bounds.bottom) { break; - } - else if (bounds.y > sprite.body.bottom) { + } else if (bounds.y > sprite.body.bottom) { continue; } } this.collideSpriteVsSprite(sprite, object1, collideCallback, processCallback, callbackContext, overlapOnly); } - } - else { + } else { // What is the sprite colliding with in the quadtree? this.quadTree.clear(); @@ -86700,32 +87764,25 @@ THIS SOFTWARE. if (this.sortDirection === Phaser.Physics.Arcade.LEFT_RIGHT) { if (bounds1.right < bounds2.x) { break; - } - else if (bounds2.right < bounds1.x) { + } else if (bounds2.right < bounds1.x) { continue; } - } - else if (this.sortDirection === Phaser.Physics.Arcade.RIGHT_LEFT) { + } else if (this.sortDirection === Phaser.Physics.Arcade.RIGHT_LEFT) { if (bounds1.x > bounds2.right) { continue; - } - else if (bounds2.x > bounds1.right) { + } else if (bounds2.x > bounds1.right) { break; } - } - else if (this.sortDirection === Phaser.Physics.Arcade.TOP_BOTTOM) { + } else if (this.sortDirection === Phaser.Physics.Arcade.TOP_BOTTOM) { if (bounds1.bottom < bounds2.y) { continue; - } - else if (bounds2.bottom < bounds1.y) { + } else if (bounds2.bottom < bounds1.y) { break; } - } - else if (this.sortDirection === Phaser.Physics.Arcade.BOTTOM_TOP) { + } else if (this.sortDirection === Phaser.Physics.Arcade.BOTTOM_TOP) { if (bounds1.y > bounds2.bottom) { continue; - } - else if (bounds2.y > object1.body.bottom) { + } else if (bounds2.y > object1.body.bottom) { break; } } @@ -86758,8 +87815,7 @@ THIS SOFTWARE. if (group1.children[i].exists) { if (group1.children[i].physicsType === Phaser.GROUP) { this.collideGroupVsGroup(group1.children[i], group2, collideCallback, processCallback, callbackContext, overlapOnly); - } - else { + } else { this.collideSpriteVsGroup(group1.children[i], group2, collideCallback, processCallback, callbackContext, overlapOnly); } } @@ -86835,8 +87891,7 @@ THIS SOFTWARE. if (this.intersects(body1, body2)) { resultY = this.separateY(body1, body2, overlapOnly); } - } - else { + } else { resultY = this.separateY(body1, body2, overlapOnly); // Are they still intersecting? Let's do the other axis then @@ -86856,8 +87911,7 @@ THIS SOFTWARE. if (body2.onOverlap) { body2.onOverlap.dispatch(body2.sprite, body1.sprite); } - } - else { + } else { if (body1.onCollide) { body1.onCollide.dispatch(body1.sprite, body2.sprite); } @@ -86890,37 +87944,32 @@ THIS SOFTWARE. if (body2.isCircle) { // Circle vs. Circle return Phaser.Math.distance(body1.center.x, body1.center.y, body2.center.x, body2.center.y) <= (body1.halfWidth + body2.halfWidth); - } - else { + } else { // Circle vs. Rect return this.circleBodyIntersects(body1, body2); } - } - else { - if (body2.isCircle) { - // Rect vs. Circle - return this.circleBodyIntersects(body2, body1); + } else if (body2.isCircle) { + // Rect vs. Circle + return this.circleBodyIntersects(body2, body1); + } else { + // Rect vs. Rect + if (body1.right <= body2.position.x) { + return false; } - else { - // Rect vs. Rect - if (body1.right <= body2.position.x) { - return false; - } - if (body1.bottom <= body2.position.y) { - return false; - } - - if (body1.position.x >= body2.right) { - return false; - } - - if (body1.position.y >= body2.bottom) { - return false; - } - - return true; + if (body1.bottom <= body2.position.y) { + return false; } + + if (body1.position.x >= body2.right) { + return false; + } + + if (body1.position.y >= body2.bottom) { + return false; + } + + return true; } }, @@ -86985,23 +88034,19 @@ THIS SOFTWARE. if (circle.y < rect.y) { if (circle.x < rect.x) { overlap = Phaser.Math.distance(circle.x, circle.y, rect.x, rect.y) - circle.radius; - } - else if (circle.x > rect.right) { + } else if (circle.x > rect.right) { overlap = Phaser.Math.distance(circle.x, circle.y, rect.right, rect.y) - circle.radius; } - } - else if (circle.y > rect.bottom) { + } else if (circle.y > rect.bottom) { if (circle.x < rect.x) { overlap = Phaser.Math.distance(circle.x, circle.y, rect.x, rect.bottom) - circle.radius; - } - else if (circle.x > rect.right) { + } else if (circle.x > rect.right) { overlap = Phaser.Math.distance(circle.x, circle.y, rect.right, rect.bottom) - circle.radius; } } overlap *= -1; - } - else { + } else { overlap = (body1.halfWidth + body2.halfWidth) - Phaser.Math.distance(body1.center.x, body1.center.y, body2.center.x, body2.center.y); } @@ -87025,12 +88070,12 @@ THIS SOFTWARE. // This is done to eliminate the vertical component of the velocity var v1 = { x: body1.velocity.x * Math.cos(angleCollision) + body1.velocity.y * Math.sin(angleCollision), - y: body1.velocity.x * Math.sin(angleCollision) - body1.velocity.y * Math.cos(angleCollision) + y: -body1.velocity.x * Math.sin(angleCollision) + body1.velocity.y * Math.cos(angleCollision) }; var v2 = { x: body2.velocity.x * Math.cos(angleCollision) + body2.velocity.y * Math.sin(angleCollision), - y: body2.velocity.x * Math.sin(angleCollision) - body2.velocity.y * Math.cos(angleCollision) + y: -body2.velocity.x * Math.sin(angleCollision) + body2.velocity.y * Math.cos(angleCollision) }; // We expect the new velocity after impact @@ -87055,28 +88100,21 @@ THIS SOFTWARE. if (Math.abs(angleCollision) < Math.PI / 2) { if ((body1.velocity.x > 0) && !body1.immovable && (body2.velocity.x > body1.velocity.x)) { body1.velocity.x *= -1; - } - else if ((body2.velocity.x < 0) && !body2.immovable && (body1.velocity.x < body2.velocity.x)) { + } else if ((body2.velocity.x < 0) && !body2.immovable && (body1.velocity.x < body2.velocity.x)) { body2.velocity.x *= -1; - } - else if ((body1.velocity.y > 0) && !body1.immovable && (body2.velocity.y > body1.velocity.y)) { + } else if ((body1.velocity.y > 0) && !body1.immovable && (body2.velocity.y > body1.velocity.y)) { body1.velocity.y *= -1; - } - else if ((body2.velocity.y < 0) && !body2.immovable && (body1.velocity.y < body2.velocity.y)) { + } else if ((body2.velocity.y < 0) && !body2.immovable && (body1.velocity.y < body2.velocity.y)) { body2.velocity.y *= -1; } - } - else if (Math.abs(angleCollision) > Math.PI / 2) { + } else if (Math.abs(angleCollision) > Math.PI / 2) { if ((body1.velocity.x < 0) && !body1.immovable && (body2.velocity.x < body1.velocity.x)) { body1.velocity.x *= -1; - } - else if ((body2.velocity.x > 0) && !body2.immovable && (body1.velocity.x > body2.velocity.x)) { + } else if ((body2.velocity.x > 0) && !body2.immovable && (body1.velocity.x > body2.velocity.x)) { body2.velocity.x *= -1; - } - else if ((body1.velocity.y < 0) && !body1.immovable && (body2.velocity.y < body1.velocity.y)) { + } else if ((body1.velocity.y < 0) && !body1.immovable && (body2.velocity.y < body1.velocity.y)) { body1.velocity.y *= -1; - } - else if ((body2.velocity.y > 0) && !body2.immovable && (body1.velocity.x > body2.velocity.y)) { + } else if ((body2.velocity.y > 0) && !body2.immovable && (body1.velocity.x > body2.velocity.y)) { body2.velocity.y *= -1; } } @@ -87122,29 +88160,25 @@ THIS SOFTWARE. // They overlap but neither of them are moving body1.embedded = true; body2.embedded = true; - } - else if (body1.deltaX() > body2.deltaX()) { + } else if (body1.deltaX() > body2.deltaX()) { // Body1 is moving right and / or Body2 is moving left overlap = body1.right - body2.x; if ((overlap > maxOverlap && !overlapOnly) || body1.checkCollision.right === false || body2.checkCollision.left === false) { overlap = 0; - } - else { + } else { body1.touching.none = false; body1.touching.right = true; body2.touching.none = false; body2.touching.left = true; } - } - else if (body1.deltaX() < body2.deltaX()) { + } else if (body1.deltaX() < body2.deltaX()) { // Body1 is moving left and/or Body2 is moving right overlap = body1.x - body2.width - body2.x; if ((-overlap > maxOverlap && !overlapOnly) || body1.checkCollision.left === false || body2.checkCollision.right === false) { overlap = 0; - } - else { + } else { body1.touching.none = false; body1.touching.left = true; body2.touching.none = false; @@ -87179,29 +88213,25 @@ THIS SOFTWARE. // They overlap but neither of them are moving body1.embedded = true; body2.embedded = true; - } - else if (body1.deltaY() > body2.deltaY()) { + } else if (body1.deltaY() > body2.deltaY()) { // Body1 is moving down and/or Body2 is moving up overlap = body1.bottom - body2.y; if ((overlap > maxOverlap && !overlapOnly) || body1.checkCollision.down === false || body2.checkCollision.up === false) { overlap = 0; - } - else { + } else { body1.touching.none = false; body1.touching.down = true; body2.touching.none = false; body2.touching.up = true; } - } - else if (body1.deltaY() < body2.deltaY()) { + } else if (body1.deltaY() < body2.deltaY()) { // Body1 is moving up and/or Body2 is moving down overlap = body1.y - body2.bottom; if ((-overlap > maxOverlap && !overlapOnly) || body1.checkCollision.up === false || body2.checkCollision.down === false) { overlap = 0; - } - else { + } else { body1.touching.none = false; body1.touching.up = true; body2.touching.none = false; @@ -87256,8 +88286,7 @@ THIS SOFTWARE. body1.velocity.x = avg + nv1 * body1.bounce.x; body2.velocity.x = avg + nv2 * body2.bounce.x; - } - else if (!body1.immovable) { + } else if (!body1.immovable) { body1.x -= overlap; body1.velocity.x = v2 - v1 * body1.bounce.x; @@ -87265,8 +88294,7 @@ THIS SOFTWARE. if (body2.moves) { body1.y += (body2.y - body2.prev.y) * body2.friction.y; } - } - else { + } else { body2.x += overlap; body2.velocity.x = v1 - v2 * body2.bounce.x; @@ -87320,8 +88348,7 @@ THIS SOFTWARE. body1.velocity.y = avg + nv1 * body1.bounce.y; body2.velocity.y = avg + nv2 * body2.bounce.y; - } - else if (!body1.immovable) { + } else if (!body1.immovable) { body1.y -= overlap; body1.velocity.y = v2 - v1 * body1.bounce.y; @@ -87329,8 +88356,7 @@ THIS SOFTWARE. if (body2.moves) { body1.x += (body2.x - body2.prev.x) * body2.friction.x; } - } - else { + } else { body2.y += overlap; body2.velocity.y = v1 - v2 * body2.bounce.y; @@ -87432,7 +88458,7 @@ THIS SOFTWARE. maxTime = 0; } - var angle = Math.atan2(destination.y - displayObject.y, destination.x - displayObject.x); + var angle = Phaser.Point.angle(destination, displayObject); if (maxTime > 0) { // We know how many pixels we need to move, but how fast? @@ -87699,20 +88725,38 @@ THIS SOFTWARE. * instead of its `x` and `y` values. This is useful of the object has been nested inside an offset Group, * or parent Game Object. * + * If you have nested objects and need to calculate the distance between their centers in World coordinates, + * set their anchors to (0.5, 0.5) and use the `world` argument. + * + * If objects aren't nested or they share a parent's offset, you can calculate the distance between their + * centers with the `useCenter` argument, regardless of their anchor values. + * * @method Phaser.Physics.Arcade#distanceBetween * @param {any} source - The Display Object to test from. * @param {any} target - The Display Object to test to. - * @param {boolean} [world=false] - Calculate the distance using World coordinates (true), or Object coordinates (false, the default) + * @param {boolean} [world=false] - Calculate the distance using World coordinates (true), or Object coordinates (false, the default). If `useCenter` is true, this value is ignored. + * @param {boolean} [useCenter=false] - Calculate the distance using the {@link Phaser.Sprite#centerX} and {@link Phaser.Sprite#centerY} coordinates. If true, this value overrides the `world` argument. * @return {number} The distance between the source and target objects. */ - distanceBetween: function (source, target, world) { + distanceBetween: function (source, target, world, useCenter) { if (world === undefined) { world = false; } - var dx = (world) ? source.world.x - target.world.x : source.x - target.x; - var dy = (world) ? source.world.y - target.world.y : source.y - target.y; + var dx; + var dy; + + if (useCenter) { + dx = source.centerX - target.centerX; + dy = source.centerY - target.centerY; + } else if (world) { + dx = source.world.x - target.world.x; + dy = source.world.y - target.world.y; + } else { + dx = source.x - target.x; + dy = source.y - target.y; + } return Math.sqrt(dx * dx + dy * dy); @@ -87721,7 +88765,7 @@ THIS SOFTWARE. /** * Find the distance between a display object (like a Sprite) and the given x/y coordinates. * The calculation is made from the display objects x/y coordinate. This may be the top-left if its anchor hasn't been changed. - * If you need to calculate from the center of a display object instead use the method distanceBetweenCenters() + * If you need to calculate from the center of a display object instead use {@link #distanceBetween} with the `useCenter` argument. * * The optional `world` argument allows you to return the result based on the Game Objects `world` property, * instead of its `x` and `y` values. This is useful of the object has been nested inside an offset Group, @@ -87750,7 +88794,7 @@ THIS SOFTWARE. /** * Find the distance between a display object (like a Sprite) and a Pointer. If no Pointer is given the Input.activePointer is used. * The calculation is made from the display objects x/y coordinate. This may be the top-left if its anchor hasn't been changed. - * If you need to calculate from the center of a display object instead use the method distanceBetweenCenters() + * If you need to calculate from the center of a display object instead use {@link #distanceBetween} with the `useCenter` argument. * * The optional `world` argument allows you to return the result based on the Game Objects `world` property, * instead of its `x` and `y` values. This is useful of the object has been nested inside an offset Group, @@ -87785,16 +88829,17 @@ THIS SOFTWARE. * @method Phaser.Physics.Arcade#closest * @param {any} source - The {@link Phaser.Point Point} or Display Object distances will be measured from. * @param {any[]} targets - The {@link Phaser.Point Points} or Display Objects whose distances to the source will be compared. - * @param {boolean} [world=false] - Calculate the distance using World coordinates (true), or Object coordinates (false, the default). + * @param {boolean} [world=false] - Calculate the distance using World coordinates (true), or Object coordinates (false, the default). If `useCenter` is true, this value is ignored. + * @param {boolean} [useCenter=false] - Calculate the distance using the {@link Phaser.Sprite#centerX} and {@link Phaser.Sprite#centerY} coordinates. If true, this value overrides the `world` argument. * @return {any} - The first target closest to the origin. */ - closest: function (source, targets, world) { + closest: function (source, targets, world, useCenter) { var min = Infinity; var closest = null; for (var i = 0, len = targets.length; i < len; i++) { var target = targets[i]; - var distance = this.distanceBetween(source, target, world); + var distance = this.distanceBetween(source, target, world, useCenter); if (distance < min) { closest = target; @@ -87811,16 +88856,17 @@ THIS SOFTWARE. * @method Phaser.Physics.Arcade#farthest * @param {any} source - The {@link Phaser.Point Point} or Display Object distances will be measured from. * @param {any[]} targets - The {@link Phaser.Point Points} or Display Objects whose distances to the source will be compared. - * @param {boolean} [world=false] - Calculate the distance using World coordinates (true), or Object coordinates (false, the default). + * @param {boolean} [world=false] - Calculate the distance using World coordinates (true), or Object coordinates (false, the default). If `useCenter` is true, this value is ignored. + * @param {boolean} [useCenter=false] - Calculate the distance using the {@link Phaser.Sprite#centerX} and {@link Phaser.Sprite#centerY} coordinates. If true, this value overrides the `world` argument. * @return {any} - The target closest to the origin. */ - farthest: function (source, targets, world) { + farthest: function (source, targets, world, useCenter) { var max = -1; var farthest = null; for (var i = 0, len = targets.length; i < len; i++) { var target = targets[i]; - var distance = this.distanceBetween(source, target, world); + var distance = this.distanceBetween(source, target, world, useCenter); if (distance > max) { farthest = target; @@ -87851,10 +88897,9 @@ THIS SOFTWARE. } if (world) { - return Math.atan2(target.world.y - source.world.y, target.world.x - source.world.x); - } - else { - return Math.atan2(target.y - source.y, target.x - source.x); + return Phaser.Point.angle(target.world, source.world); + } else { + return Phaser.Point.angle(target, source); } }, @@ -87898,8 +88943,7 @@ THIS SOFTWARE. if (world) { return Math.atan2(y - displayObject.world.y, x - displayObject.world.x); - } - else { + } else { return Math.atan2(y - displayObject.y, x - displayObject.x); } @@ -87929,8 +88973,7 @@ THIS SOFTWARE. if (world) { return Math.atan2(pointer.worldY - displayObject.world.y, pointer.worldX - displayObject.world.x); - } - else { + } else { return Math.atan2(pointer.worldY - displayObject.y, pointer.worldX - displayObject.x); } @@ -87980,7 +89023,7 @@ THIS SOFTWARE. this.game = sprite.game; /** - * @property {number} objType - The objType of physics system this body belongs to. + * @property {number} type - The type of physics system this body belongs to. */ this.type = Phaser.Physics.ARCADE; @@ -88282,7 +89325,7 @@ THIS SOFTWARE. /** * This flag allows you to disable the custom x separation that takes place by Physics.Arcade.separate. - * Used in combination with your own collision processHandler you can create whatever objType of collision response you need. + * Used in combination with your own collision processHandler you can create whatever type of collision response you need. * @property {boolean} customSeparateX - Use a custom separation system or the built-in one? * @default */ @@ -88290,7 +89333,7 @@ THIS SOFTWARE. /** * This flag allows you to disable the custom y separation that takes place by Physics.Arcade.separate. - * Used in combination with your own collision processHandler you can create whatever objType of collision response you need. + * Used in combination with your own collision processHandler you can create whatever type of collision response you need. * @property {boolean} customSeparateY - Use a custom separation system or the built-in one? * @default */ @@ -88488,8 +89531,7 @@ THIS SOFTWARE. this.height = b.height; this._reset = true; } - } - else { + } else { var asx = Math.abs(this.sprite.scale.x); var asy = Math.abs(this.sprite.scale.y); @@ -88590,7 +89632,7 @@ THIS SOFTWARE. this.updateCenter(); if (this.position.x !== this.prev.x || this.position.y !== this.prev.y) { - this.angle = Math.atan2(this.velocity.y, this.velocity.x); + this.angle = this.velocity.atan(); } this.speed = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y); @@ -88629,8 +89671,7 @@ THIS SOFTWARE. this.moveTimer += this.game.time.elapsedMS; percent = this.moveTimer / this.moveDuration; - } - else { + } else { this.moveTarget.end.set(this.position.x, this.position.y); percent = this.moveTarget.length / this.moveDistance; @@ -88697,15 +89738,13 @@ THIS SOFTWARE. if (this.deltaX() < 0) { this.facing = Phaser.LEFT; - } - else if (this.deltaX() > 0) { + } else if (this.deltaX() > 0) { this.facing = Phaser.RIGHT; } if (this.deltaY() < 0) { this.facing = Phaser.UP; - } - else if (this.deltaY() > 0) { + } else if (this.deltaY() > 0) { this.facing = Phaser.DOWN; } @@ -88716,8 +89755,7 @@ THIS SOFTWARE. if (this.deltaMax.x !== 0 && this._dx !== 0) { if (this._dx < 0 && this._dx < -this.deltaMax.x) { this._dx = -this.deltaMax.x; - } - else if (this._dx > 0 && this._dx > this.deltaMax.x) { + } else if (this._dx > 0 && this._dx > this.deltaMax.x) { this._dx = this.deltaMax.x; } } @@ -88725,8 +89763,7 @@ THIS SOFTWARE. if (this.deltaMax.y !== 0 && this._dy !== 0) { if (this._dy < 0 && this._dy < -this.deltaMax.y) { this._dy = -this.deltaMax.y; - } - else if (this._dy > 0 && this._dy > this.deltaMax.y) { + } else if (this._dy > 0 && this._dy > this.deltaMax.y) { this._dy = this.deltaMax.y; } } @@ -88768,8 +89805,7 @@ THIS SOFTWARE. this.velocity.x *= bx; this.blocked.left = true; this.blocked.none = false; - } - else if (this.right > bounds.right && check.right) { + } else if (this.right > bounds.right && check.right) { pos.x = bounds.right - this.width; this.velocity.x *= bx; this.blocked.right = true; @@ -88781,8 +89817,7 @@ THIS SOFTWARE. this.velocity.y *= by; this.blocked.up = true; this.blocked.none = false; - } - else if (this.bottom > bounds.bottom && check.down) { + } else if (this.bottom > bounds.bottom && check.down) { pos.y = bounds.bottom - this.height; this.velocity.y *= by; this.blocked.down = true; @@ -88838,8 +89873,7 @@ THIS SOFTWARE. if (direction === undefined) { angle = this.angle; direction = this.game.math.radToDeg(angle); - } - else { + } else { angle = this.game.math.degToRad(direction); } @@ -88849,11 +89883,9 @@ THIS SOFTWARE. // Avoid sin/cos if (direction === 0 || direction === 180) { this.velocity.set(Math.cos(angle) * speed, 0); - } - else if (direction === 90 || direction === 270) { + } else if (direction === 90 || direction === 270) { this.velocity.set(0, Math.sin(angle) * speed); - } - else { + } else { this.velocity.setToPolar(angle, speed); } @@ -88905,8 +89937,7 @@ THIS SOFTWARE. if (direction === undefined) { angle = this.angle; direction = this.game.math.radToDeg(angle); - } - else { + } else { angle = this.game.math.degToRad(direction); } @@ -88929,11 +89960,9 @@ THIS SOFTWARE. // Avoid sin/cos if (direction === 0 || direction === 180) { this.velocity.set(Math.cos(angle) * speed, 0); - } - else if (direction === 90 || direction === 270) { + } else if (direction === 90 || direction === 270) { this.velocity.set(0, Math.sin(angle) * speed); - } - else { + } else { this.velocity.setToPolar(angle, speed); } @@ -89048,8 +90077,7 @@ THIS SOFTWARE. this.offset.setTo(offsetX, offsetY); this.updateCenter(); - } - else { + } else { this.isCircle = false; } @@ -89254,7 +90282,7 @@ THIS SOFTWARE. * @name Phaser.Physics.Arcade.Body#left * @property {number} left - The x position of the Body. The same as `Body.x`. */ - Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "left", { + Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, 'left', { get: function () { @@ -89269,7 +90297,7 @@ THIS SOFTWARE. * @property {number} right - The right value of this Body (same as Body.x + Body.width) * @readonly */ - Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "right", { + Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, 'right', { get: function () { @@ -89283,7 +90311,7 @@ THIS SOFTWARE. * @name Phaser.Physics.Arcade.Body#top * @property {number} top - The y position of the Body. The same as `Body.y`. */ - Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "top", { + Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, 'top', { get: function () { @@ -89298,7 +90326,7 @@ THIS SOFTWARE. * @property {number} bottom - The bottom value of this Body (same as Body.y + Body.height) * @readonly */ - Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "bottom", { + Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, 'bottom', { get: function () { @@ -89312,7 +90340,7 @@ THIS SOFTWARE. * @name Phaser.Physics.Arcade.Body#x * @property {number} x - The x position. */ - Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "x", { + Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, 'x', { get: function () { @@ -89331,7 +90359,7 @@ THIS SOFTWARE. * @name Phaser.Physics.Arcade.Body#y * @property {number} y - The y position. */ - Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "y", { + Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, 'y', { get: function () { @@ -89375,18 +90403,13 @@ THIS SOFTWARE. if (filled) { context.fill(); - } - else { + } else { context.stroke(); } - } - else { - if (filled) { - context.fillRect(body.position.x - body.game.camera.x, body.position.y - body.game.camera.y, body.width, body.height); - } - else { - context.strokeRect(body.position.x - body.game.camera.x, body.position.y - body.game.camera.y, body.width, body.height); - } + } else if (filled) { + context.fillRect(body.position.x - body.game.camera.x, body.position.y - body.game.camera.y, body.width, body.height); + } else { + context.strokeRect(body.position.x - body.game.camera.x, body.position.y - body.game.camera.y, body.width, body.height); } }; @@ -89422,6 +90445,8 @@ THIS SOFTWARE. /** * The Arcade Physics Tile map collision methods. * + * These are mixed into {@link Phaser.Physics.Arcade}. + * * @class Phaser.Physics.Arcade.TilemapCollision * @constructor */ @@ -89431,7 +90456,7 @@ THIS SOFTWARE. Phaser.Physics.Arcade.TilemapCollision.prototype = { /** - * @property {number} TILE_BIAS - A value added to the delta values during collision with tiles. Adjust this if you get tunneling. + * @property {number} TILE_BIAS - A value added to the delta values during collision with tiles. The best value probably depends on your tile size. Increase it if sprites are tunneling; decrease it if sprites are flipping across tile edges. */ TILE_BIAS: 16, @@ -89475,14 +90500,11 @@ THIS SOFTWARE. } } } - } - else { - if (this.separateTile(i, sprite.body, mapData[i], tilemapLayer, overlapOnly)) { - this._total++; + } else if (this.separateTile(i, sprite.body, mapData[i], tilemapLayer, overlapOnly)) { + this._total++; - if (collideCallback) { - collideCallback.call(callbackContext, sprite, mapData[i]); - } + if (collideCallback) { + collideCallback.call(callbackContext, sprite, mapData[i]); } } } @@ -89538,8 +90560,7 @@ THIS SOFTWARE. if (!tile.intersects((body.position.x - tilemapLayerOffsetX), (body.position.y - tilemapLayerOffsetY), (body.right - tilemapLayerOffsetX), (body.bottom - tilemapLayerOffsetY))) { // no collision so bail out (separated in a previous step) return false; - } - else if (overlapOnly) { + } else if (overlapOnly) { // There is an overlap, and we don't need to separate. Bail. return true; } @@ -89550,8 +90571,7 @@ THIS SOFTWARE. if (tile.collisionCallback && !tile.collisionCallback.call(tile.collisionCallbackContext, body.sprite, tile)) { // If it returns true then we can carry on, otherwise we should abort. return false; - } - else if (typeof tile.layer.callbacks !== 'undefined' && tile.layer.callbacks[tile.index] && !tile.layer.callbacks[tile.index].callback.call(tile.layer.callbacks[tile.index].callbackContext, body.sprite, tile)) { + } else if (typeof tile.layer.callbacks !== 'undefined' && tile.layer.callbacks[tile.index] && !tile.layer.callbacks[tile.index].callback.call(tile.layer.callbacks[tile.index].callbackContext, body.sprite, tile)) { // If it returns true then we can carry on, otherwise we should abort. return false; } @@ -89570,8 +90590,7 @@ THIS SOFTWARE. if (body.deltaAbsX() > body.deltaAbsY()) { // Moving faster horizontally, check X axis first minX = -1; - } - else if (body.deltaAbsX() < body.deltaAbsY()) { + } else if (body.deltaAbsX() < body.deltaAbsY()) { // Moving faster vertically, check Y axis first minY = -1; } @@ -89595,8 +90614,7 @@ THIS SOFTWARE. if (tile.faceTop || tile.faceBottom) { oy = this.tileCheckY(body, tile, tilemapLayer); } - } - else { + } else { if (tile.faceTop || tile.faceBottom) { oy = this.tileCheckY(body, tile, tilemapLayer); @@ -89639,8 +90657,7 @@ THIS SOFTWARE. ox = 0; } } - } - else if (body.deltaX() > 0 && !body.blocked.right && tile.collideLeft && body.checkCollision.right) { + } else if (body.deltaX() > 0 && !body.blocked.right && tile.collideLeft && body.checkCollision.right) { // Body is moving RIGHT if (tile.faceLeft && (body.right - tilemapLayerOffsetX) > tile.left) { ox = (body.right - tilemapLayerOffsetX) - tile.left; @@ -89654,8 +90671,7 @@ THIS SOFTWARE. if (ox !== 0) { if (body.customSeparateX) { body.overlapX = ox; - } - else { + } else { this.processTileSeparationX(body, ox); } } @@ -89688,8 +90704,7 @@ THIS SOFTWARE. oy = 0; } } - } - else if (body.deltaY() > 0 && !body.blocked.down && tile.collideUp && body.checkCollision.down) { + } else if (body.deltaY() > 0 && !body.blocked.down && tile.collideUp && body.checkCollision.down) { // Body is moving DOWN if (tile.faceTop && (body.bottom - tilemapLayerOffsetY) > tile.top) { oy = (body.bottom - tilemapLayerOffsetY) - tile.top; @@ -89703,8 +90718,7 @@ THIS SOFTWARE. if (oy !== 0) { if (body.customSeparateY) { body.overlapY = oy; - } - else { + } else { this.processTileSeparationY(body, oy); } } @@ -89726,8 +90740,7 @@ THIS SOFTWARE. if (x < 0) { body.blocked.left = true; body.blocked.none = false; - } - else if (x > 0) { + } else if (x > 0) { body.blocked.right = true; body.blocked.none = false; } @@ -89736,8 +90749,7 @@ THIS SOFTWARE. if (body.bounce.x === 0) { body.velocity.x = 0; - } - else { + } else { body.velocity.x = -body.velocity.x * body.bounce.x; } @@ -89756,8 +90768,7 @@ THIS SOFTWARE. if (y < 0) { body.blocked.up = true; body.blocked.none = false; - } - else if (y > 0) { + } else if (y > 0) { body.blocked.down = true; body.blocked.none = false; } @@ -89766,8 +90777,7 @@ THIS SOFTWARE. if (body.bounce.y === 0) { body.velocity.y = 0; - } - else { + } else { body.velocity.y = -body.velocity.y * body.bounce.y; } @@ -89806,8 +90816,7 @@ THIS SOFTWARE. if (config === undefined) { config = {gravity: [0, 0], broadphase: new p2.SAPBroadphase()}; - } - else { + } else { if (!config.hasOwnProperty('gravity')) { config.gravity = [0, 0]; } @@ -89978,8 +90987,8 @@ THIS SOFTWARE. } // Hook into the World events - this.world.on("beginContact", this.beginContactHandler, this); - this.world.on("endContact", this.endContactHandler, this); + this.world.on('beginContact', this.beginContactHandler, this); + this.world.on('endContact', this.endContactHandler, this); /** * @property {array} collisionGroups - An array containing the collision groups that have been defined in the World. @@ -90112,8 +91121,7 @@ THIS SOFTWARE. if (object[i] instanceof Phaser.Group) { // If it's a Group then we do it on the children regardless this.enable(object[i].children, debug, children); - } - else { + } else { this.enableBody(object[i], debug); if (children && object[i].hasOwnProperty('children') && object[i].children.length > 0) { @@ -90121,18 +91129,14 @@ THIS SOFTWARE. } } } - } - else { - if (object instanceof Phaser.Group) { - // If it's a Group then we do it on the children regardless - this.enable(object.children, debug, children); - } - else { - this.enableBody(object, debug); + } else if (object instanceof Phaser.Group) { + // If it's a Group then we do it on the children regardless + this.enable(object.children, debug, children); + } else { + this.enableBody(object, debug); - if (children && object.hasOwnProperty('children') && object.children.length > 0) { - this.enable(object.children, debug, true); - } + if (children && object.hasOwnProperty('children') && object.children.length > 0) { + this.enable(object.children, debug, true); } } @@ -90168,10 +91172,9 @@ THIS SOFTWARE. setImpactEvents: function (state) { if (state) { - this.world.on("impact", this.impactHandler, this); - } - else { - this.world.off("impact", this.impactHandler, this); + this.world.on('impact', this.impactHandler, this); + } else { + this.world.off('impact', this.impactHandler, this); } }, @@ -90192,10 +91195,9 @@ THIS SOFTWARE. this.callbackContext = context; if (callback !== null) { - this.world.on("postBroadphase", this.postBroadphaseHandler, this); - } - else { - this.world.off("postBroadphase", this.postBroadphaseHandler, this); + this.world.on('postBroadphase', this.postBroadphaseHandler, this); + } else { + this.world.off('postBroadphase', this.postBroadphaseHandler, this); } }, @@ -90465,8 +91467,7 @@ THIS SOFTWARE. // We need a left wall. Do we have one already? if (this.walls[wall]) { this.walls[wall].position = [this.pxmi(x), this.pxmi(y)]; - } - else { + } else { this.walls[wall] = new p2.Body({mass: 0, position: [this.pxmi(x), this.pxmi(y)], angle: angle}); this.walls[wall].addShape(new p2.Plane()); @@ -90476,12 +91477,9 @@ THIS SOFTWARE. if (setCollisionGroup) { this.walls[wall].shapes[0].collisionGroup = this.boundsCollisionGroup.mask; } - } - else { - if (this.walls[wall]) { - this.world.removeBody(this.walls[wall]); - this.walls[wall] = null; - } + } else if (this.walls[wall]) { + this.world.removeBody(this.walls[wall]); + this.walls[wall] = null; } }, @@ -90522,8 +91520,7 @@ THIS SOFTWARE. if (this.useElapsedTime) { this.world.step(this.game.time.physicsElapsed); - } - else { + } else { this.world.step(this.frameRate); } @@ -90537,8 +91534,8 @@ THIS SOFTWARE. */ reset: function () { - this.world.on("beginContact", this.beginContactHandler, this); - this.world.on("endContact", this.endContactHandler, this); + this.world.on('beginContact', this.beginContactHandler, this); + this.world.on('endContact', this.endContactHandler, this); this.nothingCollisionGroup = new Phaser.Physics.P2.CollisionGroup(1); this.boundsCollisionGroup = new Phaser.Physics.P2.CollisionGroup(2); @@ -90603,8 +91600,8 @@ THIS SOFTWARE. this.world.removeContactMaterial(cms[i]); } - this.world.off("beginContact", this.beginContactHandler, this); - this.world.off("endContact", this.endContactHandler, this); + this.world.off('beginContact', this.beginContactHandler, this); + this.world.off('endContact', this.endContactHandler, this); this.postBroadphaseCallback = null; this.callbackContext = null; @@ -90643,8 +91640,7 @@ THIS SOFTWARE. if (body.data.world) { return false; - } - else { + } else { this.world.addBody(body.data); this.onBodyAdded.dispatch(body); @@ -90684,8 +91680,7 @@ THIS SOFTWARE. if (spring instanceof Phaser.Physics.P2.Spring || spring instanceof Phaser.Physics.P2.RotationalSpring) { this.world.addSpring(spring.data); - } - else { + } else { this.world.addSpring(spring); } @@ -90706,8 +91701,7 @@ THIS SOFTWARE. if (spring instanceof Phaser.Physics.P2.Spring || spring instanceof Phaser.Physics.P2.RotationalSpring) { this.world.removeSpring(spring.data); - } - else { + } else { this.world.removeSpring(spring); } @@ -90736,15 +91730,14 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Constraint, invalid body objects given'); - } - else { + } else { return this.addConstraint(new Phaser.Physics.P2.DistanceConstraint(this, bodyA, bodyB, distance, localAnchorA, localAnchorB, maxForce)); } }, /** - * Creates a constraint that tries to keep the distance between two bodies constant. + * Creates a constraint that tries to keep the relative angle between two bodies constant. * * @method Phaser.Physics.P2#createGearConstraint * @param {Phaser.Sprite|Phaser.Physics.P2.Body|p2.Body} bodyA - First connected body. @@ -90760,8 +91753,7 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Constraint, invalid body objects given'); - } - else { + } else { return this.addConstraint(new Phaser.Physics.P2.GearConstraint(this, bodyA, bodyB, angle, ratio)); } @@ -90787,8 +91779,7 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Constraint, invalid body objects given'); - } - else { + } else { return this.addConstraint(new Phaser.Physics.P2.RevoluteConstraint(this, bodyA, pivotA, bodyB, pivotB, maxForce, worldPivot)); } @@ -90812,8 +91803,7 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Constraint, invalid body objects given'); - } - else { + } else { return this.addConstraint(new Phaser.Physics.P2.LockConstraint(this, bodyA, bodyB, offset, angle, maxForce)); } @@ -90840,8 +91830,7 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Constraint, invalid body objects given'); - } - else { + } else { return this.addConstraint(new Phaser.Physics.P2.PrismaticConstraint(this, bodyA, bodyB, lockRotation, anchorA, anchorB, axis, maxForce)); } @@ -91027,12 +92016,10 @@ THIS SOFTWARE. if (object instanceof p2.Body) { // Native p2 body return object; - } - else if (object instanceof Phaser.Physics.P2.Body) { + } else if (object instanceof Phaser.Physics.P2.Body) { // Phaser P2 Body return object.data; - } - else if (object['body'] && object['body'].type === Phaser.Physics.P2JS) { + } else if (object['body'] && object['body'].type === Phaser.Physics.P2JS) { // Sprite, TileSprite, etc return object.body.data; } @@ -91063,7 +92050,7 @@ THIS SOFTWARE. /** * Populates and returns an array of all current Constraints in the world. * You will get an array of p2 constraints back. This can be of mixed types, for example the array may contain - * PrismaticConstraints, RevoluteConstraints or any other valid p2 constraint objType. + * PrismaticConstraints, RevoluteConstraints or any other valid p2 constraint type. * * @method Phaser.Physics.P2#getConstraints * @return {array} An array containing all current Constraints in the world. @@ -91112,11 +92099,9 @@ THIS SOFTWARE. while (i--) { if (bodies[i] instanceof Phaser.Physics.P2.Body && !(filterStatic && bodies[i].data.type === p2.Body.STATIC)) { query.push(bodies[i].data); - } - else if (bodies[i] instanceof p2.Body && bodies[i].parent && !(filterStatic && bodies[i].objType === p2.Body.STATIC)) { + } else if (bodies[i] instanceof p2.Body && bodies[i].parent && !(filterStatic && bodies[i].type === p2.Body.STATIC)) { query.push(bodies[i]); - } - else if (bodies[i] instanceof Phaser.Sprite && bodies[i].hasOwnProperty('body') && !(filterStatic && bodies[i].body.data.type === p2.Body.STATIC)) { + } else if (bodies[i] instanceof Phaser.Sprite && bodies[i].hasOwnProperty('body') && !(filterStatic && bodies[i].body.data.type === p2.Body.STATIC)) { query.push(bodies[i].body.data); } } @@ -91194,8 +92179,7 @@ THIS SOFTWARE. object.children[i].body.setCollisionGroup(group); } } - } - else { + } else { object.body.setCollisionGroup(group); } @@ -91223,8 +92207,7 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Spring, invalid body objects given'); - } - else { + } else { return this.addSpring(new Phaser.Physics.P2.Spring(this, bodyA, bodyB, restLength, stiffness, damping, worldA, worldB, localA, localB)); } @@ -91248,8 +92231,7 @@ THIS SOFTWARE. if (!bodyA || !bodyB) { console.warn('Cannot create Rotational Spring, invalid body objects given'); - } - else { + } else { return this.addSpring(new Phaser.Physics.P2.RotationalSpring(this, bodyA, bodyB, restAngle, stiffness, damping)); } @@ -91460,8 +92442,7 @@ THIS SOFTWARE. if (right && right.collides) { width += tile.width; - } - else { + } else { var body = this.createBody(sx, sy, 0, false); body.addRectangle(width, tile.height, width / 2, tile.height / 2, 0); @@ -91474,8 +92455,7 @@ THIS SOFTWARE. width = 0; } - } - else { + } else { var body = this.createBody(tile.x * tile.width, tile.y * tile.height, 0, false); body.addRectangle(tile.width, tile.height, tile.width / 2, tile.height / 2, 0); @@ -91560,7 +92540,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#friction * @property {number} friction - Friction between colliding bodies. This value is used if no matching ContactMaterial is found for a Material pair. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "friction", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'friction', { get: function () { @@ -91580,7 +92560,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#restitution * @property {number} restitution - Default coefficient of restitution between colliding bodies. This value is used if no matching ContactMaterial is found for a Material pair. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "restitution", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'restitution', { get: function () { @@ -91600,7 +92580,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#contactMaterial * @property {p2.ContactMaterial} contactMaterial - The default Contact Material being used by the World. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "contactMaterial", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'contactMaterial', { get: function () { @@ -91620,7 +92600,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#applySpringForces * @property {boolean} applySpringForces - Enable to automatically apply spring forces each step. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "applySpringForces", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'applySpringForces', { get: function () { @@ -91640,7 +92620,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#applyDamping * @property {boolean} applyDamping - Enable to automatically apply body damping each step. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "applyDamping", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'applyDamping', { get: function () { @@ -91660,7 +92640,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#applyGravity * @property {boolean} applyGravity - Enable to automatically apply gravity each step. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "applyGravity", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'applyGravity', { get: function () { @@ -91680,7 +92660,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#solveConstraints * @property {boolean} solveConstraints - Enable/disable constraint solving in each step. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "solveConstraints", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'solveConstraints', { get: function () { @@ -91701,7 +92681,7 @@ THIS SOFTWARE. * @property {boolean} time - The World time. * @readonly */ - Object.defineProperty(Phaser.Physics.P2.prototype, "time", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'time', { get: function () { @@ -91715,7 +92695,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#emitImpactEvent * @property {boolean} emitImpactEvent - Set to true if you want to the world to emit the "impact" event. Turning this off could improve performance. */ - Object.defineProperty(Phaser.Physics.P2.prototype, "emitImpactEvent", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'emitImpactEvent', { get: function () { @@ -91737,7 +92717,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2#sleepMode * @property {number} sleepMode */ - Object.defineProperty(Phaser.Physics.P2.prototype, "sleepMode", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'sleepMode', { get: function () { @@ -91758,7 +92738,7 @@ THIS SOFTWARE. * @property {number} total - The total number of bodies in the world. * @readonly */ - Object.defineProperty(Phaser.Physics.P2.prototype, "total", { + Object.defineProperty(Phaser.Physics.P2.prototype, 'total', { get: function () { @@ -91913,8 +92893,7 @@ THIS SOFTWARE. return this.flatten(fixtures); - } - else { + } else { return this.allFixtures; } @@ -91961,8 +92940,7 @@ THIS SOFTWARE. if (!isNaN(key - 0)) { this.groupedFixtures[key] = this.groupedFixtures[key] || []; this.groupedFixtures[key] = this.groupedFixtures[key].concat(value); - } - else { + } else { this.namedFixtures[key] = this.flatten(value); } @@ -91992,6 +92970,7 @@ THIS SOFTWARE. } }; + /** * @author Richard Davey * @copyright 2016 Photon Storm Ltd. @@ -92019,7 +92998,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.PointProxy#x * @property {number} x - The x property of this PointProxy get and set in pixels. */ - Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, "x", { + Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, 'x', { get: function () { @@ -92039,7 +93018,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.PointProxy#y * @property {number} y - The y property of this PointProxy get and set in pixels. */ - Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, "y", { + Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, 'y', { get: function () { @@ -92059,7 +93038,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.PointProxy#mx * @property {number} mx - The x property of this PointProxy get and set in meters. */ - Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, "mx", { + Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, 'mx', { get: function () { @@ -92079,7 +93058,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.PointProxy#my * @property {number} my - The x property of this PointProxy get and set in meters. */ - Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, "my", { + Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype, 'my', { get: function () { @@ -92122,7 +93101,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.InversePointProxy#x * @property {number} x - The x property of this InversePointProxy get and set in pixels. */ - Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, "x", { + Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, 'x', { get: function () { @@ -92142,7 +93121,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.InversePointProxy#y * @property {number} y - The y property of this InversePointProxy get and set in pixels. */ - Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, "y", { + Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, 'y', { get: function () { @@ -92162,7 +93141,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.InversePointProxy#mx * @property {number} mx - The x property of this InversePointProxy get and set in meters. */ - Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, "mx", { + Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, 'mx', { get: function () { @@ -92182,7 +93161,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.InversePointProxy#my * @property {number} my - The y property of this InversePointProxy get and set in meters. */ - Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, "my", { + Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype, 'my', { get: function () { @@ -92245,7 +93224,7 @@ THIS SOFTWARE. this.sprite = sprite; /** - * @property {number} objType - The objType of physics system this body belongs to. + * @property {number} type - The type of physics system this body belongs to. */ this.type = Phaser.Physics.P2JS; @@ -92394,8 +93373,7 @@ THIS SOFTWARE. if (object['id']) { id = object.id; - } - else if (object['body']) { + } else if (object['body']) { id = object.body.id; } @@ -92403,8 +93381,7 @@ THIS SOFTWARE. if (callback === null) { delete (this._bodyCallbacks[id]); delete (this._bodyCallbackContext[id]); - } - else { + } else { this._bodyCallbacks[id] = callback; this._bodyCallbackContext[id] = callbackContext; } @@ -92429,8 +93406,7 @@ THIS SOFTWARE. if (callback === null) { delete (this._groupCallbacks[group.mask]); delete (this._groupCallbackContext[group.mask]); - } - else { + } else { this._groupCallbacks[group.mask] = callback; this._groupCallbackContext[group.mask] = callbackContext; } @@ -92473,8 +93449,7 @@ THIS SOFTWARE. for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].collisionMask = mask; } - } - else { + } else { shape.collisionMask = mask; } @@ -92497,8 +93472,7 @@ THIS SOFTWARE. this.data.shapes[i].collisionGroup = group.mask; this.data.shapes[i].collisionMask = mask; } - } - else { + } else { shape.collisionGroup = group.mask; shape.collisionMask = mask; } @@ -92532,8 +93506,7 @@ THIS SOFTWARE. this.data.shapes[i].collisionMask = null; } } - } - else { + } else { if (clearGroup) { shape.collisionGroup = null; } @@ -92578,8 +93551,7 @@ THIS SOFTWARE. } } } - } - else { + } else { index = this.collidesWith.indexOf(group); if (index > -1) { @@ -92598,8 +93570,7 @@ THIS SOFTWARE. for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].collisionMask = mask; } - } - else { + } else { shape.collisionMask = mask; } @@ -92626,14 +93597,11 @@ THIS SOFTWARE. } } } - } - else { - if (this.collidesWith.indexOf(group) === -1) { - this.collidesWith.push(group); + } else if (this.collidesWith.indexOf(group) === -1) { + this.collidesWith.push(group); - if (callback) { - this.createGroupCallback(group, callback, callbackContext); - } + if (callback) { + this.createGroupCallback(group, callback, callbackContext); } } @@ -92643,8 +93611,7 @@ THIS SOFTWARE. for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].collisionMask = mask; } - } - else { + } else { shape.collisionMask = mask; } @@ -93313,11 +94280,9 @@ THIS SOFTWARE. // Did they pass in a single array of points? if (points.length === 1 && Array.isArray(points[0])) { path = points[0].slice(0); - } - else if (Array.isArray(points[0])) { + } else if (Array.isArray(points[0])) { path = points.slice(); - } - else if (typeof points[0] === 'number') { + } else if (typeof points[0] === 'number') { // We've a list of numbers for (var i = 0, len = points.length; i < len; i += 2) { path.push([points[i], points[i + 1]]); @@ -93443,8 +94408,7 @@ THIS SOFTWARE. for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].material = material; } - } - else { + } else { shape.material = material; } @@ -93524,8 +94488,7 @@ THIS SOFTWARE. this.data.addShape(shape, offset); generatedShapes.push(shape); - } - else { + } else { var polygons = fixtureData.polygons; var cm = p2.vec2.create(); @@ -93588,12 +94551,11 @@ THIS SOFTWARE. if (key === null) { var data = object; - } - else { + } else { var data = this.game.cache.getPhysicsData(key, object); } - if (typeof scale !== "number") { + if (typeof scale !== 'number') { scale = 1; } @@ -93644,7 +94606,7 @@ THIS SOFTWARE. /** * Dynamic body. Dynamic bodies body can move and respond to collisions and forces. * @property DYNAMIC - * @objType {Number} + * @type {Number} * @static */ Phaser.Physics.P2.Body.DYNAMIC = 1; @@ -93652,7 +94614,7 @@ THIS SOFTWARE. /** * Static body. Static bodies do not move, and they do not respond to forces or collision. * @property STATIC - * @objType {Number} + * @type {Number} * @static */ Phaser.Physics.P2.Body.STATIC = 2; @@ -93660,7 +94622,7 @@ THIS SOFTWARE. /** * Kinematic body. Kinematic bodies only moves according to its .velocity, and does not respond to collisions or force. * @property KINEMATIC - * @objType {Number} + * @type {Number} * @static */ Phaser.Physics.P2.Body.KINEMATIC = 4; @@ -93669,7 +94631,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#static * @property {boolean} static - Returns true if the Body is static. Setting Body.static to 'false' will make it dynamic. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "static", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'static', { get: function () { @@ -93682,8 +94644,7 @@ THIS SOFTWARE. if (value && this.data.type !== Phaser.Physics.P2.Body.STATIC) { this.data.type = Phaser.Physics.P2.Body.STATIC; this.mass = 0; - } - else if (!value && this.data.type === Phaser.Physics.P2.Body.STATIC) { + } else if (!value && this.data.type === Phaser.Physics.P2.Body.STATIC) { this.data.type = Phaser.Physics.P2.Body.DYNAMIC; this.mass = 1; } @@ -93696,7 +94657,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#dynamic * @property {boolean} dynamic - Returns true if the Body is dynamic. Setting Body.dynamic to 'false' will make it static. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "dynamic", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'dynamic', { get: function () { @@ -93709,8 +94670,7 @@ THIS SOFTWARE. if (value && this.data.type !== Phaser.Physics.P2.Body.DYNAMIC) { this.data.type = Phaser.Physics.P2.Body.DYNAMIC; this.mass = 1; - } - else if (!value && this.data.type === Phaser.Physics.P2.Body.DYNAMIC) { + } else if (!value && this.data.type === Phaser.Physics.P2.Body.DYNAMIC) { this.data.type = Phaser.Physics.P2.Body.STATIC; this.mass = 0; } @@ -93723,7 +94683,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#kinematic * @property {boolean} kinematic - Returns true if the Body is kinematic. Setting Body.kinematic to 'false' will make it static. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "kinematic", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'kinematic', { get: function () { @@ -93736,8 +94696,7 @@ THIS SOFTWARE. if (value && this.data.type !== Phaser.Physics.P2.Body.KINEMATIC) { this.data.type = Phaser.Physics.P2.Body.KINEMATIC; this.mass = 4; - } - else if (!value && this.data.type === Phaser.Physics.P2.Body.KINEMATIC) { + } else if (!value && this.data.type === Phaser.Physics.P2.Body.KINEMATIC) { this.data.type = Phaser.Physics.P2.Body.STATIC; this.mass = 0; } @@ -93750,7 +94709,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#allowSleep * @property {boolean} allowSleep - */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "allowSleep", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'allowSleep', { get: function () { @@ -93776,7 +94735,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#angle * @property {number} angle - The angle of this Body in degrees. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angle", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'angle', { get: function () { @@ -93797,7 +94756,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#angularDamping * @property {number} angularDamping - The angular damping acting acting on the body. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angularDamping", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'angularDamping', { get: function () { @@ -93817,7 +94776,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#angularForce * @property {number} angularForce - The angular force acting on the body. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angularForce", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'angularForce', { get: function () { @@ -93837,7 +94796,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#angularVelocity * @property {number} angularVelocity - The angular velocity of the body. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angularVelocity", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'angularVelocity', { get: function () { @@ -93858,7 +94817,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#damping * @property {number} damping - The linear damping acting on the body in the velocity direction. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "damping", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'damping', { get: function () { @@ -93878,7 +94837,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#fixedRotation * @property {boolean} fixedRotation - */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "fixedRotation", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'fixedRotation', { get: function () { @@ -93900,7 +94859,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#inertia * @property {number} inertia - The inertia of the body around the Z axis.. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "inertia", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'inertia', { get: function () { @@ -93920,7 +94879,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#mass * @property {number} mass - The mass of the body. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "mass", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'mass', { get: function () { @@ -93941,9 +94900,9 @@ THIS SOFTWARE. /** * @name Phaser.Physics.P2.Body#motionState - * @property {number} motionState - The objType of motion this body has. Should be one of: Body.STATIC (the body does not move), Body.DYNAMIC (body can move and respond to collisions) and Body.KINEMATIC (only moves according to its .velocity). + * @property {number} motionState - The type of motion this body has. Should be one of: Body.STATIC (the body does not move), Body.DYNAMIC (body can move and respond to collisions) and Body.KINEMATIC (only moves according to its .velocity). */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "motionState", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'motionState', { get: function () { @@ -93968,7 +94927,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#rotation * @property {number} rotation - The angle of this Body in radians. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "rotation", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'rotation', { get: function () { @@ -93988,7 +94947,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#sleepSpeedLimit * @property {number} sleepSpeedLimit - . */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "sleepSpeedLimit", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'sleepSpeedLimit', { get: function () { @@ -94008,7 +94967,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#x * @property {number} x - The x coordinate of this Body. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "x", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'x', { get: function () { @@ -94028,7 +94987,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#y * @property {number} y - The y coordinate of this Body. */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "y", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'y', { get: function () { @@ -94049,7 +95008,7 @@ THIS SOFTWARE. * @property {number} id - The Body ID. Each Body that has been added to the World has a unique ID. * @readonly */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "id", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'id', { get: function () { @@ -94063,7 +95022,7 @@ THIS SOFTWARE. * @name Phaser.Physics.P2.Body#debug * @property {boolean} debug - Enable or disable debug drawing of this body */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "debug", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'debug', { get: function () { @@ -94076,8 +95035,7 @@ THIS SOFTWARE. if (value && !this.debugBody) { // This will be added to the global space this.debugBody = new Phaser.Physics.P2.BodyDebug(this.game, this.data); - } - else if (!value && this.debugBody) { + } else if (!value && this.debugBody) { this.debugBody.destroy(); this.debugBody = null; } @@ -94096,7 +95054,7 @@ THIS SOFTWARE. * @property {boolean} collideWorldBounds - Should the Body collide with the World bounds? * @default true */ - Object.defineProperty(Phaser.Physics.P2.Body.prototype, "collideWorldBounds", { + Object.defineProperty(Phaser.Physics.P2.Body.prototype, 'collideWorldBounds', { get: function () { @@ -94109,8 +95067,7 @@ THIS SOFTWARE. if (value && !this._collideWorldBounds) { this._collideWorldBounds = true; this.updateCollisionMask(); - } - else if (!value && this._collideWorldBounds) { + } else if (!value && this._collideWorldBounds) { this._collideWorldBounds = false; this.updateCollisionMask(); } @@ -94157,7 +95114,7 @@ THIS SOFTWARE. alpha: 0.5 }; - this.settings = Phaser.Utils.extend(defaultSettings, settings); + this.settings = Object.assign(defaultSettings, settings); /** * @property {number} ppu - Pixels per Length Unit. @@ -94188,7 +95145,7 @@ THIS SOFTWARE. Phaser.Physics.P2.BodyDebug.prototype = Object.create(Phaser.Group.prototype); Phaser.Physics.P2.BodyDebug.prototype.constructor = Phaser.Physics.P2.BodyDebug; - Phaser.Utils.extend(Phaser.Physics.P2.BodyDebug.prototype, { + Object.assign(Phaser.Physics.P2.BodyDebug.prototype, { /** * Core update. @@ -94231,24 +95188,19 @@ THIS SOFTWARE. if (child instanceof p2.Circle) { this.drawCircle(sprite, offset[0] * this.ppu, offset[1] * this.ppu, angle, child.radius * this.ppu, color, lw); - } - else if (child instanceof p2.Capsule) { + } else if (child instanceof p2.Capsule) { this.drawCapsule(sprite, offset[0] * this.ppu, offset[1] * this.ppu, angle, child.length * this.ppu, child.radius * this.ppu, lineColor, color, lw); - } - else if (child instanceof p2.Plane) { + } else if (child instanceof p2.Plane) { this.drawPlane(sprite, offset[0] * this.ppu, -offset[1] * this.ppu, color, lineColor, lw * 5, lw * 10, lw * 10, this.ppu * 100, angle); - } - else if (child instanceof p2.Line) { + } else if (child instanceof p2.Line) { this.drawLine(sprite, child.length * this.ppu, lineColor, lw); - } - else if (child instanceof p2.Box) { + } else if (child instanceof p2.Box) { this.drawRectangle(sprite, offset[0] * this.ppu, offset[1] * this.ppu, angle, child.width * this.ppu, child.height * this.ppu, lineColor, color, lw); - } - else if (child instanceof p2.Convex) { + } else if (child instanceof p2.Convex) { verts = []; vrot = p2.vec2.create(); - for (j = _j = 0, _ref1 = child.vertices.length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; j = 0 <= _ref1 ? ++_j : --_j) { + for (j = _j = 0, _ref1 = child.vertices.length; _ref1 >= 0 ? _j < _ref1 : _j > _ref1; j = _ref1 >= 0 ? ++_j : --_j) { v = child.vertices[j]; p2.vec2.rotate(vrot, v, angle); verts.push([(vrot[0] + offset[0]) * this.ppu, -(vrot[1] + offset[1]) * this.ppu]); @@ -94357,8 +95309,7 @@ THIS SOFTWARE. if (i === 0) { g.moveTo(x, -y); - } - else { + } else { g.lineTo(x, -y); } @@ -94371,8 +95322,7 @@ THIS SOFTWARE. g.moveTo(verts[verts.length - 1][0], -verts[verts.length - 1][1]); return g.lineTo(verts[0][0], -verts[0][1]); } - } - else { + } else { colors = [0xff0000, 0x00ff00, 0x0000ff]; i = 0; @@ -94414,7 +95364,7 @@ THIS SOFTWARE. g.lineStyle(lineWidth, color, 1); - if (typeof fillColor === "number") { + if (typeof fillColor === 'number') { g.beginFill(fillColor); } @@ -94430,8 +95380,7 @@ THIS SOFTWARE. if (x !== lastx || y !== lasty) { if (i === 0) { g.moveTo(x, y); - } - else { + } else { p1x = lastx; p1y = lasty; p2x = x; @@ -94452,11 +95401,11 @@ THIS SOFTWARE. } - if (typeof fillColor === "number") { + if (typeof fillColor === 'number') { g.endFill(); } - if (path.length > 2 && typeof fillColor === "number") { + if (path.length > 2 && typeof fillColor === 'number') { g.moveTo(path[path.length - 1][0], path[path.length - 1][1]); g.lineTo(path[0][0], path[0][1]); } @@ -94585,8 +95534,7 @@ THIS SOFTWARE. if (hex.length === 2) { return hex; - } - else { + } else { return hex + '0'; } @@ -95276,7 +96224,7 @@ THIS SOFTWARE. * @class Phaser.Tile * @constructor * @param {object} layer - The layer in the Tilemap data that this tile belongs to. - * @param {number} index - The index of this tile objType in the core map data. + * @param {number} index - The index of this tile type in the core map data. * @param {number} x - The x coordinate of this tile. * @param {number} y - The y coordinate of this tile. * @param {number} width - Width of the tile. @@ -95415,6 +96363,12 @@ THIS SOFTWARE. */ this.collisionCallbackContext = this; + /** + * @property {boolean} debug + * @default + */ + this.debug = false; + }; Phaser.Tile.prototype = { @@ -95547,12 +96501,10 @@ THIS SOFTWARE. if (collides && faces) { // Does this tile have any collide flags OR interesting face? return (this.collideLeft || this.collideRight || this.collideUp || this.collideDown || this.faceTop || this.faceBottom || this.faceLeft || this.faceRight || this.collisionCallback); - } - else if (collides) { + } else if (collides) { // Does this tile collide? return (this.collideLeft || this.collideRight || this.collideUp || this.collideDown); - } - else if (faces) { + } else if (faces) { // Does this tile have an interesting face? return (this.faceTop || this.faceBottom || this.faceLeft || this.faceRight); } @@ -95592,7 +96544,7 @@ THIS SOFTWARE. * @property {boolean} collides - True if this tile can collide on any of its faces. * @readonly */ - Object.defineProperty(Phaser.Tile.prototype, "collides", { + Object.defineProperty(Phaser.Tile.prototype, 'collides', { get: function () { return (this.collideLeft || this.collideRight || this.collideUp || this.collideDown); @@ -95605,7 +96557,7 @@ THIS SOFTWARE. * @property {boolean} canCollide - True if this tile can collide on any of its faces or has a collision callback set. * @readonly */ - Object.defineProperty(Phaser.Tile.prototype, "canCollide", { + Object.defineProperty(Phaser.Tile.prototype, 'canCollide', { get: function () { return (this.collideLeft || this.collideRight || this.collideUp || this.collideDown || this.collisionCallback); @@ -95618,7 +96570,7 @@ THIS SOFTWARE. * @property {number} left - The x value in pixels. * @readonly */ - Object.defineProperty(Phaser.Tile.prototype, "left", { + Object.defineProperty(Phaser.Tile.prototype, 'left', { get: function () { return this.worldX; @@ -95631,7 +96583,7 @@ THIS SOFTWARE. * @property {number} right - The sum of the x and width properties. * @readonly */ - Object.defineProperty(Phaser.Tile.prototype, "right", { + Object.defineProperty(Phaser.Tile.prototype, 'right', { get: function () { return this.worldX + this.width; @@ -95644,7 +96596,7 @@ THIS SOFTWARE. * @property {number} top - The y value. * @readonly */ - Object.defineProperty(Phaser.Tile.prototype, "top", { + Object.defineProperty(Phaser.Tile.prototype, 'top', { get: function () { return this.worldY; @@ -95657,7 +96609,7 @@ THIS SOFTWARE. * @property {number} bottom - The sum of the y and height properties. * @readonly */ - Object.defineProperty(Phaser.Tile.prototype, "bottom", { + Object.defineProperty(Phaser.Tile.prototype, 'bottom', { get: function () { return this.worldY + this.height; @@ -95837,37 +96789,37 @@ THIS SOFTWARE. /** * @constant - * @objType {number} + * @type {number} */ Phaser.Tilemap.CSV = 0; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Tilemap.TILED_JSON = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Tilemap.NORTH = 0; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Tilemap.EAST = 1; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Tilemap.SOUTH = 2; /** * @constant - * @objType {number} + * @type {number} */ Phaser.Tilemap.WEST = 3; @@ -95972,8 +96924,7 @@ THIS SOFTWARE. if (key instanceof Phaser.BitmapData) { img = key.canvas; - } - else { + } else { if (!this.game.cache.checkImageKey(key)) { console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "' + key + '"'); return null; @@ -95986,14 +96937,14 @@ THIS SOFTWARE. if (idx === null && this.format === Phaser.Tilemap.TILED_JSON) { console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "' + tileset + '"'); + console.log('Tilesets: ', this.tilesets); return null; } if (this.tilesets[idx]) { this.tilesets[idx].setImage(img); return this.tilesets[idx]; - } - else { + } else { var newSet = new Phaser.Tileset(tileset, gid, tileWidth, tileHeight, tileMargin, tileSpacing, {}); newSet.setImage(img); @@ -96038,8 +96989,6 @@ THIS SOFTWARE. } - return null; - }, /** @@ -96064,8 +97013,9 @@ THIS SOFTWARE. * @param {Phaser.Group} [group=Phaser.World] - Group to add the Sprite to. If not specified it will be added to the World group. * @param {object} [CustomClass=Phaser.Sprite] - If you wish to create your own class, rather than Phaser.Sprite, pass the class here. Your class must extend Phaser.Sprite and have the same constructor parameters. * @param {boolean} [adjustY=true] - By default the Tiled map editor uses a bottom-left coordinate system. Phaser uses top-left. So most objects will appear too low down. This parameter moves them up by their height. + * @param {boolean} [adjustSize=true] - By default the width and height of the objects are transferred to the sprite. This parameter controls that behavior. */ - createFromObjects: function (name, gid, key, frame, exists, autoCull, group, CustomClass, adjustY) { + createFromObjects: function (name, gid, key, frame, exists, autoCull, group, CustomClass, adjustY, adjustSize) { if (exists === undefined) { exists = true; @@ -96082,9 +97032,13 @@ THIS SOFTWARE. if (adjustY === undefined) { adjustY = true; } + if (adjustSize === undefined) { + adjustSize = true; + } if (!this.objects[name]) { console.warn('Tilemap.createFromObjects: Invalid objectgroup name given: ' + name); + console.log('Objects: ', this.objects); return; } @@ -96094,11 +97048,9 @@ THIS SOFTWARE. if (obj.gid !== undefined && typeof gid === 'number' && obj.gid === gid) { found = true; - } - else if (obj.id !== undefined && typeof gid === 'number' && obj.id === gid) { + } else if (obj.id !== undefined && typeof gid === 'number' && obj.id === gid) { found = true; - } - else if (obj.name !== undefined && typeof gid === 'string' && obj.name === gid) { + } else if (obj.name !== undefined && typeof gid === 'string' && obj.name === gid) { found = true; } @@ -96110,13 +97062,15 @@ THIS SOFTWARE. sprite.exists = exists; sprite.visible = obj.visible; - if (obj.width) { + if (adjustSize) { + if (obj.width) { sprite.width = obj.width; } - if (obj.height) { + if (obj.height) { sprite.height = obj.height; } + } if (obj.rotation) { sprite.angle = obj.rotation; @@ -96144,7 +97098,7 @@ THIS SOFTWARE. * * @method Phaser.Tilemap#createFromTiles * @param {integer|Array} tiles - The tile index, or array of indexes, to create Sprites from. - * @param {integer|Array} replacements - The tile index, or array of indexes, to change a converted tile to. Set to `null` to not change. + * @param {integer|Array} replacements - The tile index, or array of indexes, to change a converted tile to. Set to -1 to remove the tile. Set to `null` to make no change (leave the tile as is). * @param {string} key - The Game.cache key of the image that this Sprite will use. * @param {number|string|Phaser.TilemapLayer} [layer] - The layer to operate on. * @param {Phaser.Group} [group=Phaser.World] - Group to add the Sprite to. If not specified it will be added to the World group. @@ -96159,8 +97113,7 @@ THIS SOFTWARE. if (replacements === undefined || replacements === null) { replacements = []; - } - else if (typeof replacements === 'number') { + } else if (typeof replacements === 'number') { replacements = [replacements]; } @@ -96212,8 +97165,7 @@ THIS SOFTWARE. for (i = 0; i < tiles.length; i++) { this.replace(tiles[i], replacements[0], 0, 0, lw, lh, layer); } - } - else if (replacements.length > 1) { + } else if (replacements.length > 1) { // Assume 1 for 1 mapping for (i = 0; i < tiles.length; i++) { this.replace(tiles[i], replacements[i], 0, 0, lw, lh, layer); @@ -96259,6 +97211,7 @@ THIS SOFTWARE. if (index === null || index > this.layers.length) { console.warn('Tilemap.createLayer: Invalid layer ID given: "' + layer + '"'); + console.log('Layers: ', this.layers); return; } @@ -96266,15 +97219,13 @@ THIS SOFTWARE. if (width === undefined || width <= 0) { width = Math.min(this.game.width, this.layers[index].widthInPixels); - } - else if (width > this.game.width) { + } else if (width > this.game.width) { width = this.game.width; } if (height === undefined || height <= 0) { height = Math.min(this.game.height, this.layers[index].heightInPixels); - } - else if (height > this.game.height) { + } else if (height > this.game.height) { height = this.game.height; } @@ -96455,19 +97406,16 @@ THIS SOFTWARE. if (typeof indexes === 'number') { if (callback === null) { delete this.layers[layer].callbacks[indexes]; - } - else { + } else { // This may seem a bit wasteful, because it will cause empty array elements to be created, but the look-up cost is much // less than having to iterate through the callbacks array hunting down tile indexes each frame, so I'll take the small memory hit. this.layers[layer].callbacks[indexes] = {callback: callback, callbackContext: callbackContext}; } - } - else { + } else { for (var i = 0, len = indexes.length; i < len; i++) { if (callback === null) { delete this.layers[layer].callbacks[indexes[i]]; - } - else { + } else { this.layers[layer].callbacks[indexes[i]] = { callback: callback, callbackContext: callbackContext @@ -96516,6 +97464,8 @@ THIS SOFTWARE. * * Collision-enabled tiles can be collided against Sprites using {@link Phaser.Physics.Arcade#collide}. * + * You can verify the collision faces by enabling {@link Phaser.TilemapLayer#debug}. + * * @method Phaser.Tilemap#setCollision * @param {number|array} indexes - Either a single tile index, or an array of tile IDs to be checked for collision. * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision. @@ -96535,8 +97485,7 @@ THIS SOFTWARE. if (typeof indexes === 'number') { return this.setCollisionByIndex(indexes, collides, layer, true); - } - else if (Array.isArray(indexes)) { + } else if (Array.isArray(indexes)) { // Collide all of the IDs given in the indexes array for (var i = 0; i < indexes.length; i++) { this.setCollisionByIndex(indexes[i], collides, layer, false); @@ -96648,8 +97597,7 @@ THIS SOFTWARE. if (collides) { this.collideIndexes.push(index); - } - else { + } else { var i = this.collideIndexes.indexOf(index); if (i > -1) { @@ -96664,8 +97612,7 @@ THIS SOFTWARE. if (tile && tile.index === index) { if (collides) { tile.setCollision(true, true, true, true); - } - else { + } else { tile.resetCollision(); } @@ -96698,11 +97645,15 @@ THIS SOFTWARE. if (layer === undefined) { layer = this.currentLayer; - } - else if (typeof layer === 'string') { + } else if (typeof layer === 'string') { + var layerArg = layer; + layer = this.getLayerIndex(layer); + + if (layer === null) { + console.warn('No such layer name: ' + layerArg); } - else if (layer instanceof Phaser.TilemapLayer) { + } else if (layer instanceof Phaser.TilemapLayer) { layer = layer.index; } @@ -96966,7 +97917,7 @@ THIS SOFTWARE. * If you pass `null` as the tile it will pass your call over to Tilemap.removeTile instead. * * @method Phaser.Tilemap#putTile - * @param {Phaser.Tile|number|null} tile - The index of this tile to set or a Phaser.Tile object. If null the tile is removed from the map. + * @param {Phaser.Tile|number|null} tile - The index of this tile to set or a Phaser.Tile object. If a Tile object, all of its data will be copied. If null the tile is removed from the map. * @param {number} x - X position to place the tile (given in tile units, not pixels) * @param {number} y - Y position to place the tile (given in tile units, not pixels) * @param {number|string|Phaser.TilemapLayer} [layer] - The layer to modify. @@ -96988,26 +97939,22 @@ THIS SOFTWARE. if (this.hasTile(x, y, layer)) { this.layers[layer].data[y][x].copy(tile); - } - else { + } else { this.layers[layer].data[y][x] = new Phaser.Tile(layer, index, x, y, tile.width, tile.height); } - } - else { + } else { index = tile; if (this.hasTile(x, y, layer)) { this.layers[layer].data[y][x].index = index; - } - else { + } else { this.layers[layer].data[y][x] = new Phaser.Tile(this.layers[layer], index, x, y, this.tileWidth, this.tileHeight); } } if (this.collideIndexes.indexOf(index) > -1) { this.layers[layer].data[y][x].setCollision(true, true, true, true); - } - else { + } else { this.layers[layer].data[y][x].resetCollision(); } @@ -97077,22 +98024,19 @@ THIS SOFTWARE. if (this.layers[layer].data[y][x].index === index) { if (c === skip) { return this.layers[layer].data[y][x]; - } - else { + } else { c++; } } } } - } - else { + } else { for (var y = 0; y < this.layers[layer].height; y++) { for (var x = 0; x < this.layers[layer].width; x++) { if (this.layers[layer].data[y][x].index === index) { if (c === skip) { return this.layers[layer].data[y][x]; - } - else { + } else { c++; } } @@ -97126,16 +98070,13 @@ THIS SOFTWARE. if (this.layers[layer].data[y][x].index === -1) { if (nonNull) { return this.layers[layer].data[y][x]; - } - else { + } else { return null; } - } - else { + } else { return this.layers[layer].data[y][x]; } - } - else { + } else { return null; } @@ -97175,10 +98116,10 @@ THIS SOFTWARE. * Copies all of the tiles in the given rectangular block into the tilemap data buffer. * * @method Phaser.Tilemap#copy - * @param {integer} x - X position of the top left of the area to copy (given in tiles, not pixels) - * @param {integer} y - Y position of the top left of the area to copy (given in tiles, not pixels) - * @param {integer} width - The width of the area to copy (given in tiles, not pixels) - * @param {integer} height - The height of the area to copy (given in tiles, not pixels) + * @param {integer} [x=0] - X position of the top left of the area to copy (given in tiles, not pixels) + * @param {integer} [y=0] - Y position of the top left of the area to copy (given in tiles, not pixels) + * @param {integer} [width] - The width of the area to copy (given in tiles, not pixels) + * @param {integer} [height] - The height of the area to copy (given in tiles, not pixels) * @param {integer|string|Phaser.TilemapLayer} [layer] - The layer to copy the tiles from. * @return {array} An array of the tiles that were copied. */ @@ -97273,6 +98214,7 @@ THIS SOFTWARE. /** * Scans the given area for tiles with an index matching tileA and swaps them with tileB. + * Only the tile indexes are modified. * * @method Phaser.Tilemap#swap * @param {number} tileA - First tile index. @@ -97314,8 +98256,7 @@ THIS SOFTWARE. if (value.index === this._tempA) { // Swap A with B value.index = this._tempB; - } - else if (value.index === this._tempB) { + } else if (value.index === this._tempB) { // Swap B with A value.index = this._tempA; } @@ -97352,14 +98293,15 @@ THIS SOFTWARE. /** * Scans the given area for tiles with an index matching `source` and updates their index to match `dest`. + * Only the tile indexes are modified. * * @method Phaser.Tilemap#replace * @param {number} source - The tile index value to scan for. * @param {number} dest - The tile index value to replace found tiles with. - * @param {number} x - X position of the top left of the area to operate one, given in tiles, not pixels. - * @param {number} y - Y position of the top left of the area to operate one, given in tiles, not pixels. - * @param {number} width - The width in tiles of the area to operate on. - * @param {number} height - The height in tiles of the area to operate on. + * @param {number} [x=0] - X position of the top left of the area to operate one, given in tiles, not pixels. + * @param {number} [y=0] - Y position of the top left of the area to operate one, given in tiles, not pixels. + * @param {number} [width] - The width in tiles of the area to operate on. + * @param {number} [height] - The height in tiles of the area to operate on. * @param {number|string|Phaser.TilemapLayer} [layer] - The layer to operate on. */ replace: function (source, dest, x, y, width, height, layer) { @@ -97384,6 +98326,7 @@ THIS SOFTWARE. /** * Randomises a set of tiles in a given area. + * Only the tile indexes are modified. * * @method Phaser.Tilemap#random * @param {number} x - X position of the top left of the area to operate one, given in tiles, not pixels. @@ -97424,6 +98367,7 @@ THIS SOFTWARE. /** * Shuffles a set of tiles in a given area. It will only randomise the tiles in that area, so if they're all the same nothing will appear to have changed! + * Only the tile indexes are modified. * * @method Phaser.Tilemap#shuffle * @param {number} x - X position of the top left of the area to operate one, given in tiles, not pixels. @@ -97462,6 +98406,7 @@ THIS SOFTWARE. /** * Fills the given area with the specified tile. + * Only the tile indexes are modified. * * @method Phaser.Tilemap#fill * @param {number} index - The index of the tile that the area will be filled with. @@ -97513,22 +98458,20 @@ THIS SOFTWARE. for (var y = 0; y < this.layers[this.currentLayer].height; y++) { for (var x = 0; x < this.layers[this.currentLayer].width; x++) { - txt += "%c "; + txt += '%c '; if (this.layers[this.currentLayer].data[y][x] > 1) { if (this.debugMap[this.layers[this.currentLayer].data[y][x]]) { - args.push("background: " + this.debugMap[this.layers[this.currentLayer].data[y][x]]); + args.push('background: ' + this.debugMap[this.layers[this.currentLayer].data[y][x]]); + } else { + args.push('background: #ffffff'); } - else { - args.push("background: #ffffff"); - } - } - else { - args.push("background: rgb(0, 0, 0)"); + } else { + args.push('background: rgb(0, 0, 0)'); } } - txt += "\n"; + txt += '\n'; } args[0] = txt; @@ -97558,7 +98501,7 @@ THIS SOFTWARE. * @name Phaser.Tilemap#layer * @property {number|string|Phaser.TilemapLayer} layer - The current layer object. */ - Object.defineProperty(Phaser.Tilemap.prototype, "layer", { + Object.defineProperty(Phaser.Tilemap.prototype, 'layer', { get: function () { @@ -97646,16 +98589,16 @@ THIS SOFTWARE. this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas, null, this.game.resolution))); /** - * The const objType of this object. - * @property {number} objType + * The const type of this object. + * @property {number} type * @readonly * @protected * @default Phaser.TILEMAPLAYER */ - this.objType = Phaser.TILEMAPLAYER; + this.type = Phaser.TILEMAPLAYER; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.TILEMAPLAYER; @@ -98228,6 +99171,7 @@ THIS SOFTWARE. // Convert the pixel values into tile coordinates var tx = Math.floor(x / (this._mc.cw * this.scale.x)); var ty = Math.floor(y / (this._mc.ch * this.scale.y)); + // Don't just use ceil(width/cw) to allow account for x/y diff within cell var tw = Math.ceil((x + width) / (this._mc.cw * this.scale.x)) - tx; var th = Math.ceil((y + height) / (this._mc.ch * this.scale.y)) - ty; @@ -98380,11 +99324,11 @@ THIS SOFTWARE. var copyContext = copyCanvas.getContext('2d'); copyContext.clearRect(0, 0, copyW, copyH); copyContext.drawImage(canvas, dx, dy, copyW, copyH, 0, 0, copyW, copyH); + // clear allows default 'source-over' semantics context.clearRect(sx, sy, copyW, copyH); context.drawImage(copyCanvas, 0, 0, copyW, copyH, sx, sy, copyW, copyH); - } - else { + } else { // Avoids a second copy but flickers in Safari / Safari Mobile // Ref. https://github.com/photonstorm/phaser/issues/1439 context.save(); @@ -98489,12 +99433,10 @@ THIS SOFTWARE. set.draw(context, -tile.centerX, -tile.centerY, index); context.restore(); - } - else { + } else { set.draw(context, tx, ty, index); } - } - else if (this.debugSettings.missingImageFill) { + } else if (this.debugSettings.missingImageFill) { context.fillStyle = this.debugSettings.missingImageFill; context.fillRect(tx, ty, tw, th); } @@ -98539,8 +99481,7 @@ THIS SOFTWARE. { left = renderW + shiftX; // shiftX neg. right = renderW - 1; - } - else if (shiftX > 0) { + } else if (shiftX > 0) { // left -> 0 right = shiftX; } @@ -98549,8 +99490,7 @@ THIS SOFTWARE. { top = renderH + shiftY; // shiftY neg. bottom = renderH - 1; - } - else if (shiftY > 0) { + } else if (shiftY > 0) { // top -> 0 bottom = shiftY; } @@ -98671,8 +99611,7 @@ THIS SOFTWARE. this.renderSettings.enableScrollDelta && (Math.abs(shiftX) + Math.abs(shiftY)) < Math.min(renderWidth, renderHeight)) { this.renderDeltaScroll(shiftX, shiftY); - } - else { + } else { // Too much change or otherwise requires full render this.renderFull(); } @@ -98793,7 +99732,7 @@ THIS SOFTWARE. * @public * @default false */ - Object.defineProperty(Phaser.TilemapLayer.prototype, "wrap", { + Object.defineProperty(Phaser.TilemapLayer.prototype, 'wrap', { get: function () { return this._wrap; @@ -98813,7 +99752,7 @@ THIS SOFTWARE. * @memberof Phaser.TilemapLayer * @public */ - Object.defineProperty(Phaser.TilemapLayer.prototype, "scrollX", { + Object.defineProperty(Phaser.TilemapLayer.prototype, 'scrollX', { get: function () { return this._scrollX; @@ -98832,7 +99771,7 @@ THIS SOFTWARE. * @memberof Phaser.TilemapLayer * @public */ - Object.defineProperty(Phaser.TilemapLayer.prototype, "scrollY", { + Object.defineProperty(Phaser.TilemapLayer.prototype, 'scrollY', { get: function () { return this._scrollY; @@ -98851,7 +99790,7 @@ THIS SOFTWARE. * @memberof Phaser.TilemapLayer * @public */ - Object.defineProperty(Phaser.TilemapLayer.prototype, "collisionWidth", { + Object.defineProperty(Phaser.TilemapLayer.prototype, 'collisionWidth', { get: function () { return this._mc.cw; @@ -98871,7 +99810,7 @@ THIS SOFTWARE. * @memberof Phaser.TilemapLayer * @public */ - Object.defineProperty(Phaser.TilemapLayer.prototype, "collisionHeight", { + Object.defineProperty(Phaser.TilemapLayer.prototype, 'collisionHeight', { get: function () { return this._mc.ch; @@ -98900,14 +99839,14 @@ THIS SOFTWARE. /** * When scanning the Tiled map data the TilemapParser can either insert a null value (true) or - * a Phaser.Tile instance with an index of -1 (false, the default). Depending on your game objType + * a Phaser.Tile instance with an index of -1 (false, the default). Depending on your game type * depends how this should be configured. If you've a large sparsely populated map and the tile * data doesn't need to change then setting this value to `true` will help with memory consumption. * However if your map is small, or you need to update the tiles (perhaps the map dynamically changes * during the game) then leave the default value set. * * @constant - * @objType {boolean} + * @type {boolean} */ INSERT_NULL: false, @@ -98951,12 +99890,10 @@ THIS SOFTWARE. if (map) { if (map.format === Phaser.Tilemap.CSV) { return this.parseCSV(key, map.data, tileWidth, tileHeight); - } - else if (!map.format || map.format === Phaser.Tilemap.TILED_JSON) { + } else if (!map.format || map.format === Phaser.Tilemap.TILED_JSON) { return this.parseTiledJSON(map.data); } - } - else { + } else { console.warn('Phaser.TilemapParser.parse - No map data found for key ' + key); } @@ -98980,14 +99917,14 @@ THIS SOFTWARE. data = data.trim(); var output = []; - var rows = data.split("\n"); + var rows = data.split('\n'); var height = rows.length; var width = 0; for (var y = 0; y < rows.length; y++) { output[y] = []; - var column = rows[y].split(","); + var column = rows[y].split(','); for (var x = 0; x < column.length; x++) { output[y][x] = new Phaser.Tile(map.layers[0], parseInt(column[x], 10), x, y, tileWidth, tileHeight); @@ -99062,6 +99999,19 @@ THIS SOFTWARE. }, + _slice: function (obj, fields) { + var sliced = {}; + + for (var k in fields) { + var key = fields[k]; + + if (typeof obj[key] !== 'undefined') { + sliced[key] = obj[key]; + } + } + + return sliced; + }, /** * Parses an object group in Tiled JSON files. Object groups can be found in both layers and tilesets. Called internally in parseTiledJSON. @@ -99074,101 +100024,102 @@ THIS SOFTWARE. * @return {object} A object literal containing the objectsCollection and collisionCollection */ parseObjectGroup: function (objectGroup, objectsCollection, collisionCollection, nameKey, relativePosition) { + var nameKey = nameKey || objectGroup.name; var relativePosition = relativePosition || {x: 0, y: 0}; + var slice = this._slice; if (!nameKey) { - console.warn("No name found for objectGroup", objectGroup); + console.warn('No name found for objectGroup', objectGroup); } + if (relativePosition.x === undefined || relativePosition.y === undefined) { - console.warn("Malformed xy properties in relativePosition", relativePosition); + console.warn('Malformed xy properties in relativePosition', relativePosition); } objectsCollection[nameKey] = objectsCollection[nameKey] || []; collisionCollection[nameKey] = collisionCollection[nameKey] || []; for (var v = 0, len = objectGroup.objects.length; v < len; v++) { + var o = objectGroup.objects[v]; + // Object Tiles - if (objectGroup.objects[v].gid) { + if (o.gid) { var object = { - - gid: objectGroup.objects[v].gid, - name: objectGroup.objects[v].name, - type: objectGroup.objects[v].hasOwnProperty("type") ? objectGroup.objects[v].type : "", - x: objectGroup.objects[v].x + relativePosition.x, - y: objectGroup.objects[v].y + relativePosition.y, - width: objectGroup.objects[v].width, - height: objectGroup.objects[v].height, - visible: objectGroup.objects[v].visible, - properties: objectGroup.objects[v].properties - + gid: o.gid, + name: o.name, + type: o.type || '', + x: o.x + relativePosition.x, + y: o.y + relativePosition.y, + width: o.width, + height: o.height, + visible: o.visible, + properties: o.properties }; - if (objectGroup.objects[v].rotation) { - object.rotation = objectGroup.objects[v].rotation; + if (o.rotation) { + object.rotation = o.rotation; } objectsCollection[nameKey].push(object); - } - else if (objectGroup.objects[v].polyline) { + } else if (o.polyline) { var object = { - - name: objectGroup.objects[v].name, - type: objectGroup.objects[v].type, - x: objectGroup.objects[v].x + relativePosition.x, - y: objectGroup.objects[v].y + relativePosition.y, - width: objectGroup.objects[v].width, - height: objectGroup.objects[v].height, - visible: objectGroup.objects[v].visible, - properties: objectGroup.objects[v].properties - + name: o.name, + type: o.type, + x: o.x + relativePosition.x, + y: o.y + relativePosition.y, + width: o.width, + height: o.height, + visible: o.visible, + properties: o.properties }; - if (objectGroup.objects[v].rotation) { - object.rotation = objectGroup.objects[v].rotation; + if (o.rotation) { + object.rotation = o.rotation; } object.polyline = []; // Parse the polyline into an array - for (var p = 0; p < objectGroup.objects[v].polyline.length; p++) { - object.polyline.push([objectGroup.objects[v].polyline[p].x, objectGroup.objects[v].polyline[p].y]); + for (var p = 0; p < o.polyline.length; p++) { + object.polyline.push([o.polyline[p].x, o.polyline[p].y]); } - collisionCollection[nameKey].push(object); objectsCollection[nameKey].push(object); } - // polygon - else if (objectGroup.objects[v].polygon) { - var object = slice(objectGroup.objects[v], ['name', 'type', 'x', 'y', 'visible', 'rotation', 'properties']); - object.x += relativePosition.x - object.y += relativePosition.y + // polygon + else if (o.polygon) { + var object = slice(o, ['name', 'type', 'x', 'y', 'visible', 'rotation', 'properties']); + + object.x += relativePosition.x; + object.y += relativePosition.y; // Parse the polygon into an array object.polygon = []; - for (var p = 0; p < objectGroup.objects[v].polygon.length; p++) { - object.polygon.push([objectGroup.objects[v].polygon[p].x, objectGroup.objects[v].polygon[p].y]); + for (var p = 0; p < o.polygon.length; p++) { + object.polygon.push([o.polygon[p].x, o.polygon[p].y]); } collisionCollection[nameKey].push(object); objectsCollection[nameKey].push(object); - } + // ellipse - else if (objectGroup.objects[v].ellipse) { - var object = slice(objectGroup.objects[v], ['name', 'type', 'ellipse', 'x', 'y', 'width', 'height', 'visible', 'rotation', 'properties']); + else if (o.ellipse) { + var object = slice(o, ['name', 'type', 'ellipse', 'x', 'y', 'width', 'height', 'visible', 'rotation', 'properties']); object.x += relativePosition.x; object.y += relativePosition.y; collisionCollection[nameKey].push(object); objectsCollection[nameKey].push(object); } + // otherwise it's a rectangle else { - var object = slice(objectGroup.objects[v], ['name', 'type', 'x', 'y', 'width', 'height', 'visible', 'rotation', 'properties']); + var object = slice(o, ['name', 'type', 'x', 'y', 'width', 'height', 'visible', 'rotation', 'properties']); object.x += relativePosition.x; object.y += relativePosition.y; @@ -99178,21 +100129,6 @@ THIS SOFTWARE. } } - function slice(obj, fields) { - - var sliced = {}; - - for (var k in fields) { - var key = fields[k]; - - if (typeof obj[key] !== 'undefined') { - sliced[key] = obj[key]; - } - } - - return sliced; - } - return { objectsCollection: objectsCollection, collisionCollection: collisionCollection @@ -99258,8 +100194,7 @@ THIS SOFTWARE. curl.data = bytes; delete curl.encoding; - } - else if (curl.compression) { + } else if (curl.compression) { console.warn('TilemapParser.parseTiledJSON - Layer compression is unsupported, skipping layer \'' + curl.name + '\''); continue; } @@ -99373,14 +100308,10 @@ THIS SOFTWARE. } row.push(tile); - } - else { - if (Phaser.TilemapParser.INSERT_NULL) { - row.push(null); - } - else { - row.push(new Phaser.Tile(layer, -1, x, output.length, json.tilewidth, json.tileheight)); - } + } else if (Phaser.TilemapParser.INSERT_NULL) { + row.push(null); + } else { + row.push(new Phaser.Tile(layer, -1, x, output.length, json.tilewidth, json.tileheight)); } x++; @@ -99443,8 +100374,7 @@ THIS SOFTWARE. if (set.source) { console.warn('Phaser.TilemapParser - Phaser can\'t load external tilesets (%s). Use the Embed Tileset button and then export the map again.', set.source); - } - else if (set.image) { + } else if (set.image) { var newSet = new Phaser.Tileset(set.name, set.firstgid, set.tilewidth, set.tileheight, set.margin, set.spacing, set.properties); if (set.tileproperties) { @@ -99456,8 +100386,7 @@ THIS SOFTWARE. newSet.updateTileData(set.imagewidth, set.imageheight); tilesets.push(newSet); - } - else if (set.tiles) { + } else if (set.tiles) { var newCollection = new Phaser.ImageCollection(set.name, set.firstgid, set.tilewidth, set.tileheight, set.margin, set.spacing, set.properties); for (var ti in set.tiles) { @@ -99467,18 +100396,19 @@ THIS SOFTWARE. } imagecollections.push(newCollection); - } - else { + } else { throw new Error('Tileset ' + set.name + ' has no `image` or `tiles` property.'); } // build a temporary object for objectgroups found in the tileset's tiles for (var ti in set.tiles) { - var objectGroup = set.tiles[ti].objectgroup + var objectGroup = set.tiles[ti].objectgroup; + if (!objectGroup) { continue; } - tilesetGroupObjects[parseInt(ti) + set.firstgid] = objectGroup; + + tilesetGroupObjects[parseInt(ti, 10) + set.firstgid] = objectGroup; } // We've got a new Tileset, so set the lastgid into the previous one @@ -99585,7 +100515,7 @@ THIS SOFTWARE. set = map.tilesets[sid]; - // if that tile objType has any properties, add them to the tile object + // if that tile type has any properties, add them to the tile object if (set.tileProperties && set.tileProperties[tile.index - set.firstgid]) { tile.properties = Phaser.Utils.mixin(set.tileProperties[tile.index - set.firstgid], tile.properties); @@ -99841,7 +100771,10 @@ THIS SOFTWARE. var colCount = (imageWidth - this.tileMargin * 2 + this.tileSpacing) / (this.tileWidth + this.tileSpacing); if (rowCount % 1 !== 0 || colCount % 1 !== 0) { - console.warn("Phaser.Tileset - " + this.name + " image tile area is not an even multiple of tile size"); + console.warn( + 'Phaser.Tileset - \'%s\' image tile area (%s x %s) is not a whole multiple of tile size (%s x %s + %s + %s)', + this.name, imageWidth, imageHeight, this.tileWidth, this.tileHeight, this.tileMargin, this.tileSpacing + ); } // In Tiled a tileset image that is not an even multiple of the tile dimensions @@ -99850,7 +100783,10 @@ THIS SOFTWARE. colCount = Math.floor(colCount); if ((this.rows && this.rows !== rowCount) || (this.columns && this.columns !== colCount)) { - console.warn("Phaser.Tileset - actual and expected number of tile rows and columns differ"); + console.warn( + 'Phaser.Tileset - Tile layout from image \'%s\' (%s rows by %s columns) differs from tileset \'%s\' (%s rows by %s columns)', + this.image.name, colCount, rowCount, this.name, this.columns, this.rows + ); } this.rows = rowCount; @@ -99955,8 +100891,7 @@ THIS SOFTWARE. if (this._s) { this.scale.set(this.scaleData[this._s].x, this.scaleData[this._s].y); - } - else { + } else { this.autoScale = false; } } @@ -99966,8 +100901,7 @@ THIS SOFTWARE. if (this._a) { this.alpha = this.alphaData[this._a].v; - } - else { + } else { this.autoAlpha = false; } } @@ -100046,7 +100980,7 @@ THIS SOFTWARE. */ /** - * Phaser.Particles is the Particle Manager for the game. It is called during the game update loop and in turn updates any Emitters attached to it. + * Phaser.Particles tracks any Emitters attached to it. * * @class Phaser.Particles * @constructor @@ -100092,24 +101026,6 @@ THIS SOFTWARE. */ remove: function (emitter) { delete this.emitters[emitter.id]; - }, - - /** - * Updates all Emitters who have their exists value set to true. - * - * Phaser no longer uses this method; Emitters receive updates via {@link Phaser.Stage#update} instead. - * - * @method Phaser.Particles#update - * @protected - * @deprecated - */ - update: function () { - for (var key in this.emitters) { - if (this.emitters[key].exists) { - this.emitters[key].update(); - } - } - } }; @@ -100128,6 +101044,7 @@ THIS SOFTWARE. * @class Phaser.Particles.Arcade */ Phaser.Particles.Arcade = {}; + /** * @author Richard Davey * @copyright 2016 Photon Storm Ltd. @@ -100169,13 +101086,13 @@ THIS SOFTWARE. this.name = 'emitter' + this.id; /** - * @property {number} objType - Internal Phaser Type value. + * @property {number} type - Internal Phaser Type value. * @protected */ this.type = Phaser.EMITTER; /** - * @property {number} physicsType - The const physics body objType of this object. + * @property {number} physicsType - The const physics body type of this object. * @readonly */ this.physicsType = Phaser.GROUP; @@ -100462,25 +101379,19 @@ THIS SOFTWARE. } } } - } - else { - if (this.emitParticle()) { - this._counter++; - - if (this._flowTotal !== -1 && this._counter >= this._flowTotal) { - this.on = false; - } - } - } - } - else { - if (this.emitParticle()) { + } else if (this.emitParticle()) { this._counter++; - if (this._total > 0 && this._counter >= this._total) { + if (this._flowTotal !== -1 && this._counter >= this._flowTotal) { this.on = false; } } + } else if (this.emitParticle()) { + this._counter++; + + if (this._total > 0 && this._counter >= this._total) { + this.on = false; + } } } @@ -100666,8 +101577,7 @@ THIS SOFTWARE. this._counter += quantity; this.on = true; this._timer = this.game.time.time + frequency * this.game.time.slowMotion; - } - else { + } else { this.start(false, lifespan, frequency, quantity); } @@ -100737,8 +101647,7 @@ THIS SOFTWARE. for (var i = 0; i < total; i++) { this.emitParticle(); } - } - else { + } else { this.on = true; this._total = total; this._counter = 0; @@ -100790,8 +101699,7 @@ THIS SOFTWARE. if (key !== undefined && frame !== undefined) { particle.loadTexture(key, frame); - } - else if (key !== undefined) { + } else if (key !== undefined) { particle.loadTexture(key); particle.frame = Array.isArray(this._frames) ? rnd.pick(this._frames) : this._frames; } @@ -100801,15 +101709,13 @@ THIS SOFTWARE. if (x !== null) { emitX = x; - } - else if (this.width > 1) { + } else if (this.width > 1) { emitX = rnd.between(this.left, this.right); } if (y !== null) { emitY = y; - } - else if (this.height > 1) { + } else if (this.height > 1) { emitY = rnd.between(this.top, this.bottom); } @@ -100861,28 +101767,23 @@ THIS SOFTWARE. if (this.particleBringToTop) { this.bringToTop(particle); - } - else if (this.particleSendToBack) { + } else if (this.particleSendToBack) { this.sendToBack(particle); } if (this.autoScale) { particle.setScaleData(this.scaleData); - } - else if (this.minParticleScale !== 1 || this.maxParticleScale !== 1) { + } else if (this.minParticleScale !== 1 || this.maxParticleScale !== 1) { particle.scale.set(rnd.realInRange(this.minParticleScale, this.maxParticleScale)); - } - else if ((this._minParticleScale.x !== this._maxParticleScale.x) || (this._minParticleScale.y !== this._maxParticleScale.y)) { + } else if ((this._minParticleScale.x !== this._maxParticleScale.x) || (this._minParticleScale.y !== this._maxParticleScale.y)) { particle.scale.set(rnd.realInRange(this._minParticleScale.x, this._maxParticleScale.x), rnd.realInRange(this._minParticleScale.y, this._maxParticleScale.y)); - } - else { + } else { particle.scale.set(this._minParticleScale.x, this._minParticleScale.y); } if (this.autoAlpha) { particle.setAlphaData(this.alphaData); - } - else { + } else { particle.alpha = rnd.realInRange(this.minParticleAlpha, this.maxParticleAlpha); } @@ -100901,8 +101802,7 @@ THIS SOFTWARE. (this.minSpeed === this.maxSpeed) ? this.minSpeed : rnd.between(this.minSpeed, this.maxSpeed), body.velocity ); - } - else { + } else { body.velocity.x = rnd.between(this.minParticleSpeed.x, this.maxParticleSpeed.x); body.velocity.y = rnd.between(this.minParticleSpeed.y, this.maxParticleSpeed.y); } @@ -101161,8 +102061,7 @@ THIS SOFTWARE. if (object.center) { this.emitX = object.center.x; this.emitY = object.center.y; - } - else { + } else { this.emitX = object.world.x + (object.anchor.x * object.width); this.emitY = object.world.y + (object.anchor.y * object.height); } @@ -101175,17 +102074,16 @@ THIS SOFTWARE. * @name Phaser.Particles.Arcade.Emitter#gravity * @property {Phaser.Point} gravity - Sets the `body.gravity` of each particle sprite to this on launch. */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "gravity", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'gravity', { get: function () { return this._gravity; }, set: function (value) { - if (typeof value === "number") { + if (typeof value === 'number') { this._gravity.y = value; - } - else { + } else { this._gravity = value; } } @@ -101197,7 +102095,7 @@ THIS SOFTWARE. * @name Phaser.Particles.Arcade.Emitter#id * @property {number} id - Gets the internal ID that represents this emitter. */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "id", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'id', { get: function () { return this._id; } @@ -101207,7 +102105,7 @@ THIS SOFTWARE. * @name Phaser.Particles.Arcade.Emitter#width * @property {number} width - Gets or sets the width of the Emitter. This is the region in which a particle can be emitted. */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "width", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'width', { get: function () { return this.area.width; @@ -101223,7 +102121,7 @@ THIS SOFTWARE. * @name Phaser.Particles.Arcade.Emitter#height * @property {number} height - Gets or sets the height of the Emitter. This is the region in which a particle can be emitted. */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "height", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'height', { get: function () { return this.area.height; @@ -101239,7 +102137,7 @@ THIS SOFTWARE. * @name Phaser.Particles.Arcade.Emitter#x * @property {number} x - Gets or sets the x position of the Emitter. */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "x", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'x', { get: function () { return this.emitX; @@ -101255,7 +102153,7 @@ THIS SOFTWARE. * @name Phaser.Particles.Arcade.Emitter#y * @property {number} y - Gets or sets the y position of the Emitter. */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "y", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'y', { get: function () { return this.emitY; @@ -101272,7 +102170,7 @@ THIS SOFTWARE. * @property {number} left - Gets the left position of the Emitter. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "left", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'left', { get: function () { return Math.floor(this.x - (this.area.width / 2)); @@ -101285,7 +102183,7 @@ THIS SOFTWARE. * @property {number} right - Gets the right position of the Emitter. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "right", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'right', { get: function () { return Math.floor(this.x + (this.area.width / 2)); @@ -101298,7 +102196,7 @@ THIS SOFTWARE. * @property {number} top - Gets the top position of the Emitter. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "top", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'top', { get: function () { return Math.floor(this.y - (this.area.height / 2)); @@ -101311,7 +102209,7 @@ THIS SOFTWARE. * @property {number} bottom - Gets the bottom position of the Emitter. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "bottom", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'bottom', { get: function () { return Math.floor(this.y + (this.area.height / 2)); @@ -101324,7 +102222,7 @@ THIS SOFTWARE. * @property {number} output - The number of particles released per second, after calling {@link #flow}. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "output", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'output', { get: function () { return 1000 * this._flowQuantity / this.frequency; @@ -101337,7 +102235,7 @@ THIS SOFTWARE. * @property {number} lifespanOutput - The number of particles released during one particle's {@link #lifespan}, after calling {@link #flow}. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "lifespanOutput", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'lifespanOutput', { get: function () { return (this.lifespan === 0 ? Infinity : this.lifespan) * this._flowQuantity / this.frequency; @@ -101350,7 +102248,7 @@ THIS SOFTWARE. * @property {number} remainder - The expected number of unreleased particles after a flow interval of {@link #lifespan}, after calling {@link #flow}. * @readonly */ - Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "remainder", { + Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, 'remainder', { get: function () { return this.maxParticles - this.lifespanOutput; @@ -101396,21 +102294,31 @@ THIS SOFTWARE. /** * The Weapon Plugin provides the ability to easily create a bullet pool and manager. * - * Weapons fire Phaser.Bullet objects, which are essentially Sprites with a few extra properties. - * The Bullets are enabled for Arcade Physics. They do not currently work with P2 Physics. + * Weapons fire {@link Phaser.Bullet} objects, which are essentially Sprites with a few extra properties. + * The Bullets are enabled for {@link Phaser.Physics.Arcade Arcade Physics}. They do not currently work with P2 Physics. * - * The Bullets are created inside of `Weapon.bullets`, which is a Phaser.Group instance. Anything you + * The Bullets are created inside of {@link #bullets weapon.bullets}, which is a {@link Phaser.Group} instance. Anything you * can usually do with a Group, such as move it around the display list, iterate it, etc can be done * to the bullets Group too. * * Bullets can have textures and even animations. You can control the speed at which they are fired, * the firing rate, the firing angle, and even set things like gravity for them. * - * A small example, assumed to be running from within a Phaser.State create method. + * A small example, using {@link Phaser.GameObjectFactory#weapon add.weapon}, assumed to be running from within a {@link Phaser.State#create} method: * - * `var weapon = this.add.weapon(10, 'bullet');` - * `weapon.fireFrom.set(300, 300);` - * `this.input.onDown.add(weapon.fire, this);` + * ```javascript + * var weapon = this.add.weapon(10, 'bullet'); + * weapon.fireFrom.set(300, 300); + * this.input.onDown.add(weapon.fire, this); + * ``` + * + * If you want to (re)create the bullet pool separately, you can use: + * + * ```javascript + * var weapon = this.game.plugins.add(Phaser.Weapon); + * // … + * weapon.createBullets(10, 'bullet'); + * ``` * * @class Phaser.Weapon * @constructor @@ -101423,52 +102331,58 @@ THIS SOFTWARE. /** * This is the Phaser.Group that contains all of the bullets managed by this plugin. - * @objType {Phaser.Group} + * @type {Phaser.Group} */ this.bullets = null; /** * Should the bullet pool run out of bullets (i.e. they are all in flight) then this * boolean controls if the Group will create a brand new bullet object or not. - * @objType {boolean} + * @type {boolean} + * @default */ this.autoExpandBulletsGroup = false; /** * Will this weapon auto fire? If set to true then a new bullet will be fired - * based on the `fireRate` value. - * @objType {boolean} + * based on the {@link #fireRate} value. + * @type {boolean} + * @default */ this.autofire = false; /** * The total number of bullets this Weapon has fired so far. - * You can limit the number of shots allowed (via `fireLimit`), and reset - * this total via `Weapon.resetShots`. - * @objType {number} + * You can limit the number of shots allowed (via {@link #fireLimit}), and reset + * this total via {@link #resetShots}. + * @type {number} + * @default */ this.shots = 0; /** * The maximum number of shots that this Weapon is allowed to fire before it stops. - * When the limit is his the `Weapon.onFireLimit` Signal is dispatched. - * You can reset the shot counter via `Weapon.resetShots`. - * @objType {number} + * When the limit is his the {@link #onFireLimit} Signal is dispatched. + * You can reset the shot counter via {@link #resetShots}. + * @type {number} + * @default */ this.fireLimit = 0; /** - * The rate at which this Weapon can fire. The value is given in milliseconds. - * @objType {number} + * The minimum interval between shots, in milliseconds. + * @type {number} + * @default */ this.fireRate = 100; /** - * This is a modifier that is added to the `fireRate` each update to add variety + * This is a modifier that is added to the {@link #fireRate} each update to add variety * to the firing rate of the Weapon. The value is given in milliseconds. * If you've a `fireRate` of 200 and a `fireRateVariance` of 50 then the actual * firing rate of the Weapon will be between 150 and 250. - * @objType {number} + * @type {number} + * @default */ this.fireRateVariance = 0; @@ -101476,51 +102390,57 @@ THIS SOFTWARE. * This is a Rectangle from within which the bullets are fired. By default it's a 1x1 * rectangle, the equivalent of a Point. But you can change the width and height, and if * larger than 1x1 it'll pick a random point within the rectangle to launch the bullet from. - * @objType {Phaser.Rectangle} + * @type {Phaser.Rectangle} */ this.fireFrom = new Phaser.Rectangle(0, 0, 1, 1); /** * The angle at which the bullets are fired. This can be a const such as Phaser.ANGLE_UP * or it can be any number from 0 to 360 inclusive, where 0 degrees is to the right. - * @objType {integer} + * @type {integer} + * @default */ this.fireAngle = Phaser.ANGLE_UP; /** * When a Bullet is fired it can optionally inherit the velocity of the `trackedSprite` if set. - * @objType {boolean} + * @type {boolean} + * @default */ this.bulletInheritSpriteSpeed = false; /** * The string based name of the animation that the Bullet will be given on launch. - * This is set via `Weapon.addBulletAnimation`. - * @objType {string} + * This is set via {@link #addBulletAnimation}. + * @type {string} + * @default */ this.bulletAnimation = ''; /** - * If you've added a set of frames via `Weapon.setBulletFrames` then you can optionally + * If you've added a set of frames via {@link #setBulletFrames} then you can optionally * chose for each Bullet fired to pick a random frame from the set. - * @objType {boolean} + * @type {boolean} + * @default */ this.bulletFrameRandom = false; /** - * If you've added a set of frames via `Weapon.setBulletFrames` then you can optionally + * If you've added a set of frames via {@link #setBulletFrames} then you can optionally * chose for each Bullet fired to use the next frame in the set. The frame index is then * advanced one frame until it reaches the end of the set, then it starts from the start * again. Cycling frames like this allows you to create varied bullet effects via * sprite sheets. - * @objType {boolean} + * @type {boolean} + * @default */ this.bulletFrameCycle = false; /** * Should the Bullets wrap around the world bounds? This automatically calls * `World.wrap` on the Bullet each frame. See the docs for that method for details. - * @objType {boolean} + * @type {boolean} + * @default */ this.bulletWorldWrap = false; @@ -101528,7 +102448,8 @@ THIS SOFTWARE. * If `bulletWorldWrap` is true then you can provide an optional padding value with this * property. It's added to the calculations determining when the Bullet should wrap around * the world or not. The value is given in pixels. - * @objType {integer} + * @type {integer} + * @default */ this.bulletWorldWrapPadding = 0; @@ -101537,7 +102458,8 @@ THIS SOFTWARE. * This is useful if for example your bullet sprites have been drawn facing up, instead of * to the right, and you want to fire them at an angle. In which case you can set the * angle offset to be 90 and they'll be properly rotated when fired. - * @objType {number} + * @type {number} + * @default */ this.bulletAngleOffset = 0; @@ -101546,86 +102468,93 @@ THIS SOFTWARE. * If you fire from an angle of 90 and have a `bulletAngleVariance` of 20 then the actual * angle of the Bullets will be between 70 and 110 degrees. This is a quick way to add a * great 'spread' effect to a Weapon. - * @objType {number} + * @type {number} + * @default */ this.bulletAngleVariance = 0; /** - * The speed at which the bullets are fired. This value is given in pixels per second, and - * is used to set the starting velocity of the bullets. - * @objType {number} + * The initial velocity of fired bullets, in pixels per second. + * @type {number} + * @default */ this.bulletSpeed = 200; /** * This is a variance added to the speed of Bullets when they are fired. - * If bullets have a `bulletSpeed` value of 200, and a `bulletSpeedVariance` of 50 + * If bullets have a {@link #bulletSpeed} value of 200, and a `bulletSpeedVariance` of 50 * then the actual speed of the Bullets will be between 150 and 250 pixels per second. - * @objType {number} + * @type {number} + * @default */ this.bulletSpeedVariance = 0; /** - * If you've set `bulletKillType` to `Phaser.Weapon.KILL_LIFESPAN` this controls the amount + * If you've set {@link #bulletKillType} to `Phaser.Weapon.KILL_LIFESPAN` this controls the amount * of lifespan the Bullets have set on launch. The value is given in milliseconds. * When a Bullet hits its lifespan limit it will be automatically killed. - * @objType {number} + * @type {number} + * @default */ this.bulletLifespan = 0; /** - * If you've set `bulletKillType` to `Phaser.Weapon.KILL_DISTANCE` this controls the distance + * If you've set {@link #bulletKillType} to `Phaser.Weapon.KILL_DISTANCE` this controls the distance * the Bullet can travel before it is automatically killed. The distance is given in pixels. - * @objType {number} + * @type {number} + * @default */ this.bulletKillDistance = 0; /** - * This is the amount of gravity added to the Bullets physics body when fired. + * This is the amount of {@link Phaser.Physics.Arcade.Body#gravity} added to the Bullets physics body when fired. * Gravity is expressed in pixels / second / second. - * @objType {Phaser.Point} + * @type {Phaser.Point} */ this.bulletGravity = new Phaser.Point(0, 0); /** * Bullets can optionally adjust their rotation in-flight to match their velocity. * This can create the effect of a bullet 'pointing' to the path it is following, for example - * an arrow being fired from a bow, and works especially well when added to `bulletGravity`. - * @objType {boolean} + * an arrow being fired from a bow, and works especially well when added to {@link #bulletGravity}. + * @type {boolean} + * @default */ this.bulletRotateToVelocity = false; /** * The Texture Key that the Bullets use when rendering. * Changing this has no effect on bullets in-flight, only on newly spawned bullets. - * @objType {string} + * @type {string} + * @default */ this.bulletKey = ''; /** * The Texture Frame that the Bullets use when rendering. * Changing this has no effect on bullets in-flight, only on newly spawned bullets. - * @objType {string|integer} + * @type {string|integer} + * @default */ this.bulletFrame = ''; /** * Private var that holds the public `bulletClass` property. - * @objType {function} + * @type {function} * @private */ this._bulletClass = Phaser.Bullet; /** * Private var that holds the public `bulletCollideWorldBounds` property. - * @objType {boolean} + * @type {boolean} * @private */ this._bulletCollideWorldBounds = false; /** * Private var that holds the public `bulletKillType` property. - * @objType {integer} + * @type {integer} * @private */ this._bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS; @@ -101633,7 +102562,7 @@ THIS SOFTWARE. /** * Holds internal data about custom bullet body sizes. * - * @objType {Object} + * @type {Object} * @private */ this._data = { @@ -101646,51 +102575,51 @@ THIS SOFTWARE. /** * This Rectangle defines the bounds that are used when determining if a Bullet should be killed or not. - * It's used in combination with `Weapon.bulletKillType` when that is set to either `Phaser.Weapon.KILL_WEAPON_BOUNDS` + * It's used in combination with {@link #bulletKillType} when that is set to either `Phaser.Weapon.KILL_WEAPON_BOUNDS` * or `Phaser.Weapon.KILL_STATIC_BOUNDS`. If you are not using either of these kill types then the bounds are ignored. * If you are tracking a Sprite or Point then the bounds are centered on that object every frame. * - * @objType {Phaser.Rectangle} + * @type {Phaser.Rectangle} */ this.bounds = new Phaser.Rectangle(); /** * The Rectangle used to calculate the bullet bounds from. * - * @objType {Phaser.Rectangle} + * @type {Phaser.Rectangle} * @private */ this.bulletBounds = game.world.bounds; /** - * This array stores the frames added via `Weapon.setBulletFrames`. + * This array stores the frames added via @link #setBulletFrames. * - * @objType {Array} + * @type {Array} * @protected */ this.bulletFrames = []; /** - * The index of the frame within `Weapon.bulletFrames` that is currently being used. - * This value is only used if `Weapon.bulletFrameCycle` is set to `true`. - * @objType {number} + * The index of the frame within {@link #bulletFrames} that is currently being used. + * This value is only used if {@link #bulletFrameCycle} is set to `true`. + * @type {number} * @private */ this.bulletFrameIndex = 0; /** - * An internal object that stores the animation data added via `Weapon.addBulletAnimation`. - * @objType {Object} + * An internal object that stores the animation data added via {@link #addBulletAnimation}. + * @type {Object} * @private */ this.anims = {}; /** - * The onFire Signal is dispatched each time `Weapon.fire` is called, and a Bullet is + * The onFire Signal is dispatched each time {@link #fire} is called, and a Bullet is * _successfully_ launched. The callback is set two arguments: a reference to the bullet sprite itself, * and a reference to the Weapon that fired the bullet. * - * @objType {Phaser.Signal} + * @type {Phaser.Signal} */ this.onFire = new Phaser.Signal(); @@ -101699,33 +102628,33 @@ THIS SOFTWARE. * of leaving the Weapon bounds, an expiring lifespan, or exceeding a specified distance. * The callback is sent one argument: A reference to the bullet sprite itself. * - * @objType {Phaser.Signal} + * @type {Phaser.Signal} */ this.onKill = new Phaser.Signal(); /** - * The onFireLimit Signal is dispatched if `Weapon.fireLimit` is > 0, and a bullet launch takes the number + * The onFireLimit Signal is dispatched if {@link #fireLimit} is > 0, and a bullet launch takes the number * of shots fired to equal the fire limit. - * The callback is sent two arguments: A reference to the Weapon that hit the limit, and the value of - * `Weapon.fireLimit`. + * The callback is sent two arguments: A reference to this Weapon, and the value of + * {@link #fireLimit}. * - * @objType {Phaser.Signal} + * @type {Phaser.Signal} */ this.onFireLimit = new Phaser.Signal(); /** * The Sprite currently being tracked by the Weapon, if any. - * This is set via the `Weapon.trackSprite` method. + * This is set via the {@link #trackSprite} method. * - * @objType {Phaser.Sprite|Object} + * @type {Phaser.Sprite|Object} */ this.trackedSprite = null; /** * The Pointer currently being tracked by the Weapon, if any. - * This is set via the `Weapon.trackPointer` method. + * This is set via the {@link #trackPointer} method. * - * @objType {Phaser.Pointer} + * @type {Phaser.Pointer} */ this.trackedPointer = null; @@ -101736,14 +102665,15 @@ THIS SOFTWARE. * This means you can call `fire` (and similar methods) as often as you like in one * single game update. * - * @objType {boolean} + * @type {boolean} + * @default */ this.multiFire = false; /** * Internal multiFire test flag. * - * @objType {boolean} + * @type {boolean} */ this._hasFired = false; @@ -101752,7 +102682,8 @@ THIS SOFTWARE. * This is useful for a game such as Asteroids, where you want the weapon to fire based * on the sprites rotation. * - * @objType {boolean} + * @type {boolean} + * @default */ this.trackRotation = false; @@ -101762,14 +102693,14 @@ THIS SOFTWARE. * in size, but you're tracking a Sprite that is 32x32, then you can set `trackOffset.x = 16` to have * the bullet launched from the center of the Sprite. * - * @objType {Phaser.Point} + * @type {Phaser.Point} */ this.trackOffset = new Phaser.Point(); /** * Internal firing rate time tracking variable. * - * @objType {number} + * @type {number} * @private */ this._nextFire = 0; @@ -101777,7 +102708,7 @@ THIS SOFTWARE. /** * Internal firing rate time tracking variable used by multiFire. * - * @objType {number} + * @type {number} * @private */ this._tempNextFire = 0; @@ -101785,7 +102716,7 @@ THIS SOFTWARE. /** * Internal firing rotation tracking point. * - * @objType {Phaser.Point} + * @type {Phaser.Point} * @private */ this._rotatedPoint = new Phaser.Point(); @@ -101796,57 +102727,57 @@ THIS SOFTWARE. Phaser.Weapon.prototype.constructor = Phaser.Weapon; /** - * A `bulletKillType` constant that stops the bullets from ever being destroyed automatically. + * A {@link #bulletKillType} constant that stops the bullets from ever being destroyed automatically. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_NEVER = 0; /** - * A `bulletKillType` constant that automatically kills the bullets when their `bulletLifespan` expires. + * A {@link #bulletKillType} constant that automatically kills the bullets when their {@link #bulletLifespan} expires. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_LIFESPAN = 1; /** - * A `bulletKillType` constant that automatically kills the bullets after they - * exceed the `bulletDistance` from their original firing position. + * A {@link #bulletKillType} constant that automatically kills the bullets after they + * exceed the {@link #bulletDistance} from their original firing position. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_DISTANCE = 2; /** - * A `bulletKillType` constant that automatically kills the bullets when they leave the `Weapon.bounds` rectangle. + * A {@link #bulletKillType} constant that automatically kills the bullets when they leave the {@link #bounds} rectangle. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_WEAPON_BOUNDS = 3; /** - * A `bulletKillType` constant that automatically kills the bullets when they leave the `Camera.bounds` rectangle. + * A {@link #bulletKillType} constant that automatically kills the bullets when they leave the {@link Phaser.Camera#bounds} rectangle. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_CAMERA_BOUNDS = 4; /** - * A `bulletKillType` constant that automatically kills the bullets when they leave the `World.bounds` rectangle. + * A {@link #bulletKillType} constant that automatically kills the bullets when they leave the {@link Phaser.World#bounds} rectangle. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_WORLD_BOUNDS = 5; /** - * A `bulletKillType` constant that automatically kills the bullets when they leave the `Weapon.bounds` rectangle. + * A {@link #bulletKillType} constant that automatically kills the bullets when they leave the {@link #bounds} rectangle. * @constant - * @objType {integer} + * @type {integer} */ Phaser.Weapon.KILL_STATIC_BOUNDS = 6; /** - * This method performs two actions: First it will check to see if the `Weapon.bullets` Group exists or not, + * This method performs two actions: First it will check to see if the {@link #bullets} Group exists or not, * and if not it creates it, adding it the `group` given as the 4th argument. * * Then it will seed the bullet pool with the `quantity` number of Bullets, using the texture key and frame @@ -101860,7 +102791,7 @@ THIS SOFTWARE. * keep increasing the size of the bullet pool as needed. It will never reduce the size of the pool however, * so be careful it doesn't grow too large. * - * You can either set the texture key and frame here, or via the `Weapon.bulletKey` and `Weapon.bulletFrame` + * You can either set the texture key and frame here, or via the {@link #bulletKey} and {@link #bulletFrame} * properties. You can also animate bullets, or set them to use random frames. All Bullets belonging to a * single Weapon instance must share the same texture key however. * @@ -101880,6 +102811,10 @@ THIS SOFTWARE. group = this.game.world; } + if (this.bullets && !this.bullets.game) { + this.bullets = null; + } + if (!this.bullets) { this.bullets = this.game.add.physicsGroup(Phaser.Physics.ARCADE, group); this.bullets.classType = this._bulletClass; @@ -101923,7 +102858,7 @@ THIS SOFTWARE. }; /** - * Sets `Body.enable` to `false` on each bullet in this Weapon. + * Sets {@link Phaser.Physics.Arcade.Body#enable} to `false` on each bullet in this Weapon. * This has the effect of stopping them in-flight should they be moving. * It also stops them being able to be checked for collision. * @@ -101939,7 +102874,7 @@ THIS SOFTWARE. }; /** - * Sets `Body.enable` to `true` on each bullet in this Weapon. + * Sets {@link Phaser.Physics.Arcade.Body#enable} to `true` on each bullet in this Weapon. * This has the effect of resuming their motion should they be in-flight. * It also enables them for collision checks again. * @@ -101955,8 +102890,8 @@ THIS SOFTWARE. }; /** - * Calls `Bullet.kill` on every in-flight bullet in this Weapon. - * Also re-enables their physics bodies, should they have been disabled via `pauseAll`. + * Calls {@link Phaser.Bullet#kill} on every in-flight bullet in this Weapon. + * Also re-enables their physics bodies, should they have been disabled via {@link #pauseAll}. * * @method Phaser.Weapon#killAll * @return {Phaser.Weapon} This Weapon instance. @@ -101972,11 +102907,11 @@ THIS SOFTWARE. }; /** - * Resets the `Weapon.shots` counter back to zero. This is used when you've set - * `Weapon.fireLimit`, and have hit (or just wish to reset) your limit. + * Resets the {@link #shots} counter back to zero. This is used when you've set + * {@link #fireLimit} and have hit (or just wish to reset) your limit. * * @method Phaser.Weapon#resetShots - * @param {integer} [newLimit] - Optionally set a new `Weapon.fireLimit`. + * @param {integer} [newLimit] - Optionally set a new {@link #fireLimit}. * @return {Phaser.Weapon} This Weapon instance. */ Phaser.Weapon.prototype.resetShots = function (newLimit) { @@ -101993,7 +102928,7 @@ THIS SOFTWARE. /** * Destroys this Weapon. It removes itself from the PluginManager, destroys - * the bullets Group, and nulls internal references. + * the {@link #bullets} Group, and nulls internal references. * * @method Phaser.Weapon#destroy */ @@ -102022,8 +102957,7 @@ THIS SOFTWARE. if (this.trackedSprite) { this.trackedSprite.updateTransform(); this.bounds.centerOn(this.trackedSprite.worldPosition.x, this.trackedSprite.worldPosition.y); - } - else if (this.trackedPointer) { + } else if (this.trackedPointer) { this.bounds.centerOn(this.trackedPointer.worldX, this.trackedPointer.worldY); } } @@ -102053,13 +102987,13 @@ THIS SOFTWARE. }; /** - * Sets this Weapon to track the given Sprite, or any Object with a public `world` Point object. - * When a Weapon tracks a Sprite it will automatically update its `fireFrom` value to match the Sprites + * Sets this Weapon to track the given Sprite, or any Object with a public {@link Phaser.Component.Core#world world} Point object. + * When a Weapon tracks a Sprite it will automatically update its {@link #fireFrom} value to match the Sprite's * position within the Game World, adjusting the coordinates based on the offset arguments. * * This allows you to lock a Weapon to a Sprite, so that bullets are always launched from its location. * - * Calling `trackSprite` will reset `Weapon.trackedPointer` to null, should it have been set, as you can + * Calling `trackSprite` will reset {@link #trackedPointer} to null, should it have been set, as you can * only track _either_ a Sprite, or a Pointer, at once, but not both. * * @method Phaser.Weapon#trackSprite @@ -102093,12 +103027,12 @@ THIS SOFTWARE. /** * Sets this Weapon to track the given Pointer. - * When a Weapon tracks a Pointer it will automatically update its `fireFrom` value to match the Pointers + * When a Weapon tracks a Pointer it will automatically update its {@link #fireFrom} value to match the Pointer's * position within the Game World, adjusting the coordinates based on the offset arguments. * * This allows you to lock a Weapon to a Pointer, so that bullets are always launched from its location. * - * Calling `trackPointer` will reset `Weapon.trackedSprite` to null, should it have been set, as you can + * Calling `trackPointer` will reset {@link #trackedSprite} to null, should it have been set, as you can * only track _either_ a Pointer, or a Sprite, at once, but not both. * * @method Phaser.Weapon#trackPointer @@ -102138,17 +103072,17 @@ THIS SOFTWARE. * If `from` is undefined, and there is no tracked object, then the bullets are fired * from the given positions, as they exist in the world. * - * Calling this method sets `Weapon.multiFire = true`. + * Calling this method sets {@link #multiFire} to `true`. * * If there are not enough bullets available in the pool, and the pool cannot be extended, * then this method may not fire from all of the given positions. * * When the bullets are launched they have their texture and frame updated, as required. - * The velocity of the bullets are calculated based on Weapon properties like `bulletSpeed`. + * The velocity of the bullets are calculated based on Weapon properties like {@link #bulletSpeed}. * * @method Phaser.Weapon#fireMany * @param {array} positions - An array of positions. Each position can be any Object, as long as it has public `x` and `y` properties, such as Phaser.Point, { x: 0, y: 0 }, Phaser.Sprite, etc. - * @param {Phaser.Sprite|Phaser.Point|Object|string} [from] - Optionally fires the bullets **from** the `x` and `y` properties of this object, _instead_ of any `Weapon.trackedSprite` or `trackedPointer` that is set. + * @param {Phaser.Sprite|Phaser.Point|Object|string} [from] - Optionally fires the bullets **from** the `x` and `y` properties of this object, _instead_ of any {@link #trackedSprite} or `trackedPointer` that is set. * @return {array} An array containing all of the fired Phaser.Bullet objects, if a launch was successful, otherwise an empty array. */ Phaser.Weapon.prototype.fireMany = function (positions, from) { @@ -102165,8 +103099,7 @@ THIS SOFTWARE. bullets.push(_this.fire(from, null, null, offset.x, offset.y)); }); - } - else { + } else { positions.forEach(function (position) { bullets.push(_this.fire(position)); @@ -102180,23 +103113,23 @@ THIS SOFTWARE. /** * Attempts to fire a single Bullet from a tracked Sprite or Pointer, but applies an offset - * to the position first. This is the same as calling `Weapon.fire` and passing in the offset arguments. + * to the position first. This is the same as calling {@link #fire} and passing in the offset arguments. * * If there are no more bullets available in the pool, and the pool cannot be extended, * then this method returns `null`. It will also return `null` if not enough time has expired since the last time - * the Weapon was fired, as defined in the `Weapon.fireRate` property. + * the Weapon was fired, as defined in the {@link #fireRate} property. * * Otherwise the first available bullet is selected, launched, and returned. * * When the bullet is launched it has its texture and frame updated, as required. The velocity of the bullet is - * calculated based on Weapon properties like `bulletSpeed`. + * calculated based on Weapon properties like {@link #bulletSpeed}. * - * If you wish to fire multiple bullets in a single game update, then set `Weapon.multiFire = true` - * and you can call this method as many times as you like, per loop. See also `Weapon.fireMany`. + * If you wish to fire multiple bullets in a single game update, then set {@link #multiFire} to `true` + * and you can call this method as many times as you like, per loop. See also {@link #fireMany}. * * @method Phaser.Weapon#fireOffset - * @param {number} [offsetX=0] - The horizontal offset from the position of the tracked Sprite or Pointer, as set with `Weapon.trackSprite`. - * @param {number} [offsetY=0] - The vertical offset from the position of the tracked Sprite or Pointer, as set with `Weapon.trackSprite`. + * @param {number} [offsetX=0] - The horizontal offset from the position of the tracked Sprite or Pointer, as set with {@link #trackSprite}. + * @param {number} [offsetY=0] - The vertical offset from the position of the tracked Sprite or Pointer, as set with {@link #trackSprite}. * @return {Phaser.Bullet} The fired bullet, if a launch was successful, otherwise `null`. */ Phaser.Weapon.prototype.fireOffset = function (offsetX, offsetY) { @@ -102215,14 +103148,14 @@ THIS SOFTWARE. /** * Attempts to fire a single Bullet. If there are no more bullets available in the pool, and the pool cannot be extended, * then this method returns `null`. It will also return `null` if not enough time has expired since the last time - * the Weapon was fired, as defined in the `Weapon.fireRate` property. + * the Weapon was fired, as defined in the {@link #fireRate} property. * * Otherwise the first available bullet is selected, launched, and returned. * * The arguments are all optional, but allow you to control both where the bullet is launched from, and aimed at. * - * If you don't provide any of the arguments then it uses those set via properties such as `Weapon.trackedSprite`, - * `Weapon.bulletAngle` and so on. + * If you don't provide any of the arguments then it uses those set via properties such as {@link #trackedSprite}, + * {@link #bulletAngle} and so on. * * When the bullet is launched it has its texture and frame updated, as required. The velocity of the bullet is * calculated based on Weapon properties like `bulletSpeed`. @@ -102232,7 +103165,7 @@ THIS SOFTWARE. * only counts once towards the `shots` total, but you will still receive a Signal for each bullet. * * @method Phaser.Weapon#fire - * @param {Phaser.Sprite|Phaser.Point|Object|string} [from] - Optionally fires the bullet **from** the `x` and `y` properties of this object. If set this overrides `Weapon.trackedSprite` or `trackedPointer`. Pass `null` to ignore it. + * @param {Phaser.Sprite|Phaser.Point|Object|string} [from] - Optionally fires the bullet **from** the `x` and `y` properties of this object. If set this overrides {@link #trackedSprite} or `trackedPointer`. Pass `null` to ignore it. * @param {number} [x] - The x coordinate, in world space, to fire the bullet **towards**. If left as `undefined`, or `null`, the bullet direction is based on its angle. * @param {number} [y] - The y coordinate, in world space, to fire the bullet **towards**. If left as `undefined`, or `null`, the bullet direction is based on its angle. * @param {number} [offsetX=0] - If the bullet is fired from a tracked Sprite or Pointer, or the `from` argument is set, this applies a horizontal offset from the launch position. @@ -102262,44 +103195,35 @@ THIS SOFTWARE. if (from) { if (this.fireFrom.width > 1) { this.fireFrom.centerOn(from.x, from.y); - } - else { + } else { this.fireFrom.x = from.x; this.fireFrom.y = from.y; } - } - else if (this.trackedSprite) { + } else if (this.trackedSprite) { if (this.trackRotation) { this._rotatedPoint.set(this.trackedSprite.world.x + this.trackOffset.x, this.trackedSprite.world.y + this.trackOffset.y); this._rotatedPoint.rotate(this.trackedSprite.world.x, this.trackedSprite.world.y, this.trackedSprite.worldRotation); if (this.fireFrom.width > 1) { this.fireFrom.centerOn(this._rotatedPoint.x, this._rotatedPoint.y); - } - else { + } else { this.fireFrom.x = this._rotatedPoint.x; this.fireFrom.y = this._rotatedPoint.y; } - } - else { - if (this.fireFrom.width > 1) { - this.fireFrom.centerOn(this.trackedSprite.world.x + this.trackOffset.x, this.trackedSprite.world.y + this.trackOffset.y); - } - else { - this.fireFrom.x = this.trackedSprite.world.x + this.trackOffset.x; - this.fireFrom.y = this.trackedSprite.world.y + this.trackOffset.y; - } + } else if (this.fireFrom.width > 1) { + this.fireFrom.centerOn(this.trackedSprite.world.x + this.trackOffset.x, this.trackedSprite.world.y + this.trackOffset.y); + } else { + this.fireFrom.x = this.trackedSprite.world.x + this.trackOffset.x; + this.fireFrom.y = this.trackedSprite.world.y + this.trackOffset.y; } if (this.bulletInheritSpriteSpeed) { speed += this.trackedSprite.body.speed; } - } - else if (this.trackedPointer) { + } else if (this.trackedPointer) { if (this.fireFrom.width > 1) { this.fireFrom.centerOn(this.trackedPointer.world.x + this.trackOffset.x, this.trackedPointer.world.y + this.trackOffset.y); - } - else { + } else { this.fireFrom.x = this.trackedPointer.world.x + this.trackOffset.x; this.fireFrom.y = this.trackedPointer.world.y + this.trackOffset.y; } @@ -102334,11 +103258,9 @@ THIS SOFTWARE. // Avoid sin/cos for right-angled shots if (angle === 0 || angle === 180) { moveX = Math.cos(this.game.math.degToRad(angle)) * speed; - } - else if (angle === 90 || angle === 270) { + } else if (angle === 90 || angle === 270) { moveY = Math.sin(this.game.math.degToRad(angle)) * speed; - } - else { + } else { moveX = Math.cos(this.game.math.degToRad(angle)) * speed; moveY = Math.sin(this.game.math.degToRad(angle)) * speed; } @@ -102349,8 +103271,7 @@ THIS SOFTWARE. bullet = this.bullets.getFirstExists(false, true, fromX, fromY, this.bulletKey, this.bulletFrame); bullet.data.bulletManager = this; - } - else { + } else { bullet = this.bullets.getFirstExists(false); } @@ -102378,20 +103299,16 @@ THIS SOFTWARE. } bullet.animations.play(this.bulletAnimation); - } - else { - if (this.bulletFrameCycle) { - bullet.frame = this.bulletFrames[this.bulletFrameIndex]; + } else if (this.bulletFrameCycle) { + bullet.frame = this.bulletFrames[this.bulletFrameIndex]; - this.bulletFrameIndex++; + this.bulletFrameIndex++; - if (this.bulletFrameIndex >= this.bulletFrames.length) { - this.bulletFrameIndex = 0; - } - } - else if (this.bulletFrameRandom) { - bullet.frame = this.bulletFrames[Math.floor(Math.random() * this.bulletFrames.length)]; + if (this.bulletFrameIndex >= this.bulletFrames.length) { + this.bulletFrameIndex = 0; } + } else if (this.bulletFrameRandom) { + bullet.frame = this.bulletFrames[Math.floor(Math.random() * this.bulletFrames.length)]; } if (bullet.data.bodyDirty) { @@ -102419,8 +103336,7 @@ THIS SOFTWARE. } next = this.game.time.now + rate; - } - else { + } else { next = this.game.time.now + this.fireRate; } @@ -102431,8 +103347,7 @@ THIS SOFTWARE. this._tempNextFire = next; this.shots++; } - } - else { + } else { this._nextFire = next; this.shots++; @@ -102450,7 +103365,7 @@ THIS SOFTWARE. }; /** - * Fires a bullet **at** the given Pointer. The bullet will be launched from the `Weapon.fireFrom` position, + * Fires a bullet **at** the given Pointer. The bullet will be launched from the {@link #fireFrom} position, * or from a Tracked Sprite or Pointer, if you have one set. * * @method Phaser.Weapon#fireAtPointer @@ -102468,7 +103383,7 @@ THIS SOFTWARE. }; /** - * Fires a bullet **at** the given Sprite. The bullet will be launched from the `Weapon.fireFrom` position, + * Fires a bullet **at** the given Sprite. The bullet will be launched from the {@link #fireFrom} position, * or from a Tracked Sprite or Pointer, if you have one set. * * @method Phaser.Weapon#fireAtSprite @@ -102482,7 +103397,7 @@ THIS SOFTWARE. }; /** - * Fires a bullet **at** the given coordinates. The bullet will be launched from the `Weapon.fireFrom` position, + * Fires a bullet **at** the given coordinates. The bullet will be launched from the {@link #fireFrom} position, * or from a Tracked Sprite or Pointer, if you have one set. * * @method Phaser.Weapon#fireAtXY @@ -102583,12 +103498,12 @@ THIS SOFTWARE. * Adds a new animation under the given key. Optionally set the frames, frame rate and loop. * The arguments are all the same as for `Animation.add`, and work in the same way. * - * `Weapon.bulletAnimation` will be set to this animation after it's created. From that point on, all + * {@link #bulletAnimation} will be set to this animation after it's created. From that point on, all * bullets fired will play using this animation. You can swap between animations by calling this method - * several times, and then just changing the `Weapon.bulletAnimation` property to the name of the animation + * several times, and then just changing the {@link #bulletAnimation} property to the name of the animation * you wish to play for the next launched bullet. * - * If you wish to stop using animations at all, set `Weapon.bulletAnimation` to '' (an empty string). + * If you wish to stop using animations at all, set {@link #bulletAnimation} to '' (an empty string). * * @method Phaser.Weapon#addBulletAnimation * @param {string} name - The unique (within the Weapon instance) name for the animation, i.e. "fire", "blast". @@ -102638,8 +103553,8 @@ THIS SOFTWARE. debugBodies = false; } - this.game.debug.text("Weapon Plugin", x, y); - this.game.debug.text("Bullets Alive: " + this.bullets.total + " - Total: " + this.bullets.length, x, y + 24); + this.game.debug.text('Weapon Plugin', x, y); + this.game.debug.text('Bullets Alive: ' + this.bullets.total + ' - Total: ' + this.bullets.length, x, y + 24); if (debugBodies) { this.bullets.forEachExists(this.game.debug.body, this.game.debug, 'rgba(255, 0, 255, 0.8)'); @@ -102649,14 +103564,14 @@ THIS SOFTWARE. /** * The Class of the bullets that are launched by this Weapon. Defaults to {@link Phaser.Bullet}, but can be - * overridden before calling `createBullets` and set to your own class objType. + * overridden before calling `createBullets` and set to your own class type. * * It should be a constructor function accepting `(game, x, y, key, frame)`. * * @name Phaser.Weapon#bulletClass * @property {function} bulletClass */ - Object.defineProperty(Phaser.Weapon.prototype, "bulletClass", { + Object.defineProperty(Phaser.Weapon.prototype, 'bulletClass', { get: function () { @@ -102691,23 +103606,23 @@ THIS SOFTWARE. * The bullets are automatically killed when they exceed `bulletDistance` pixels away from their original launch position. * * * `Phaser.Weapon.KILL_WEAPON_BOUNDS` - * The bullets are automatically killed when they no longer intersect with the `Weapon.bounds` rectangle. + * The bullets are automatically killed when they no longer intersect with the {@link #bounds} rectangle. * * * `Phaser.Weapon.KILL_CAMERA_BOUNDS` - * The bullets are automatically killed when they no longer intersect with the `Camera.bounds` rectangle. + * The bullets are automatically killed when they no longer intersect with the {@link Phaser.Camera#bounds} rectangle. * * * `Phaser.Weapon.KILL_WORLD_BOUNDS` - * The bullets are automatically killed when they no longer intersect with the `World.bounds` rectangle. + * The bullets are automatically killed when they no longer intersect with the {@link Phaser.World#bounds} rectangle. * * * `Phaser.Weapon.KILL_STATIC_BOUNDS` - * The bullets are automatically killed when they no longer intersect with the `Weapon.bounds` rectangle. + * The bullets are automatically killed when they no longer intersect with the {@link #bounds} rectangle. * The difference between static bounds and weapon bounds, is that a static bounds will never be adjusted to * match the position of a tracked sprite or pointer. * * @name Phaser.Weapon#bulletKillType * @property {integer} bulletKillType */ - Object.defineProperty(Phaser.Weapon.prototype, "bulletKillType", { + Object.defineProperty(Phaser.Weapon.prototype, 'bulletKillType', { get: function () { @@ -102744,7 +103659,7 @@ THIS SOFTWARE. * @name Phaser.Weapon#bulletCollideWorldBounds * @property {boolean} bulletCollideWorldBounds */ - Object.defineProperty(Phaser.Weapon.prototype, "bulletCollideWorldBounds", { + Object.defineProperty(Phaser.Weapon.prototype, 'bulletCollideWorldBounds', { get: function () { @@ -102765,12 +103680,12 @@ THIS SOFTWARE. /** * The x coordinate from which bullets are fired. This is the same as `Weapon.fireFrom.x`, and - * can be overridden by the `Weapon.fire` arguments. + * can be overridden by the {@link #fire} arguments. * * @name Phaser.Weapon#x * @property {number} x */ - Object.defineProperty(Phaser.Weapon.prototype, "x", { + Object.defineProperty(Phaser.Weapon.prototype, 'x', { get: function () { @@ -102787,12 +103702,12 @@ THIS SOFTWARE. /** * The y coordinate from which bullets are fired. This is the same as `Weapon.fireFrom.y`, and - * can be overridden by the `Weapon.fire` arguments. + * can be overridden by the {@link #fire} arguments. * * @name Phaser.Weapon#y * @property {number} y */ - Object.defineProperty(Phaser.Weapon.prototype, "y", { + Object.defineProperty(Phaser.Weapon.prototype, 'y', { get: function () { @@ -102869,7 +103784,7 @@ THIS SOFTWARE. /** * Updates the Bullet, killing as required. * - * @method Phaser.Bullet#kill + * @method Phaser.Bullet#update * @memberof Phaser.Bullet */ Phaser.Bullet.prototype.update = function () { @@ -102883,16 +103798,13 @@ THIS SOFTWARE. if (this.game.physics.arcade.distanceToXY(this, this.data.fromX, this.data.fromY, true) > this.data.killDistance) { this.kill(); } - } - else { - if (!this.data.bulletManager.bulletBounds.intersects(this)) { - this.kill(); - } + } else if (!this.data.bulletManager.bulletBounds.intersects(this)) { + this.kill(); } } if (this.data.rotateToVelocity) { - this.rotation = Math.atan2(this.body.velocity.y, this.body.velocity.x); + this.rotation = this.body.velocity.atan(); } if (this.data.bulletManager.bulletWorldWrap) { @@ -102971,7 +103883,7 @@ THIS SOFTWARE. this.height = 0; /** - * @property {number} objType - The const objType of this object. + * @property {number} type - The const type of this object. * @default */ this.type = Phaser.VIDEO; @@ -103019,6 +103931,19 @@ THIS SOFTWARE. */ this.onTimeout = new Phaser.Signal(); + /** + * This signal is dispatched when the Video is unlocked. + * @property {Phaser.Signal} onTouchUnlock + */ + this.onTouchUnlock = new Phaser.Signal(); + + /** + * Start playing the video when it's unlocked. + * @property {boolean} playWhenUnlocked + * @default + */ + this.playWhenUnlocked = true; + /** * @property {integer} timeout - The amount of ms allowed to elapsed before the Video.onTimeout signal is dispatched while waiting for webcam access. * @default @@ -103139,15 +104064,13 @@ THIS SOFTWARE. if (_video.isBlob) { this.createVideoFromBlob(_video.data); - } - else { + } else { this.video = _video.data; } this.width = this.video.videoWidth; this.height = this.video.videoHeight; - } - else if (url) { + } else if (url) { this.createVideoFromURL(url, false); } @@ -103158,8 +104081,7 @@ THIS SOFTWARE. if (this.video && !url) { this.baseTexture = new PIXI.BaseTexture(this.video, null, this.game.resolution); this.baseTexture.forceLoaded(this.width, this.height); - } - else { + } else { this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source, null, this.game.resolution); this.baseTexture.forceLoaded(this.width, this.height); } @@ -103200,11 +104122,8 @@ THIS SOFTWARE. if (this.game.device.needsTouchUnlock()) { this.setTouchLock(); - } - else { - if (_video) { - _video.locked = false; - } + } else if (_video) { + _video.locked = false; } }; @@ -103273,17 +104192,16 @@ THIS SOFTWARE. } if (this.videoStream !== null) { - if (this.videoStream['active']) { + if (this.videoStream.active) { this.videoStream.active = false; - } - else { + } else { this.videoStream.stop(); } } this.removeVideoElement(); - this.video = document.createElement("video"); + this.video = document.createElement('video'); this.video.setAttribute('autoplay', 'autoplay'); if (width !== null) { @@ -103300,12 +104218,11 @@ THIS SOFTWARE. try { navigator.getUserMedia( - {"audio": captureAudio, "video": true}, + {audio: captureAudio, video: true}, this.getUserMediaSuccess.bind(this), this.getUserMediaError.bind(this) ); - } - catch (error) { + } catch (error) { this.getUserMediaError(error); } @@ -103351,8 +104268,7 @@ THIS SOFTWARE. // Set the source of the video element with the stream from the camera if (this.video.mozSrcObject !== undefined) { this.video.mozSrcObject = stream; - } - else { + } else { this.video.src = (window.URL && window.URL.createObjectURL(stream)) || stream; } @@ -103380,12 +104296,10 @@ THIS SOFTWARE. self.baseTexture.source = self.video; self.updateTexture(null, width, height); self.onAccess.dispatch(self); - } - else { + } else { window.setTimeout(checkStream, 500); } - } - else { + } else { console.warn('Unable to connect to video stream. Webcam error?'); } @@ -103410,7 +104324,7 @@ THIS SOFTWARE. var _this = this; - this.video = document.createElement("video"); + this.video = document.createElement('video'); this.video.controls = false; this.video.setAttribute('autoplay', 'autoplay'); this.video.addEventListener('loadeddata', function (event) { @@ -103442,7 +104356,7 @@ THIS SOFTWARE. this.texture.valid = false; } - this.video = document.createElement("video"); + this.video = document.createElement('video'); this.video.controls = false; if (autoplay) { @@ -103571,8 +104485,7 @@ THIS SOFTWARE. if (loop) { this.video.loop = 'loop'; - } - else { + } else { this.video.loop = ''; } @@ -103580,16 +104493,14 @@ THIS SOFTWARE. if (this.touchLocked) { this._pending = true; - } - else { + } else { this._pending = false; if (this.key !== null) { if (this.video.readyState !== 4) { this.retry = this.retryLimit; this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval); - } - else { + } else { this._playCallback = this.playHandler.bind(this); this.video.addEventListener('playing', this._playCallback, true); } @@ -103648,37 +104559,30 @@ THIS SOFTWARE. if (this.video.mozSrcObject) { this.video.mozSrcObject.stop(); this.video.src = null; - } - else { + } else { this.video.src = ''; - if (this.videoStream['active']) { + if (this.videoStream.active) { this.videoStream.active = false; - } - else { - if (this.videoStream.getTracks) { - this.videoStream.getTracks().forEach(function (track) { - track.stop(); - }); - } - else { - this.videoStream.stop(); - } + } else if (this.videoStream.getTracks) { + this.videoStream.getTracks().forEach(function (track) { + track.stop(); + }); + } else { + this.videoStream.stop(); } } this.videoStream = null; this.isStreaming = false; - } - else { + } else { this.video.removeEventListener('ended', this._endCallback, true); this.video.removeEventListener('webkitendfullscreen', this._endCallback, true); this.video.removeEventListener('playing', this._playCallback, true); if (this.touchLocked) { this._pending = false; - } - else { + } else { this.video.pause(); } } @@ -103699,12 +104603,11 @@ THIS SOFTWARE. if (Array.isArray(object)) { for (var i = 0; i < object.length; i++) { - if (object[i]['loadTexture']) { + if (object[i].loadTexture) { object[i].loadTexture(this); } } - } - else { + } else { object.loadTexture(this); } @@ -103893,14 +104796,12 @@ THIS SOFTWARE. // We've got enough data to update the texture for playback this.updateTexture(); - } - else { + } else { this.retry--; if (this.retry > 0) { this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval); - } - else { + } else { console.warn('Phaser.Video: Unable to start downloading video in time', this.isStreaming); } } @@ -103915,7 +104816,7 @@ THIS SOFTWARE. */ setTouchLock: function () { - this.game.input.addTouchLockCallback(this.unlock, this); + this.game.input.addTouchLockCallback(this.unlock, this, true); this.touchLocked = true; }, @@ -103931,9 +104832,11 @@ THIS SOFTWARE. this.touchLocked = false; - this.video.play(); + if (this.playWhenUnlocked) { + this.video.play(); - this.onPlay.dispatch(this, this.loop, this.playbackRate); + this.onPlay.dispatch(this, this.loop, this.playbackRate); + } if (this.key) { var _video = this.game.cache.getVideo(this.key); @@ -103943,6 +104846,8 @@ THIS SOFTWARE. } } + this.onTouchUnlock.dispatch(this); + return true; }, @@ -104042,7 +104947,7 @@ THIS SOFTWARE. * @name Phaser.Video#currentTime * @property {number} currentTime - The current time of the video in seconds. If set the video will attempt to seek to that point in time. */ - Object.defineProperty(Phaser.Video.prototype, "currentTime", { + Object.defineProperty(Phaser.Video.prototype, 'currentTime', { get: function () { @@ -104063,7 +104968,7 @@ THIS SOFTWARE. * @property {number} duration - The duration of the video in seconds. * @readOnly */ - Object.defineProperty(Phaser.Video.prototype, "duration", { + Object.defineProperty(Phaser.Video.prototype, 'duration', { get: function () { @@ -104078,7 +104983,7 @@ THIS SOFTWARE. * @property {number} progress - The progress of this video. This is a value between 0 and 1, where 0 is the start and 1 is the end of the video. * @readOnly */ - Object.defineProperty(Phaser.Video.prototype, "progress", { + Object.defineProperty(Phaser.Video.prototype, 'progress', { get: function () { @@ -104092,7 +104997,7 @@ THIS SOFTWARE. * @name Phaser.Video#mute * @property {boolean} mute - Gets or sets the muted state of the Video. */ - Object.defineProperty(Phaser.Video.prototype, "mute", { + Object.defineProperty(Phaser.Video.prototype, 'mute', { get: function () { @@ -104111,8 +105016,7 @@ THIS SOFTWARE. this._codeMuted = true; this.setMute(); - } - else { + } else { if (!this._muted) { return; } @@ -104131,7 +105035,7 @@ THIS SOFTWARE. * @name Phaser.Video#paused * @property {boolean} paused */ - Object.defineProperty(Phaser.Video.prototype, "paused", { + Object.defineProperty(Phaser.Video.prototype, 'paused', { get: function () { @@ -104154,8 +105058,7 @@ THIS SOFTWARE. this._codePaused = true; this.setPause(); - } - else { + } else { if (!this._paused) { return; } @@ -104171,7 +105074,7 @@ THIS SOFTWARE. * @name Phaser.Video#volume * @property {number} volume - Gets or sets the volume of the Video, a value between 0 and 1. The value given is clamped to the range 0 to 1. */ - Object.defineProperty(Phaser.Video.prototype, "volume", { + Object.defineProperty(Phaser.Video.prototype, 'volume', { get: function () { @@ -104183,8 +105086,7 @@ THIS SOFTWARE. if (value < 0) { value = 0; - } - else if (value > 1) { + } else if (value > 1) { value = 1; } @@ -104200,7 +105102,7 @@ THIS SOFTWARE. * @name Phaser.Video#playbackRate * @property {number} playbackRate - Gets or sets the playback rate of the Video. This is the speed at which the video is playing. */ - Object.defineProperty(Phaser.Video.prototype, "playbackRate", { + Object.defineProperty(Phaser.Video.prototype, 'playbackRate', { get: function () { @@ -104226,7 +105128,7 @@ THIS SOFTWARE. * @name Phaser.Video#loop * @property {boolean} loop */ - Object.defineProperty(Phaser.Video.prototype, "loop", { + Object.defineProperty(Phaser.Video.prototype, 'loop', { get: function () { @@ -104238,8 +105140,7 @@ THIS SOFTWARE. if (value && this.video) { this.video.loop = 'loop'; - } - else if (this.video) { + } else if (this.video) { this.video.loop = ''; } @@ -104252,7 +105153,7 @@ THIS SOFTWARE. * @property {boolean} playing - True if the video is currently playing (and not paused or ended), otherwise false. * @readOnly */ - Object.defineProperty(Phaser.Video.prototype, "playing", { + Object.defineProperty(Phaser.Video.prototype, 'playing', { get: function () { diff --git a/Server/src/main/typescript/World.ts b/Server/src/main/typescript/World.ts index 6ada378..a3a8a8c 100644 --- a/Server/src/main/typescript/World.ts +++ b/Server/src/main/typescript/World.ts @@ -16,7 +16,8 @@ enum TileType { COPPER, VAULT_FLOOR, VAULT_WALL, - FLUID + FLUID, + MAGNETIC } class Tile extends Phaser.Plugin.Isometric.IsoSprite { @@ -73,6 +74,8 @@ class Tile extends Phaser.Plugin.Isometric.IsoSprite { return new VoidTile(x, y); case TileType.FLUID: return new FluidTile(x, y); + case TileType.MAGNETIC: + return new MagneticTile(x, y); case TileType.PLAIN: default: return new PlainTile(x, y); @@ -164,6 +167,7 @@ class VaultFloorTile extends Tile { class VoidTile extends Tile { public onHover() { + //don't do animation mar.tileIndicator.tileX = this.tileX; mar.tileIndicator.tileY = this.tileY; mar.tileIndicator.tileType = this.tileType; @@ -185,17 +189,37 @@ class FluidTile extends Tile { constructor(x: number, y: number) { super(x, y, config.plainSprite, 0); - this.baseTint = 0x0ACED6; + this.baseTint = config.fluidTint; this.tint = this.baseTint; this.alpha = 0.6; this.baseZ = -15; this.isoZ = this.baseZ; - this.tileType = "fluid"; } } +class MagneticTile extends Tile { + + public onHover() { + mar.game.add.tween(this).to({isoZ: this.baseZ + 30}, 200, Phaser.Easing.Quadratic.InOut, true); + + mar.tileIndicator.tileX = this.tileX; + mar.tileIndicator.tileY = this.tileY; + mar.tileIndicator.tileType = this.tileType; + } + + constructor(x: number, y: number) { + super(x, y, config.magneticSprite, 0); + + this.baseTint = 0xFFFFFF; + this.tint = this.baseTint; + + this.setText("Magnetic", config.textIron); + this.tileType = "Magnetic tile"; + } +} + class IronTile extends Tile { constructor(x: number, y: number) { diff --git a/Server/src/main/typescript/mar.ts b/Server/src/main/typescript/mar.ts index d1af726..9bee261 100644 --- a/Server/src/main/typescript/mar.ts +++ b/Server/src/main/typescript/mar.ts @@ -11,6 +11,7 @@ let config = { wallTint: 0xDDDDDD, vaultWallTint: 0x3F2D2A, vaultFloorTint: 0x2B1E1C, + fluidTint: 0x0ACED6, oreTint: 0xF3F3F3, cubotHoverTint: 0x00FF00, cubotTint: 0xFFFFFF, @@ -27,6 +28,7 @@ let config = { hologramStroke: "#12FFB0", copperFill: "#C87D38", plainSprite: "tiles/tile", + magneticSprite: "tiles/magneticTile", wallSprite: "tiles/bigTile", wallSprite2: "tiles/bigTile2", walkDuration: 800, //walk animation duration in ms

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ν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 literal 702046 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�@T}L$!QqIP4x#6= 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