diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d7d852f..1eee6cac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - `SideCamera` replaced with `BaseCamera.strategy.lockToActorAxis` - `Body.wasTouching` replaced with event type `CollisionEnd` ## Added +- Option bag constructors have been added for commonly-used classes (see /src/engine/Docs/Constructors.md) ([#410])(https://github.com/excaliburjs/Excalibur/issues/410) ## Changed diff --git a/karma.conf.js b/karma.conf.js index b30abc7e..117d2abd 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,120 +1,119 @@ // Karma configuration // Generated on Sat Sep 09 2017 14:56:04 GMT-0500 (Central Daylight Time) -module.exports = function(config) { +module.exports = function (config) { config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine', 'karma-typescript'], - - - // list of files / patterns to load in the browser - files: [ - './build/dist/excalibur.js', - './build/dist/excalibur.d.ts', - './src/engine/**/*.ts', - './src/spec/images/**/*.png', - './src/spec/support/js-imagediff.js', - './src/spec/support/js-imagediff.d.ts', - './src/spec/Mocks.ts', - './src/spec/TestUtils.ts', - './src/spec/*.ts', - ], - - - // list of files to exclude - exclude: [ - // "node_modules", - // "typedoc-default-themes" - ], - - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - 'src/spec/Mocks.ts': ['karma-typescript'], - 'src/spec/TestUtils.ts': ['karma-typescript'], - 'src/spec/*.ts': ['karma-typescript'], - 'build/dist/excalibur.js': ['coverage'] - }, - - karmaTypescriptConfig: { - compilerOptions: { - noImplicitAny: false, - target: "ES5", - module: "none", - sourceMap: true, - removeComments: false, - declaration: true, - experimentalDecorators: true - }, - include: [ - './build/dist/excalibur.d.ts', - 'src/spec/Mocks.ts', - 'src/spec/TestUtils.ts', - 'src/spec/*.ts' - ] - }, - - - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'karma-typescript', 'coverage'], - - coverageReporter : { - reporters:[ - {type: 'html', dir:'coverage/'}, - {type: 'lcovonly', dir: 'coverage/', file: 'lcov.info'}, - {type: 'text-summary'} - ], - }, - - // web server port - port: 9876, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['ChromeHeadlessDebug'], - - customLaunchers: { - ChromeHeadlessDebug: { - base: 'ChromeHeadless', - flags: [ - '--remote-debugging-port=9333', - '--no-sandbox' - ] - } - }, - - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: true, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine', 'karma-typescript'], + + + // list of files / patterns to load in the browser + files: [ + './build/dist/excalibur.js', + './build/dist/excalibur.d.ts', + './src/engine/**/*.ts', + './src/spec/images/**/*.png', + './src/spec/support/js-imagediff.js', + './src/spec/support/js-imagediff.d.ts', + './src/spec/Mocks.ts', + './src/spec/TestUtils.ts', + './src/spec/*.ts', + ], + + + // list of files to exclude + exclude: [ + // "node_modules", + // "typedoc-default-themes" + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + 'src/spec/Mocks.ts': ['karma-typescript'], + 'src/spec/TestUtils.ts': ['karma-typescript'], + 'src/spec/*.ts': ['karma-typescript'], + 'build/dist/excalibur.js': ['coverage'] + }, + + karmaTypescriptConfig: { + compilerOptions: { + noImplicitAny: false, + target: "ES5", + module: "none", + sourceMap: true, + removeComments: false, + declaration: true, + experimentalDecorators: true + }, + include: [ + './build/dist/excalibur.d.ts', + 'src/spec/Mocks.ts', + 'src/spec/TestUtils.ts', + 'src/spec/*.ts' + ] + }, + + + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress', 'karma-typescript', 'coverage'], + + coverageReporter: { + reporters: [ + { type: 'html', dir: 'coverage/' }, + { type: 'lcovonly', dir: 'coverage/', file: 'lcov.info' }, + { type: 'text-summary' } + ], + }, + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['ChromeHeadlessDebug'], + + customLaunchers: { + ChromeHeadlessDebug: { + base: 'ChromeHeadless', + flags: [ + '--remote-debugging-port=9333', + '--no-sandbox' + ] + } + }, + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity }) - } - \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index daa3a59c..7046ed0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3,6 +3,39 @@ "requires": true, "lockfileVersion": 1, "dependencies": { + "@types/fs-extra": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-4.0.0.tgz", + "integrity": "sha512-PlKJw6ujJXLJjbvB3T0UCbY3jibKM6/Ya5cc9j1q+mYDeK3aR4Dp+20ZwxSuvJr9mIoPxp7+IL4aMOEvsscRTA==", + "dev": true, + "requires": { + "@types/node": "9.4.5" + } + }, + "@types/handlebars": { + "version": "4.0.31", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.31.tgz", + "integrity": "sha1-p/umb6/kJxOu6I7sqNuRGS7+bnI=", + "dev": true + }, + "@types/highlight.js": { + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.1.8.tgz", + "integrity": "sha1-0ifxi8uPPxh+FpZfJESFmgRol1g=", + "dev": true + }, + "@types/lodash": { + "version": "4.14.74", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.74.tgz", + "integrity": "sha512-BZknw3E/z3JmCLqQVANcR17okqVTPZdlxvcIz0fJiJVLUCbSH1hK3zs9r634PVSmrzAxN+n/fxlVRiYoArdOIQ==", + "dev": true + }, + "@types/marked": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", + "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", + "dev": true + }, "@types/minimatch": { "version": "2.0.29", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-2.0.29.tgz", @@ -10,11 +43,20 @@ "dev": true }, "@types/node": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.12.tgz", - "integrity": "sha1-rl9noZwV91IUgATbB8u7Ny5p78k=", + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.5.tgz", + "integrity": "sha512-DvC7bzO5797bkApgukxouHmkOdYN2D0yL5olw0RncDpXUa6n39qTVsUi/5g2QJjPgl8qn4zh+4h0sofNoWGLRg==", "dev": true }, + "@types/shelljs": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.7.0.tgz", + "integrity": "sha1-IpwVfGvB5n1rmQ5sXhjb0v9Yz/A=", + "dev": true, + "requires": { + "@types/node": "9.4.5" + } + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -576,6 +618,7 @@ "requires": { "anymatch": "1.3.0", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1658,6 +1701,910 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", @@ -2372,9 +3319,9 @@ } }, "highlight.js": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.10.0.tgz", - "integrity": "sha1-+fCxTAvgDw5PseV3t0n+2eb1L1U=", + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", "dev": true }, "hmac-drbg": { @@ -2493,9 +3440,9 @@ "dev": true }, "interpret": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.2.tgz", - "integrity": "sha1-9PYj8LtxIvFfVxfI4lS4FhtcWy0=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, "is-arrayish": { @@ -3495,9 +4442,9 @@ "dev": true }, "marked": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", - "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz", + "integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==", "dev": true }, "maxmin": { @@ -3705,6 +4652,13 @@ "duplexer2": "0.0.2" } }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true, + "optional": true + }, "ncp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz", @@ -5291,9 +6245,9 @@ "@types/shelljs": "0.7.0", "fs-extra": "4.0.3", "handlebars": "4.0.6", - "highlight.js": "9.10.0", - "lodash": "4.17.4", - "marked": "0.3.6", + "highlight.js": "9.12.0", + "lodash": "4.17.5", + "marked": "0.3.12", "minimatch": "3.0.3", "progress": "2.0.0", "shelljs": "0.7.8", @@ -5301,48 +6255,6 @@ "typescript": "2.4.1" }, "dependencies": { - "@types/fs-extra": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-4.0.0.tgz", - "integrity": "sha512-PlKJw6ujJXLJjbvB3T0UCbY3jibKM6/Ya5cc9j1q+mYDeK3aR4Dp+20ZwxSuvJr9mIoPxp7+IL4aMOEvsscRTA==", - "dev": true, - "requires": { - "@types/node": "7.0.12" - } - }, - "@types/handlebars": { - "version": "4.0.31", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.31.tgz", - "integrity": "sha1-p/umb6/kJxOu6I7sqNuRGS7+bnI=", - "dev": true - }, - "@types/highlight.js": { - "version": "9.1.8", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.1.8.tgz", - "integrity": "sha1-0ifxi8uPPxh+FpZfJESFmgRol1g=", - "dev": true - }, - "@types/lodash": { - "version": "4.14.74", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.74.tgz", - "integrity": "sha512-BZknw3E/z3JmCLqQVANcR17okqVTPZdlxvcIz0fJiJVLUCbSH1hK3zs9r634PVSmrzAxN+n/fxlVRiYoArdOIQ==", - "dev": true - }, - "@types/marked": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", - "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", - "dev": true - }, - "@types/shelljs": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.7.0.tgz", - "integrity": "sha1-IpwVfGvB5n1rmQ5sXhjb0v9Yz/A=", - "dev": true, - "requires": { - "@types/node": "7.0.12" - } - }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -5364,9 +6276,9 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", "dev": true }, "progress": { @@ -5382,16 +6294,10 @@ "dev": true, "requires": { "glob": "7.0.6", - "interpret": "1.0.2", + "interpret": "1.1.0", "rechoir": "0.6.2" } }, - "typedoc-default-themes": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", - "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", - "dev": true - }, "typescript": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.1.tgz", @@ -5400,10 +6306,16 @@ } } }, + "typedoc-default-themes": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", + "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", + "dev": true + }, "typescript": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz", - "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.2.tgz", + "integrity": "sha1-YGAiUIR5tV/6NotY/uljoD39eww=", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 4849df04..dbc11791 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "travis-ci": "^2.1.0", "tslint": "^3.13.0", "typedoc": "0.9.0", - "typescript": "2.6.1" + "typescript": "2.2.2" }, "dependencies": {} } diff --git a/sandbox/src/game.ts b/sandbox/src/game.ts index d498c35d..4701b0c6 100644 --- a/sandbox/src/game.ts +++ b/sandbox/src/game.ts @@ -1,35 +1,35 @@ /// /********************* - * uuuuuuuuuuuuuuuuuuuu - * u" uuuuuuuuuuuuuuuuuu "u - * u" u$$$$$$$$$$$$$$$$$$$$u "u - * u" u$$$$$$$$$$$$$$$$$$$$$$$$u "u - * u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u - * u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u - * u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u - * $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ - * $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ - * $ $$$" ... "$... ...$" ... "$$$ ... "$$$ $ - * $ $$$u `"$$$$$$$ $$$ $$$$$ $$ $$$ $$$ $ - * $ $$$$$$uu "$$$$ $$$ $$$$$ $$ """ u$$$ $ - * $ $$$""$$$ $$$$ $$$u "$$$" u$$ $$$$$$$$ $ - * $ $$$$....,$$$$$..$$$$$....,$$$$..$$$$$$$$ $ - * $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ - * "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" - * "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" - * "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" - * "u "$$$$$$$$$$$$$$$$$$$$$$$$" u" - * "u "$$$$$$$$$$$$$$$$$$$$" u" - * "u """""""""""""""""" u" + * uuuuuuuuuuuuuuuuuuuu + * u" uuuuuuuuuuuuuuuuuu "u + * u" u$$$$$$$$$$$$$$$$$$$$u "u + * u" u$$$$$$$$$$$$$$$$$$$$$$$$u "u + * u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u + * u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u + * u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u + * $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ + * $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ + * $ $$$" ... "$... ...$" ... "$$$ ... "$$$ $ + * $ $$$u `"$$$$$$$ $$$ $$$$$ $$ $$$ $$$ $ + * $ $$$$$$uu "$$$$ $$$ $$$$$ $$ """ u$$$ $ + * $ $$$""$$$ $$$$ $$$u "$$$" u$$ $$$$$$$$ $ + * $ $$$$....,$$$$$..$$$$$....,$$$$..$$$$$$$$ $ + * $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ + * "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" + * "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" + * "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" + * "u "$$$$$$$$$$$$$$$$$$$$$$$$" u" + * "u "$$$$$$$$$$$$$$$$$$$$" u" + * "u """""""""""""""""" u" * """""""""""""""""""" - * + * * WARNING: Do not use this sandbox as a "sample" of how to use Excalibur *properly.* * This is a messy POS that we use to do crazy integration testing and is really * a terrible example. - * + * * Please don't reference this. Reference the official sample games! - * + * * Thank you, * Excalibur.js team */ @@ -67,23 +67,38 @@ ex.Physics.acc = new ex.Vector(0, 800); // global accel // Add some UI -var heart = new ex.UIActor(0, 0, 20, 20); +//var heart = new ex.UIActor(0, 0, 20, 20); +var heart = new ex.UIActor({x: 0, y: 0, width: 20, height: 20}); heart.scale.setTo(2, 2); heart.addDrawing(heartTex.asSprite()); game.add(heart); // Turn on debug diagnostics game.isDebug = false; -var blockSprite = new ex.Sprite(imageBlocks, 0, 0, 65, 49); +//var blockSprite = new ex.Sprite(imageBlocks, 0, 0, 65, 49); +var blockSprite = new ex.Sprite({image: imageBlocks, sx:0, sy: 0, swidth: 65, sheight: 49}); // Create spritesheet -var spriteSheetRun = new ex.SpriteSheet(imageRun, 21, 1, 96, 96); -var spriteSheetJump = new ex.SpriteSheet(imageJump, 21, 1, 96, 96); +//var spriteSheetRun = new ex.SpriteSheet(imageRun, 21, 1, 96, 96); +var spriteSheetRun = new ex.SpriteSheet({ image: imageRun, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 +}); +//var spriteSheetJump = new ex.SpriteSheet(imageJump, 21, 1, 96, 96); +var spriteSheetJump = new ex.SpriteSheet({ image: imageJump, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 +}); var tileBlockWidth = 64, tileBlockHeight = 48, spriteTiles = new ex.SpriteSheet(imageBlocks, 1, 1, tileBlockWidth, tileBlockHeight); // create a collision map -var tileMap = new ex.TileMap(100, 300, tileBlockWidth, tileBlockHeight, 4, 500); +//var tileMap = new ex.TileMap(100, 300, tileBlockWidth, tileBlockHeight, 4, 500); +var tileMap = new ex.TileMap({ x: 100, y: 300, cellWidth: tileBlockWidth, cellHeight: tileBlockHeight, rows: 4, cols: 500 }); tileMap.registerSpriteSheet("default", spriteTiles); tileMap.data.forEach(function (cell: ex.Cell) { cell.solid = true; @@ -92,8 +107,21 @@ tileMap.data.forEach(function (cell: ex.Cell) { game.add(tileMap); // Create spriteFont -var spriteFont = new ex.SpriteFont(spriteFontImage, '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', true, 16, 3, 16, 16); -var label = new ex.Label('Hello World', 100, 100, null, spriteFont); +//var spriteFont = new ex.SpriteFont(spriteFontImage, '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', true, 16, 3, 16, 16); +var spriteFont = new ex.SpriteFont({ + image: spriteFontImage, + alphabet: '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', + caseInsensitive: true, + columns: 16, + rows: 3, + spWidth: 16, + spHeight: 16 +}); +//var label = new ex.Label('Hello World', 100, 100, null, spriteFont); +var label = new ex.Label({text: 'Hello World', + x: 100, + y: 100, + spriteFont: spriteFont}); label.actions.scaleTo(2, 2, .5, .5).scaleTo(1, 1, .5, .5).repeatForever(); game.add(label); @@ -115,8 +143,14 @@ var currentX = 0; for (var i = 0; i < 36; i++) { currentX = tileBlockWidth * i + 10; var color = new ex.Color(Math.random() * 255, Math.random() * 255, Math.random() * 255); - var block = new ex.Actor(currentX, 350 + Math.random() * 100, tileBlockWidth, tileBlockHeight, color); - block.collisionType = ex.CollisionType.Fixed; + var block = new ex.Actor({ x: currentX, + y: 350 + Math.random() * 100, + width: tileBlockWidth, + height: tileBlockHeight, + color: color, + collisionType: ex.CollisionType.Fixed }); + //var block = new ex.Actor(currentX, 350 + Math.random() * 100, tileBlockWidth, tileBlockHeight, color); + //block.collisionType = ex.CollisionType.Fixed; block.addCollisionGroup('ground'); block.addDrawing(Animations.Block, blockAnimation); @@ -150,9 +184,15 @@ game.add(follower); // Create the player -var player = new ex.Actor(100, -200, 32, 96); -player.enableCapturePointer = true; -player.collisionType = ex.CollisionType.Active; +// var player = new ex.Actor(100, -200, 32, 96); +// player.enableCapturePointer = true; +// player.collisionType = ex.CollisionType.Active; +var player = new ex.Actor({x: 100, + y: -200, + width: 32, + height: 96, + enableCapturePointer: true, + collisionType: ex.CollisionType.Active}); follower.actions.meet(player, 60).asPromise().then(() => { console.log("Player met!!"); }); @@ -169,12 +209,23 @@ var healthbar = new ex.Actor(0, -70, 140, 5, new ex.Color(0, 255, 0)); player.add(healthbar); // Add Title above player -var playerLabel = new ex.Label('My Player', -70, -69, null, spriteFont); +var playerLabel = new ex.Label({ + text: 'My Player', + pos: new ex.Vector(-70, -69), + fontFamily: 'Times New Roman' + // spriteFont: spriteFont +}); player.add(playerLabel); // Retrieve animations for player from sprite sheet -var left = spriteSheetRun.getAnimationBetween(game, 1, 11, 50); +var left_sprites = spriteSheetRun.getAnimationBetween(game, 1, 11, 50).sprites; +var left = new ex.Animation({ + engine: game, + speed: 50, + sprites: left_sprites +}); +// var left = new ex.Animation(game, left_sprites, 50); var right = spriteSheetRun.getAnimationBetween(game, 1, 11, 50); right.flipHorizontal = true; var idle = spriteSheetRun.getAnimationByIndices(game, [0], 200); @@ -316,9 +367,9 @@ player.on('precollision', (data?: ex.PreCollisionEvent) => { player.setDrawing(Animations.Idle); } inAir = false; - if (data.other && !(game.input.keyboard.isHeld(ex.Input.Keys.Left) || - game.input.keyboard.isHeld(ex.Input.Keys.Right) || - game.input.keyboard.isHeld(ex.Input.Keys.Up) || + if (data.other && !(game.input.keyboard.isHeld(ex.Input.Keys.Left) || + game.input.keyboard.isHeld(ex.Input.Keys.Right) || + game.input.keyboard.isHeld(ex.Input.Keys.Up) || game.input.keyboard.isHeld(ex.Input.Keys.Down))) { player.vel.x = data.other.vel.x; player.vel.y = data.other.vel.y; @@ -387,25 +438,50 @@ var camera = game.currentScene.camera; game.add(player); // Add particle emitter -var emitter = new ex.ParticleEmitter(100, 300, 2, 2); -emitter.minVel = 417; -emitter.maxVel = 589; -emitter.minAngle = Math.PI; -emitter.maxAngle = Math.PI * 2; -emitter.isEmitting = false; -emitter.emitRate = 494; -emitter.opacity = 0.84; -emitter.fadeFlag = true; -emitter.particleLife = 2465; -emitter.maxSize = 1.5; -emitter.minSize = .1; -emitter.acceleration = new ex.Vector(0, 460); -emitter.beginColor = ex.Color.Red; -emitter.endColor = ex.Color.Yellow; -emitter.particleSprite = blockSprite.clone(); -emitter.particleSprite.anchor = new ex.Vector(.5, .5); -emitter.particleRotationalVelocity = Math.PI / 10; -emitter.randomRotation = true; +var sprite = blockSprite.clone(); +sprite.anchor = new ex.Vector(.5, .5); +var emitter = new ex.ParticleEmitter({ + x: 100, + y: 300, + width: 2, + height: 2, + minVel: 417, + maxVel: 589, + minAngle: Math.PI, + maxAngle: Math.PI * 2, + isEmitting: false, + emitRate: 494, + opacity: 0.84, + fadeFlag: true, + particleLife: 2465, + maxSize: 1.5, + minSize: .1, + acceleration: new ex.Vector(0, 460), + beginColor: ex.Color.Red, + endColor: ex.Color.Yellow, + particleSprite: sprite, + particleRotationalVelocity: Math.PI / 10, + randomRotation: true +}); +// var emitter = new ex.ParticleEmitter(100, 300, 2, 2); +// emitter.minVel = 417; +// emitter.maxVel = 589; +// emitter.minAngle = Math.PI; +// emitter.maxAngle = Math.PI * 2; +// emitter.isEmitting = false; +// emitter.emitRate = 494; +// emitter.opacity = 0.84; +// emitter.fadeFlag = true; +// emitter.particleLife = 2465; +// emitter.maxSize = 1.5; +// emitter.minSize = .1; +// emitter.acceleration = new ex.Vector(0, 460); +// emitter.beginColor = ex.Color.Red; +// emitter.endColor = ex.Color.Yellow; +// emitter.particleSprite = blockSprite.clone(); +// emitter.particleSprite.anchor = new ex.Vector(.5, .5); +// emitter.particleRotationalVelocity = Math.PI / 10; +// emitter.randomRotation = true; emitter.particleSprite.addEffect(new ex.Effects.Grayscale()); game.add(emitter); diff --git a/src/engine/Actor.ts b/src/engine/Actor.ts index 07f4ca80..3ef07e21 100644 --- a/src/engine/Actor.ts +++ b/src/engine/Actor.ts @@ -22,21 +22,35 @@ import { Body } from './Collision/Body'; import { Side } from './Collision/Side'; import { IEvented } from './Interfaces/IEvented'; import { IActionable } from './Actions/IActionable'; +import { Configurable } from './Configurable'; import * as Traits from './Traits/Index'; import * as Effects from './Drawing/SpriteEffects'; import * as Util from './Util/Util'; import * as Events from './Events'; + /** - * The most important primitive in Excalibur is an `Actor`. Anything that - * can move on the screen, collide with another `Actor`, respond to events, - * or interact with the current scene, must be an actor. An `Actor` **must** - * be part of a [[Scene]] for it to be drawn to the screen. - * - * [[include:Actors.md]] - * + * [[include:Constructors.md]] */ -export class Actor extends Class implements IActionable, IEvented { +export interface IActorArgs extends Partial { + width?: number; + height?: number; + pos?: Vector; + vel?: Vector; + acc?: Vector; + rotation?: number; + rx?: number; + z?: number; + color?: Color; + visible?: boolean; + body?: Body; + collisionType?: CollisionType; +} + +/** + * @hidden + */ +export class ActorImpl extends Class implements IActionable, IEvented { /** * Indicates the next id to be set */ @@ -44,7 +58,7 @@ export class Actor extends Class implements IActionable, IEvented { /** * The unique identifier for the actor */ - public id: number = Actor.maxId++; + public id: number = ActorImpl.maxId++; /** * The physics body the is associated with this actor. The body is the container for all physical properties, like position, velocity, @@ -299,7 +313,7 @@ export class Actor extends Class implements IActionable, IEvented { /** * Indicates whether the actor is physically in the viewport */ - public isOffScreen = false; + public isOffScreen: boolean = false; /** * The visibility of an actor */ @@ -386,7 +400,7 @@ export class Actor extends Class implements IActionable, IEvented { * Configuration for [[CapturePointer]] trait */ public capturePointer: Traits.ICapturePointerConfig = { - captureMoveEvents: false + captureMoveEvents: false }; private _zIndex: number = 0; @@ -401,9 +415,18 @@ export class Actor extends Class implements IActionable, IEvented { * @param color The starting color of the actor. Leave null to draw a transparent actor. The opacity of the color will be used as the * initial [[opacity]]. */ - constructor(x?: number, y?: number, width?: number, height?: number, color?: Color) { + constructor(xOrConfig?: number | IActorArgs, y?: number, width?: number, height?: number, color?: Color) { super(); - this.pos.x = x || 0; + + if (xOrConfig && typeof xOrConfig === 'object') { + var config = xOrConfig; + xOrConfig = config.pos ? config.pos.x : config.x; + y = config.pos ? config.pos.y : config.y; + width = config.width; + height = config.height; + } + + this.pos.x = xOrConfig || 0; this.pos.y = y || 0; this._width = width || 0; this._height = height || 0; @@ -412,6 +435,7 @@ export class Actor extends Class implements IActionable, IEvented { // set default opacity of an actor to the color this.opacity = color.a; } + // Build default pipeline //this.traits.push(new ex.Traits.EulerMovement()); // TODO: TileMaps should be converted to a collision area @@ -1120,6 +1144,29 @@ export class Actor extends Class implements IActionable, IEvented { } } + +/** + * The most important primitive in Excalibur is an `Actor`. Anything that + * can move on the screen, collide with another `Actor`, respond to events, + * or interact with the current scene, must be an actor. An `Actor` **must** + * be part of a [[Scene]] for it to be drawn to the screen. + * + * [[include:Actors.md]] + * + * + * [[include:Constructors.md]] + * + */ +export class Actor extends Configurable(ActorImpl) { + constructor(); + constructor(config?: IActorArgs); + constructor(x?: number, y?: number, width?: number, height?: number, color?: Color); + constructor(xOrConfig?: number | IActorArgs, y?: number, width?: number, height?: number, color?: Color) { + super(xOrConfig, y, width, height, color); + } +} + + /** * An enum that describes the types of collisions actors can participate in */ @@ -1149,4 +1196,4 @@ export enum CollisionType { * collision events. */ Fixed -} +} \ No newline at end of file diff --git a/src/engine/Algebra.ts b/src/engine/Algebra.ts index 4b34e9b9..9541b7f0 100644 --- a/src/engine/Algebra.ts +++ b/src/engine/Algebra.ts @@ -1,5 +1,3 @@ - - /** * A 2D vector on a plane. */ @@ -498,4 +496,4 @@ export class Projection { } return 0; } -} +} \ No newline at end of file diff --git a/src/engine/Configurable.ts b/src/engine/Configurable.ts new file mode 100644 index 00000000..2febe451 --- /dev/null +++ b/src/engine/Configurable.ts @@ -0,0 +1,28 @@ +export type Constructor = { + new(...args: any[]): T; +} +export function Configurable>(base: T): T { + return class extends base { + public assign(props: Partial) { + + //set the value of every property that was passed in, + //if the constructor previously set this value, it will be overridden here + for (var k in props) { + if (typeof (this)[k] !== 'function') { + (this)[k] = (props)[k]; + } + } + } + + constructor(...args: any[]) { + super(...args); + //get the number of arguments that aren't undefined. TS passes a value to all parameters + //of whatever ctor is the implementation, so args.length doesn't work here. + var size = args.filter(function (value) { return value !== undefined; }).length; + if (size === 1 && args[0] && typeof args[0] === 'object' && !(args[0] instanceof Array)) { + this.assign(args[0]); + } + } + + }; +} \ No newline at end of file diff --git a/src/engine/Docs/Constructors.md b/src/engine/Docs/Constructors.md new file mode 100644 index 00000000..157ebe64 --- /dev/null +++ b/src/engine/Docs/Constructors.md @@ -0,0 +1,61 @@ +## Constructor Arguments + +In Excalibur there are option bag constructors available on most types. These support any public property or member, methods are not supported. The API documentation does not provide an exhaustive list of possible properties but a list of commonly used properties. + + +For example instead of doing this: + +```typescript +var actor = new ex.Actor(1, 2, 100, 100, ex.Color.Red); +actor.collisionType = ex.CollisionType.Active; + +``` + +This is possible: +```typescript +var options: IActorArgs = { + pos: new ex.Vector(1,2); + width: 100, + height: 100, + color: ex.Color.Red, + collisionType: ex.CollisionType.Active +} + +var actor = new ex.Actor(options); +``` + +In fact you can create a duplicate this way + +```typescript +var actor = new ex.Actor({ + pos: new ex.Vector(1,2) +}) +var actorClone = new ex.Actor(actor); + +expect(actor.pos).toBe(actorClone.pos); // true; +``` + +Types that support option bags can have their properties mass assigned using the assign method. + +```typescript +var actor = new ex.Actor(options); + +actor.assign({ + pos: new ex.Vector(100, 100), + width: 1000, + color: ex.Color.Red, +}); +``` + +See: + - [[Actor]] + - [[Animation]] + - [[Label]] + - [[Sprite]] + - [[SpriteSheet]] + - [[SpriteFont]] + - [[UIActor]] + - [[Particle]] + - [[ParticleEmitter]] + - [[TileMap]] + - [[Cell]] diff --git a/src/engine/Drawing/Animation.ts b/src/engine/Drawing/Animation.ts index 3ecc51e2..575cda2c 100644 --- a/src/engine/Drawing/Animation.ts +++ b/src/engine/Drawing/Animation.ts @@ -1,4 +1,5 @@ import { Sprite } from './Sprite'; +import { IAnimationArgs } from '../Drawing/Animation'; import * as Effects from './SpriteEffects'; import { Color } from './Color'; @@ -6,20 +7,18 @@ import { IDrawable } from '../Interfaces/IDrawable'; import { Vector } from '../Algebra'; import { Engine } from '../Engine'; import * as Util from '../Util/Util'; +import { Configurable } from '../Configurable'; /** - * Animations allow you to display a series of images one after another, - * creating the illusion of change. Generally these images will come from a [[SpriteSheet]] source. - * - * [[include:Animations.md]] + * @hidden */ -export class Animation implements IDrawable { +export class AnimationImpl implements IDrawable { /** * The sprite frames to play, in order. See [[SpriteSheet.getAnimationForAll]] to quickly * generate an [[Animation]]. */ - public sprites: Sprite[]; + public sprites: Sprite[] = []; /** * Duration to show each frame (in milliseconds) @@ -33,9 +32,9 @@ export class Animation implements IDrawable { private _oldTime: number = Date.now(); - public anchor = new Vector(0.0, 0.0); + public anchor: Vector = new Vector(0.0, 0.0); public rotation: number = 0.0; - public scale = new Vector(1, 1); + public scale: Vector = new Vector(1, 1); /** * Indicates whether the animation should loop after it is completed @@ -61,7 +60,7 @@ export class Animation implements IDrawable { public flipHorizontal: boolean = false; public width: number = 0; - public height: number = 0; + public height: number= 0; public naturalWidth: number = 0; public naturalHeight: number = 0; @@ -73,23 +72,33 @@ export class Animation implements IDrawable { * @param speed The number in milliseconds to display each frame in the animation * @param loop Indicates whether the animation should loop after it is completed */ - constructor(engine: Engine, images: Sprite[], speed: number, loop?: boolean) { - this.sprites = images; + constructor(engineOrConfig: Engine | IAnimationArgs, sprites: Sprite[], speed: number, loop?: boolean) { + + var engine = engineOrConfig; + if (engineOrConfig && !(engineOrConfig instanceof Engine)) { + var config = engineOrConfig; + engine = config.engine; + sprites = config.sprites; + speed = config.speed; + loop = config.loop; + } + + this.sprites = sprites; this.speed = speed; - this._engine = engine; + this._engine = engine; if (loop != null) { this.loop = loop; } - if (images && images[0]) { - this.height = images[0] ? images[0].height : 0; - this.width = images[0] ? images[0].width : 0; + if (sprites && sprites[0]) { + this.height = sprites[0] ? sprites[0].height : 0; + this.width = sprites[0] ? sprites[0].width : 0; - this.naturalWidth = images[0] ? images[0].naturalWidth : 0; - this.naturalHeight = images[0] ? images[0].naturalHeight : 0; + this.naturalWidth = sprites[0] ? sprites[0].naturalWidth : 0; + this.naturalHeight = sprites[0] ? sprites[0].naturalHeight : 0; - this.freezeFrame = images.length - 1; + this.freezeFrame = sprites.length - 1; } } @@ -294,4 +303,35 @@ export class Animation implements IDrawable { this.reset(); this._engine.playAnimation(this, x, y); } - } \ No newline at end of file +} + +/** + * [[include:Constructors.md]] + */ +export interface IAnimationArgs extends Partial { + engine: Engine; + sprites: Sprite[]; + speed: number; + loop?: boolean; + anchor?: Vector; + rotation?: number; + scale?: Vector; + flipVertical?: boolean; + flipHorizontal?: boolean; + width?: number; + height?: number; +} + +/** + * Animations allow you to display a series of images one after another, + * creating the illusion of change. Generally these images will come from a [[SpriteSheet]] source. + * + * [[include:Animations.md]] + */ +export class Animation extends Configurable(AnimationImpl) { + constructor(config: IAnimationArgs); + constructor(engine: Engine, images: Sprite[], speed: number, loop?: boolean); + constructor(engineOrConfig: Engine | IAnimationArgs, images?: Sprite[], speed?: number, loop?: boolean) { + super(engineOrConfig, images, speed, loop); + } +} \ No newline at end of file diff --git a/src/engine/Drawing/Index.ts b/src/engine/Drawing/Index.ts index a339ff1b..8dc275ef 100644 --- a/src/engine/Drawing/Index.ts +++ b/src/engine/Drawing/Index.ts @@ -1,8 +1,8 @@ -export * from './Animation'; +export { Animation, IAnimationArgs } from './Animation'; export * from './Color'; export * from './Polygon'; -export * from './Sprite'; -export * from './SpriteSheet'; +export { Sprite, ISpriteArgs }from './Sprite'; +export {SpriteSheet, SpriteFont, ISpriteSheetArgs, ISpriteFontInitArgs, ISpriteFontOptions } from './SpriteSheet'; import * as effects from './SpriteEffects'; export { effects as Effects } \ No newline at end of file diff --git a/src/engine/Drawing/Sprite.ts b/src/engine/Drawing/Sprite.ts index c8e5732c..c2708809 100644 --- a/src/engine/Drawing/Sprite.ts +++ b/src/engine/Drawing/Sprite.ts @@ -6,14 +6,12 @@ import { Texture } from '../Resources/Texture'; import { Vector } from '../Algebra'; import { Logger } from '../Util/Log'; import { clamp } from '../Util/Util'; +import { Configurable } from '../Configurable'; /** - * A [[Sprite]] is one of the main drawing primitives. It is responsible for drawing - * images or parts of images from a [[Texture]] resource to the screen. - * - * [[include:Sprites.md]] + * @hidden */ -export class Sprite implements IDrawable { +export class SpriteImpl implements IDrawable { private _texture: Texture; public rotation: number = 0.0; @@ -36,6 +34,11 @@ export class Sprite implements IDrawable { public height: number = 0; public effects: Effects.ISpriteEffect[] = []; + public sx: number = 0; + public sy: number = 0; + public swidth: number = 0; + public sheight: number = 0; + public naturalWidth: number = 0; public naturalHeight: number = 0; @@ -52,13 +55,27 @@ export class Sprite implements IDrawable { * @param swidth The width of the sprite in pixels * @param sheight The height of the sprite in pixels */ - constructor(image: Texture, public sx: number, public sy: number, public swidth: number, public sheight: number) { + constructor(imageOrConfig: Texture | ISpriteArgs, sx: number, sy: number, swidth: number, sheight: number) { if (sx < 0 || sy < 0 || swidth < 0 || sheight < 0) { this.logger.error('Sprite cannot have any negative dimensions x:', sx, 'y:', sy, 'width:', swidth, 'height:', sheight); } - this._texture = image; + var image = imageOrConfig; + if (imageOrConfig && !(imageOrConfig instanceof Texture)) { + sx = imageOrConfig.sx; + sy = imageOrConfig.sy; + swidth = imageOrConfig.swidth; + sheight = imageOrConfig.sheight; + image = imageOrConfig.image; + } + + this.sx = sx || 0; + this.sy = sy || 0; + this.swidth = swidth || 0; + this.sheight = sheight || 0; + + this._texture = image; this._spriteCanvas = document.createElement('canvas'); this._spriteCanvas.width = swidth; this._spriteCanvas.height = sheight; @@ -320,7 +337,7 @@ export class Sprite implements IDrawable { /** * Produces a copy of the current sprite */ - public clone(): Sprite { + public clone(): SpriteImpl { var result = new Sprite(this._texture, this.sx, this.sy, this.swidth, this.sheight); result.scale = this.scale.clone(); result.rotation = this.rotation; @@ -334,4 +351,35 @@ export class Sprite implements IDrawable { return result; } -} \ No newline at end of file +} + +/** + * [[include:Constructors.md]] + */ +export interface ISpriteArgs extends Partial { + image: Texture; + sx: number; + sy: number; + swidth: number; + sheight: number; + rotation?: number; + anchor?: Vector; + scale?: Vector; + flipVertical?: boolean; + flipHorizontal?: boolean; +} + +/** + * A [[Sprite]] is one of the main drawing primitives. It is responsible for drawing + * images or parts of images from a [[Texture]] resource to the screen. + * + * [[include:Sprites.md]] + */ +export class Sprite extends Configurable(SpriteImpl) { + constructor(config: ISpriteArgs); + constructor(image: Texture, sx: number, sy: number, swidth: number, sheight: number) + constructor(imageOrConfig: Texture | ISpriteArgs, sx?: number, sy?: number, swidth?: number, sheight?: number) { + super(imageOrConfig, sx, sy, swidth, sheight); + } +} + diff --git a/src/engine/Drawing/SpriteSheet.ts b/src/engine/Drawing/SpriteSheet.ts index adbc2a47..2ca89686 100644 --- a/src/engine/Drawing/SpriteSheet.ts +++ b/src/engine/Drawing/SpriteSheet.ts @@ -1,5 +1,5 @@ import { Sprite } from './Sprite'; -import { Animation } from './Animation'; +import { Animation } from '../Drawing/Animation'; import { Color } from './Color'; import * as Effects from './SpriteEffects'; @@ -7,16 +7,18 @@ import { Texture } from '../Resources/Texture'; import { Engine } from '../Engine'; import { Logger } from '../Util/Log'; import { TextAlign, BaseAlign } from '../Label'; +import { Configurable } from '../Configurable'; /** - * Sprite sheets are a useful mechanism for slicing up image resources into - * separate sprites or for generating in game animations. [[Sprite|Sprites]] are organized - * in row major order in the [[SpriteSheet]]. - * - * [[include:SpriteSheets.md]] + * @hidden */ -export class SpriteSheet { +export class SpriteSheetImpl { public sprites: Sprite[] = []; + public image: Texture = null; + public columns: number = 0; + public rows: number = 0; + public spWidth: number; + public spHeight: number; /** * @param image The backing image texture to build the SpriteSheet @@ -25,8 +27,29 @@ export class SpriteSheet { * @param spWidth The width of each individual sprite in pixels * @param spHeight The height of each individual sprite in pixels */ - constructor(public image: Texture, public columns: number, public rows: number, spWidth: number, spHeight: number) { - this.sprites = new Array(columns * rows); + constructor(imageOrConfigOrSprites: Texture | ISpriteSheetArgs | Sprite[], + columns?: number, rows?: number, spWidth?: number, spHeight?: number) { + + var loadFromImage: boolean = false; + if (imageOrConfigOrSprites instanceof Array) { + this.sprites = imageOrConfigOrSprites; + } else { + if (imageOrConfigOrSprites && !(imageOrConfigOrSprites instanceof Texture)) { + this.columns = imageOrConfigOrSprites.columns; + this.rows = imageOrConfigOrSprites.rows; + this.spWidth = imageOrConfigOrSprites.spWidth; + this.spHeight = imageOrConfigOrSprites.spHeight; + this.image = imageOrConfigOrSprites.image; + } else { + this.image = imageOrConfigOrSprites; + this.columns = columns; + this.rows = rows; + this.spWidth = spWidth; + this.spHeight = spHeight; + } + this.sprites = new Array(this.columns * this.rows); + loadFromImage = true; + } // TODO: Inspect actual image dimensions with preloading /*if(spWidth * columns > this.internalImage.naturalWidth){ @@ -37,15 +60,19 @@ export class SpriteSheet { throw new Error("SpriteSheet specified is higher than image height"); }*/ - var i = 0; - var j = 0; - for (i = 0; i < rows; i++) { - for (j = 0; j < columns; j++) { - this.sprites[j + i * columns] = new Sprite(this.image, j * spWidth, i * spHeight, spWidth, spHeight); + if (loadFromImage) { + var i = 0; + var j = 0; + for (i = 0; i < this.rows; i++) { + for (j = 0; j < this.columns; j++) { + this.sprites[j + i * this.columns] = new Sprite(this.image, + j * this.spWidth, i * this.spHeight, this.spWidth, this.spHeight); + } } } } + /** * Create an animation from the this SpriteSheet by listing out the * sprite indices. Sprites are organized in row major order in the SpriteSheet. @@ -66,10 +93,11 @@ export class SpriteSheet { /** * Create an animation from the this SpriteSheet by specifing the range of - * images with the beginning and ending index + * images with the beginning (inclusive) and ending (exclusive) index + * For example `getAnimationBetween(engine, 0, 5, 200)` returns an animation with 5 frames. * @param engine Reference to the current game Engine - * @param beginIndex The index to start taking frames - * @param endIndex The index to stop taking frames + * @param beginIndex The index to start taking frames (inclusive) + * @param endIndex The index to stop taking frames (exclusive) * @param speed The number in milliseconds to display each frame in the animation */ public getAnimationBetween(engine: Engine, beginIndex: number, endIndex: number, speed: number) { @@ -108,13 +136,35 @@ export class SpriteSheet { } /** - * Sprite fonts are a used in conjunction with a [[Label]] to specify - * a particular bitmap as a font. Note that some font features are not - * supported by Sprite fonts. + * [[include:Constructors.md]] + */ +export interface ISpriteSheetArgs extends Partial { + image: Texture; + sprites?: Sprite[]; + spWidth: number; + spHeight: number; + rows: number; + columns: number; +} + +/** + * Sprite sheets are a useful mechanism for slicing up image resources into + * separate sprites or for generating in game animations. [[Sprite|Sprites]] are organized + * in row major order in the [[SpriteSheet]]. * - * [[include:SpriteFonts.md]] + * [[include:SpriteSheets.md]] */ -export class SpriteFont extends SpriteSheet { +export class SpriteSheet extends Configurable(SpriteSheetImpl) { + constructor(config: ISpriteSheetArgs); + constructor(sprites: Sprite[]); + constructor(image: Texture, columns: number, rows: number, spWidth: number, spHeight: number); + constructor(imageOrConfigOrSprites: Texture | ISpriteSheetArgs | Sprite[], + columns?: number, rows?: number, spWidth?: number, spHeight?: number) { + super(imageOrConfigOrSprites, columns, rows, spWidth, spHeight); + } +} + +export class SpriteFontImpl extends SpriteSheet { private _currentColor: Color = Color.Black.clone(); private _currentOpacity: Number = 1.0; private _sprites: { [key: string]: Sprite; } = {}; @@ -126,8 +176,8 @@ export class SpriteFont extends SpriteSheet { private _textShadowSprites: { [key: string]: Sprite; } = {}; private _shadowOffsetX: number = 5; private _shadowOffsetY: number = 5; - - + private _alphabet: string; + private _caseInsensitive: boolean; /** * @param image The backing image texture to build the SpriteFont @@ -138,14 +188,23 @@ export class SpriteFont extends SpriteSheet { * @param spWidth The width of each character in pixels * @param spHeight The height of each character in pixels */ - constructor(public image: Texture, - private alphabet: string, - private caseInsensitive: boolean, + constructor(imageOrConfig: Texture | ISpriteFontInitArgs, + alphabet: string, + caseInsensitive: boolean, columns: number, rows: number, - public spWidth: number, - public spHeight: number) { - super(image, columns, rows, spWidth, spHeight); + spWidth: number, + spHeight: number) { + super(imageOrConfig instanceof Texture ? {image: imageOrConfig, spWidth: spWidth, + spHeight: spHeight, rows: rows, columns: columns } : imageOrConfig); + + if (imageOrConfig && !(imageOrConfig instanceof Texture)) { + alphabet = imageOrConfig.alphabet; + caseInsensitive = imageOrConfig.caseInsensitive; + } + + this._alphabet = alphabet; + this._caseInsensitive = caseInsensitive; this._sprites = this.getTextSprites(); } @@ -154,9 +213,9 @@ export class SpriteFont extends SpriteSheet { */ public getTextSprites(): { [key: string]: Sprite; } { var lookup: { [key: string]: Sprite; } = {}; - for (var i = 0; i < this.alphabet.length; i++) { - var char = this.alphabet[i]; - if (this.caseInsensitive) { + for (var i = 0; i < this._alphabet.length; i++) { + var char = this._alphabet[i]; + if (this._caseInsensitive) { char = char.toLowerCase(); } lookup[char] = this.sprites[i].clone(); @@ -251,7 +310,7 @@ export class SpriteFont extends SpriteSheet { for (var i = 0; i < text.length; i++) { var character = text[i]; - if (this.caseInsensitive) { + if (this._caseInsensitive) { character = character.toLowerCase(); } try { @@ -298,4 +357,44 @@ export interface ISpriteFontOptions { textAlign?: TextAlign; baseAlign?: BaseAlign; maxWidth?: number; +} + +/** + * [[include:Constructors.md]] + */ +export interface ISpriteFontInitArgs extends ISpriteSheetArgs { + image: Texture; + columns: number; + rows: number; + spWidth: number; + spHeight: number; + alphabet: string; + caseInsensitive: boolean; +} + +/** + * Sprite fonts are a used in conjunction with a [[Label]] to specify + * a particular bitmap as a font. Note that some font features are not + * supported by Sprite fonts. + * + * [[include:SpriteFonts.md]] + */ +export class SpriteFont extends Configurable(SpriteFontImpl) { + constructor(config: ISpriteFontInitArgs); + constructor(image: Texture, + alphabet: string, + caseInsensitive: boolean, + columns: number, + rows: number, + spWidth: number, + spHeight: number) + constructor(imageOrConfig: Texture | ISpriteFontInitArgs, + alphabet?: string, + caseInsensitive?: boolean, + columns?: number, + rows?: number, + spWidth?: number, + spHeight?: number) { + super(imageOrConfig, alphabet, caseInsensitive, columns, rows, spWidth, spHeight); + } } \ No newline at end of file diff --git a/src/engine/Index.ts b/src/engine/Index.ts index 9b592140..6d60af0f 100644 --- a/src/engine/Index.ts +++ b/src/engine/Index.ts @@ -6,22 +6,23 @@ export var EX_VERSION = '__EX_VERSION'; // This file is used as the bundle entrypoint and exports everything // that will be exposed as the `ex` global variable. -export * from './Actor'; +export { Actor, IActorArgs, CollisionType } from './Actor'; export * from './Algebra'; export * from './Camera'; export * from './Class'; +export * from './Configurable' export * from './Debug'; export * from './Engine'; export * from './EventDispatcher'; export * from './Events'; export * from './Group'; -export * from './Label'; +export { Label, FontStyle, FontUnit, TextAlign, BaseAlign } from './Label'; export * from './Loader'; -export * from './Particles'; +export { Particle, ParticleEmitter, IParticleArgs, IParticleEmitterArgs, EmitterType } from './Particles'; export * from './Physics'; export * from './Promises'; export * from './Scene'; -export * from './TileMap'; +export { TileMap, Cell, ITileMapArgs, ICellArgs, TileSprite } from './TileMap'; export * from './Timer'; export * from './Trigger'; export * from './UIActor'; diff --git a/src/engine/Interfaces/IAudioImplementation.ts b/src/engine/Interfaces/IAudioImplementation.ts index ff93fc7a..387a38c6 100644 --- a/src/engine/Interfaces/IAudioImplementation.ts +++ b/src/engine/Interfaces/IAudioImplementation.ts @@ -1,6 +1,9 @@ import { Promise } from './../Promises'; import { IAudio } from './IAudio'; + +export type ExResponseType = '' | 'arraybuffer' | 'blob' | 'document' | 'json' | 'text'; + /** * Represents an audio implementation like [[AudioTag]] or [[WebAudio]] */ @@ -9,7 +12,7 @@ export interface IAudioImplementation { /** * XHR response type */ - responseType: XMLHttpRequestResponseType; + responseType: ExResponseType; /** * Processes raw data and transforms into sound data diff --git a/src/engine/Label.ts b/src/engine/Label.ts index 20eb74c6..74562137 100644 --- a/src/engine/Label.ts +++ b/src/engine/Label.ts @@ -2,8 +2,8 @@ import { Engine } from './Engine'; import { Color } from './Drawing/Color'; import { SpriteFont } from './Drawing/SpriteSheet'; import { Actor, CollisionType } from './Actor'; - - +import { Configurable } from './Configurable'; +import { Vector } from './Algebra'; /** * Enum representing the different font size units * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size @@ -95,22 +95,35 @@ export enum BaseAlign { Bottom } - /** - * Enum representing the different possible font styles - */ - export enum FontStyle { - Normal, - Italic, - Oblique - } +/** + * Enum representing the different possible font styles + */ +export enum FontStyle { + Normal, + Italic, + Oblique +} - /** - * Labels are the way to draw small amounts of text to the screen. They are - * actors and inherit all of the benefits and capabilities. - * - * [[include:Labels.md]] - */ - export class Label extends Actor { +/** + * [[include:Constructors.md]] + */ +export interface ILabelArgs extends Partial { + text?: string; + bold?: boolean; + pos?: Vector; + spriteFont?: SpriteFont; + fontFamily?: string; + fontSize?: number; + fontStyle?: FontStyle; + fontUnit?: FontUnit; + textAlign?: TextAlign; + maxWidth?: number; +} + +/** + * @hidden + */ +export class LabelImpl extends Actor { /** * The text to draw. @@ -145,7 +158,7 @@ export enum BaseAlign { /** * The css units for a font size such as px, pt, em (SpriteFont only support px), by default is 'px'; - */ + */ public fontUnit: FontUnit = FontUnit.Px; /** @@ -173,9 +186,9 @@ export enum BaseAlign { */ public caseInsensitive: boolean = true; - private _textShadowOn: boolean = false; - private _shadowOffsetX: number = 0; - private _shadowOffsetY: number = 0; + private _textShadowOn: boolean; + private _shadowOffsetX: number; + private _shadowOffsetY: number; /** * @param text The text of the label @@ -185,19 +198,26 @@ export enum BaseAlign { * @param spriteFont Use an Excalibur sprite font for the label's font, if a SpriteFont is provided it will take precedence * over a css font. */ - constructor(text?: string, x?: number, y?: number, fontFamily?: string, spriteFont?: SpriteFont) { - super(x, y); - this.text = text || ''; + constructor(textOrConfig?: string | Partial, x?: number, y?: number, fontFamily?: string, spriteFont?: SpriteFont) { + super(typeof textOrConfig === 'string' ? { + text: textOrConfig, x: x, y: y, + fontFamily: fontFamily, spriteFont: spriteFont + } : textOrConfig); + + this.text = textOrConfig || ''; this.color = Color.Black.clone(); this.spriteFont = spriteFont; this.collisionType = CollisionType.PreventCollision; this.fontFamily = fontFamily || 'sans-serif'; // coalesce to default canvas font + + this._textShadowOn = false; + this._shadowOffsetX = 0; + this._shadowOffsetY = 0; if (spriteFont) { //this._textSprites = spriteFont.getTextSprites(); } } - /** * Returns the width of the text in the label (in pixels); * @param ctx Rendering context to measure the string with @@ -329,31 +349,31 @@ export enum BaseAlign { private _fontDraw(ctx: CanvasRenderingContext2D) { - if (this.spriteFont) { - this.spriteFont.draw(ctx, this.text, 0, 0, { - color: this.color.clone(), - baseAlign: this.baseAlign, - textAlign: this.textAlign, - fontSize: this.fontSize, - letterSpacing: this.letterSpacing, - opacity: this.opacity - }); + if (this.spriteFont) { + this.spriteFont.draw(ctx, this.text, 0, 0, { + color: this.color.clone(), + baseAlign: this.baseAlign, + textAlign: this.textAlign, + fontSize: this.fontSize, + letterSpacing: this.letterSpacing, + opacity: this.opacity + }); + } else { + var oldAlign = ctx.textAlign; + var oldTextBaseline = ctx.textBaseline; + + ctx.textAlign = this._lookupTextAlign(this.textAlign); + ctx.textBaseline = this._lookupBaseAlign(this.baseAlign); + if (this.color) { + this.color.a = this.opacity; + } + ctx.fillStyle = this.color.toString(); + ctx.font = this._fontString; + if (this.maxWidth) { + ctx.fillText(this.text, 0, 0, this.maxWidth); } else { - var oldAlign = ctx.textAlign; - var oldTextBaseline = ctx.textBaseline; - - ctx.textAlign = this._lookupTextAlign(this.textAlign); - ctx.textBaseline = this._lookupBaseAlign(this.baseAlign); - if (this.color) { - this.color.a = this.opacity; - } - ctx.fillStyle = this.color.toString(); - ctx.font = this._fontString; - if (this.maxWidth) { - ctx.fillText(this.text, 0, 0, this.maxWidth); - } else { - ctx.fillText(this.text, 0, 0); - } + ctx.fillText(this.text, 0, 0); + } ctx.textAlign = oldAlign; ctx.textBaseline = oldTextBaseline; @@ -368,4 +388,19 @@ export enum BaseAlign { super.debugDraw(ctx); } +} + +/** + * Labels are the way to draw small amounts of text to the screen. They are + * actors and inherit all of the benefits and capabilities. + * + * [[include:Labels.md]] + */ +export class Label extends Configurable(LabelImpl) { + constructor(); + constructor(config?: ILabelArgs); + constructor(text?: string, x?: number, y?: number, fontFamily?: string, spriteFont?: SpriteFont); + constructor(textOrConfig?: string | ILabelArgs, x?: number, y?: number, fontFamily?: string, spriteFont?: SpriteFont) { + super(textOrConfig, x, y, fontFamily, spriteFont); + } } \ No newline at end of file diff --git a/src/engine/Particles.ts b/src/engine/Particles.ts index a154c75e..8fd824c7 100644 --- a/src/engine/Particles.ts +++ b/src/engine/Particles.ts @@ -6,6 +6,8 @@ import { Vector } from './Algebra'; import * as Util from './Util/Util'; import * as DrawUtil from './Util/DrawUtil'; import * as Traits from './Traits/Index'; +import { Configurable } from './Configurable'; +import { Random } from './Math/Random'; /** * An enum that represents the types of emitter nozzles @@ -22,9 +24,9 @@ export enum EmitterType { } /** - * Particle is used in a [[ParticleEmitter]] + * @hidden */ -export class Particle { +export class ParticleImpl { public position: Vector = new Vector(0, 0); public velocity: Vector = new Vector(0, 0); public acceleration: Vector = new Vector(0, 0); @@ -58,7 +60,7 @@ export class Particle { public sizeRate: number = 0; public elapsedMultiplier: number = 0; - constructor(emitter: ParticleEmitter, + constructor(emitterOrConfig: ParticleEmitter | IParticleArgs, life?: number, opacity?: number, beginColor?: Color, @@ -68,7 +70,22 @@ export class Particle { acceleration?: Vector, startSize?: number, endSize?: number) { - this.emitter = emitter; + var emitter = emitterOrConfig; + if (emitter && ! (emitterOrConfig instanceof ParticleEmitter)) { + var config = emitterOrConfig; + emitter = config.emitter; + life = config.life; + opacity = config.opacity; + endColor = config.endColor; + beginColor = config.beginColor; + position = config.position; + velocity = config.velocity; + acceleration = config.acceleration; + startSize = config.startSize; + endSize = config.endSize; + + } + this.emitter = emitter; this.life = life || this.life; this.opacity = opacity || this.opacity; this.endColor = endColor || this.endColor.clone(); @@ -150,18 +167,62 @@ export class Particle { } /** - * Using a particle emitter is a great way to create interesting effects - * in your game, like smoke, fire, water, explosions, etc. `ParticleEmitter` - * extend [[Actor]] allowing you to use all of the features that come with. - * - * [[include:Particles.md]] + * [[include:Constructors.md]] */ -export class ParticleEmitter extends Actor { +export interface IParticleArgs extends Partial { + emitter: ParticleEmitter; + position?: Vector; + velocity?: Vector; + acceleration?: Vector; + particleRotationalVelocity?: number; + currentRotation?: number; + particleSize?: number; + particleSprite?: Sprite; +} - private _particlesToEmit: number = 0; +/** + * Particle is used in a [[ParticleEmitter]] + */ +export class Particle extends Configurable(ParticleImpl) { + constructor(config: IParticleArgs); + constructor(emitter: ParticleEmitter, + life?: number, + opacity?: number, + beginColor?: Color, + endColor?: Color, + position?: Vector, + velocity?: Vector, + acceleration?: Vector, + startSize?: number, + endSize?: number); + constructor(emitterOrConfig: ParticleEmitter | IParticleArgs, + life?: number, + opacity?: number, + beginColor?: Color, + endColor?: Color, + position?: Vector, + velocity?: Vector, + acceleration?: Vector, + startSize?: number, + endSize?: number) { + super(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize); + } +} + +/** + * @hidden + */ +export class ParticleEmitterImpl extends Actor { + + private _particlesToEmit: number; public numParticles: number = 0; + /** + * Random number generator + */ + public random: Random; + /** * Gets or sets the isEmitting flag */ @@ -245,11 +306,11 @@ export class ParticleEmitter extends Actor { /** * Gets or sets the beginning color of all particles */ - public beginColor: Color = Color.White; + public beginColor: Color = Color.White.clone(); /** * Gets or sets the ending color of all particles */ - public endColor: Color = Color.White; + public endColor: Color = Color.White.clone(); /** * Gets or sets the sprite that a particle should use @@ -283,11 +344,13 @@ export class ParticleEmitter extends Actor { * @param width The width of the emitter * @param height The height of the emitter */ - constructor(x?: number, y?: number, width?: number, height?: number) { - super(x, y, width, height, Color.White); + constructor(xOrConfig?: number | IParticleEmitterArgs, y?: number, width?: number, height?: number) { + super(typeof xOrConfig === 'number' ? { x: xOrConfig, y: y, width: width, height: height } : xOrConfig); + this._particlesToEmit = 0; this.collisionType = CollisionType.PreventCollision; this.particles = new Util.Collection(); this.deadParticles = new Util.Collection(); + this.random = new Random(); // Remove offscreen culling from particle emitters for (let i = 0; i < this.traits.length; i++) { @@ -322,17 +385,17 @@ export class ParticleEmitter extends Actor { var ranX = 0; var ranY = 0; - var angle = Util.randomInRange(this.minAngle, this.maxAngle); - var vel = Util.randomInRange(this.minVel, this.maxVel); - var size = this.startSize || Util.randomInRange(this.minSize, this.maxSize); + var angle = Util.randomInRange(this.minAngle, this.maxAngle, this.random); + var vel = Util.randomInRange(this.minVel, this.maxVel, this.random); + var size = this.startSize || Util.randomInRange(this.minSize, this.maxSize, this.random); var dx = vel * Math.cos(angle); var dy = vel * Math.sin(angle); if (this.emitterType === EmitterType.Rectangle) { - ranX = Util.randomInRange(this.pos.x, this.pos.x + this.getWidth()); - ranY = Util.randomInRange(this.pos.y, this.pos.y + this.getHeight()); + ranX = Util.randomInRange(this.pos.x, this.pos.x + this.getWidth(), this.random); + ranY = Util.randomInRange(this.pos.y, this.pos.y + this.getHeight(), this.random); } else if (this.emitterType === EmitterType.Circle) { - var radius = Util.randomInRange(0, this.radius); + var radius = Util.randomInRange(0, this.radius, this.random); ranX = radius * Math.cos(angle) + this.pos.x; ranY = radius * Math.sin(angle) + this.pos.y; } @@ -354,7 +417,7 @@ export class ParticleEmitter extends Actor { } p.particleRotationalVelocity = this.particleRotationalVelocity; if (this.randomRotation) { - p.currentRotation = Util.randomInRange(0, Math.PI * 2); + p.currentRotation = Util.randomInRange(0, Math.PI * 2, this.random); } if (this.focus) { p.focus = this.focus.add(new Vector(this.pos.x, this.pos.y)); @@ -403,4 +466,51 @@ export class ParticleEmitter extends Actor { } } +} + +/** + * [[include:Constructors.md]] + */ +export interface IParticleEmitterArgs extends Partial { + width?: number; + height?: number; + isEmitting?: boolean; + minVel?: number; + maxVel?: number; + acceleration?: Vector; + minAngle?: number; + maxAngle?: number; + emitRate?: number; + particleLife?: number; + opacity?: number; + fadeFlag?: boolean; + focus?: Vector; + focusAccel?: number; + startSize?: number; + endSize?: number; + minSize?: number; + maxSize?: number; + beginColor?: Color; + endColor?: Color; + particleSprite?: Sprite; + emitterType?: EmitterType; + radius?: number; + particleRotationalVelocity?: number; + randomRotation?: boolean; + random?: Random; +} + +/** + * Using a particle emitter is a great way to create interesting effects + * in your game, like smoke, fire, water, explosions, etc. `ParticleEmitter` + * extend [[Actor]] allowing you to use all of the features that come with. + * + * [[include:Particles.md]] + */ +export class ParticleEmitter extends Configurable(ParticleEmitterImpl) { + constructor(config?: IParticleEmitterArgs); + constructor(x?: number | IParticleEmitterArgs, y?: number, width?: number, height?: number); + constructor(xOrConfig?: number | IParticleEmitterArgs, y?: number, width?: number, height?: number) { + super(xOrConfig, y, width, height); + } } \ No newline at end of file diff --git a/src/engine/Resources/Sound.ts b/src/engine/Resources/Sound.ts index a8131578..725ddf5c 100644 --- a/src/engine/Resources/Sound.ts +++ b/src/engine/Resources/Sound.ts @@ -1,5 +1,5 @@ import { ILoadable } from '../Interfaces/ILoadable'; -import { IAudioImplementation } from '../Interfaces/IAudioImplementation'; +import { IAudioImplementation, ExResponseType } from '../Interfaces/IAudioImplementation'; import { IAudio } from '../Interfaces/IAudio'; import { Logger } from '../Util/Log'; import * as Util from '../Util/Util'; @@ -17,7 +17,7 @@ if ((window).AudioContext) { */ export class AudioTag implements IAudioImplementation { - public responseType: XMLHttpRequestResponseType = 'blob'; + public responseType: ExResponseType = 'blob'; /** * Transforms raw Blob data into a object URL for use in audio tag @@ -42,7 +42,7 @@ export class AudioTag implements IAudioImplementation { export class WebAudio implements IAudioImplementation { private _logger = Logger.getInstance(); - public responseType: XMLHttpRequestResponseType = 'arraybuffer'; + public responseType: ExResponseType = 'arraybuffer'; /** * Processes raw arraybuffer data and decodes into WebAudio buffer (async). diff --git a/src/engine/TileMap.ts b/src/engine/TileMap.ts index 6909ea33..89625da3 100644 --- a/src/engine/TileMap.ts +++ b/src/engine/TileMap.ts @@ -7,14 +7,12 @@ import { Actor } from './Actor'; import { Logger } from './Util/Log'; import { SpriteSheet } from './Drawing/SpriteSheet'; import * as Events from './Events'; +import { Configurable } from './Configurable'; /** - * The [[TileMap]] class provides a lightweight way to do large complex scenes with collision - * without the overhead of actors. - * - * [[include:TileMaps.md]] + * @hidden */ -export class TileMap extends Class { +export class TileMapImpl extends Class { private _collidingX: number = -1; private _collidingY: number = -1; private _onScreenXStart: number = 0; @@ -24,6 +22,12 @@ export class TileMap extends Class { private _spriteSheets: { [key: string]: SpriteSheet } = {}; public logger: Logger = Logger.getInstance(); public data: Cell[] = []; + public x: number; + public y: number; + public cellWidth: number; + public cellHeight: number; + public rows: number; + public cols: number; public on(eventName: Events.preupdate, handler: (event?: Events.PreUpdateEvent) => void): void; public on(eventName: Events.postupdate, handler: (event?: Events.PostUpdateEvent) => void): void; @@ -43,19 +47,28 @@ export class TileMap extends Class { * @param cols The number of cols in the TileMap (should not be changed once set) */ constructor( - public x: number, - public y: number, - public cellWidth: number, - public cellHeight: number, - public rows: number, - public cols: number) { + xOrConfig: number | ITileMapArgs, + y: number, + cellWidth: number, + cellHeight: number, + rows: number, + cols: number) { super(); + if (xOrConfig && typeof xOrConfig === 'object') { + var config = xOrConfig; + xOrConfig = config.x; + y = config.y; + cellWidth = config.cellWidth; + cellHeight = config.cellHeight; + rows = config.rows; + cols = config.cols; + } this.data = new Array(rows * cols); for (var i = 0; i < cols; i++) { for (var j = 0; j < rows; j++) { (() => { var cd = new Cell( - i * cellWidth + x, + i * cellWidth + xOrConfig, j * cellHeight + y, cellWidth, cellHeight, @@ -242,6 +255,44 @@ export class TileMap extends Class { } } +/** + * [[include:Constructors.md]] + */ +export interface ITileMapArgs extends Partial { + x: number; + y: number; + cellWidth: number; + cellHeight: number; + rows: number; + cols: number; +} + +/** + * The [[TileMap]] class provides a lightweight way to do large complex scenes with collision + * without the overhead of actors. + * + * [[include:TileMaps.md]] + */ +export class TileMap extends Configurable(TileMapImpl) { + constructor(config: ITileMapArgs); + constructor( + x: number, + y: number, + cellWidth: number, + cellHeight: number, + rows: number, + cols: number); + constructor( + xOrConfig: number | ITileMapArgs, + y?: number, + cellWidth?: number, + cellHeight?: number, + rows?: number, + cols?: number) { + super(xOrConfig, y, cellWidth, cellHeight, rows, cols); + } +} + /** * Tile sprites are used to render a specific sprite from a [[TileMap]]'s spritesheet(s) */ @@ -254,17 +305,17 @@ export class TileSprite { } /** - * TileMap Cell - * - * A light-weight object that occupies a space in a collision map. Generally - * created by a [[TileMap]]. - * - * Cells can draw multiple sprites. Note that the order of drawing is the order - * of the sprites in the array so the last one will be drawn on top. You can - * use transparency to create layers this way. + * @hidden */ -export class Cell { +export class CellImpl { private _bounds: BoundingBox; + public x: number; + public y: number; + public width: number; + public height: number; + public index: number; + public solid: boolean = false; + public sprites: TileSprite[] = []; /** * @param x Gets or sets x coordinate of the cell in world coordinates @@ -276,13 +327,30 @@ export class Cell { * @param sprites The list of tile sprites to use to draw in this cell (in order) */ constructor( - public x: number, - public y: number, - public width: number, - public height: number, - public index: number, - public solid: boolean = false, - public sprites: TileSprite[] = []) { + xOrConfig: number | ICellArgs, + y: number, + width: number, + height: number, + index: number, + solid: boolean = false, + sprites: TileSprite[] = []) { + if (xOrConfig && typeof xOrConfig === 'object') { + var config = xOrConfig; + xOrConfig = config.x; + y = config.y; + width = config.width; + height = config.height; + index = config.index; + solid = config.solid; + sprites = config.sprites; + } + this.x = xOrConfig; + this.y = y; + this.width = width; + this.height = height; + this.index = index; + this.solid = solid; + this.sprites = sprites; this._bounds = new BoundingBox(this.x, this.y, this.x + this.width, this.y + this.height); } @@ -319,4 +387,49 @@ export class Cell { public clearSprites() { this.sprites.length = 0; } +} + +/** + * [[include:Constructors.md]] + */ +export interface ICellArgs extends Partial { + x: number; + y: number; + width: number; + height: number; + index: number; + solid?: boolean; + sprites?: TileSprite[]; +} + +/** + * TileMap Cell + * + * A light-weight object that occupies a space in a collision map. Generally + * created by a [[TileMap]]. + * + * Cells can draw multiple sprites. Note that the order of drawing is the order + * of the sprites in the array so the last one will be drawn on top. You can + * use transparency to create layers this way. + */ +export class Cell extends Configurable(CellImpl) { + constructor(config: ICellArgs); + constructor( + x: number, + y: number, + width: number, + height: number, + index: number, + solid?: boolean, + sprites?: TileSprite[]); + constructor( + xOrConfig: number | ICellArgs, + y?: number, + width?: number, + height?: number, + index?: number, + solid?: boolean, + sprites?: TileSprite[]) { + super(xOrConfig, y, width, height, index, solid, sprites); + } } \ No newline at end of file diff --git a/src/engine/UIActor.ts b/src/engine/UIActor.ts index e0f6e9a9..41b92c02 100644 --- a/src/engine/UIActor.ts +++ b/src/engine/UIActor.ts @@ -1,8 +1,9 @@ import { Vector } from './Algebra'; import { Engine } from './Engine'; -import { Actor, CollisionType } from './Actor'; +import { Actor, IActorArgs, CollisionType } from './Actor'; import * as Traits from './Traits/Index'; + /** * Helper [[Actor]] primitive for drawing UI's, optimized for UI drawing. Does * not participate in collisions. Drawn on top of all other actors. @@ -10,14 +11,21 @@ import * as Traits from './Traits/Index'; export class UIActor extends Actor { protected _engine: Engine; + constructor(); + constructor(xOrConfig?: number, y?: number, width?: number, height?: number) + constructor(config?: IActorArgs); /** * @param x The starting x coordinate of the actor * @param y The starting y coordinate of the actor * @param width The starting width of the actor * @param height The starting height of the actor */ - constructor(x?: number, y?: number, width?: number, height?: number) { - super(x, y, width, height); + constructor(xOrConfig?: number | IActorArgs, y?: number, width?: number, height?: number) { + if (typeof(xOrConfig !== 'object')) { + super(xOrConfig, y, width, height); + } else { + super(xOrConfig); + } this.traits = []; this.traits.push(new Traits.CapturePointer()); this.anchor.setTo(0, 0); diff --git a/src/engine/Util/Util.ts b/src/engine/Util/Util.ts index dddcf927..843ea290 100644 --- a/src/engine/Util/Util.ts +++ b/src/engine/Util/Util.ts @@ -1,4 +1,5 @@ import { Vector } from '../Algebra'; +import { Random } from '../Math/Random'; import { Side } from '../Collision/Side'; /** @@ -135,12 +136,12 @@ export function clamp(val: number, min: number, max: number) { return Math.min(Math.max(min, val), max); } -export function randomInRange(min: number, max: number): number { - return min + Math.random() * (max - min); +export function randomInRange(min: number, max: number, random: Random = new Random()): number { + return random ? random.floating(min, max) : min + Math.random() * (max - min); } -export function randomIntInRange(min: number, max: number): number { - return Math.round(randomInRange(min, max)); +export function randomIntInRange(min: number, max: number, random: Random = new Random()): number { + return random ? random.integer(min, max) : Math.round(randomInRange(min, max)); } export function canonicalizeAngle(angle: number): number { diff --git a/src/spec/ActorSpec.ts b/src/spec/ActorSpec.ts index e69ead63..ccd244b9 100644 --- a/src/spec/ActorSpec.ts +++ b/src/spec/ActorSpec.ts @@ -38,6 +38,47 @@ describe('A game actor', () => { expect(actor.pos.y).toBe(10); }); + it('should have props set by constructor', () => { + let actor = new ex.Actor({ + pos: new ex.Vector(2, 3), + scene: scene, + width: 100, + height: 200, + vel: new ex.Vector(30, 40), + acc: new ex.Vector(50, 60), + rotation: 2, + rx: .1, + z: 10, + restitution: 2, + color: ex.Color.Red, + visible: false, + collisionType: ex.CollisionType.Fixed + }); + + let actor2 = new ex.Actor({ + x: 4, + y: 5 + }); + + expect(actor.x).toBe(2); + expect(actor.y).toBe(3); + expect(actor.getWidth()).toBe(100); + expect(actor.getHeight()).toBe(200); + expect(actor.vel.x).toBe(30); + expect(actor.vel.y).toBe(40); + expect(actor.acc.x).toBe(50); + expect(actor.acc.y).toBe(60); + expect(actor.rotation).toBe(2); + expect(actor.rx).toBe(.1); + expect(actor.z).toBe(10); + expect(actor.color.toString()).toBe(ex.Color.Red.toString()); + expect(actor.visible).toBe(false); + expect(actor.restitution).toBe(2); + expect(actor.collisionType).toBe(ex.CollisionType.Fixed); + expect(actor2.x).toBe(4); + expect(actor2.y).toBe(5); + }); + it('should have an old position after an update', () => { actor.pos.setTo(10, 10); @@ -76,7 +117,6 @@ describe('A game actor', () => { actor.vel.y = 10; actor.vel.x = -10; - expect(actor.pos.x).toBe(0); expect(actor.pos.y).toBe(0); diff --git a/src/spec/AlgebraSpec.ts b/src/spec/AlgebraSpec.ts index cdc4367b..bd57d0c8 100644 --- a/src/spec/AlgebraSpec.ts +++ b/src/spec/AlgebraSpec.ts @@ -415,4 +415,4 @@ describe('Projections', () => { expect(proj.getOverlap(proj2)).toBe(0); }); -}); +}); \ No newline at end of file diff --git a/src/spec/AnimationSpec.ts b/src/spec/AnimationSpec.ts index 8295b7ce..801c9d2d 100644 --- a/src/spec/AnimationSpec.ts +++ b/src/spec/AnimationSpec.ts @@ -3,11 +3,49 @@ describe('An animation', () => { var animation; + var engine: ex.Engine; beforeEach(() => { animation = new ex.Animation(null, null, 0); + engine = TestUtils.engine({ + width: 500, + height: 500 + }); + }); + afterEach(() => { + engine.stop(); + engine = null; }); it('should have loop default to true', () => { expect(animation.loop).toBe(true); }); + + it('should have props set by constructor', () => { + let animation = new ex.Animation({ + engine: engine, + sprites: [], + speed: 20, + loop: false, + anchor: new ex.Vector(1, 1), + rotation: Math.PI, + scale: new ex.Vector(2, 2), + flipVertical: true, + flipHorizontal: true, + width: 100, + height: 200 + }); + + expect(animation.width).toBe(100); + expect(animation.height).toBe(200); + expect(animation.flipHorizontal).toBe(true); + expect(animation.flipVertical).toBe(true); + expect(animation.anchor.x).toBe(1); + expect(animation.anchor.y).toBe(1); + expect(animation.scale.x).toBe(2); + expect(animation.scale.y).toBe(2); + expect(animation.rotation).toBe(Math.PI); + expect(animation.loop).toBe(false); + expect(animation.speed).toBe(20); + expect(animation.sprites.length).toBe(0); + }); }); diff --git a/src/spec/LabelSpec.ts b/src/spec/LabelSpec.ts index c5591227..8bd6d535 100644 --- a/src/spec/LabelSpec.ts +++ b/src/spec/LabelSpec.ts @@ -32,6 +32,33 @@ describe('A label', () => { //console.log('============================\n OS:' + platform.os.family); }); + it('should have props set by constructor', () => { + let label = new ex.Label({ + text: 'test text', + bold: true, + pos: new ex.Vector(1, 2), + spriteFont: null, + fontFamily: 'Verdana', + fontSize: 12, + fontStyle: ex.FontStyle.Normal, + fontUnit: ex.FontUnit.Px, + textAlign: ex.TextAlign.Left, + maxWidth: 200 + }); + + expect(label.text).toBe('test text'); + expect(label.bold).toBe(true); + expect(label.pos.x).toBe(1); + expect(label.pos.y).toBe(2); + expect(label.spriteFont).toBe(null); + expect(label.fontFamily).toBe('Verdana'); + expect(label.fontSize).toBe(12); + expect(label.fontStyle).toBe(ex.FontStyle.Normal); + expect(label.fontUnit).toBe(ex.FontUnit.Px); + expect(label.textAlign).toBe(ex.TextAlign.Left); + expect(label.maxWidth).toBe(200); + }); + it('should be loaded', () => { expect(ex.Label).toBeTruthy(); }); diff --git a/src/spec/ParticleSpec.ts b/src/spec/ParticleSpec.ts new file mode 100644 index 00000000..153c1b79 --- /dev/null +++ b/src/spec/ParticleSpec.ts @@ -0,0 +1,128 @@ +/// +/// +/// + +describe('A particle', () => { + let engine: ex.Engine; + let texture: ex.Texture; + beforeEach(() => { + + jasmine.addMatchers(imagediff.jasmine); + engine = TestUtils.engine({ + width: 800, + height: 200 + }); + + texture = new ex.Texture('base/src/spec/images/SpriteFontSpec/SpriteFont.png', true); + + }); + afterEach(() => { + engine.stop(); + engine = null; + }); + + it('should have props set by the constructor', () => { + let emitter = new ex.ParticleEmitter({ + x: 400, + y: 100, + width: 20, + height: 30, + isEmitting: true, + minVel: 40, + maxVel: 50, + acceleration: ex.Vector.Zero.clone(), + minAngle: 0, + maxAngle: Math.PI / 2, + emitRate: 3, + particleLife: 4, + opacity: .5, + fadeFlag: false, + focus: null, + focusAccel: null, + startSize: 1, + endSize: 10, + minSize: 1, + maxSize: 3, + beginColor: ex.Color.Red.clone(), + endColor: ex.Color.Blue.clone(), + particleSprite: null, + emitterType: ex.EmitterType.Circle, + radius: 20, + particleRotationalVelocity: 3, + randomRotation: false, + random: new ex.Random(1337) + }); + + expect(emitter.x).toBe(400); + expect(emitter.y).toBe(100); + expect(emitter.getWidth()).toBe(20); + expect(emitter.getHeight()).toBe(30); + expect(emitter.isEmitting).toBe(true); + expect(emitter.minVel).toBe(40); + expect(emitter.maxVel).toBe(50); + expect(emitter.acceleration.toString()).toBe(ex.Vector.Zero.clone().toString()); + expect(emitter.minAngle).toBe(0); + expect(emitter.maxAngle).toBe(Math.PI / 2); + expect(emitter.emitRate).toBe(3); + expect(emitter.particleLife).toBe(4); + expect(emitter.opacity).toBe(.5); + expect(emitter.fadeFlag).toBe(false); + expect(emitter.focus).toBe(null); + expect(emitter.focusAccel).toBe(null); + expect(emitter.startSize).toBe(1); + expect(emitter.endSize).toBe(10); + expect(emitter.minSize).toBe(1); + expect(emitter.maxSize).toBe(3); + expect(emitter.beginColor.toString()).toBe(ex.Color.Red.clone().toString()); + expect(emitter.endColor.toString()).toBe(ex.Color.Blue.clone().toString()); + expect(emitter.particleSprite).toBe(null); + expect(emitter.emitterType).toBe(ex.EmitterType.Circle); + expect(emitter.radius).toBe(20); + expect(emitter.particleRotationalVelocity).toBe(3); + expect(emitter.randomRotation).toBe(false); + expect(emitter.random.seed).toBe(1337); + + }); + + it('should emit particles', (done) => { + let emitter = new ex.ParticleEmitter({ + x: 400, + y: 100, + width: 20, + height: 30, + isEmitting: true, + minVel: 100, + maxVel: 200, + acceleration: ex.Vector.Zero.clone(), + minAngle: 0, + maxAngle: Math.PI / 2, + emitRate: 5, + particleLife: 4000, + opacity: .5, + fadeFlag: false, + focus: null, + focusAccel: null, + startSize: 30, + endSize: 40, + beginColor: ex.Color.Red.clone(), + endColor: ex.Color.Blue.clone(), + particleSprite: null, + emitterType: ex.EmitterType.Circle, + radius: 20, + particleRotationalVelocity: 3, + randomRotation: false, + random: new ex.Random(1337) + }); + + emitter.emitParticles(10); + emitter.update(engine, 100); + emitter.update(engine, 100); + emitter.update(engine, 100); + + emitter.draw(engine.ctx); + + imagediff.expectCanvasImageMatches('ParticleSpec/Particles.png', engine.canvas, done); + + }); + +}); \ No newline at end of file diff --git a/src/spec/SoundSpec.ts b/src/spec/SoundSpec.ts index 0d5e12dc..26914a12 100644 --- a/src/spec/SoundSpec.ts +++ b/src/spec/SoundSpec.ts @@ -297,7 +297,7 @@ describe('Sound resource', () => { }); class MockAudioImplementation implements ex.IAudioImplementation { - public responseType: XMLHttpRequestResponseType = 'arraybuffer'; + public responseType: ex.ExResponseType = 'arraybuffer'; public processData(data: any): ex.Promise { return ex.Promise.resolve(data); } diff --git a/src/spec/SpriteFontSpec.ts b/src/spec/SpriteFontSpec.ts new file mode 100644 index 00000000..5042315b --- /dev/null +++ b/src/spec/SpriteFontSpec.ts @@ -0,0 +1,131 @@ +/// +/// +/// + +describe('A spritefont', () => { + let engine: ex.Engine; + let texture: ex.Texture; + beforeEach(() => { + + jasmine.addMatchers(imagediff.jasmine); + engine = TestUtils.engine({ + width: 800, + height: 200 + }); + + texture = new ex.Texture('base/src/spec/images/SpriteFontSpec/SpriteFont.png', true); + + }); + afterEach(() => { + engine.stop(); + engine = null; + }); + + it('should have props set by the constructor', () => { + texture.load().then(() => { + let sf = new ex.SpriteFont({ + image: texture, + alphabet: '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', + caseInsensitive: true, + columns: 16, + rows: 3, + spWidth: 16, + spHeight: 16 + }); + + expect(sf.image.isLoaded()); + expect(sf.columns).toBe(16); + expect(sf.rows).toBe(3); + expect(sf.spWidth).toBe(16); + expect(sf.spHeight).toBe(16); + }); + }); + + it('should draw a string', (done) => { + texture.load().then(() => { + let sf = new ex.SpriteFont({ + image: texture, + alphabet: '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', + caseInsensitive: true, + columns: 16, + rows: 3, + spWidth: 16, + spHeight: 16 + }); + + sf.draw(engine.ctx, 'This is a test string!?-&.\'', 20, 20, { + color: ex.Color.Green, + opacity: 1, + fontSize: 20, + letterSpacing: 0, + textAlign: ex.TextAlign.Left, + baseAlign: ex.BaseAlign.Bottom, + maxWidth: 500 + }); + + imagediff.expectCanvasImageMatches('SpriteFontSpec/ExpectedFont.png', engine.canvas, done); + }); + }); + + it('should get text sprites', (done) => { + texture.load().then(() => { + let sf = new ex.SpriteFont({ + image: texture, + alphabet: '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', + caseInsensitive: true, + columns: 16, + rows: 3, + spWidth: 16, + spHeight: 16 + }); + + let sprites = sf.getTextSprites(); + + sprites['0'].draw(engine.ctx, 0, 0); + sprites['4'].draw(engine.ctx, 16, 0); + sprites['9'].draw(engine.ctx, 2 * 16, 0); + // tslint:disable-next-line:no-string-literal + sprites['a'].draw(engine.ctx, 3 * 16, 0); + // tslint:disable-next-line:no-string-literal + sprites['q'].draw(engine.ctx, 4 * 16, 0); + // tslint:disable-next-line:no-string-literal + sprites['z'].draw(engine.ctx, 5 * 16, 0); + sprites['&'].draw(engine.ctx, 1 * 16, 16); + sprites['.'].draw(engine.ctx, 2 * 16, 16); + sprites['"'].draw(engine.ctx, 3 * 16, 16); + sprites['?'].draw(engine.ctx, 4 * 16, 16); + sprites['-'].draw(engine.ctx, 5 * 16, 16); + + imagediff.expectCanvasImageMatches('SpriteFontSpec/IndividualSprites.png', engine.canvas, done); + }); + }); + + it('should have text shadow', (done) => { + texture.load().then(() => { + let sf = new ex.SpriteFont({ + image: texture, + alphabet: '0123456789abcdefghijklmnopqrstuvwxyz,!\'&."?- ', + caseInsensitive: true, + columns: 16, + rows: 3, + spWidth: 16, + spHeight: 16 + }); + + sf.setTextShadow(5, 5, ex.Color.Yellow); + + sf.draw(engine.ctx, 'This should have text shadow', 20, 20, { + color: ex.Color.Blue, + opacity: 1, + fontSize: 20, + letterSpacing: 0, + textAlign: ex.TextAlign.Left, + baseAlign: ex.BaseAlign.Bottom, + maxWidth: 500 + }); + + imagediff.expectCanvasImageMatches('SpriteFontSpec/TextShadow.png', engine.canvas, done); + }); + }); + +}); \ No newline at end of file diff --git a/src/spec/SpriteSheetSpec.ts b/src/spec/SpriteSheetSpec.ts new file mode 100644 index 00000000..ebd9650b --- /dev/null +++ b/src/spec/SpriteSheetSpec.ts @@ -0,0 +1,130 @@ +/// +/// +/// + +describe('A spritesheet', () => { + let engine: ex.Engine; + let texture: ex.Texture; + beforeEach(() => { + + jasmine.addMatchers(imagediff.jasmine); + engine = TestUtils.engine({ + width: 96, + height: 96 + }); + + texture = new ex.Texture('base/src/spec/images/SpriteSheetSpec/PlayerRun.png', true); + + }); + afterEach(() => { + engine.stop(); + engine = null; + }); + + it('should have props set by the constructor', (done) => { + texture.load().then(() => { + let ss = new ex.SpriteSheet({ + image: texture, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 + }); + + expect(ss.image.isLoaded()); + expect(ss.columns).toBe(21); + expect(ss.rows).toBe(1); + expect(ss.spWidth).toBe(96); + expect(ss.spHeight).toBe(96); + + expect(ss.sprites.length).toBe(21); + + ss.getSprite(0).draw(engine.ctx, 0, 0); + + imagediff.expectCanvasImageMatches('SpriteSheetSpec/PlayerRun0.png', engine.canvas, done); + }); + }); + + it('should getAnimationByIndices', () => { + texture.load().then(() => { + let ss = new ex.SpriteSheet({ + image: texture, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 + }); + + let frames = [0, 1, 2, 3, 4, 5, 5, 5, 5]; + let anim = ss.getAnimationByIndices(engine, frames, 50); + + expect(anim).not.toBeNull(); + expect(anim.sprites.length).toBe(frames.length); + expect(anim.speed).toBe(50); + + }); + }); + + it('should getAnimationBetween', () => { + texture.load().then(() => { + let ss = new ex.SpriteSheet({ + image: texture, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 + }); + + let anim = ss.getAnimationBetween(engine, 0, 5, 50); + + expect(anim).not.toBeNull(); + expect(anim.sprites.length).toBe(5); + expect(anim.speed).toBe(50); + + }); + }); + + it('should getAnimationForAll', () => { + texture.load().then(() => { + let ss = new ex.SpriteSheet({ + image: texture, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 + }); + + let anim = ss.getAnimationForAll(engine, 50); + + expect(anim).not.toBeNull(); + expect(anim.sprites.length).toBe(21); + expect(anim.speed).toBe(50); + + }); + }); + + it('should getSprite at an index', (done) => { + texture.load().then(() => { + let ss = new ex.SpriteSheet({ + image: texture, + columns: 21, + rows: 1, + spWidth: 96, + spHeight: 96 + }); + + expect(ss.image.isLoaded()); + expect(ss.columns).toBe(21); + expect(ss.rows).toBe(1); + expect(ss.spWidth).toBe(96); + expect(ss.spHeight).toBe(96); + + expect(ss.sprites.length).toBe(21); + + ss.getSprite(20).draw(engine.ctx, 0, 0); + + imagediff.expectCanvasImageMatches('SpriteSheetSpec/PlayerRun20.png', engine.canvas, done); + }); + }); + +}); \ No newline at end of file diff --git a/src/spec/SpriteSpec.ts b/src/spec/SpriteSpec.ts new file mode 100644 index 00000000..69abd276 --- /dev/null +++ b/src/spec/SpriteSpec.ts @@ -0,0 +1,61 @@ +/// +/// +/// + +describe('A sprite', () => { + let engine: ex.Engine; + let texture: ex.Texture; + beforeEach(() => { + + jasmine.addMatchers(imagediff.jasmine); + engine = TestUtils.engine({ + width: 62, + height: 64 + }); + + texture = new ex.Texture('base/src/spec/images/SpriteSpec/icon.png', true); + + }); + afterEach(() => { + engine.stop(); + engine = null; + }); + + it('should have props set by the constructor', (done) => { + texture.load().then(() => { + let sprite = new ex.Sprite({ + image: texture, + sx: 0, + sy: 0, + swidth: 62, + sheight: 64, + rotation: 0, + anchor: new ex.Vector(0.0, 0.0), + scale: new ex.Vector(1, 1), + flipVertical: false, + flipHorizontal: false + }); + + expect(texture.isLoaded()).toBe(true); + expect(sprite.sx).toBe(0); + expect(sprite.sy).toBe(0); + expect(sprite.swidth).toBe(62); + expect(sprite.sheight).toBe(64); + expect(sprite.rotation).toBe(0); + expect(sprite.anchor.x).toBe(0.0); + expect(sprite.anchor.y).toBe(0.0); + expect(sprite.scale.x).toBe(1); + expect(sprite.scale.y).toBe(1); + expect(sprite.flipHorizontal).toBe(false); + expect(sprite.flipVertical).toBe(false); + + sprite.draw(engine.ctx, 0, 0); + + imagediff.expectCanvasImageMatches('SpriteSpec/icon.png', engine.canvas, done); + }); + + + }); + + +}); \ No newline at end of file diff --git a/src/spec/TileMapSpec.ts b/src/spec/TileMapSpec.ts index 816db1ef..3c16f311 100644 --- a/src/spec/TileMapSpec.ts +++ b/src/spec/TileMapSpec.ts @@ -1,18 +1,74 @@ +/// /// - /// - describe('A TileMap', () => { + let engine: ex.Engine; + let texture: ex.Texture; + beforeEach(() => { + + jasmine.addMatchers(imagediff.jasmine); + engine = TestUtils.engine({ + width: 800, + height: 200 + }); + + texture = new ex.Texture('base/src/spec/images/TileMapSpec/Blocks.png', true); + + }); + afterEach(() => { + engine.stop(); + engine = null; + }); + it('exists', () => { expect(ex.TileMap).toBeDefined(); }); - it('collides with actors in the Box system', () => { - //fail('todo'); + it('should have props set by the constructor', () => { + let tm = new ex.TileMap({ + x: 0, + y: 0, + cellWidth: 64, + cellHeight: 48, + rows: 4, + cols: 20 + }); + + + expect(tm.x).toBe(0); + expect(tm.y).toBe(0); + expect(tm.cellWidth).toBe(64); + expect(tm.cellHeight).toBe(48); + expect(tm.rows).toBe(4); + expect(tm.cols).toBe(20); }); - it('collides with actors in the Rigid system', () => { - //fail('todo'); + it('should draw the correct proportions', (done) => { + texture.load().then(() => { + + + let tm = new ex.TileMap({ + x: 30, + y: 30, + cellWidth: 64, + cellHeight: 48, + rows: 3, + cols: 7 + }); + let spriteTiles = new ex.SpriteSheet(texture, 1, 1, 64, 48); + tm.registerSpriteSheet('default', spriteTiles); + tm.data.forEach(function (cell: ex.Cell) { + cell.solid = true; + cell.pushSprite(new ex.TileSprite('default', 0)); + }); + + tm.draw(engine.ctx, 100); + + imagediff.expectCanvasImageMatches('TileMapSpec/TileMap.png', engine.canvas, done); + + }); }); + + }); diff --git a/src/spec/UIActorSpec.ts b/src/spec/UIActorSpec.ts index e991d113..3aca22a9 100644 --- a/src/spec/UIActorSpec.ts +++ b/src/spec/UIActorSpec.ts @@ -13,9 +13,14 @@ describe('A UIActor', () => { beforeEach(() => { jasmine.addMatchers(imagediff.jasmine); - uiActor = new ex.UIActor(50, 50, 100, 50); - uiActor.color = ex.Color.Blue; - uiActor.collisionType = ex.CollisionType.Active; + uiActor = new ex.UIActor({ + x: 50, + y: 50, + width: 100, + height: 50, + color: ex.Color.Blue, + collisionType: ex.CollisionType.Active + }); engine = TestUtils.engine(); diff --git a/src/spec/icon.png b/src/spec/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c303d20a18ce42a1d8064a68af037c0fa47e2f3 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU~u4IV_;x#dU@n40|NtRfk$L90|U1Z2s2)~ zTla^7fl)i#uNuZeuq zB+-`HuORW}+RXQda?cbzzxzG=c;CU}@9qAX&seca>x1Fk1D6^2EFR=7f6e4FNu}2< zc;54-W3d?)eaUbCEz&5EDUc~Y@lvC!V9sK`9Y_2Azbc8GcFF3rk>lfr$2+Y3mS<{Z z$P^qnYngW_Q;J>Y_}#Ku#~6=)e0Fm!`=rgcA4lJKXVT03F4JXleL~1`@yipx{3)vU zdi}5_f9_=yK8xZ#wIR>t#jJcEHy9tkegA6c@vAF}qQ+YD?b9!utu#GTcz|*H>5o>+Gi3@6-2ElDyzl_y d|JgN+-z>|bmN_~8XJBAp@O1TaS?83{1OQ2st=a$p literal 0 HcmV?d00001 diff --git a/src/spec/images/ParticleSpec/Particles.png b/src/spec/images/ParticleSpec/Particles.png new file mode 100644 index 0000000000000000000000000000000000000000..0db043482aa39cd94ebf5a54dfa6c746e48c89de GIT binary patch literal 10956 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 B!W94j literal 0 HcmV?d00001 diff --git a/src/spec/images/SpriteFontSpec/TextShadow.png b/src/spec/images/SpriteFontSpec/TextShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f15bea4518b6e7b6034acb150e7989274ab739f7 GIT binary patch literal 7186 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 DWS&#f literal 0 HcmV?d00001 diff --git a/src/spec/images/SpriteSheetSpec/PlayerRun.png b/src/spec/images/SpriteSheetSpec/PlayerRun.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1394c1defffb5c7f4393bff9c0d3bb24875ccf GIT binary patch literal 147657 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

A5tPb}qzkWRX)oo_eIRAuwhZAG#wWiN# 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 literal 0 HcmV?d00001 diff --git a/src/spec/images/SpriteSheetSpec/PlayerRun20.png b/src/spec/images/SpriteSheetSpec/PlayerRun20.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb6d2f66548c5976fec70d816925d3163f376ba GIT binary patch literal 6879 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 literal 0 HcmV?d00001 diff --git a/src/spec/images/SpriteSpec/icon.png b/src/spec/images/SpriteSpec/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c303d20a18ce42a1d8064a68af037c0fa47e2f3 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU~u4IV_;x#dU@n40|NtRfk$L90|U1Z2s2)~ zTla^7fl)i#uNuZeuq zB+-`HuORW}+RXQda?cbzzxzG=c;CU}@9qAX&seca>x1Fk1D6^2EFR=7f6e4FNu}2< zc;54-W3d?)eaUbCEz&5EDUc~Y@lvC!V9sK`9Y_2Azbc8GcFF3rk>lfr$2+Y3mS<{Z z$P^qnYngW_Q;J>Y_}#Ku#~6=)e0Fm!`=rgcA4lJKXVT03F4JXleL~1`@yipx{3)vU zdi}5_f9_=yK8xZ#wIR>t#jJcEHy9tkegA6c@vAF}qQ+YD?b9!utu#GTcz|*H>5o>+Gi3@6-2ElDyzl_y d|JgN+-z>|bmN_~8XJBAp@O1TaS?83{1OQ2st=a$p literal 0 HcmV?d00001 diff --git a/src/spec/images/TileMapSpec/Blocks.png b/src/spec/images/TileMapSpec/Blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..54e8822cfec4a19cf028b1bf732ab02486f3f8eb GIT binary patch literal 8778 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

Mefp_Q%9DCAG6vsT`jyV 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 ah7cJYrh;il)-f