@certe/atmos-core 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.
Files changed (48) hide show
  1. package/LICENCE +674 -0
  2. package/README.md +171 -0
  3. package/dist/component-registry.d.ts +60 -0
  4. package/dist/component-registry.d.ts.map +1 -0
  5. package/dist/component-registry.js +14 -0
  6. package/dist/component-registry.js.map +1 -0
  7. package/dist/component.d.ts +19 -0
  8. package/dist/component.d.ts.map +1 -0
  9. package/dist/component.js +23 -0
  10. package/dist/component.js.map +1 -0
  11. package/dist/engine.d.ts +32 -0
  12. package/dist/engine.d.ts.map +1 -0
  13. package/dist/engine.js +75 -0
  14. package/dist/engine.js.map +1 -0
  15. package/dist/game-object.d.ts +23 -0
  16. package/dist/game-object.d.ts.map +1 -0
  17. package/dist/game-object.js +65 -0
  18. package/dist/game-object.js.map +1 -0
  19. package/dist/index.d.ts +15 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +11 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/input.d.ts +48 -0
  24. package/dist/input.d.ts.map +1 -0
  25. package/dist/input.js +102 -0
  26. package/dist/input.js.map +1 -0
  27. package/dist/register-builtins.d.ts +2 -0
  28. package/dist/register-builtins.d.ts.map +1 -0
  29. package/dist/register-builtins.js +13 -0
  30. package/dist/register-builtins.js.map +1 -0
  31. package/dist/scene-serializer.d.ts +46 -0
  32. package/dist/scene-serializer.d.ts.map +1 -0
  33. package/dist/scene-serializer.js +197 -0
  34. package/dist/scene-serializer.js.map +1 -0
  35. package/dist/scene.d.ts +38 -0
  36. package/dist/scene.d.ts.map +1 -0
  37. package/dist/scene.js +142 -0
  38. package/dist/scene.js.map +1 -0
  39. package/dist/time.d.ts +9 -0
  40. package/dist/time.d.ts.map +1 -0
  41. package/dist/time.js +24 -0
  42. package/dist/time.js.map +1 -0
  43. package/dist/transform.d.ts +27 -0
  44. package/dist/transform.d.ts.map +1 -0
  45. package/dist/transform.js +121 -0
  46. package/dist/transform.js.map +1 -0
  47. package/package.json +27 -0
  48. package/src/index.ts +33 -0
@@ -0,0 +1,27 @@
1
+ import type { Vec3Type, Mat4Type, QuatType } from '@certe/atmos-math';
2
+ export declare class Transform {
3
+ readonly position: Vec3Type;
4
+ readonly rotation: QuatType;
5
+ readonly scale: Vec3Type;
6
+ readonly localMatrix: Mat4Type;
7
+ readonly worldMatrix: Mat4Type;
8
+ private _dirty;
9
+ private _parent;
10
+ private readonly _children;
11
+ get parent(): Transform | null;
12
+ get children(): readonly Transform[];
13
+ setParent(parent: Transform | null): void;
14
+ setPosition(x: number, y: number, z: number): void;
15
+ setPositionFrom(v: ArrayLike<number>): void;
16
+ setPositionComponent(i: number, v: number): void;
17
+ setRotation(x: number, y: number, z: number, w: number): void;
18
+ setRotationFrom(q: ArrayLike<number>): void;
19
+ setScale(x: number, y: number, z: number): void;
20
+ setScaleFrom(v: ArrayLike<number>): void;
21
+ setScaleComponent(i: number, v: number): void;
22
+ private markDirty;
23
+ updateLocalMatrix(): void;
24
+ updateWorldMatrix(): void;
25
+ get isDirty(): boolean;
26
+ }
27
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEtE,qBAAa,SAAS;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAA4B;IACvD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAiB;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAA4B;IAEpD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAiB;IAC/C,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAiB;IAE/C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAE7C,IAAI,MAAM,IAAI,SAAS,GAAG,IAAI,CAE7B;IAED,IAAI,QAAQ,IAAI,SAAS,SAAS,EAAE,CAEnC;IAED,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAuBzC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlD,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IAK3C,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhD,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAK7D,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IAK3C,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAK/C,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IAKxC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAK7C,OAAO,CAAC,SAAS;IAcjB,iBAAiB,IAAI,IAAI;IAIzB,iBAAiB,IAAI,IAAI;IAazB,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
@@ -0,0 +1,121 @@
1
+ import { Vec3, Mat4, Quat } from '@certe/atmos-math';
2
+ export class Transform {
3
+ position = Vec3.fromValues(0, 0, 0);
4
+ rotation = Quat.create();
5
+ scale = Vec3.fromValues(1, 1, 1);
6
+ localMatrix = Mat4.create();
7
+ worldMatrix = Mat4.create();
8
+ _dirty = true;
9
+ _parent = null;
10
+ _children = [];
11
+ get parent() {
12
+ return this._parent;
13
+ }
14
+ get children() {
15
+ return this._children;
16
+ }
17
+ setParent(parent) {
18
+ if (this._parent === parent)
19
+ return;
20
+ if (this._parent) {
21
+ const idx = this._parent._children.indexOf(this);
22
+ if (idx !== -1)
23
+ this._parent._children.splice(idx, 1);
24
+ }
25
+ this._parent = parent;
26
+ if (parent) {
27
+ parent._children.push(this);
28
+ }
29
+ this.markDirty();
30
+ // If this node was already dirty (e.g. newly created), markDirty()
31
+ // short-circuits and won't propagate up to the new parent chain.
32
+ // Ensure the new parent chain is marked dirty so renderAll picks it up.
33
+ if (parent) {
34
+ let p = parent;
35
+ while (p && !p._dirty) {
36
+ p._dirty = true;
37
+ p = p._parent;
38
+ }
39
+ }
40
+ }
41
+ setPosition(x, y, z) {
42
+ this.position[0] = x;
43
+ this.position[1] = y;
44
+ this.position[2] = z;
45
+ this.markDirty();
46
+ }
47
+ setPositionFrom(v) {
48
+ this.position[0] = v[0];
49
+ this.position[1] = v[1];
50
+ this.position[2] = v[2];
51
+ this.markDirty();
52
+ }
53
+ setPositionComponent(i, v) {
54
+ this.position[i] = v;
55
+ this.markDirty();
56
+ }
57
+ setRotation(x, y, z, w) {
58
+ this.rotation[0] = x;
59
+ this.rotation[1] = y;
60
+ this.rotation[2] = z;
61
+ this.rotation[3] = w;
62
+ this.markDirty();
63
+ }
64
+ setRotationFrom(q) {
65
+ this.rotation[0] = q[0];
66
+ this.rotation[1] = q[1];
67
+ this.rotation[2] = q[2];
68
+ this.rotation[3] = q[3];
69
+ this.markDirty();
70
+ }
71
+ setScale(x, y, z) {
72
+ this.scale[0] = x;
73
+ this.scale[1] = y;
74
+ this.scale[2] = z;
75
+ this.markDirty();
76
+ }
77
+ setScaleFrom(v) {
78
+ this.scale[0] = v[0];
79
+ this.scale[1] = v[1];
80
+ this.scale[2] = v[2];
81
+ this.markDirty();
82
+ }
83
+ setScaleComponent(i, v) {
84
+ this.scale[i] = v;
85
+ this.markDirty();
86
+ }
87
+ markDirty() {
88
+ if (this._dirty)
89
+ return;
90
+ this._dirty = true;
91
+ for (const child of this._children) {
92
+ child.markDirty();
93
+ }
94
+ // Propagate up so renderAll's isDirty check on roots works
95
+ let p = this._parent;
96
+ while (p && !p._dirty) {
97
+ p._dirty = true;
98
+ p = p._parent;
99
+ }
100
+ }
101
+ updateLocalMatrix() {
102
+ Mat4.fromRotationTranslationScale(this.localMatrix, this.rotation, this.position, this.scale);
103
+ }
104
+ updateWorldMatrix() {
105
+ this.updateLocalMatrix();
106
+ if (this._parent) {
107
+ Mat4.multiply(this.worldMatrix, this._parent.worldMatrix, this.localMatrix);
108
+ }
109
+ else {
110
+ this.worldMatrix.set(this.localMatrix);
111
+ }
112
+ this._dirty = false;
113
+ for (const child of this._children) {
114
+ child.updateWorldMatrix();
115
+ }
116
+ }
117
+ get isDirty() {
118
+ return this._dirty;
119
+ }
120
+ }
121
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@certe/atmos-core",
3
+ "description": "Component model, scene graph, game loop, and serialization for the Atmos Engine",
4
+ "version": "0.1.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/certesolutions-cyber/atmos.git",
8
+ "directory": "packages/core"
9
+ },
10
+ "homepage": "https://github.com/certesolutions-cyber/atmos",
11
+ "license": "GPL-3.0-or-later",
12
+ "keywords": ["ecs", "game-engine", "component", "scene-graph", "gameobject", "atmos"],
13
+ "type": "module",
14
+ "main": "src/index.ts",
15
+ "types": "src/index.ts",
16
+ "publishConfig": {
17
+ "main": "dist/index.js",
18
+ "types": "dist/index.d.ts"
19
+ },
20
+ "files": ["dist", "!dist/__tests__", "package.json", "README.md", "LICENCE"],
21
+ "dependencies": {
22
+ "@certe/atmos-math": "^0.1.0"
23
+ },
24
+ "scripts": {
25
+ "test": "vitest run"
26
+ }
27
+ }
package/src/index.ts ADDED
@@ -0,0 +1,33 @@
1
+ export { Component } from './component.js';
2
+ export { GameObject, resetGameObjectIds } from './game-object.js';
3
+ export { Transform } from './transform.js';
4
+ export { Scene } from './scene.js';
5
+ export type { SceneLoader } from './scene.js';
6
+ export { Time } from './time.js';
7
+ export { Input } from './input.js';
8
+ export { Engine } from './engine.js';
9
+ export type { Renderer, PhysicsStepper } from './engine.js';
10
+ export {
11
+ registerComponent,
12
+ getComponentDef,
13
+ getAllRegisteredComponents,
14
+ clearRegistry,
15
+ } from './component-registry.js';
16
+ export type {
17
+ PropertyDef,
18
+ PropertyDefBase,
19
+ PropertyType,
20
+ ComponentDef,
21
+ NumberPropertyDef,
22
+ Vec3PropertyDef,
23
+ QuatPropertyDef,
24
+ ColorPropertyDef,
25
+ EnumPropertyDef,
26
+ StringPropertyDef,
27
+ BooleanPropertyDef,
28
+ GameObjectRefPropertyDef,
29
+ MaterialAssetPropertyDef,
30
+ } from './component-registry.js';
31
+ export { registerCoreBuiltins } from './register-builtins.js';
32
+ export { serializeScene, deserializeScene, applyComponentData, serializePostProcess, applyPostProcess } from './scene-serializer.js';
33
+ export type { SceneData, GameObjectData, ComponentData, DeserializeContext, PostProcessData } from './scene-serializer.js';