@benjos/create-boilerplate 1.5.1 → 1.5.6

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 (147) hide show
  1. package/README.md +0 -4
  2. package/dist/constants.d.ts +8 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +18 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/constants.test.d.ts +2 -0
  7. package/dist/constants.test.d.ts.map +1 -0
  8. package/dist/constants.test.js +30 -0
  9. package/dist/constants.test.js.map +1 -0
  10. package/dist/createProject.d.ts +2 -0
  11. package/dist/createProject.d.ts.map +1 -0
  12. package/dist/createProject.js +52 -0
  13. package/dist/createProject.js.map +1 -0
  14. package/dist/createProject.test.d.ts +2 -0
  15. package/dist/createProject.test.d.ts.map +1 -0
  16. package/dist/createProject.test.js +85 -0
  17. package/dist/createProject.test.js.map +1 -0
  18. package/dist/index.js +16 -69
  19. package/dist/index.js.map +1 -1
  20. package/dist/prompts.d.ts +4 -0
  21. package/dist/prompts.d.ts.map +1 -0
  22. package/dist/prompts.js +26 -0
  23. package/dist/prompts.js.map +1 -0
  24. package/dist/prompts.test.d.ts +2 -0
  25. package/dist/prompts.test.d.ts.map +1 -0
  26. package/dist/prompts.test.js +50 -0
  27. package/dist/prompts.test.js.map +1 -0
  28. package/dist/types.d.ts +13 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +7 -0
  31. package/dist/types.js.map +1 -0
  32. package/package.json +10 -8
  33. package/template-vanilla/package-lock.json +1000 -1476
  34. package/template-vanilla/package.json +11 -11
  35. package/template-vanilla/src/experiences/Experience.ts +1 -1
  36. package/template-vanilla/src/experiences/constants/experiences/ViewId.ts +2 -7
  37. package/template-vanilla/src/experiences/engines/threes/app/MainThreeApp.ts +8 -5
  38. package/template-vanilla/src/experiences/managers/LoaderManager.ts +4 -5
  39. package/template-vanilla/src/experiences/materials/threes/loaders/LoaderMaterial.ts +8 -5
  40. package/template-vanilla/src/experiences/views/threes/bases/ThreeViewBase.ts +1 -1
  41. package/template-vanilla/src/experiences/views/threes/{worlds/components/actors/bases → bases/components}/ThreeAnimatedModelBase.ts +3 -3
  42. package/template-vanilla/src/experiences/views/threes/{worlds/components/actors/bases → bases/components}/ThreeModelBase.ts +3 -3
  43. package/template-vanilla/src/experiences/views/threes/loaders/components/TemplateLoaderThreeActor.ts +1 -1
  44. package/template-vanilla/src/experiences/views/threes/worlds/World2ThreeView.ts +5 -5
  45. package/template-vanilla/src/experiences/views/threes/worlds/WorldThreeView.ts +5 -5
  46. package/template-vanilla/src/experiences/views/threes/worlds/components/Environment.ts +1 -1
  47. package/template-vanilla/src/experiences/views/threes/worlds/components/{actors/TemplateFont.ts → TemplateFont.ts} +3 -3
  48. package/template-vanilla/src/experiences/views/threes/worlds/components/{actors/TemplateMesh.ts → TemplateMesh.ts} +3 -3
  49. package/template-vanilla/src/experiences/views/threes/worlds/components/{actors/TemplateMesh2.ts → TemplateMesh2.ts} +3 -3
  50. package/template-vanilla/src/experiences/views/threes/worlds/components/{actors/TemplateModel.ts → TemplateModel.ts} +4 -4
  51. package/template-vanilla/tsconfig.json +3 -3
  52. package/template-vue/eslint.config.js +130 -0
  53. package/template-vue/index.html +17 -0
  54. package/{template-react → template-vue}/package-lock.json +1260 -2121
  55. package/template-vue/package.json +43 -0
  56. package/template-vue/readme.md +34 -0
  57. package/template-vue/src/experiences/Experience.ts +27 -0
  58. package/template-vue/src/experiences/cameras/threes/DebugThreeCameraController.ts +55 -0
  59. package/template-vue/src/experiences/cameras/threes/LoaderThreeCameraController.ts +25 -0
  60. package/template-vue/src/experiences/cameras/threes/MainThreeCameraController.ts +24 -0
  61. package/template-vue/src/experiences/cameras/threes/bases/ThreeCameraControllerBase.ts +90 -0
  62. package/template-vue/src/experiences/commands/InitCommand.ts +50 -0
  63. package/template-vue/src/experiences/constants/experiences/AnimationId.ts +3 -0
  64. package/template-vue/src/experiences/constants/experiences/AssetId.ts +8 -0
  65. package/template-vue/src/experiences/constants/experiences/CameraId.ts +7 -0
  66. package/template-vue/src/experiences/constants/experiences/DebugGuiTitle.ts +6 -0
  67. package/template-vue/src/experiences/constants/experiences/Object3dId.ts +3 -0
  68. package/template-vue/src/experiences/constants/experiences/ViewId.ts +11 -0
  69. package/template-vue/src/experiences/constants/experiences/ViewType.ts +6 -0
  70. package/template-vue/src/experiences/engines/threes/MainThree.ts +11 -0
  71. package/template-vue/src/experiences/engines/threes/app/LoaderThreeApp.ts +49 -0
  72. package/template-vue/src/experiences/engines/threes/app/MainThreeApp.ts +112 -0
  73. package/template-vue/src/experiences/engines/threes/app/bases/ThreeAppBase.ts +128 -0
  74. package/template-vue/src/experiences/engines/vues/MainVue.vue +9 -0
  75. package/template-vue/src/experiences/managers/DebugManager.ts +87 -0
  76. package/template-vue/src/experiences/managers/LoaderManager.ts +176 -0
  77. package/template-vue/src/experiences/managers/threes/ThreeAssetsManager.ts +263 -0
  78. package/template-vue/src/experiences/managers/threes/ThreeCameraControllerManager.ts +46 -0
  79. package/template-vue/src/experiences/managers/threes/ThreeRaycasterManager.ts +21 -0
  80. package/template-vue/src/experiences/materials/threes/loaders/LoaderMaterial.ts +47 -0
  81. package/template-vue/src/experiences/renderers/threes/LoaderRenderer.ts +18 -0
  82. package/template-vue/src/experiences/renderers/threes/Renderer.ts +71 -0
  83. package/template-vue/src/experiences/renderers/threes/bases/WebGLRendererBase.ts +29 -0
  84. package/template-vue/src/experiences/shaders/threes/loaders/LoaderFragmentShader.glsl +8 -0
  85. package/template-vue/src/experiences/shaders/threes/loaders/LoaderVertexShader.glsl +3 -0
  86. package/template-vue/src/experiences/styles/abstracts/_import.scss +5 -0
  87. package/template-vue/src/experiences/styles/abstracts/functions.scss +3 -0
  88. package/template-vue/src/experiences/styles/abstracts/variables.scss +7 -0
  89. package/template-vue/src/experiences/styles/commons/fonts.scss +10 -0
  90. package/template-vue/src/experiences/styles/commons/main.scss +59 -0
  91. package/template-vue/src/experiences/styles/commons/texts.scss +1 -0
  92. package/template-vue/src/experiences/styles/style.scss +7 -0
  93. package/template-vue/src/experiences/styles/views/loader.scss +70 -0
  94. package/template-vue/src/experiences/types/assetTypes.ts +8 -0
  95. package/template-vue/src/experiences/types/cameraTypes.ts +37 -0
  96. package/template-vue/src/experiences/types/global.d.ts +9 -0
  97. package/template-vue/src/experiences/types/shaders.d.ts +4 -0
  98. package/template-vue/src/experiences/views/threes/bases/ThreeViewBase.ts +49 -0
  99. package/template-vue/src/experiences/views/threes/bases/components/ThreeActorBase.ts +44 -0
  100. package/template-vue/src/experiences/views/threes/bases/components/ThreeAnimatedModelBase.ts +63 -0
  101. package/template-vue/src/experiences/views/threes/bases/components/ThreeModelBase.ts +48 -0
  102. package/template-vue/src/experiences/views/threes/loaders/LoaderThreeView.ts +28 -0
  103. package/template-vue/src/experiences/views/threes/loaders/components/TemplateLoaderThreeActor.ts +49 -0
  104. package/template-vue/src/experiences/views/threes/worlds/World2ThreeView.ts +35 -0
  105. package/template-vue/src/experiences/views/threes/worlds/WorldThreeView.ts +35 -0
  106. package/template-vue/src/experiences/views/threes/worlds/components/Environment.ts +89 -0
  107. package/template-vue/src/experiences/views/threes/worlds/components/TemplateFont.ts +58 -0
  108. package/template-vue/src/experiences/views/threes/worlds/components/TemplateMesh.ts +65 -0
  109. package/template-vue/src/experiences/views/threes/worlds/components/TemplateMesh2.ts +71 -0
  110. package/template-vue/src/experiences/views/threes/worlds/components/TemplateModel.ts +33 -0
  111. package/template-vue/src/experiences/views/vues/LoaderView.vue +55 -0
  112. package/template-vue/src/main.ts +7 -0
  113. package/template-vue/tsconfig.app.json +8 -0
  114. package/template-vue/tsconfig.json +7 -0
  115. package/template-vue/tsconfig.node.json +16 -0
  116. package/template-vue/vite.config.ts +16 -0
  117. package/template-react/eslint.config.js +0 -23
  118. package/template-react/index.html +0 -17
  119. package/template-react/package.json +0 -46
  120. package/template-react/readme.md +0 -31
  121. package/template-react/src/App.css +0 -42
  122. package/template-react/src/App.tsx +0 -10
  123. package/template-react/src/index.css +0 -68
  124. package/template-react/src/main.tsx +0 -10
  125. package/template-react/tsconfig.app.json +0 -34
  126. package/template-react/tsconfig.json +0 -7
  127. package/template-react/tsconfig.node.json +0 -26
  128. package/template-react/vite.config.ts +0 -29
  129. /package/template-vanilla/src/experiences/views/threes/{worlds/components/actors/bases → bases/components}/ThreeActorBase.ts +0 -0
  130. /package/{template-react → template-vue}/.prettierignore +0 -0
  131. /package/{template-react → template-vue}/.prettierrc +0 -0
  132. /package/{template-react → template-vue}/public/assets/fonts/LICENSE +0 -0
  133. /package/{template-react → template-vue}/public/assets/fonts/template.typeface.json +0 -0
  134. /package/{template-react → template-vue}/public/assets/hdrs/template.hdr +0 -0
  135. /package/{template-react → template-vue}/public/assets/icons/benjosLogoBlack.svg +0 -0
  136. /package/{template-react → template-vue}/public/assets/loaders/draco/README.md +0 -0
  137. /package/{template-react → template-vue}/public/assets/loaders/draco/draco_decoder.js +0 -0
  138. /package/{template-react → template-vue}/public/assets/loaders/draco/draco_decoder.wasm +0 -0
  139. /package/{template-react → template-vue}/public/assets/loaders/draco/draco_encoder.js +0 -0
  140. /package/{template-react → template-vue}/public/assets/loaders/draco/draco_wasm_wrapper.js +0 -0
  141. /package/{template-react → template-vue}/public/assets/loaders/draco/gltf/draco_decoder.js +0 -0
  142. /package/{template-react → template-vue}/public/assets/loaders/draco/gltf/draco_decoder.wasm +0 -0
  143. /package/{template-react → template-vue}/public/assets/loaders/draco/gltf/draco_encoder.js +0 -0
  144. /package/{template-react → template-vue}/public/assets/loaders/draco/gltf/draco_wasm_wrapper.js +0 -0
  145. /package/{template-react → template-vue}/public/assets/models/template.glb +0 -0
  146. /package/{template-react → template-vue}/public/assets/textures/template.jpg +0 -0
  147. /package/{template-react/assets_source/.gitkeep → template-vue/src/experiences/styles/abstracts/mixins.scss} +0 -0
@@ -0,0 +1,48 @@
1
+ import { Mesh, Object3D, type Group } from 'three';
2
+ import { SkeletonUtils } from 'three/examples/jsm/Addons.js';
3
+ import type { AssetId } from '../../../../constants/experiences/AssetId';
4
+ import type { Object3DId } from '../../../../constants/experiences/Object3dId';
5
+ import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
6
+ import ThreeActorBase from './ThreeActorBase';
7
+
8
+ export interface ModelBaseParams {
9
+ object3DId?: Object3DId;
10
+ castShadow?: boolean;
11
+ receiveShadow?: boolean;
12
+ }
13
+
14
+ export default abstract class ThreeModelBase extends ThreeActorBase {
15
+ protected _assetId: AssetId;
16
+ protected _parameters: ModelBaseParams;
17
+ declare protected _model: Group | Object3D | Mesh;
18
+
19
+ constructor(assetId: AssetId, params: ModelBaseParams = {}) {
20
+ super();
21
+ this._assetId = assetId;
22
+ this._parameters = params || {};
23
+
24
+ this._generateModel();
25
+ }
26
+
27
+ protected _generateModel(): void {
28
+ const originalModel = ThreeAssetsManager.getModel(this._assetId).scene;
29
+ const model = SkeletonUtils.clone(originalModel);
30
+
31
+ this._model = this._parameters.object3DId
32
+ ? (model.getObjectByName(this._parameters.object3DId) ?? model)
33
+ : model;
34
+
35
+ this._model.traverse((child) => {
36
+ if (child instanceof Mesh) {
37
+ if (this._parameters.castShadow) child.castShadow = true;
38
+ if (this._parameters.receiveShadow) child.receiveShadow = true;
39
+ }
40
+ });
41
+
42
+ this.add(this._model);
43
+ }
44
+
45
+ public update(dt: number): void {
46
+ super.update(dt);
47
+ }
48
+ }
@@ -0,0 +1,28 @@
1
+ import { ViewId } from '../../../constants/experiences/ViewId';
2
+ import ThreeViewBase from '../bases/ThreeViewBase';
3
+ import TemplateLoaderThreeActor from './components/TemplateLoaderThreeActor';
4
+
5
+ export default class LoaderThreeView extends ThreeViewBase {
6
+ declare private _threeLoader: TemplateLoaderThreeActor;
7
+
8
+ constructor() {
9
+ super(ViewId.THREE_LOADER);
10
+ this._generateActors();
11
+ }
12
+
13
+ protected override _generateActors(): void {
14
+ super._generateActors();
15
+ this._threeLoader = new TemplateLoaderThreeActor();
16
+ this._actors.push(this._threeLoader);
17
+
18
+ for (const actor of this._actors) this.add(actor);
19
+ }
20
+
21
+ public readonly show = (): Promise<void> => {
22
+ return this._threeLoader.material.show();
23
+ };
24
+
25
+ public readonly hide = (): Promise<void> => {
26
+ return this._threeLoader.material.hide();
27
+ };
28
+ }
@@ -0,0 +1,49 @@
1
+ import { Mesh, PlaneGeometry } from 'three';
2
+ import LoaderMaterial from '../../../../materials/threes/loaders/LoaderMaterial';
3
+ import ThreeActorBase from '../../bases/components/ThreeActorBase';
4
+
5
+ export default class TemplateLoaderThreeActor extends ThreeActorBase {
6
+ private static readonly _DEFAULT_SIZE_WIDTH: number = 2;
7
+ private static readonly _DEFAULT_SIZE_HEIGHT: number = 2;
8
+ private static readonly _DEFAULT_SEGMENTS_WIDTH: number = 1;
9
+ private static readonly _DEFAULT_SEGMENTS_HEIGHT: number = 1;
10
+
11
+ declare private _geometry: PlaneGeometry;
12
+ declare private _material: LoaderMaterial;
13
+ declare private _mesh: Mesh;
14
+
15
+ constructor() {
16
+ super();
17
+
18
+ this._generateGeometry();
19
+ this._generateMaterial();
20
+ this._generateMesh();
21
+
22
+ this.add(this._mesh);
23
+ }
24
+
25
+ private _generateGeometry(): void {
26
+ this._geometry = new PlaneGeometry(
27
+ TemplateLoaderThreeActor._DEFAULT_SIZE_WIDTH,
28
+ TemplateLoaderThreeActor._DEFAULT_SIZE_HEIGHT,
29
+ TemplateLoaderThreeActor._DEFAULT_SEGMENTS_WIDTH,
30
+ TemplateLoaderThreeActor._DEFAULT_SEGMENTS_HEIGHT
31
+ );
32
+ }
33
+
34
+ private _generateMaterial(): void {
35
+ this._material = new LoaderMaterial();
36
+ }
37
+
38
+ private _generateMesh(): void {
39
+ this._mesh = new Mesh(this._geometry, this._material);
40
+ }
41
+
42
+ //#region Getters
43
+ //
44
+ public get material(): LoaderMaterial {
45
+ return this._material;
46
+ }
47
+ //
48
+ //#endregion
49
+ }
@@ -0,0 +1,35 @@
1
+ import { DebugGuiTitle } from '../../../constants/experiences/DebugGuiTitle';
2
+ import { ViewId } from '../../../constants/experiences/ViewId';
3
+ import MainThreeApp from '../../../engines/threes/app/MainThreeApp';
4
+ import DebugManager from '../../../managers/DebugManager';
5
+ import ThreeViewBase from '../bases/ThreeViewBase';
6
+ import Environment from './components/Environment';
7
+ import TemplateFont from './components/TemplateFont';
8
+ import TemplateMesh2 from './components/TemplateMesh2';
9
+ import TemplateModel from './components/TemplateModel';
10
+
11
+ export default class World2ThreeView extends ThreeViewBase {
12
+ constructor() {
13
+ super(ViewId.THREE_WORLD_2);
14
+ }
15
+
16
+ protected override _generateActors(): void {
17
+ super._generateActors();
18
+
19
+ if (DebugManager.isActive) {
20
+ const viewsDebug = DebugManager.getGuiFolder(DebugGuiTitle.THREE_VIEWS)
21
+ viewsDebug.add({ switchToWorld2ThreeView: () => MainThreeApp.setCurrentView(ViewId.THREE_WORLD_2) }, 'switchToWorld2ThreeView').name('SWITCH WORLD_2_VIEW');
22
+ }
23
+
24
+ this._actors.push(new Environment());
25
+ this._actors.push(new TemplateMesh2());
26
+ this._actors.push(new TemplateModel());
27
+ this._actors.push(new TemplateFont());
28
+
29
+ for (const actor of this._actors) this.add(actor);
30
+ }
31
+
32
+ public override update(dt: number): void {
33
+ for (const actor of this._actors) actor.update(dt);
34
+ }
35
+ }
@@ -0,0 +1,35 @@
1
+ import { DebugGuiTitle } from '../../../constants/experiences/DebugGuiTitle';
2
+ import { ViewId } from '../../../constants/experiences/ViewId';
3
+ import MainThreeApp from '../../../engines/threes/app/MainThreeApp';
4
+ import DebugManager from '../../../managers/DebugManager';
5
+ import ThreeViewBase from '../bases/ThreeViewBase';
6
+ import Environment from './components/Environment';
7
+ import TemplateFont from './components/TemplateFont';
8
+ import TemplateMesh from './components/TemplateMesh';
9
+ import TemplateModel from './components/TemplateModel';
10
+
11
+ export default class WorldThreeView extends ThreeViewBase {
12
+ constructor() {
13
+ super(ViewId.THREE_WORLD_1);
14
+ }
15
+
16
+ protected override _generateActors(): void {
17
+ super._generateActors();
18
+
19
+ if (DebugManager.isActive) {
20
+ const viewsDebug = DebugManager.getGuiFolder(DebugGuiTitle.THREE_VIEWS)
21
+ viewsDebug.add({ switchToWorldThreeView: () => MainThreeApp.setCurrentView(ViewId.THREE_WORLD_1) }, 'switchToWorldThreeView').name('SWITCH WORLD_1_VIEW');
22
+ }
23
+
24
+ this._actors.push(new Environment());
25
+ this._actors.push(new TemplateMesh());
26
+ this._actors.push(new TemplateModel());
27
+ this._actors.push(new TemplateFont());
28
+
29
+ for (const actor of this._actors) this.add(actor);
30
+ }
31
+
32
+ public override update(dt: number): void {
33
+ for (const actor of this._actors) actor.update(dt);
34
+ }
35
+ }
@@ -0,0 +1,89 @@
1
+ import { DataTexture, DirectionalLight, Vector3 } from 'three';
2
+ import { AssetId } from '../../../../constants/experiences/AssetId';
3
+ import { DebugGuiTitle } from '../../../../constants/experiences/DebugGuiTitle';
4
+ import MainThreeApp from '../../../../engines/threes/app/MainThreeApp';
5
+ import DebugManager from '../../../../managers/DebugManager';
6
+ import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
7
+ import ThreeActorBase from '../../bases/components/ThreeActorBase';
8
+
9
+ interface EnvironmentMap {
10
+ intensity?: number;
11
+ texture?: DataTexture;
12
+ }
13
+
14
+ export default class Environment extends ThreeActorBase {
15
+ private static readonly _DEFAULT_ENVIRONMENT_MAP_INTENSITY: number = 1;
16
+ private static readonly _DEFAULT_SUN_LIGHT_COLOR: number = 0xffffff;
17
+ private static readonly _DEFAULT_SUN_LIGHT_INTENSITY: number = 10;
18
+ private static readonly _DEFAULT_SUN_SHADOW_CAMERA_FAR: number = 15;
19
+ private static readonly _DEFAULT_SUN_SHADOW_MAP_SIZE: number = 1024;
20
+ private static readonly _DEFAULT_SUN_SHADOW_NORMAL_BIAS: number = 0.05;
21
+ private static readonly _DEFAULT_SUN_POSITION: Vector3 = new Vector3(0, 2, 1);
22
+
23
+ declare private _environmentMap: EnvironmentMap;
24
+ declare private _sunLight: DirectionalLight;
25
+
26
+ constructor() {
27
+ super();
28
+
29
+ this._generateEnvironmentMap();
30
+ this._generateSunLight();
31
+ }
32
+
33
+ public init(): void {
34
+ this.reset();
35
+ if (this._environmentMap) {
36
+ MainThreeApp.scene.environment = this._environmentMap.texture!;
37
+ MainThreeApp.scene.environmentIntensity = this._environmentMap.intensity!;
38
+ }
39
+ }
40
+
41
+ public reset(): void {
42
+ //
43
+ }
44
+
45
+ private _generateEnvironmentMap = (): void => {
46
+ this._environmentMap = {};
47
+ this._environmentMap.intensity = Environment._DEFAULT_ENVIRONMENT_MAP_INTENSITY;
48
+ this._environmentMap.texture = ThreeAssetsManager.getHDR(AssetId.THREE_HDR_TEMPLATE);
49
+ this._environmentMap.texture.needsUpdate = true;
50
+
51
+ MainThreeApp.scene.environment = this._environmentMap.texture;
52
+ MainThreeApp.scene.environmentIntensity = this._environmentMap.intensity!;
53
+
54
+ if (DebugManager.isActive) {
55
+ const viewsDebug = DebugManager.getGuiFolder(DebugGuiTitle.THREE_VIEWS)
56
+ const environmentFolder = viewsDebug.addFolder('Environment');
57
+ environmentFolder.add(this._environmentMap, 'intensity', 0, 10, 0.01).onChange(() => {
58
+ MainThreeApp.scene.environmentIntensity = this._environmentMap.intensity!;
59
+ });
60
+ }
61
+ };
62
+
63
+ private _generateSunLight(): void {
64
+ this._sunLight = new DirectionalLight(
65
+ Environment._DEFAULT_SUN_LIGHT_COLOR,
66
+ Environment._DEFAULT_SUN_LIGHT_INTENSITY
67
+ );
68
+ this._sunLight.castShadow = true;
69
+ this._sunLight.shadow.camera.far = Environment._DEFAULT_SUN_SHADOW_CAMERA_FAR;
70
+ this._sunLight.shadow.mapSize.set(
71
+ Environment._DEFAULT_SUN_SHADOW_MAP_SIZE,
72
+ Environment._DEFAULT_SUN_SHADOW_MAP_SIZE
73
+ );
74
+ this._sunLight.shadow.normalBias = Environment._DEFAULT_SUN_SHADOW_NORMAL_BIAS;
75
+ this._sunLight.position.copy(Environment._DEFAULT_SUN_POSITION);
76
+ this.add(this._sunLight);
77
+
78
+ if (DebugManager.isActive) {
79
+ const viewsDebug = DebugManager.getGuiFolder(DebugGuiTitle.THREE_VIEWS)
80
+ const sunLightFolder = viewsDebug.addFolder('Sun Light');
81
+ sunLightFolder.add(this._sunLight, 'intensity', 0, 10, 0.01).name('intensity');
82
+ sunLightFolder.add(this._sunLight.position, 'x', -5, 5, 0.01).name('positionX');
83
+ sunLightFolder.add(this._sunLight.position, 'y', -5, 5, 0.01).name('positionY');
84
+ sunLightFolder.add(this._sunLight.position, 'z', -5, 5, 0.01).name('positionZ');
85
+ }
86
+ }
87
+
88
+ public update(_dt: number): void { }
89
+ }
@@ -0,0 +1,58 @@
1
+ import { Mesh, MeshStandardMaterial, type MeshStandardMaterialParameters } from 'three';
2
+ import { TextGeometry, type TextGeometryParameters } from 'three/examples/jsm/Addons.js';
3
+ import { AssetId } from '../../../../constants/experiences/AssetId';
4
+ import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
5
+ import ThreeActorBase from '../../bases/components/ThreeActorBase';
6
+
7
+ export default class TemplateFont extends ThreeActorBase {
8
+ private static readonly _DEFAULT_TEXT: string = 'Hello boilerplate!';
9
+ private static readonly _DEFAULT_TEXT_OPTION: TextGeometryParameters = {
10
+ font: null!,
11
+ size: 0.25,
12
+ depth: 0.01,
13
+ curveSegments: 5,
14
+ bevelEnabled: true,
15
+ bevelThickness: 0.03,
16
+ bevelSize: 0.02,
17
+ bevelOffset: 0,
18
+ bevelSegments: 4,
19
+ };
20
+ private static readonly _DEFAULT_MATERIAL_OPTION: MeshStandardMaterialParameters = {
21
+ color: 0xffffff,
22
+ metalness: 0.7,
23
+ roughness: 0.2,
24
+ envMapIntensity: 0,
25
+ };
26
+ private static readonly _DEFAULT_MESH_POSITION_Y = 3;
27
+
28
+ declare private _geometry: TextGeometry;
29
+ declare private _material: MeshStandardMaterial;
30
+ declare private _mesh: Mesh;
31
+
32
+ constructor() {
33
+ super();
34
+
35
+ this._generateGeometry();
36
+ this._generateMaterial();
37
+ this._generateMesh();
38
+ }
39
+
40
+ private _generateGeometry(): void {
41
+ this._geometry = new TextGeometry(TemplateFont._DEFAULT_TEXT, {
42
+ ...TemplateFont._DEFAULT_TEXT_OPTION,
43
+ font: ThreeAssetsManager.getFont(AssetId.THREE_FONT_TEMPLATE),
44
+ });
45
+ this._geometry.center();
46
+ }
47
+
48
+ private _generateMaterial(): void {
49
+ this._material = new MeshStandardMaterial(TemplateFont._DEFAULT_MATERIAL_OPTION);
50
+ }
51
+
52
+ private _generateMesh(): void {
53
+ this._mesh = new Mesh(this._geometry, this._material);
54
+ this._mesh.position.y = TemplateFont._DEFAULT_MESH_POSITION_Y;
55
+
56
+ this.add(this._mesh);
57
+ }
58
+ }
@@ -0,0 +1,65 @@
1
+ import { Mesh, MeshStandardMaterial, RepeatWrapping, SphereGeometry, type MeshStandardMaterialParameters } from 'three';
2
+ import { AssetId } from '../../../../constants/experiences/AssetId';
3
+ import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
4
+ import ThreeActorBase from '../../bases/components/ThreeActorBase';
5
+
6
+ export default class TemplateMesh extends ThreeActorBase {
7
+ private static readonly _DEFAULT_GEOMETRY_RADIUS = 1;
8
+ private static readonly _DEFAULT_GEOMETRY_WIDTH_SEGMENTS = 64;
9
+ private static readonly _DEFAULT_GEOMETRY_HEIGHT_SEGMENTS = 64;
10
+ private static readonly _DEFAULT_MATERIAL_REPEAT = 1.5;
11
+ private static readonly _DEFAULT_MATERIAL_OPTIONS: MeshStandardMaterialParameters = {
12
+ color: 0xffffff,
13
+ metalness: 0.7,
14
+ roughness: 0.2,
15
+ envMapIntensity: 0,
16
+ };
17
+ private static readonly _MESH_ROTATION_Y = 0.25;
18
+
19
+ declare private _geometry: SphereGeometry;
20
+ declare private _material: MeshStandardMaterial;
21
+ declare private _mesh: Mesh;
22
+
23
+ constructor() {
24
+ super();
25
+
26
+ this._generateGeometry();
27
+ this._generateMaterial();
28
+ this._generateMesh();
29
+ }
30
+
31
+ private _generateGeometry(): void {
32
+ this._geometry = new SphereGeometry(
33
+ TemplateMesh._DEFAULT_GEOMETRY_RADIUS,
34
+ TemplateMesh._DEFAULT_GEOMETRY_WIDTH_SEGMENTS,
35
+ TemplateMesh._DEFAULT_GEOMETRY_HEIGHT_SEGMENTS
36
+ );
37
+ }
38
+
39
+ private _generateMaterial(): void {
40
+ const normalMat = ThreeAssetsManager.getTexture(AssetId.THREE_TEXTURE_TEMPLATE);
41
+ normalMat.repeat.set(TemplateMesh._DEFAULT_MATERIAL_REPEAT, TemplateMesh._DEFAULT_MATERIAL_REPEAT);
42
+ normalMat.wrapS = normalMat.wrapT = RepeatWrapping;
43
+
44
+ this._material = new MeshStandardMaterial({
45
+ ...TemplateMesh._DEFAULT_MATERIAL_OPTIONS,
46
+ normalMap: normalMat,
47
+ });
48
+ }
49
+
50
+ private _generateMesh(): void {
51
+ this._mesh = new Mesh(this._geometry, this._material);
52
+ this._mesh.castShadow = true;
53
+ this._mesh.receiveShadow = true;
54
+ this.add(this._mesh);
55
+ }
56
+
57
+ public override reset(): void {
58
+ this._mesh.rotation.y = 0;
59
+ }
60
+
61
+ public update(dt: number): void {
62
+ super.update(dt);
63
+ this._mesh.rotation.y += dt * TemplateMesh._MESH_ROTATION_Y;
64
+ }
65
+ }
@@ -0,0 +1,71 @@
1
+ import { BoxGeometry, Mesh, MeshStandardMaterial, RepeatWrapping, type MeshStandardMaterialParameters } from 'three';
2
+ import { AssetId } from '../../../../constants/experiences/AssetId';
3
+ import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
4
+ import ThreeActorBase from '../../bases/components/ThreeActorBase';
5
+
6
+ export default class TemplateMesh2 extends ThreeActorBase {
7
+ private static readonly _DEFAULT_GEOMETRY_WIDTH = 2;
8
+ private static readonly _DEFAULT_GEOMETRY_HEIGHT = 2;
9
+ private static readonly _DEFAULT_GEOMETRY_DEPTH = 2;
10
+ private static readonly _DEFAULT_GEOMETRY_WIDTH_SEGMENTS = 1;
11
+ private static readonly _DEFAULT_GEOMETRY_HEIGHT_SEGMENTS = 1;
12
+ private static readonly _DEFAULT_GEOMETRY_DEPTH_SEGMENTS = 1;
13
+ private static readonly _DEFAULT_MATERIAL_REPEAT = 1.5;
14
+ private static readonly _DEFAULT_MATERIAL_OPTIONS: MeshStandardMaterialParameters = {
15
+ color: 0xffffff,
16
+ metalness: 0.7,
17
+ roughness: 0.2,
18
+ envMapIntensity: 0,
19
+ };
20
+ private static readonly _MESH_ROTATION_Y = 0.25;
21
+
22
+ declare private _geometry: BoxGeometry;
23
+ declare private _material: MeshStandardMaterial;
24
+ declare private _mesh: Mesh;
25
+
26
+ constructor() {
27
+ super();
28
+
29
+ this._generateGeometry();
30
+ this._generateMaterial();
31
+ this._generateMesh();
32
+ }
33
+
34
+ private _generateGeometry(): void {
35
+ this._geometry = new BoxGeometry(
36
+ TemplateMesh2._DEFAULT_GEOMETRY_WIDTH,
37
+ TemplateMesh2._DEFAULT_GEOMETRY_HEIGHT,
38
+ TemplateMesh2._DEFAULT_GEOMETRY_DEPTH,
39
+ TemplateMesh2._DEFAULT_GEOMETRY_WIDTH_SEGMENTS,
40
+ TemplateMesh2._DEFAULT_GEOMETRY_HEIGHT_SEGMENTS,
41
+ TemplateMesh2._DEFAULT_GEOMETRY_DEPTH_SEGMENTS
42
+ );
43
+ }
44
+
45
+ private _generateMaterial(): void {
46
+ const normalMat = ThreeAssetsManager.getTexture(AssetId.THREE_TEXTURE_TEMPLATE);
47
+ normalMat.repeat.set(TemplateMesh2._DEFAULT_MATERIAL_REPEAT, TemplateMesh2._DEFAULT_MATERIAL_REPEAT);
48
+ normalMat.wrapS = normalMat.wrapT = RepeatWrapping;
49
+
50
+ this._material = new MeshStandardMaterial({
51
+ ...TemplateMesh2._DEFAULT_MATERIAL_OPTIONS,
52
+ normalMap: normalMat,
53
+ });
54
+ }
55
+
56
+ private _generateMesh(): void {
57
+ this._mesh = new Mesh(this._geometry, this._material);
58
+ this._mesh.castShadow = true;
59
+ this._mesh.receiveShadow = true;
60
+ this.add(this._mesh);
61
+ }
62
+
63
+ public override reset(): void {
64
+ this._mesh.rotation.y = 0;
65
+ }
66
+
67
+ public update(dt: number): void {
68
+ super.update(dt);
69
+ this._mesh.rotation.y += dt * TemplateMesh2._MESH_ROTATION_Y;
70
+ }
71
+ }
@@ -0,0 +1,33 @@
1
+ import { Vector3 } from 'three';
2
+ import { AssetId } from '../../../../constants/experiences/AssetId';
3
+ import { DebugGuiTitle } from '../../../../constants/experiences/DebugGuiTitle';
4
+ import DebugManager from '../../../../managers/DebugManager';
5
+ import ThreeModelBase from '../../bases/components/ThreeModelBase';
6
+
7
+ export default class TemplateModel extends ThreeModelBase {
8
+ private static readonly _DEFAULT_POSITION: Vector3 = new Vector3(0, 1, 0);
9
+ private static readonly _ROTATION_Y = 0.25;
10
+
11
+ constructor() {
12
+ super(AssetId.THREE_GLTF_TEMPLATE, {
13
+ castShadow: true,
14
+ receiveShadow: true,
15
+ });
16
+ this.position.copy(TemplateModel._DEFAULT_POSITION);
17
+
18
+ if (DebugManager.isActive) {
19
+ const viewsDebug = DebugManager.getGuiFolder(DebugGuiTitle.THREE_VIEWS)
20
+ const templateModelFolder = viewsDebug.addFolder('Template Model');
21
+ templateModelFolder.add(this.position, 'y', -1, 1, 0.01);
22
+ }
23
+ }
24
+
25
+ public override reset(): void {
26
+ this.rotation.y = 0;
27
+ }
28
+
29
+ public update(dt: number): void {
30
+ super.update(dt);
31
+ this.rotation.y += dt * TemplateModel._ROTATION_Y;
32
+ }
33
+ }
@@ -0,0 +1,55 @@
1
+ <script setup lang="ts">
2
+ import { computed, onMounted, onUnmounted, ref } from 'vue';
3
+ import LoaderManager from '../../managers/LoaderManager';
4
+
5
+ const isVisible = ref(false);
6
+ const isEnded = ref(false);
7
+ const loadingNumber = ref(0);
8
+ const barScaleX = ref(0);
9
+
10
+ const barStyle = computed(() =>
11
+ isEnded.value ? undefined : { transform: `translateY(-50%) scaleX(${barScaleX.value})` }
12
+ );
13
+
14
+ const onShow = (): void => {
15
+ loadingNumber.value = 0;
16
+ barScaleX.value = 0;
17
+ isEnded.value = false;
18
+ isVisible.value = true;
19
+ };
20
+
21
+ const onProgress = (): void => {
22
+ const progress = LoaderManager.progress * 100;
23
+ barScaleX.value = LoaderManager.progress;
24
+ loadingNumber.value = Math.round(progress);
25
+ };
26
+
27
+ const onHide = (): void => {
28
+ loadingNumber.value = 100;
29
+ barScaleX.value = 1;
30
+ isEnded.value = true;
31
+ isVisible.value = false;
32
+ };
33
+
34
+ onMounted(() => {
35
+ LoaderManager.onShow.add(onShow);
36
+ LoaderManager.onProgress.add(onProgress);
37
+ LoaderManager.onHide.add(onHide);
38
+ });
39
+
40
+ onUnmounted(() => {
41
+ LoaderManager.onShow.remove(onShow);
42
+ LoaderManager.onProgress.remove(onProgress);
43
+ LoaderManager.onHide.remove(onHide);
44
+ });
45
+ </script>
46
+
47
+ <template>
48
+ <div id="loading-screen" class="html-view loading-screen" :class="{ show: isVisible }">
49
+ <div class="loading-progress">
50
+ <span class="loading-number">{{ loadingNumber }}</span>
51
+ <span>%</span>
52
+ </div>
53
+ <div class="loading-bar" :class="{ ended: isEnded }" :style="barStyle"></div>
54
+ </div>
55
+ </template>
@@ -0,0 +1,7 @@
1
+ import { createApp } from 'vue';
2
+ import App from './experiences/engines/vues/MainVue.vue';
3
+ import Experience from './experiences/Experience';
4
+
5
+ createApp(App).mount('#app');
6
+
7
+ void Experience.init();
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "@vue/tsconfig/tsconfig.dom.json",
3
+ "compilerOptions": {
4
+ "target": "ES2022",
5
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo"
6
+ },
7
+ "include": ["src/**/*.ts", "src/**/*.vue"]
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "ES2023",
5
+ "lib": ["ES2023"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": true,
10
+ "verbatimModuleSyntax": true,
11
+ "moduleDetection": "force",
12
+ "noEmit": true,
13
+ "strict": true
14
+ },
15
+ "include": ["vite.config.ts"]
16
+ }
@@ -0,0 +1,16 @@
1
+ import vue from '@vitejs/plugin-vue';
2
+ import { defineConfig } from 'vite';
3
+ import glsl from 'vite-plugin-glsl';
4
+
5
+ export default defineConfig({
6
+ base: './',
7
+ server: {
8
+ host: true,
9
+ },
10
+ build: {
11
+ outDir: './dist',
12
+ emptyOutDir: true,
13
+ sourcemap: true,
14
+ },
15
+ plugins: [vue(), glsl()],
16
+ });
@@ -1,23 +0,0 @@
1
- import js from '@eslint/js'
2
- import globals from 'globals'
3
- import reactHooks from 'eslint-plugin-react-hooks'
4
- import reactRefresh from 'eslint-plugin-react-refresh'
5
- import tseslint from 'typescript-eslint'
6
- import { defineConfig, globalIgnores } from 'eslint/config'
7
-
8
- export default defineConfig([
9
- globalIgnores(['dist']),
10
- {
11
- files: ['**/*.{ts,tsx}'],
12
- extends: [
13
- js.configs.recommended,
14
- tseslint.configs.recommended,
15
- reactHooks.configs.flat.recommended,
16
- reactRefresh.configs.vite,
17
- ],
18
- languageOptions: {
19
- ecmaVersion: 2020,
20
- globals: globals.browser,
21
- },
22
- },
23
- ])