like2d 2.6.0 → 2.7.2

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.
Files changed (40) hide show
  1. package/README.md +51 -42
  2. package/dist/core/graphics.d.ts +10 -0
  3. package/dist/core/graphics.d.ts.map +1 -1
  4. package/dist/core/graphics.js +18 -0
  5. package/dist/core/like.d.ts +5 -0
  6. package/dist/core/like.d.ts.map +1 -1
  7. package/dist/engine.d.ts +4 -7
  8. package/dist/engine.d.ts.map +1 -1
  9. package/dist/engine.js +46 -50
  10. package/dist/gamecontrollerdb.txt +2 -0
  11. package/dist/index.d.ts +13 -33
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +15 -20
  14. package/dist/scene.d.ts +10 -0
  15. package/dist/scene.d.ts.map +1 -0
  16. package/dist/scenes/startup.d.ts +18 -0
  17. package/dist/scenes/startup.d.ts.map +1 -0
  18. package/dist/scenes/startup.js +48 -0
  19. package/package.json +13 -17
  20. package/dist/adapters/callback/index.d.ts +0 -23
  21. package/dist/adapters/callback/index.d.ts.map +0 -1
  22. package/dist/adapters/callback/index.js +0 -30
  23. package/dist/adapters/scene/index.d.ts +0 -18
  24. package/dist/adapters/scene/index.d.ts.map +0 -1
  25. package/dist/adapters/scene/index.js +0 -57
  26. package/dist/adapters/scene/scene.d.ts +0 -19
  27. package/dist/adapters/scene/scene.d.ts.map +0 -1
  28. package/dist/adapters/scene/startup-scene.d.ts +0 -18
  29. package/dist/adapters/scene/startup-scene.d.ts.map +0 -1
  30. package/dist/adapters/scene/startup-scene.js +0 -61
  31. package/dist/core/gamepad-button-map.d.ts +0 -5
  32. package/dist/core/gamepad-button-map.d.ts.map +0 -1
  33. package/dist/core/gamepad-button-map.js +0 -56
  34. package/dist/core/gamepad-db.d.ts +0 -49
  35. package/dist/core/gamepad-db.d.ts.map +0 -1
  36. package/dist/core/gamepad-db.js +0 -192
  37. package/dist/core/player-movement.d.ts +0 -16
  38. package/dist/core/player-movement.d.ts.map +0 -1
  39. package/dist/core/player-movement.js +0 -20
  40. /package/dist/{adapters/scene/scene.js → scene.js} +0 -0
@@ -0,0 +1,48 @@
1
+ import { Vec2 } from '../core/vector2';
2
+ const LOGO = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cjxzdmcgd2lkdGg9IjMwMG1tIiBoZWlnaHQ9IjEwNW1tIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMDAgMTA1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPHJlY3QgeD0iMTAiIHk9IjExLjIzIiB3aWR0aD0iMjgwIiBoZWlnaHQ9IjgzLjU0NCIgZmlsbD0iI2U0ODA4MCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiLz4KIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgPHJlY3QgeD0iOTcuNDg0IiB5PSIxMS4yMyIgd2lkdGg9IjUyLjUxNiIgaGVpZ2h0PSI0Ni4yMzciLz4KICA8cmVjdCB4PSIxNTAiIHk9IjExLjIzIiB3aWR0aD0iMzUuMDExIiBoZWlnaHQ9IjQ2LjIzNyIvPgogIDxyZWN0IHg9IjE4NS4wMSIgeT0iMTEuMjMiIHdpZHRoPSI1Mi41MTYiIGhlaWdodD0iNDYuMjM3Ii8+CiAgPHJlY3QgeD0iMjM3LjUzIiB5PSIxMS4yMyIgd2lkdGg9IjUyLjUxNiIgaGVpZ2h0PSI0Ni4yMzciLz4KIDwvZz4KIDxnPgogIDxyZWN0IHg9IjEzMi40OSIgeT0iMTEuMjMiIHdpZHRoPSIxNy41MDUiIGhlaWdodD0iMjcuNDYxIi8+CiAgPHJlY3QgeD0iMTUwIiB5PSIyOS4zMDIiIHdpZHRoPSI4Ljc1MjciIGhlaWdodD0iMTguNzc2Ii8+CiAgPHJlY3QgeD0iMTc2LjI2IiB5PSIyOS4zMDIiIHdpZHRoPSI4Ljc1MjciIGhlaWdodD0iMTguNzc2Ii8+CiA8L2c+CiA8cmVjdCB4PSIxNTAiIHk9IjExLjIzIiB3aWR0aD0iMTcuNTA1IiBoZWlnaHQ9IjguNjg0NSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiA8cmVjdCB4PSIxNjcuNTEiIHk9IjExLjIzIiB3aWR0aD0iMTcuNTA1IiBoZWlnaHQ9IjguNjg0NSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiA8Zz4KICA8cGF0aCBkPSJtMjM3LjUzIDM4LjY5MS0xNy41MDUtOS4zODgyIDE3LjUwNS0xOC4wNzN6Ii8+CiAgPHJlY3QgeD0iMjAyLjg4IiB5PSI0OC4wNzkiIHdpZHRoPSIxNi43NzIiIGhlaWdodD0iOS4zODgyIi8+CiAgPHJlY3QgeD0iMjcyLjU0IiB5PSIyMC4yNjYiIHdpZHRoPSIxNi43NzIiIGhlaWdodD0iOS4zODgyIi8+CiAgPHJlY3QgeD0iMjcyLjU0IiB5PSIzOC42OTEiIHdpZHRoPSIxNi43NzIiIGhlaWdodD0iOS4zODgyIi8+CiAgPHBhdGggZD0ibTIwMi41MiAyOS4zMDIgMC4zNjY4NS0xOC4wNzNoMTcuMTM5eiIvPgogPC9nPgogPHBhdGggZD0ibTY0LjA3OCAxLjAwNDItMzMuMzc1IDMzLjM3NS0wLjAxNzQzIDAuMDE3NGEyMy42MTIgMjMuNjEyIDAgMCAwIDAgMzMuMzkyIDIzLjYxMiAyMy42MTIgMCAwIDAgMzAuMDEyIDIuODAyMiAyMy42MTIgMjMuNjEyIDAgMCAxIDdlLTMgMC41NzAzNCAyMy42MTIgMjMuNjEyIDAgMCAxLTIzLjYxMiAyMy42MTJoNTMuOTdhMjMuNjEyIDIzLjYxMiAwIDAgMS0yMy42MTEtMjMuNjEyIDIzLjYxMiAyMy42MTIgMCAwIDEgN2UtMyAtMC41NzAzNCAyMy42MTIgMjMuNjEyIDAgMCAwIDMwLjAxMi0yLjgwMjkgMjMuNjEyIDIzLjYxMiAwIDAgMC02Ljg4ZS00IC0zMy4zOTJ6IiBmaWxsPSIjODBjM2U0IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIuNSI+CiAgPGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiBjeD0iLTIwLjk4OCIgY3k9Ii05My4yNDMiIHI9IjIzLjYxMiIvPgogIDxjaXJjbGUgdHJhbnNmb3JtPSJyb3RhdGUoMTM1KSIgY3g9IjIuNjIzOCIgY3k9Ii02OS42MzIiIHI9IjIzLjYxMiIvPgogIDxjaXJjbGUgY3g9IjkxLjA2MiIgY3k9IjcxLjE2MSIgcj0iMjMuNjEyIi8+CiAgPGNpcmNsZSBjeD0iMzcuMDkzIiBjeT0iNzEuMTYxIiByPSIyMy42MTIiLz4KIDwvZz4KPC9zdmc+Cg==';
3
+ /**
4
+ * A simple startup scene that waits for a mouse click before advancing.
5
+ *
6
+ * This exists to work around browser autoplay restrictions - browsers require
7
+ * user interaction (like a click) before allowing audio playback. Show this
8
+ * scene first, then transition to your game scene on click.
9
+ */
10
+ export class StartupScene {
11
+ constructor(next, onDraw) {
12
+ Object.defineProperty(this, "next", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: next
17
+ });
18
+ Object.defineProperty(this, "onDraw", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: onDraw
23
+ });
24
+ Object.defineProperty(this, "logo", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: void 0
29
+ });
30
+ }
31
+ load(like) {
32
+ this.logo = like.gfx.newImage(LOGO);
33
+ }
34
+ draw(like) {
35
+ if (this.onDraw) {
36
+ this.onDraw(like);
37
+ }
38
+ else if (this.logo.isReady()) {
39
+ like.gfx.clear([0.05, 0.05, 0.08, 1]);
40
+ const winSize = like.gfx.getCanvasSize();
41
+ const scale = (winSize[0] * 0.5) / this.logo.size[0];
42
+ like.gfx.draw(this.logo, Vec2.div(winSize, 2), { scale, origin: Vec2.div(this.logo.size, 2) });
43
+ }
44
+ }
45
+ mousepressed(like) {
46
+ like.setScene(this.next);
47
+ }
48
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "like2d",
3
- "version": "2.6.0",
3
+ "version": "2.7.2",
4
4
  "description": "A web-native game framework inspired by Love2D",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -10,14 +10,6 @@
10
10
  ".": {
11
11
  "import": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts"
13
- },
14
- "./callback": {
15
- "import": "./dist/adapters/callback/index.js",
16
- "types": "./dist/adapters/callback/index.d.ts"
17
- },
18
- "./scene": {
19
- "import": "./dist/adapters/scene/index.js",
20
- "types": "./dist/adapters/scene/index.d.ts"
21
13
  }
22
14
  },
23
15
  "files": [
@@ -26,6 +18,13 @@
26
18
  "README.md",
27
19
  "LICENSE"
28
20
  ],
21
+ "scripts": {
22
+ "build": "tsc && cp src/gamecontrollerdb.txt dist/",
23
+ "typecheck": "tsc --noEmit",
24
+ "lint": "echo 'No linting configured'",
25
+ "clean": "rm -rf dist",
26
+ "test": "vitest run"
27
+ },
29
28
  "keywords": [
30
29
  "game",
31
30
  "framework",
@@ -37,14 +36,11 @@
37
36
  ],
38
37
  "author": "",
39
38
  "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/44100hertz/Like2D"
42
+ },
40
43
  "devDependencies": {
41
44
  "typescript": "^5.9.3"
42
- },
43
- "scripts": {
44
- "build": "tsc && cp src/gamecontrollerdb.txt dist/",
45
- "typecheck": "tsc --noEmit",
46
- "lint": "echo 'No linting configured'",
47
- "clean": "rm -rf dist",
48
- "test": "vitest run"
49
45
  }
50
- }
46
+ }
@@ -1,23 +0,0 @@
1
- import type { Like2DEvent } from '../../core/events';
2
- import type { Like } from '../../core/like';
3
- type LikeWithCallbacks = Like & {
4
- load?: () => void;
5
- update?: (dt: number) => void;
6
- draw?: () => void;
7
- resize?: (size: import('../../core/vector2').Vector2, pixelSize: import('../../core/vector2').Vector2, fullscreen: boolean) => void;
8
- keypressed?: (scancode: string, keycode: string) => void;
9
- keyreleased?: (scancode: string, keycode: string) => void;
10
- mousepressed?: (x: number, y: number, button: number) => void;
11
- mousereleased?: (x: number, y: number, button: number) => void;
12
- gamepadpressed?: (gamepadIndex: number, buttonIndex: number, buttonName: string) => void;
13
- gamepadreleased?: (gamepadIndex: number, buttonIndex: number, buttonName: string) => void;
14
- actionpressed?: (action: string) => void;
15
- actionreleased?: (action: string) => void;
16
- handleEvent?: (event: Like2DEvent) => void;
17
- start: () => Promise<void>;
18
- dispose: () => void;
19
- };
20
- export declare function routeEvents(like: LikeWithCallbacks): (event: Like2DEvent) => void;
21
- export declare function createLike(container: HTMLElement): LikeWithCallbacks;
22
- export {};
23
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/callback/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM5C,KAAK,iBAAiB,GAAG,IAAI,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACpI,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzF,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1F,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAGF,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAKjF;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,WAAW,GAAG,iBAAiB,CAqBpE"}
@@ -1,30 +0,0 @@
1
- import { Engine } from '../../engine';
2
- // Routes events to callback properties on the like object
3
- export function routeEvents(like) {
4
- return (event) => {
5
- const cb = like[event.type];
6
- if (cb)
7
- cb(...event.args);
8
- };
9
- }
10
- export function createLike(container) {
11
- const engine = new Engine(container);
12
- // Create the like object that combines engine.like with callback properties and methods
13
- const like = {
14
- ...engine.like,
15
- handleEvent: undefined,
16
- start: async () => {
17
- const handleEvent = (event) => {
18
- like.handleEvent?.(event);
19
- const cb = like[event.type];
20
- if (cb)
21
- cb(...event.args);
22
- };
23
- await engine.start(handleEvent);
24
- },
25
- dispose: () => {
26
- engine.dispose();
27
- }
28
- };
29
- return like;
30
- }
@@ -1,18 +0,0 @@
1
- import { Engine } from '../../engine';
2
- import type { Scene } from './scene';
3
- import { StartupScene } from './startup-scene';
4
- import type { Like2DEvent } from '../../core/events';
5
- export { StartupScene };
6
- export type { Scene };
7
- export declare function createDefaultHandler(scene: Scene, like: Engine['like']): (event: Like2DEvent) => void;
8
- export declare class SceneRunner {
9
- private engine;
10
- private scene;
11
- constructor(container: HTMLElement);
12
- get like(): import("../..").Like;
13
- setScene(scene: Scene): void;
14
- handleEvent: (event: Like2DEvent) => void;
15
- start(scene: Scene): Promise<void>;
16
- dispose(): void;
17
- }
18
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/scene/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,KAAK,EAAE,CAAC;AAGtB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAMrG;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAsB;gBAEvB,SAAS,EAAE,WAAW;IAIlC,IAAI,IAAI,yBAEP;IAED,QAAQ,CAAC,KAAK,EAAE,KAAK;IAKrB,WAAW,GAAI,OAAO,WAAW,KAAG,IAAI,CAKtC;IAEI,KAAK,CAAC,KAAK,EAAE,KAAK;IAKxB,OAAO;CAIR"}
@@ -1,57 +0,0 @@
1
- import { Engine } from '../../engine';
2
- import { StartupScene } from './startup-scene';
3
- export { StartupScene };
4
- // Default handler that routes events to scene methods
5
- export function createDefaultHandler(scene, like) {
6
- return (event) => {
7
- scene.handleEvent?.(like, event);
8
- const method = scene[event.type];
9
- if (method)
10
- method.call(scene, like, ...event.args);
11
- };
12
- }
13
- export class SceneRunner {
14
- constructor(container) {
15
- Object.defineProperty(this, "engine", {
16
- enumerable: true,
17
- configurable: true,
18
- writable: true,
19
- value: void 0
20
- });
21
- Object.defineProperty(this, "scene", {
22
- enumerable: true,
23
- configurable: true,
24
- writable: true,
25
- value: null
26
- });
27
- Object.defineProperty(this, "handleEvent", {
28
- enumerable: true,
29
- configurable: true,
30
- writable: true,
31
- value: (event) => {
32
- if (!this.scene)
33
- return;
34
- this.scene.handleEvent?.(this.engine.like, event);
35
- const method = this.scene[event.type];
36
- if (method)
37
- method.call(this.scene, this.engine.like, ...event.args);
38
- }
39
- });
40
- this.engine = new Engine(container);
41
- }
42
- get like() {
43
- return this.engine.like;
44
- }
45
- setScene(scene) {
46
- this.scene = scene;
47
- scene.load?.(this.engine.like);
48
- }
49
- async start(scene) {
50
- this.setScene(scene);
51
- await this.engine.start(this.handleEvent);
52
- }
53
- dispose() {
54
- this.engine.dispose();
55
- this.scene = null;
56
- }
57
- }
@@ -1,19 +0,0 @@
1
- import type { Vector2 } from '../../core/vector2';
2
- import type { Like2DEvent } from '../../core/events';
3
- import type { Like } from '../../core/like';
4
- export type Scene = {
5
- load?(like: Like): void;
6
- update?(like: Like, dt: number): void;
7
- draw?(like: Like): void;
8
- resize?(like: Like, size: Vector2, pixelSize: Vector2, fullscreen: boolean): void;
9
- keypressed?(like: Like, scancode: string, keycode: string): void;
10
- keyreleased?(like: Like, scancode: string, keycode: string): void;
11
- mousepressed?(like: Like, x: number, y: number, button: number): void;
12
- mousereleased?(like: Like, x: number, y: number, button: number): void;
13
- gamepadpressed?(like: Like, gamepadIndex: number, buttonIndex: number, buttonName: string): void;
14
- gamepadreleased?(like: Like, gamepadIndex: number, buttonIndex: number, buttonName: string): void;
15
- actionpressed?(like: Like, action: string): void;
16
- actionreleased?(like: Like, action: string): void;
17
- handleEvent?(like: Like, event: Like2DEvent): void;
18
- };
19
- //# sourceMappingURL=scene.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../../../src/adapters/scene/scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAClF,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,YAAY,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE,cAAc,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACjG,eAAe,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAClG,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;CACpD,CAAC"}
@@ -1,18 +0,0 @@
1
- import type { Scene } from './scene';
2
- import { ImageHandle } from '../../core/graphics';
3
- import type { Like } from '../../core/like';
4
- export type StartupSceneConfig = {
5
- nextScene: Scene;
6
- draw?: (like: Like, logo: ImageHandle) => void;
7
- logo?: ImageHandle;
8
- };
9
- export declare class StartupScene implements Scene {
10
- private config;
11
- private setScene;
12
- private started;
13
- private logo;
14
- constructor(config: StartupSceneConfig, setScene: (scene: Scene) => void);
15
- draw(like: Like): void;
16
- mousepressed(_like: Like, _x: number, _y: number, _button: number): void;
17
- }
18
- //# sourceMappingURL=startup-scene.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup-scene.d.ts","sourceRoot":"","sources":["../../../src/adapters/scene/startup-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AA4BF,qBAAa,YAAa,YAAW,KAAK;IAKtC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAc;gBAGhB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAK1C,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAItB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAMzE"}
@@ -1,61 +0,0 @@
1
- import { ImageHandle } from '../../core/graphics';
2
- import { Vec2 } from '../../core/vector2';
3
- import { Rect } from '../../core/rect';
4
- const LOGO_DATA_URI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMzAwbW0iIGhlaWdodD0iMTA1bW0iIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMwMCAxMDUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8cmVjdCB4PSIxMCIgeT0iMTEuMjMiIHdpZHRoPSIyODAiIGhlaWdodD0iODMuNTQ0IiBmaWxsPSIjZTQ4MDgwIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIvPgogPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICA8cmVjdCB4PSI5Ny40ODQiIHk9IjExLjIzIiB3aWR0aD0iNTIuNTE2IiBoZWlnaHQ9IjQ2LjIzNyIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTEuMjMiIHdpZHRoPSIzNS4wMTEiIGhlaWdodD0iNDYuMjM3Ii8+CiAgPHJlY3QgeD0iMTg1LjAxIiB5PSIxMS4yMyIgd2lkdGg9IjUyLjUxNiIgaGVpZ2h0PSI0Ni4yMzciLz4KICA8cmVjdCB4PSIyMzcuNTMiIHk9IjExLjIzIiB3aWR0aD0iNTIuNTE2IiBoZWlnaHQ9IjQ2LjIzNyIvPgogPC9nPgogPGc+CiAgPHJlY3QgeD0iMTMyLjQ5IiB5PSIxMS4yMyIgd2lkdGg9IjE3LjUwNSIgaGVpZ2h0PSIyNy40NjEiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjI5LjMwMiIgd2lkdGg9IjguNzUyNyIgaGVpZ2h0PSIxOC43NzYiLz4KICA8cmVjdCB4PSIxNzYuMjYiIHk9IjI5LjMwMiIgd2lkdGg9IjguNzUyNyIgaGVpZ2h0PSIxOC43NzYiLz4KIDwvZz4KIDxyZWN0IHg9IjE1MCIgeT0iMTEuMjMiIHdpZHRoPSIxNy41MDUiIGhlaWdodD0iOC42ODQ1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KIDxyZWN0IHg9IjE2Ny41MSIgeT0iMTEuMjMiIHdpZHRoPSIxNy41MDUiIGhlaWdodD0iOC42ODQ1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KIDxnPgogIDxwYXRoIGQ9Im0yMzcuNTMgMzguNjkxLTE3LjUwNS05LjM4ODIgMTcuNTA1LTE4LjA3M3oiLz4KICA8cmVjdCB4PSIyMDIuODgiIHk9IjQ4LjA3OSIgd2lkdGg9IjE2Ljc3MiIgaGVpZ2h0PSI5LjM4ODIiLz4KICA8cmVjdCB4PSIyNzIuNTQiIHk9IjIwLjI2NiIgd2lkdGg9IjE2Ljc3MiIgaGVpZ2h0PSI5LjM4ODIiLz4KICA8cmVjdCB4PSIyNzIuNTQiIHk9IjM4LjY5MSIgd2lkdGg9IjE2Ljc3MiIgaGVpZ2h0PSI5LjM4ODIiLz4KICA8cGF0aCBkPSJtMjAyLjUyIDI5LjMwMiAwLjM2Njg1LTE4LjA3M2gxNy4xMzl6Ii8+CiA8L2c+CiA8cGF0aCBkPSJtNjQuMDc4IDEuMDA0Mi0zMy4zNzUgMzMuMzc1LTAuMDE3NDMgMC4wMTc0YTIzLjYxMiAyMy42MTIgMCAwIDAgMCAzMy4zOTIgMjMuNjEyIDIzLjYxMiAwIDAgMCAzMC4wMTIgMi44MDIyIDIzLjYxMiAyMy42MTIgMCAwIDEgN2UtMyAwLjU3MDM0IDIzLjYxMiAyMy42MTIgMCAwIDEtMjMuNjEyIDIzLjYxMmg1My45N2EyMy42MTIgMjMuNjEyIDAgMCAxLTIzLjYxMS0yMy42MTIgMjMuNjEyIDIzLjYxMiAwIDAgMSA3ZS0zIC0wLjU3MDM0IDIzLjYxMiAyMy42MTIgMCAwIDAgMzAuMDEyLTIuODAyOSAyMy42MTIgMjMuNjEyIDAgMCAwLTYuODhlLTQgLTMzLjM5MnoiIGZpbGw9IiM4MGMzZTQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgogPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ij4KICA8Y2lyY2xlIHRyYW5zZm9ybT0icm90YXRlKDEzNSkiIGN4PSItMjAuOTg4IiBjeT0iLTkzLjI0MyIgcj0iMjMuNjEyIi8+CiAgPGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiBjeD0iMi42MjM4IiBjeT0iLTY5LjYzMiIgcj0iMjMuNjEyIi8+CiAgPGNpcmNsZSBjeD0iOTEuMDYyIiBjeT0iNzEuMTYxIiByPSIyMy42MTIiLz4KICA8Y2lyY2xlIGN4PSIzNy4wOTMiIGN5PSI3MS4xNjEiIHI9IjIzLjYxMiIvPgogPC9nPgo8L3N2Zz4K';
5
- const LOGO_WIDTH_RATIO = 0.5;
6
- function defaultDraw(like, logo) {
7
- const size = like.gfx.getCanvasSize();
8
- const center = Vec2.mul(size, 0.5);
9
- const bottomY = size[1] * 0.85;
10
- like.gfx.clear('black');
11
- if (logo.isReady()) {
12
- const imgSize = logo.size;
13
- const scale = (size[0] * LOGO_WIDTH_RATIO) / imgSize[0];
14
- const drawSize = Vec2.mul(imgSize, scale);
15
- const rect = Rect.fromCenter(center, drawSize);
16
- like.gfx.draw(logo, Rect.position(rect), { scale: [scale, scale] });
17
- }
18
- like.gfx.print('white', 'Click to Start', [0, bottomY], {
19
- align: 'center',
20
- limit: size[0],
21
- font: '32px sans-serif'
22
- });
23
- }
24
- export class StartupScene {
25
- constructor(config, setScene) {
26
- Object.defineProperty(this, "config", {
27
- enumerable: true,
28
- configurable: true,
29
- writable: true,
30
- value: config
31
- });
32
- Object.defineProperty(this, "setScene", {
33
- enumerable: true,
34
- configurable: true,
35
- writable: true,
36
- value: setScene
37
- });
38
- Object.defineProperty(this, "started", {
39
- enumerable: true,
40
- configurable: true,
41
- writable: true,
42
- value: false
43
- });
44
- Object.defineProperty(this, "logo", {
45
- enumerable: true,
46
- configurable: true,
47
- writable: true,
48
- value: void 0
49
- });
50
- this.logo = config.logo ?? new ImageHandle(LOGO_DATA_URI);
51
- }
52
- draw(like) {
53
- (this.config.draw ?? defaultDraw)(like, this.logo);
54
- }
55
- mousepressed(_like, _x, _y, _button) {
56
- if (!this.started) {
57
- this.started = true;
58
- this.setScene(this.config.nextScene);
59
- }
60
- }
61
- }
@@ -1,5 +0,0 @@
1
- export declare const GAMEPAD_BUTTON_MAP: Record<string, number>;
2
- export declare const GAMEPAD_BUTTON_NAMES: Record<number, string>;
3
- export declare function getButtonName(buttonIndex: number): string;
4
- export declare function getButtonIndex(buttonName: string): number | undefined;
5
- //# sourceMappingURL=gamepad-button-map.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gamepad-button-map.d.ts","sourceRoot":"","sources":["../../src/core/gamepad-button-map.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiCrD,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiBvD,CAAC;AAEF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE"}
@@ -1,56 +0,0 @@
1
- // Button name to index mapping using physical layout
2
- export const GAMEPAD_BUTTON_MAP = {
3
- // Face buttons - physical positions (not labels)
4
- 'ButtonBottom': 0,
5
- 'ButtonRight': 1,
6
- 'ButtonLeft': 2,
7
- 'ButtonTop': 3,
8
- // Bumpers and triggers
9
- 'LB': 4,
10
- 'L1': 4,
11
- 'RB': 5,
12
- 'R1': 5,
13
- 'LT': 6,
14
- 'L2': 6,
15
- 'RT': 7,
16
- 'R2': 7,
17
- // Menu buttons
18
- 'Back': 8,
19
- 'Select': 8,
20
- 'Start': 9,
21
- // Stick presses
22
- 'LS': 10,
23
- 'L3': 10,
24
- 'RS': 11,
25
- 'R3': 11,
26
- // D-Pad
27
- 'DPadUp': 12,
28
- 'DPadDown': 13,
29
- 'DPadLeft': 14,
30
- 'DPadRight': 15,
31
- };
32
- // Reverse mapping: index to primary name
33
- export const GAMEPAD_BUTTON_NAMES = {
34
- 0: 'ButtonBottom',
35
- 1: 'ButtonRight',
36
- 2: 'ButtonLeft',
37
- 3: 'ButtonTop',
38
- 4: 'LB',
39
- 5: 'RB',
40
- 6: 'LT',
41
- 7: 'RT',
42
- 8: 'Back',
43
- 9: 'Start',
44
- 10: 'LS',
45
- 11: 'RS',
46
- 12: 'DPadUp',
47
- 13: 'DPadDown',
48
- 14: 'DPadLeft',
49
- 15: 'DPadRight',
50
- };
51
- export function getButtonName(buttonIndex) {
52
- return GAMEPAD_BUTTON_NAMES[buttonIndex] ?? `Button${buttonIndex}`;
53
- }
54
- export function getButtonIndex(buttonName) {
55
- return GAMEPAD_BUTTON_MAP[buttonName];
56
- }
@@ -1,49 +0,0 @@
1
- export interface ControllerMapping {
2
- guid: string;
3
- name: string;
4
- platform: string;
5
- buttons: Map<string, number>;
6
- axes: Map<string, number>;
7
- dpads: Map<string, {
8
- hat: number;
9
- value: number;
10
- }>;
11
- }
12
- export declare const SDL_BUTTONS: readonly ["a", "b", "x", "y", "back", "start", "guide", "leftshoulder", "rightshoulder", "lefttrigger", "righttrigger", "leftstick", "rightstick", "dpup", "dpdown", "dpleft", "dpright", "misc1", "misc2", "paddle1", "paddle2", "paddle3", "paddle4", "touchpad"];
13
- export type SDLButton = (typeof SDL_BUTTONS)[number];
14
- export declare const SDL_AXES: readonly ["leftx", "lefty", "rightx", "righty"];
15
- export type SDLAxis = (typeof SDL_AXES)[number];
16
- export declare class GamepadDatabase {
17
- private mappings;
18
- private vendorProductIndex;
19
- private loaded;
20
- load(dbContent: string): void;
21
- private extractVendorProductKey;
22
- /**
23
- * Check if the database has been loaded
24
- */
25
- isLoaded(): boolean;
26
- /**
27
- * Get the number of loaded mappings
28
- */
29
- getMappingCount(): number;
30
- /**
31
- * Look up a controller mapping by GUID
32
- */
33
- getMapping(guid: string): ControllerMapping | undefined;
34
- getMappingByVendorProduct(vendor: number, product: number): ControllerMapping | undefined;
35
- /**
36
- * Check if a controller is in the database
37
- */
38
- hasController(guid: string): boolean;
39
- /**
40
- * Get all mappings for a specific platform
41
- */
42
- getMappingsByPlatform(platform: string): ControllerMapping[];
43
- /**
44
- * Parse a single database line
45
- */
46
- private parseLine;
47
- }
48
- export declare const gamepadDatabase: GamepadDatabase;
49
- //# sourceMappingURL=gamepad-db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gamepad-db.d.ts","sourceRoot":"","sources":["../../src/core/gamepad-db.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAGD,eAAO,MAAM,WAAW,qQASd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAGrD,eAAO,MAAM,QAAQ,iDAGX,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,kBAAkB,CAAwC;IAClE,OAAO,CAAC,MAAM,CAAS;IAEvB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA0B7B,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIvD,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAKzF;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAa5D;;OAEG;IACH,OAAO,CAAC,SAAS;CAiFlB;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}