extra-game-loop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,27 @@
1
+ interface IGameLoopOptions<FixedDeltaTime extends number> {
2
+ fixedDeltaTime: FixedDeltaTime;
3
+ maximumDeltaTime: number;
4
+ fixedUpdate: (deltaTime: FixedDeltaTime) => void;
5
+ update: (deltaTime: number) => void;
6
+ render: () => void;
7
+ }
8
+ export declare class GameLoop<FixedDeltaTime extends number> {
9
+ private readonly fsm;
10
+ private readonly fixedDeltaTime;
11
+ private readonly maximumDeltaTime;
12
+ private readonly fixedUpdate;
13
+ private readonly update;
14
+ private readonly render;
15
+ private requstId?;
16
+ private loopStartTimestmap?;
17
+ private lastTimestamp?;
18
+ private frames;
19
+ private deltaTimeAccumulator;
20
+ constructor(options: IGameLoopOptions<FixedDeltaTime>);
21
+ start(): void;
22
+ stop(): void;
23
+ getFramesOfSecond(): number;
24
+ private loop;
25
+ private nextFrame;
26
+ }
27
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GameLoop = void 0;
4
+ const structures_1 = require("@blackglory/structures");
5
+ const prelude_1 = require("@blackglory/prelude");
6
+ var State;
7
+ (function (State) {
8
+ State["Stopped"] = "stopped";
9
+ State["Running"] = "running";
10
+ })(State || (State = {}));
11
+ var Event;
12
+ (function (Event) {
13
+ Event["Start"] = "start";
14
+ Event["Stop"] = "stop";
15
+ })(Event || (Event = {}));
16
+ const schema = {
17
+ [State.Stopped]: { [Event.Start]: State.Running },
18
+ [State.Running]: { [Event.Stop]: State.Stopped }
19
+ };
20
+ class GameLoop {
21
+ constructor(options) {
22
+ this.fsm = new structures_1.FiniteStateMachine(schema, State.Stopped);
23
+ this.frames = 0;
24
+ this.deltaTimeAccumulator = 0;
25
+ this.loop = (timestamp) => {
26
+ const deltaTime = timestamp - this.lastTimestamp;
27
+ this.lastTimestamp = timestamp;
28
+ this.nextFrame(deltaTime);
29
+ this.requstId = requestAnimationFrame(this.loop);
30
+ };
31
+ this.fixedDeltaTime = options.fixedDeltaTime;
32
+ this.maximumDeltaTime = options.maximumDeltaTime;
33
+ (0, prelude_1.assert)(this.maximumDeltaTime >= this.fixedDeltaTime, 'maximumDeltaTime must be greater than or equal to fixedDeltaTime');
34
+ this.fixedUpdate = options.fixedUpdate;
35
+ this.update = options.update;
36
+ this.render = options.render;
37
+ }
38
+ start() {
39
+ this.fsm.send(Event.Start);
40
+ const timestamp = performance.now();
41
+ this.loopStartTimestmap = timestamp;
42
+ this.lastTimestamp = timestamp;
43
+ this.loop(timestamp);
44
+ }
45
+ stop() {
46
+ this.fsm.send(Event.Stop);
47
+ cancelAnimationFrame(this.requstId);
48
+ }
49
+ getFramesOfSecond() {
50
+ if (this.fsm.matches(State.Running)) {
51
+ const elapsedMs = performance.now() - this.loopStartTimestmap;
52
+ return elapsedMs !== 0
53
+ ? this.frames / (elapsedMs / 1000)
54
+ : 0;
55
+ }
56
+ else {
57
+ return 0;
58
+ }
59
+ }
60
+ nextFrame(deltaTime) {
61
+ this.deltaTimeAccumulator = Math.min(this.deltaTimeAccumulator + deltaTime, this.maximumDeltaTime);
62
+ while (this.deltaTimeAccumulator >= this.fixedDeltaTime) {
63
+ this.fixedUpdate(this.fixedDeltaTime);
64
+ this.deltaTimeAccumulator -= this.fixedDeltaTime;
65
+ }
66
+ this.update(deltaTime);
67
+ this.render();
68
+ this.frames++;
69
+ }
70
+ }
71
+ exports.GameLoop = GameLoop;
72
+ //# sourceMappingURL=game-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-loop.js","sourceRoot":"","sources":["../../src/game-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './game-loop';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./game-loop"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B"}
@@ -0,0 +1,27 @@
1
+ interface IGameLoopOptions<FixedDeltaTime extends number> {
2
+ fixedDeltaTime: FixedDeltaTime;
3
+ maximumDeltaTime: number;
4
+ fixedUpdate: (deltaTime: FixedDeltaTime) => void;
5
+ update: (deltaTime: number) => void;
6
+ render: () => void;
7
+ }
8
+ export declare class GameLoop<FixedDeltaTime extends number> {
9
+ private readonly fsm;
10
+ private readonly fixedDeltaTime;
11
+ private readonly maximumDeltaTime;
12
+ private readonly fixedUpdate;
13
+ private readonly update;
14
+ private readonly render;
15
+ private requstId?;
16
+ private loopStartTimestmap?;
17
+ private lastTimestamp?;
18
+ private frames;
19
+ private deltaTimeAccumulator;
20
+ constructor(options: IGameLoopOptions<FixedDeltaTime>);
21
+ start(): void;
22
+ stop(): void;
23
+ getFramesOfSecond(): number;
24
+ private loop;
25
+ private nextFrame;
26
+ }
27
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GameLoop = void 0;
4
+ const structures_1 = require("@blackglory/structures");
5
+ const prelude_1 = require("@blackglory/prelude");
6
+ var State;
7
+ (function (State) {
8
+ State["Stopped"] = "stopped";
9
+ State["Running"] = "running";
10
+ })(State || (State = {}));
11
+ var Event;
12
+ (function (Event) {
13
+ Event["Start"] = "start";
14
+ Event["Stop"] = "stop";
15
+ })(Event || (Event = {}));
16
+ const schema = {
17
+ [State.Stopped]: { [Event.Start]: State.Running },
18
+ [State.Running]: { [Event.Stop]: State.Stopped }
19
+ };
20
+ class GameLoop {
21
+ constructor(options) {
22
+ this.fsm = new structures_1.FiniteStateMachine(schema, State.Stopped);
23
+ this.frames = 0;
24
+ this.deltaTimeAccumulator = 0;
25
+ this.loop = (timestamp) => {
26
+ const deltaTime = timestamp - this.lastTimestamp;
27
+ this.lastTimestamp = timestamp;
28
+ this.nextFrame(deltaTime);
29
+ this.requstId = requestAnimationFrame(this.loop);
30
+ };
31
+ this.fixedDeltaTime = options.fixedDeltaTime;
32
+ this.maximumDeltaTime = options.maximumDeltaTime;
33
+ (0, prelude_1.assert)(this.maximumDeltaTime >= this.fixedDeltaTime, 'maximumDeltaTime must be greater than or equal to fixedDeltaTime');
34
+ this.fixedUpdate = options.fixedUpdate;
35
+ this.update = options.update;
36
+ this.render = options.render;
37
+ }
38
+ start() {
39
+ this.fsm.send(Event.Start);
40
+ const timestamp = performance.now();
41
+ this.loopStartTimestmap = timestamp;
42
+ this.lastTimestamp = timestamp;
43
+ this.loop(timestamp);
44
+ }
45
+ stop() {
46
+ this.fsm.send(Event.Stop);
47
+ cancelAnimationFrame(this.requstId);
48
+ }
49
+ getFramesOfSecond() {
50
+ if (this.fsm.matches(State.Running)) {
51
+ const elapsedMs = performance.now() - this.loopStartTimestmap;
52
+ return elapsedMs !== 0
53
+ ? this.frames / (elapsedMs / 1000)
54
+ : 0;
55
+ }
56
+ else {
57
+ return 0;
58
+ }
59
+ }
60
+ nextFrame(deltaTime) {
61
+ this.deltaTimeAccumulator = Math.min(this.deltaTimeAccumulator + deltaTime, this.maximumDeltaTime);
62
+ while (this.deltaTimeAccumulator >= this.fixedDeltaTime) {
63
+ this.fixedUpdate(this.fixedDeltaTime);
64
+ this.deltaTimeAccumulator -= this.fixedDeltaTime;
65
+ }
66
+ this.update(deltaTime);
67
+ this.render();
68
+ this.frames++;
69
+ }
70
+ }
71
+ exports.GameLoop = GameLoop;
72
+ //# sourceMappingURL=game-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-loop.js","sourceRoot":"","sources":["../../src/game-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './game-loop';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./game-loop"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "extra-game-loop",
3
+ "version": "0.1.0",
4
+ "description": "",
5
+ "keywords": [],
6
+ "files": [
7
+ "lib",
8
+ "dist"
9
+ ],
10
+ "main": "lib/index.js",
11
+ "types": "lib/index.d.ts",
12
+ "sideEffects": false,
13
+ "repository": "git@github.com:BlackGlory/extra-game-loop.git",
14
+ "author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
15
+ "license": "MIT",
16
+ "scripts": {
17
+ "lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src __tests__",
18
+ "test": "jest --runInBand --config jest.config.js",
19
+ "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
20
+ "test:coverage": "jest --coverage --config jest.config.js",
21
+ "prepublishOnly": "run-s clean build bundle",
22
+ "clean": "run-p clean:*",
23
+ "clean:build": "rimraf lib",
24
+ "clean:bundle": "rimraf dist",
25
+ "build": "run-p build:*",
26
+ "build:es2015": "run-s build:es2015:*",
27
+ "build:es2015:compile": "tsc --project tsconfig.build.json --module commonjs --target es2015 --outDir lib/es2015",
28
+ "build:es2015:patch": "tscpaths -p tsconfig.build.json -s ./src -o ./lib/es2015",
29
+ "build:es2018": "run-s build:es2018:*",
30
+ "build:es2018:compile": "tsc --project tsconfig.build.json --module commonjs --target es2018 --outDir lib/es2018",
31
+ "build:es2018:patch": "tscpaths -p tsconfig.build.json -s ./src -o ./lib/es2018",
32
+ "bundle": "rollup --config rollup.config.js",
33
+ "release": "standard-version"
34
+ },
35
+ "husky": {
36
+ "hooks": {
37
+ "pre-commit": "run-s lint build test",
38
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
39
+ }
40
+ },
41
+ "devDependencies": {
42
+ "@blackglory/jest-matchers": "^0.3.1",
43
+ "@commitlint/cli": "^17.0.3",
44
+ "@commitlint/config-conventional": "^17.0.3",
45
+ "@rollup/plugin-commonjs": "^22.0.2",
46
+ "@rollup/plugin-json": "^4.1.0",
47
+ "@rollup/plugin-node-resolve": "^13.1.3",
48
+ "@rollup/plugin-replace": "^4.0.0",
49
+ "@rollup/plugin-typescript": "^8.4.0",
50
+ "@types/jest": "^27.4.1",
51
+ "@typescript-eslint/eslint-plugin": "^5.35.1",
52
+ "@typescript-eslint/parser": "^5.35.1",
53
+ "eslint": "^8.22.0",
54
+ "extra-promise": "^3.1.1",
55
+ "extra-timers": "^0.2.5",
56
+ "husky": "^4.3.8",
57
+ "jest": "^27.5.1",
58
+ "npm-run-all": "^4.1.5",
59
+ "rimraf": "^3.0.2",
60
+ "rollup": "^2.78.1",
61
+ "rollup-plugin-analyzer": "^4.0.0",
62
+ "rollup-plugin-terser": "^7.0.2",
63
+ "standard-version": "^9.5.0",
64
+ "ts-jest": "^27.1.4",
65
+ "tscpaths": "^0.0.9",
66
+ "tslib": "^2.3.1",
67
+ "typescript": "^4.8.2"
68
+ },
69
+ "dependencies": {
70
+ "@blackglory/prelude": "^0.1.4",
71
+ "@blackglory/structures": "^0.10.14"
72
+ }
73
+ }