@benjos/create-boilerplate 1.3.5 → 1.4.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 (59) hide show
  1. package/package.json +1 -1
  2. package/template-react/package-lock.json +2 -2
  3. package/template-react/package.json +1 -1
  4. package/template-react/src/App.css +21 -21
  5. package/template-react/src/App.tsx +5 -9
  6. package/template-react/src/index.css +42 -42
  7. package/template-react/src/main.tsx +8 -8
  8. package/template-vanilla/index.html +23 -14
  9. package/template-vanilla/package-lock.json +8 -6
  10. package/template-vanilla/package.json +2 -2
  11. package/template-vanilla/src/experiences/Experience.ts +13 -11
  12. package/template-vanilla/src/experiences/cameras/threes/DebugThreeCameraController.ts +12 -17
  13. package/template-vanilla/src/experiences/cameras/threes/LoaderThreeCameraController.ts +7 -10
  14. package/template-vanilla/src/experiences/cameras/threes/MainThreeCameraController.ts +6 -10
  15. package/template-vanilla/src/experiences/cameras/threes/bases/ThreeCameraControllerBase.ts +19 -38
  16. package/template-vanilla/src/experiences/commands/InitCommand.ts +30 -33
  17. package/template-vanilla/src/experiences/engines/htmls/MainHTML.ts +10 -7
  18. package/template-vanilla/src/experiences/engines/threes/LoaderThree.ts +39 -0
  19. package/template-vanilla/src/experiences/engines/threes/MainThree.ts +46 -121
  20. package/template-vanilla/src/experiences/engines/threes/bases/ThreeBase.ts +90 -0
  21. package/template-vanilla/src/experiences/managers/DebugManager.ts +30 -32
  22. package/template-vanilla/src/experiences/managers/LoaderManager.ts +53 -45
  23. package/template-vanilla/src/experiences/managers/threes/ThreeAssetsManager.ts +94 -109
  24. package/template-vanilla/src/experiences/managers/threes/ThreeCameraControllerManager.ts +22 -19
  25. package/template-vanilla/src/experiences/managers/threes/ThreeRaycasterManager.ts +11 -13
  26. package/template-vanilla/src/experiences/materials/threes/loaders/LoaderMaterial.ts +0 -4
  27. package/template-vanilla/src/experiences/renderers/threes/LoaderRenderer.ts +0 -4
  28. package/template-vanilla/src/experiences/renderers/threes/Renderer.ts +5 -9
  29. package/template-vanilla/src/experiences/renderers/threes/bases/WebGLRendererBase.ts +3 -3
  30. package/template-vanilla/src/experiences/styles/commons/main.scss +6 -6
  31. package/template-vanilla/src/experiences/styles/style.scss +1 -1
  32. package/template-vanilla/src/experiences/styles/views/loader.scss +7 -6
  33. package/template-vanilla/src/experiences/types/cameraTypes.ts +37 -0
  34. package/template-vanilla/src/experiences/types/global.d.ts +3 -4
  35. package/template-vanilla/src/experiences/types/shaders.d.ts +4 -0
  36. package/template-vanilla/src/experiences/views/htmls/bases/HTMLViewBase.ts +13 -33
  37. package/template-vanilla/src/experiences/views/htmls/loaders/LoaderHTMLView.ts +27 -18
  38. package/template-vanilla/src/experiences/views/threes/bases/ThreeViewBase.ts +17 -18
  39. package/template-vanilla/src/experiences/views/threes/loaders/LoaderThreeView.ts +11 -15
  40. package/template-vanilla/src/experiences/views/threes/loaders/components/ThreeTemplateLoader.ts +15 -12
  41. package/template-vanilla/src/experiences/views/threes/worlds/WorldThreeView.ts +9 -17
  42. package/template-vanilla/src/experiences/views/threes/worlds/components/Environment.ts +12 -16
  43. package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateFont.ts +11 -9
  44. package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateMesh.ts +11 -9
  45. package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateModel.ts +2 -6
  46. package/template-vanilla/src/experiences/views/threes/worlds/components/actors/bases/ActorBase.ts +5 -1
  47. package/template-vanilla/src/experiences/views/threes/worlds/components/actors/bases/AnimatedModelBase.ts +5 -9
  48. package/template-vanilla/src/experiences/views/threes/worlds/components/actors/bases/ModelBase.ts +18 -4
  49. package/template-vanilla/src/main.ts +1 -1
  50. package/template-vanilla/tsconfig.json +17 -0
  51. package/template-vanilla/src/experiences/constants/experiences/CameraType.ts +0 -6
  52. package/template-vanilla/src/experiences/managers/KeyboardManager.ts +0 -65
  53. package/template-vanilla/src/experiences/managers/MouseManager.ts +0 -100
  54. package/template-vanilla/src/experiences/managers/ResizeManager.ts +0 -53
  55. package/template-vanilla/src/experiences/managers/TickerManager.ts +0 -86
  56. package/template-vanilla/src/experiences/proxies/ViewProxy.ts +0 -45
  57. package/template-vanilla/src/experiences/views/bases/ViewBase.ts +0 -36
  58. package/template-vanilla/src/experiences/views/htmls/loaders/components/HTMLTemplateLoader.ts +0 -57
  59. /package/template-vanilla/src/experiences/{constants/experiences/AssetType.ts → types/assetTypes.ts} +0 -0
@@ -20,16 +20,12 @@ import DebugManager from '../../managers/DebugManager';
20
20
  import WebGLRendererBase from './bases/WebGLRendererBase';
21
21
 
22
22
  export default class Renderer extends WebGLRendererBase {
23
- //#region Constants
24
- //
25
23
  private static readonly _DEFAULT_TONE_MAPPING = CineonToneMapping;
26
24
  private static readonly _DEFAULT_OUTPUT_COLOR_SPACE = SRGBColorSpace;
27
25
  private static readonly _DEFAULT_SHADOW_MAP_TYPE = PCFSoftShadowMap;
28
26
  private static readonly _DEFAULT_TONE_MAPPING_EXPOSURE = 1;
29
27
  private static readonly _DEFAULT_CLEAR_COLOR = 0xfafafa;
30
28
  private static readonly _DEFAULT_CLEAR_ALPHA = 0;
31
- //
32
- //#endregion
33
29
 
34
30
  constructor(scene: Scene, camera: Camera, parameters: WebGLRendererParameters = {}) {
35
31
  super(scene, camera, parameters);
@@ -40,8 +36,8 @@ export default class Renderer extends WebGLRendererBase {
40
36
  this.shadowMap.type = Renderer._DEFAULT_SHADOW_MAP_TYPE;
41
37
  this.setClearColor(Renderer._DEFAULT_CLEAR_COLOR, Renderer._DEFAULT_CLEAR_ALPHA);
42
38
 
43
- if (DebugManager.IsActive) {
44
- const rendererFolder = DebugManager.Gui.addFolder('Renderer');
39
+ if (DebugManager.isActive) {
40
+ const rendererFolder = DebugManager.gui.addFolder('Renderer');
45
41
  rendererFolder
46
42
  .add(this, 'toneMapping', {
47
43
  NoToneMapping,
@@ -66,9 +62,9 @@ export default class Renderer extends WebGLRendererBase {
66
62
  }
67
63
 
68
64
  public override update(dt: number): void {
69
- const isDebug = DebugManager.IsActive;
70
- if (isDebug) DebugManager.BeginThreePerf();
65
+ const isDebug = DebugManager.isActive;
66
+ if (isDebug) DebugManager.beginThreePerf();
71
67
  super.update(dt);
72
- if (isDebug) DebugManager.EndThreePerf();
68
+ if (isDebug) DebugManager.endThreePerf();
73
69
  }
74
70
  }
@@ -1,5 +1,5 @@
1
+ import { DomResizeManager } from '@benjos/cookware';
1
2
  import { Camera, Scene, WebGLRenderer, type WebGLRendererParameters } from 'three';
2
- import { ResizeManager } from '../../../managers/ResizeManager';
3
3
 
4
4
  export default abstract class WebGLRendererBase extends WebGLRenderer {
5
5
  private readonly _scene: Scene;
@@ -19,8 +19,8 @@ export default abstract class WebGLRendererBase extends WebGLRenderer {
19
19
  }
20
20
 
21
21
  public resize(): void {
22
- this.setSize(ResizeManager.Width, ResizeManager.Height);
23
- this.setPixelRatio(ResizeManager.PixelRatio);
22
+ this.setSize(DomResizeManager.width, DomResizeManager.height);
23
+ this.setPixelRatio(DomResizeManager.pixelRatio);
24
24
  }
25
25
 
26
26
  public update(_dt: number): void {
@@ -16,13 +16,13 @@ body {
16
16
  padding: 0;
17
17
  overflow: hidden;
18
18
 
19
- > #app,
20
- > #root {
19
+ >#app,
20
+ >#root {
21
21
  position: relative;
22
22
  width: 100%;
23
23
  height: 100%;
24
24
 
25
- > #loader {
25
+ >#loader {
26
26
  position: absolute;
27
27
  top: 0;
28
28
  left: 0;
@@ -37,7 +37,7 @@ body {
37
37
  height: 100%;
38
38
  }
39
39
 
40
- .view-html-container {
40
+ .html-view {
41
41
  position: absolute;
42
42
  top: 0;
43
43
  left: 0;
@@ -60,7 +60,7 @@ body {
60
60
  }
61
61
  }
62
62
 
63
- &.hide {
63
+ &.hidden {
64
64
  opacity: 1;
65
65
  animation: hideView $viewTransition ease forwards;
66
66
 
@@ -81,4 +81,4 @@ body {
81
81
  #three-perf-ui {
82
82
  z-index: 999999;
83
83
  }
84
- }
84
+ }
@@ -4,4 +4,4 @@
4
4
  @use './commons/texts.scss';
5
5
  @use './commons/fonts.scss';
6
6
 
7
- @use './views/loader.scss';
7
+ @use './views/loader.scss';
@@ -3,11 +3,12 @@
3
3
  $outroFadeOutDuration: 1.5s;
4
4
 
5
5
  body {
6
- > #app,
7
- > #root {
8
- > #loader {
9
- .view-html-container {
10
- &.hide {
6
+
7
+ >#app,
8
+ >#root {
9
+ >#loader {
10
+ .html-view {
11
+ &.hidden {
11
12
  animation-duration: $outroFadeOutDuration;
12
13
  }
13
14
  }
@@ -69,4 +70,4 @@ body {
69
70
  }
70
71
  }
71
72
  }
72
- }
73
+ }
@@ -0,0 +1,37 @@
1
+ //#region Three
2
+ //
3
+ export const ThreeCameraType = {
4
+ PERSPECTIVE: 'PERSPECTIVE',
5
+ ORTHOGRAPHIC: 'ORTHOGRAPHIC',
6
+ } as const;
7
+
8
+ export type ThreeCameraType = (typeof ThreeCameraType)[keyof typeof ThreeCameraType];
9
+
10
+ interface CameraOptionsBase {
11
+ near?: number;
12
+ far?: number;
13
+ }
14
+
15
+ interface PerspectiveCameraOptions extends CameraOptionsBase {
16
+ type: typeof ThreeCameraType.PERSPECTIVE;
17
+ fov?: number;
18
+ aspect?: number;
19
+ }
20
+
21
+ interface OrthographicCameraOptions extends CameraOptionsBase {
22
+ type: typeof ThreeCameraType.ORTHOGRAPHIC;
23
+ left: number;
24
+ right: number;
25
+ top: number;
26
+ bottom: number;
27
+ }
28
+
29
+ export type ThreeCameraOptions = PerspectiveCameraOptions | OrthographicCameraOptions;
30
+
31
+ export interface ThreeControls {
32
+ enabled: boolean;
33
+ update(delta?: number): void;
34
+ dispose(): void;
35
+ }
36
+ //
37
+ //#endregion
@@ -1,10 +1,9 @@
1
- import type Experience from '../Experience';
1
+ import { MainThree } from '../engines/threes/MainThree';
2
2
 
3
3
  declare global {
4
4
  interface Window {
5
- experience: Experience;
5
+ mainThree: MainThree;
6
6
  }
7
7
  }
8
8
 
9
- export { };
10
-
9
+ export {};
@@ -0,0 +1,4 @@
1
+ declare module '*.glsl' {
2
+ const value: string;
3
+ export default value;
4
+ }
@@ -1,42 +1,22 @@
1
- import { DomUtils } from '@benjos/cookware';
2
- import { DomEvent } from '@benjos/spices';
3
- import type { ViewId } from '../../../constants/experiences/ViewId';
4
- import { ViewType } from '../../../constants/experiences/ViewType';
5
- import ViewBase from '../../bases/ViewBase';
6
1
 
7
- export default abstract class HTMLViewBase extends ViewBase {
8
- private readonly _parentElement: HTMLElement;
9
- protected readonly _htmlContainer: HTMLDivElement;
2
+ export default abstract class HTMLViewBase {
3
+ declare protected _htmlElement: HTMLDivElement;
10
4
 
11
- constructor(id: ViewId, parentElement: HTMLElement = DomUtils.getApp()) {
12
- super(id, ViewType.HTML);
13
- this._parentElement = parentElement;
14
- this._htmlContainer = document.createElement('div');
15
- this._htmlContainer.classList.add('view-html-container');
16
-
17
- this._htmlContainer.addEventListener(DomEvent.ANIMATION_END, this._onAnimationEnd);
5
+ constructor() {
6
+ this._getElement();
18
7
  }
19
8
 
20
- protected override _show(): void {
21
- super._show();
22
- this._parentElement.appendChild(this._htmlContainer);
23
- this._htmlContainer.classList.remove('hide');
24
- requestAnimationFrame(this._onShow);
9
+ protected _getElement(): void {
10
+ //
25
11
  }
26
12
 
27
- private readonly _onShow = (): void => {
28
- this._htmlContainer.classList.add('show');
29
- };
30
-
31
- protected override _hide(): void {
32
- super._hide();
33
- this._htmlContainer.classList.remove('show');
34
- this._htmlContainer.classList.add('hide');
13
+ public show(): void {
14
+ this._htmlElement.classList.add('show');
15
+ this._htmlElement.classList.remove('hidden');
35
16
  }
36
17
 
37
- private readonly _onAnimationEnd = (event: AnimationEvent): void => {
38
- if (event.animationName === 'hideView') {
39
- this._parentElement.removeChild(this._htmlContainer);
40
- }
41
- };
18
+ public hide(): void {
19
+ this._htmlElement.classList.add('hidden');
20
+ this._htmlElement.classList.remove('show');
21
+ }
42
22
  }
@@ -1,34 +1,43 @@
1
1
  import { DomUtils } from '@benjos/cookware';
2
- import { ViewId } from '../../../constants/experiences/ViewId';
3
2
  import LoaderManager from '../../../managers/LoaderManager';
4
3
  import HTMLViewBase from '../bases/HTMLViewBase';
5
- import HTMLTemplateLoader from './components/HTMLTemplateLoader';
6
4
 
7
5
  export default class LoaderHTMLView extends HTMLViewBase {
8
- declare private _htmlLoader: HTMLTemplateLoader;
6
+ declare private _loadingBar: HTMLDivElement;
7
+ declare private _loadingProgress: HTMLDivElement;
8
+ declare private _loadingNumber: HTMLSpanElement;
9
9
 
10
- constructor(id: ViewId) {
11
- super(id, DomUtils.getLoader());
12
-
13
- this._generateLoader();
14
-
15
- LoaderManager.OnBeginLoad.add(this._onBeginLoad);
16
- LoaderManager.OnFinishLoad.add(this._onFinishLoad);
10
+ constructor() {
11
+ super();
12
+ LoaderManager.onBeginLoad.add(this._onBeginLoad);
13
+ LoaderManager.onProgress.add(this._onProgress);
14
+ LoaderManager.onFinishLoad.add(this._onFinishLoad);
17
15
  }
18
16
 
19
- private _generateLoader(): void {
20
- this._htmlLoader = new HTMLTemplateLoader();
21
- this._htmlContainer.appendChild(this._htmlLoader.htmlElement);
22
- DomUtils.getLoader().appendChild(this._htmlContainer);
17
+ protected override _getElement(): void {
18
+ this._htmlElement = DomUtils.GetLoader().querySelector('#loading-screen')!;
19
+ this._loadingProgress = this._htmlElement.querySelector('.loading-progress')!;
20
+ this._loadingNumber = this._loadingProgress.querySelector('.loading-number')!;
21
+ this._loadingBar = this._htmlElement.querySelector('.loading-bar')!;
23
22
  }
24
23
 
25
24
  private readonly _onBeginLoad = (): void => {
26
- this._show();
27
- this._htmlLoader.show();
25
+ this._loadingNumber.textContent = '0';
26
+ this._loadingBar.style.transform = '';
27
+ this._loadingBar.classList.remove('ended');
28
+ this.show();
29
+ };
30
+
31
+ private _onProgress = (): void => {
32
+ const progress = Math.min(LoaderManager.loadedSize / LoaderManager.totalSize, 1) * 100;
33
+ this._loadingBar.style.transform = `translateY(-50%) scaleX(${progress / 100})`;
34
+ this._loadingNumber.textContent = Math.round(progress).toString();
28
35
  };
29
36
 
30
37
  private readonly _onFinishLoad = (): void => {
31
- this._htmlLoader.hide();
32
- this._hide();
38
+ this._loadingNumber.textContent = '100';
39
+ this._loadingBar.style.transform = '';
40
+ this._loadingBar.classList.add('ended');
41
+ this.hide();
33
42
  };
34
43
  }
@@ -1,27 +1,26 @@
1
- import { Object3D, Scene } from 'three';
2
- import type { ViewId } from '../../../constants/experiences/ViewId';
3
- import { ViewType } from '../../../constants/experiences/ViewType';
4
- import MainThree from '../../../engines/threes/MainThree';
5
- import ViewBase from '../../bases/ViewBase';
1
+ import { Object3D } from 'three';
2
+ import ActorBase from '../worlds/components/actors/bases/ActorBase';
6
3
 
7
- export default abstract class ThreeViewBase extends ViewBase {
8
- protected _scene: Scene;
9
- protected _container: Object3D;
4
+ export default abstract class ThreeViewBase extends Object3D {
5
+ protected readonly _actors: ActorBase[];
10
6
 
11
- constructor(id: ViewId, scene: Scene = MainThree.Scene) {
12
- super(id, ViewType.THREE);
7
+ constructor() {
8
+ super();
13
9
 
14
- this._scene = scene;
15
- this._container = new Object3D();
10
+ this._actors = [];
16
11
  }
17
12
 
18
- protected override _show(): void {
19
- super._show();
20
- this._scene.add(this._container);
13
+ protected _generateActors(): void {
14
+ //
21
15
  }
22
16
 
23
- protected override _hide(): void {
24
- super._hide();
25
- this._scene.remove(this._container);
17
+ public dispose(): void {
18
+ for (const actor of this._actors) {
19
+ actor.dispose();
20
+ }
21
+ }
22
+
23
+ public update(dt: number): void {
24
+ //
26
25
  }
27
26
  }
@@ -1,5 +1,3 @@
1
- import { ViewId } from '../../../constants/experiences/ViewId';
2
- import MainThree from '../../../engines/threes/MainThree';
3
1
  import LoaderManager from '../../../managers/LoaderManager';
4
2
  import ThreeViewBase from '../bases/ThreeViewBase';
5
3
  import ThreeTemplateLoader from './components/ThreeTemplateLoader';
@@ -7,28 +5,26 @@ import ThreeTemplateLoader from './components/ThreeTemplateLoader';
7
5
  export default class LoaderThreeView extends ThreeViewBase {
8
6
  declare private _threeLoader: ThreeTemplateLoader;
9
7
 
10
- constructor(id: ViewId) {
11
- super(id, MainThree.LoaderScene);
12
-
13
- this._isVisible = true;
14
- this._generateLoader();
15
-
16
- LoaderManager.OnBeginLoad.add(this._onBeginLoad);
17
- LoaderManager.OnFinishLoad.add(this._onFinishLoad);
8
+ constructor() {
9
+ super();
10
+ this._generateActors();
11
+ LoaderManager.onBeginLoad.add(this._onBeginLoad);
12
+ LoaderManager.onFinishLoad.add(this._onFinishLoad);
18
13
  }
19
14
 
20
- private _generateLoader(): void {
15
+ protected override _generateActors(): void {
16
+ super._generateActors();
21
17
  this._threeLoader = new ThreeTemplateLoader();
18
+ this._actors.push(this._threeLoader);
22
19
 
23
- this._container.add(this._threeLoader);
24
- this._scene.add(this._container);
20
+ for (const actor of this._actors) this.add(actor);
25
21
  }
26
22
 
27
- protected override _show(): void {
23
+ protected _show(): void {
28
24
  this._threeLoader.material.show();
29
25
  }
30
26
 
31
- protected override _hide(): void {
27
+ protected _hide(): void {
32
28
  this._threeLoader.material.hide();
33
29
  }
34
30
 
@@ -1,19 +1,16 @@
1
- import { Mesh, Object3D, PlaneGeometry } from 'three';
1
+ import { Mesh, PlaneGeometry } from 'three';
2
2
  import LoaderMaterial from '../../../../materials/threes/loaders/LoaderMaterial';
3
+ import ActorBase from '../../worlds/components/actors/bases/ActorBase';
3
4
 
4
- export default class ThreeTemplateLoader extends Object3D {
5
- declare private _geometry: PlaneGeometry;
6
- declare private _material: LoaderMaterial;
7
- declare private _loader: Mesh;
8
-
9
- //#region Constants
10
- //
5
+ export default class ThreeTemplateLoader extends ActorBase {
11
6
  private static readonly _DEFAULT_SIZE_WIDTH: number = 2;
12
7
  private static readonly _DEFAULT_SIZE_HEIGHT: number = 2;
13
8
  private static readonly _DEFAULT_SEGMENTS_WIDTH: number = 1;
14
9
  private static readonly _DEFAULT_SEGMENTS_HEIGHT: number = 1;
15
- //
16
- //#endregion
10
+
11
+ declare private _geometry: PlaneGeometry;
12
+ declare private _material: LoaderMaterial;
13
+ declare private _mesh: Mesh;
17
14
 
18
15
  constructor() {
19
16
  super();
@@ -22,7 +19,7 @@ export default class ThreeTemplateLoader extends Object3D {
22
19
  this._generateMaterial();
23
20
  this._generateMesh();
24
21
 
25
- this.add(this._loader);
22
+ this.add(this._mesh);
26
23
  }
27
24
 
28
25
  private _generateGeometry(): void {
@@ -39,7 +36,13 @@ export default class ThreeTemplateLoader extends Object3D {
39
36
  }
40
37
 
41
38
  private _generateMesh(): void {
42
- this._loader = new Mesh(this._geometry, this._material);
39
+ this._mesh = new Mesh(this._geometry, this._material);
40
+ }
41
+
42
+ public override dispose(): void {
43
+ super.dispose();
44
+ this._geometry.dispose();
45
+ this._material.dispose();
43
46
  }
44
47
 
45
48
  //#region Getters
@@ -1,48 +1,40 @@
1
- import { ViewId } from '../../../constants/experiences/ViewId';
2
1
  import LoaderManager from '../../../managers/LoaderManager';
3
2
  import ThreeViewBase from '../bases/ThreeViewBase';
4
3
  import Environment from './components/Environment';
5
4
  import TemplateFont from './components/actors/TemplateFont';
6
5
  import TemplateMesh from './components/actors/TemplateMesh';
7
6
  import TemplateModel from './components/actors/TemplateModel';
8
- import type ActorBase from './components/actors/bases/ActorBase';
9
7
 
10
8
  export default class WorldThreeView extends ThreeViewBase {
11
9
  declare private _environment: Environment;
12
- private readonly _actors: ActorBase[];
13
10
 
14
- constructor(id: ViewId) {
15
- super(id);
16
-
17
- this._actors = [];
18
-
19
- LoaderManager.OnFinishLoad.add(this._onFinishLoad);
11
+ constructor() {
12
+ super();
13
+ LoaderManager.onFinishLoad.add(this._onFinishLoad);
20
14
  }
21
15
 
22
16
  private readonly _onFinishLoad = (): void => {
23
17
  this._generateEnvironment();
24
18
  this._generateActors();
25
-
26
- this._show();
19
+ LoaderManager.onFinishLoad.remove(this._onFinishLoad);
27
20
  };
28
21
 
29
22
  private _generateEnvironment(): void {
30
- if (this._environment) return;
31
23
  this._environment = new Environment();
32
24
 
33
- this._container.add(this._environment);
25
+ this.add(this._environment);
34
26
  }
35
27
 
36
- private _generateActors(): void {
37
- if (this._actors.length > 0) return;
28
+ protected override _generateActors(): void {
29
+ super._generateActors();
38
30
  this._actors.push(new TemplateMesh());
39
31
  this._actors.push(new TemplateModel());
40
32
  this._actors.push(new TemplateFont());
41
33
 
42
- for (const actor of this._actors) this._container.add(actor);
34
+ for (const actor of this._actors) this.add(actor);
43
35
  }
44
36
 
45
- public update(dt: number): void {
37
+ public override update(dt: number): void {
46
38
  if (!this._environment) return;
47
39
 
48
40
  this._environment.update(dt);
@@ -4,17 +4,12 @@ import MainThree from '../../../../engines/threes/MainThree';
4
4
  import DebugManager from '../../../../managers/DebugManager';
5
5
  import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
6
6
 
7
- interface IEnvironmentMap {
7
+ interface EnvironmentMap {
8
8
  intensity?: number;
9
9
  texture?: DataTexture;
10
10
  }
11
11
 
12
12
  export default class Environment extends Object3D {
13
- declare private _environmentMap: IEnvironmentMap;
14
- declare private _sunLight: DirectionalLight;
15
-
16
- //#region Constants
17
- //
18
13
  private static readonly _DEFAULT_ENVIRONMENT_MAP_INTENSITY: number = 1;
19
14
  private static readonly _DEFAULT_SUN_LIGHT_COLOR: number = 0xffffff;
20
15
  private static readonly _DEFAULT_SUN_LIGHT_INTENSITY: number = 10;
@@ -22,8 +17,9 @@ export default class Environment extends Object3D {
22
17
  private static readonly _DEFAULT_SUN_SHADOW_MAP_SIZE: number = 1024;
23
18
  private static readonly _DEFAULT_SUN_SHADOW_NORMAL_BIAS: number = 0.05;
24
19
  private static readonly _DEFAULT_SUN_POSITION: Vector3 = new Vector3(0, 2, 1);
25
- //
26
- //#endregion
20
+
21
+ declare private _environmentMap: EnvironmentMap;
22
+ declare private _sunLight: DirectionalLight;
27
23
 
28
24
  constructor() {
29
25
  super();
@@ -35,16 +31,16 @@ export default class Environment extends Object3D {
35
31
  private _generateEnvironmentMap = (): void => {
36
32
  this._environmentMap = {};
37
33
  this._environmentMap.intensity = Environment._DEFAULT_ENVIRONMENT_MAP_INTENSITY;
38
- this._environmentMap.texture = ThreeAssetsManager.GetHDR(AssetId.THREE_HDR_TEMPLATE);
34
+ this._environmentMap.texture = ThreeAssetsManager.getHDR(AssetId.THREE_HDR_TEMPLATE);
39
35
  this._environmentMap.texture.needsUpdate = true;
40
36
 
41
- MainThree.Scene.environment = this._environmentMap.texture;
42
- MainThree.Scene.environmentIntensity = this._environmentMap.intensity!;
37
+ MainThree.scene.environment = this._environmentMap.texture;
38
+ MainThree.scene.environmentIntensity = this._environmentMap.intensity!;
43
39
 
44
- if (DebugManager.IsActive) {
45
- const environmentFolder = DebugManager.Gui.addFolder('Environment');
40
+ if (DebugManager.isActive) {
41
+ const environmentFolder = DebugManager.gui.addFolder('Environment');
46
42
  environmentFolder.add(this._environmentMap, 'intensity', 0, 10, 0.01).onChange(() => {
47
- MainThree.Scene.environmentIntensity = this._environmentMap.intensity!;
43
+ MainThree.scene.environmentIntensity = this._environmentMap.intensity!;
48
44
  });
49
45
  }
50
46
  };
@@ -64,8 +60,8 @@ export default class Environment extends Object3D {
64
60
  this._sunLight.position.copy(Environment._DEFAULT_SUN_POSITION);
65
61
  this.add(this._sunLight);
66
62
 
67
- if (DebugManager.IsActive) {
68
- const sunLightFolder = DebugManager.Gui.addFolder('Sun Light');
63
+ if (DebugManager.isActive) {
64
+ const sunLightFolder = DebugManager.gui.addFolder('Sun Light');
69
65
  sunLightFolder.add(this._sunLight, 'intensity', 0, 10, 0.01).name('intensity');
70
66
  sunLightFolder.add(this._sunLight.position, 'x', -5, 5, 0.01).name('positionX');
71
67
  sunLightFolder.add(this._sunLight.position, 'y', -5, 5, 0.01).name('positionY');
@@ -5,12 +5,6 @@ import ThreeAssetsManager from '../../../../../managers/threes/ThreeAssetsManage
5
5
  import ActorBase from './bases/ActorBase';
6
6
 
7
7
  export default class TemplateFont extends ActorBase {
8
- declare private _geometry: TextGeometry;
9
- declare private _material: MeshStandardMaterial;
10
- declare private _mesh: Mesh;
11
-
12
- //#region Constants
13
- //
14
8
  private static readonly _DEFAULT_TEXT: string = 'Hello boilerplate!';
15
9
  private static readonly _DEFAULT_TEXT_OPTION: TextGeometryParameters = {
16
10
  font: null!,
@@ -30,8 +24,10 @@ export default class TemplateFont extends ActorBase {
30
24
  envMapIntensity: 0,
31
25
  };
32
26
  private static readonly _DEFAULT_MESH_POSITION_Y = 3;
33
- //
34
- //#endregion
27
+
28
+ declare private _geometry: TextGeometry;
29
+ declare private _material: MeshStandardMaterial;
30
+ declare private _mesh: Mesh;
35
31
 
36
32
  constructor() {
37
33
  super();
@@ -44,7 +40,7 @@ export default class TemplateFont extends ActorBase {
44
40
  private _generateGeometry(): void {
45
41
  this._geometry = new TextGeometry(TemplateFont._DEFAULT_TEXT, {
46
42
  ...TemplateFont._DEFAULT_TEXT_OPTION,
47
- font: ThreeAssetsManager.GetFont(AssetId.THREE_FONT_TEMPLATE),
43
+ font: ThreeAssetsManager.getFont(AssetId.THREE_FONT_TEMPLATE),
48
44
  });
49
45
  this._geometry.center();
50
46
  }
@@ -59,4 +55,10 @@ export default class TemplateFont extends ActorBase {
59
55
 
60
56
  this.add(this._mesh);
61
57
  }
58
+
59
+ public override dispose(): void {
60
+ super.dispose();
61
+ this._geometry.dispose();
62
+ this._material.dispose();
63
+ }
62
64
  }