@benjos/create-boilerplate 1.3.5 → 1.4.1
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.
- package/package.json +1 -1
- package/template-react/package-lock.json +2 -2
- package/template-react/package.json +1 -1
- package/template-react/src/App.css +21 -21
- package/template-react/src/App.tsx +5 -9
- package/template-react/src/index.css +42 -42
- package/template-react/src/main.tsx +8 -8
- package/template-vanilla/index.html +23 -14
- package/template-vanilla/package-lock.json +8 -6
- package/template-vanilla/package.json +2 -2
- package/template-vanilla/src/experiences/Experience.ts +11 -11
- package/template-vanilla/src/experiences/cameras/threes/DebugThreeCameraController.ts +13 -18
- package/template-vanilla/src/experiences/cameras/threes/LoaderThreeCameraController.ts +7 -10
- package/template-vanilla/src/experiences/cameras/threes/MainThreeCameraController.ts +6 -10
- package/template-vanilla/src/experiences/cameras/threes/bases/ThreeCameraControllerBase.ts +20 -39
- package/template-vanilla/src/experiences/commands/InitCommand.ts +30 -33
- package/template-vanilla/src/experiences/engines/htmls/MainHTML.ts +10 -7
- package/template-vanilla/src/experiences/engines/threes/MainThree.ts +8 -168
- package/template-vanilla/src/experiences/engines/threes/app/LoaderThreeApp.ts +39 -0
- package/template-vanilla/src/experiences/engines/threes/app/MainThreeApp.ts +96 -0
- package/template-vanilla/src/experiences/engines/threes/app/bases/ThreeAppBase.ts +92 -0
- package/template-vanilla/src/experiences/managers/DebugManager.ts +31 -33
- package/template-vanilla/src/experiences/managers/LoaderManager.ts +53 -45
- package/template-vanilla/src/experiences/managers/threes/ThreeAssetsManager.ts +94 -109
- package/template-vanilla/src/experiences/managers/threes/ThreeCameraControllerManager.ts +22 -19
- package/template-vanilla/src/experiences/managers/threes/ThreeRaycasterManager.ts +12 -14
- package/template-vanilla/src/experiences/materials/threes/loaders/LoaderMaterial.ts +0 -4
- package/template-vanilla/src/experiences/renderers/threes/LoaderRenderer.ts +0 -4
- package/template-vanilla/src/experiences/renderers/threes/Renderer.ts +5 -9
- package/template-vanilla/src/experiences/renderers/threes/bases/WebGLRendererBase.ts +3 -3
- package/template-vanilla/src/experiences/styles/commons/main.scss +6 -6
- package/template-vanilla/src/experiences/styles/style.scss +1 -1
- package/template-vanilla/src/experiences/styles/views/loader.scss +7 -6
- package/template-vanilla/src/experiences/types/cameraTypes.ts +37 -0
- package/template-vanilla/src/experiences/types/global.d.ts +2 -2
- package/template-vanilla/src/experiences/types/shaders.d.ts +4 -0
- package/template-vanilla/src/experiences/views/htmls/bases/HTMLViewBase.ts +13 -33
- package/template-vanilla/src/experiences/views/htmls/loaders/LoaderHTMLView.ts +27 -18
- package/template-vanilla/src/experiences/views/threes/bases/ThreeViewBase.ts +26 -18
- package/template-vanilla/src/experiences/views/threes/loaders/LoaderThreeView.ts +11 -15
- package/template-vanilla/src/experiences/views/threes/loaders/components/ThreeTemplateLoader.ts +15 -12
- package/template-vanilla/src/experiences/views/threes/worlds/WorldThreeView.ts +9 -17
- package/template-vanilla/src/experiences/views/threes/worlds/components/Environment.ts +14 -18
- package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateFont.ts +11 -9
- package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateMesh.ts +11 -9
- package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateModel.ts +2 -6
- package/template-vanilla/src/experiences/views/threes/worlds/components/actors/bases/ActorBase.ts +13 -1
- package/template-vanilla/src/experiences/views/threes/worlds/components/actors/bases/AnimatedModelBase.ts +5 -9
- package/template-vanilla/src/experiences/views/threes/worlds/components/actors/bases/ModelBase.ts +18 -4
- package/template-vanilla/src/main.ts +1 -1
- package/template-vanilla/tsconfig.json +17 -0
- package/template-vanilla/src/experiences/constants/experiences/CameraType.ts +0 -6
- package/template-vanilla/src/experiences/managers/KeyboardManager.ts +0 -65
- package/template-vanilla/src/experiences/managers/MouseManager.ts +0 -100
- package/template-vanilla/src/experiences/managers/ResizeManager.ts +0 -53
- package/template-vanilla/src/experiences/managers/TickerManager.ts +0 -86
- package/template-vanilla/src/experiences/proxies/ViewProxy.ts +0 -45
- package/template-vanilla/src/experiences/views/bases/ViewBase.ts +0 -36
- package/template-vanilla/src/experiences/views/htmls/loaders/components/HTMLTemplateLoader.ts +0 -57
- /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.
|
|
44
|
-
const rendererFolder = DebugManager.
|
|
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.
|
|
70
|
-
if (isDebug) DebugManager.
|
|
65
|
+
const isDebug = DebugManager.isActive;
|
|
66
|
+
if (isDebug) DebugManager.beginThreePerf();
|
|
71
67
|
super.update(dt);
|
|
72
|
-
if (isDebug) DebugManager.
|
|
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(
|
|
23
|
-
this.setPixelRatio(
|
|
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
|
-
|
|
20
|
-
|
|
19
|
+
>#app,
|
|
20
|
+
>#root {
|
|
21
21
|
position: relative;
|
|
22
22
|
width: 100%;
|
|
23
23
|
height: 100%;
|
|
24
24
|
|
|
25
|
-
|
|
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
|
-
.
|
|
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
|
-
&.
|
|
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
|
+
}
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
$outroFadeOutDuration: 1.5s;
|
|
4
4
|
|
|
5
5
|
body {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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,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
|
|
8
|
-
|
|
9
|
-
protected readonly _htmlContainer: HTMLDivElement;
|
|
2
|
+
export default abstract class HTMLViewBase {
|
|
3
|
+
declare protected _htmlElement: HTMLDivElement;
|
|
10
4
|
|
|
11
|
-
constructor(
|
|
12
|
-
|
|
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
|
|
21
|
-
|
|
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
|
-
|
|
28
|
-
this.
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
6
|
+
declare private _loadingBar: HTMLDivElement;
|
|
7
|
+
declare private _loadingProgress: HTMLDivElement;
|
|
8
|
+
declare private _loadingNumber: HTMLSpanElement;
|
|
9
9
|
|
|
10
|
-
constructor(
|
|
11
|
-
super(
|
|
12
|
-
|
|
13
|
-
this.
|
|
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
|
-
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
|
|
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.
|
|
27
|
-
this.
|
|
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.
|
|
32
|
-
this.
|
|
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,35 @@
|
|
|
1
|
-
import { Object3D
|
|
2
|
-
import
|
|
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
|
|
8
|
-
protected
|
|
9
|
-
protected _container: Object3D;
|
|
4
|
+
export default abstract class ThreeViewBase extends Object3D {
|
|
5
|
+
protected readonly _actors: ActorBase[];
|
|
10
6
|
|
|
11
|
-
constructor(
|
|
12
|
-
super(
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
13
9
|
|
|
14
|
-
this.
|
|
15
|
-
this._container = new Object3D();
|
|
10
|
+
this._actors = [];
|
|
16
11
|
}
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
13
|
+
public init(): void {
|
|
14
|
+
this.reset();
|
|
15
|
+
for (const actor of this._actors) actor.init();
|
|
21
16
|
}
|
|
22
17
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
public reset(): void {
|
|
19
|
+
for (const actor of this._actors) actor.reset();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
protected _generateActors(): void {
|
|
23
|
+
//
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public dispose(): void {
|
|
27
|
+
for (const actor of this._actors) {
|
|
28
|
+
actor.dispose();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public update(dt: number): void {
|
|
33
|
+
//
|
|
26
34
|
}
|
|
27
35
|
}
|
|
@@ -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(
|
|
11
|
-
super(
|
|
12
|
-
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
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
|
-
|
|
15
|
+
protected override _generateActors(): void {
|
|
16
|
+
super._generateActors();
|
|
21
17
|
this._threeLoader = new ThreeTemplateLoader();
|
|
18
|
+
this._actors.push(this._threeLoader);
|
|
22
19
|
|
|
23
|
-
this.
|
|
24
|
-
this._scene.add(this._container);
|
|
20
|
+
for (const actor of this._actors) this.add(actor);
|
|
25
21
|
}
|
|
26
22
|
|
|
27
|
-
protected
|
|
23
|
+
protected _show(): void {
|
|
28
24
|
this._threeLoader.material.show();
|
|
29
25
|
}
|
|
30
26
|
|
|
31
|
-
protected
|
|
27
|
+
protected _hide(): void {
|
|
32
28
|
this._threeLoader.material.hide();
|
|
33
29
|
}
|
|
34
30
|
|
package/template-vanilla/src/experiences/views/threes/loaders/components/ThreeTemplateLoader.ts
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
import { Mesh,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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(
|
|
15
|
-
super(
|
|
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.
|
|
25
|
+
this.add(this._environment);
|
|
34
26
|
}
|
|
35
27
|
|
|
36
|
-
|
|
37
|
-
|
|
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.
|
|
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);
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { DataTexture, DirectionalLight, Object3D, Vector3 } from 'three';
|
|
2
2
|
import { AssetId } from '../../../../constants/experiences/AssetId';
|
|
3
|
-
import
|
|
3
|
+
import MainThreeApp from '../../../../engines/threes/app/MainThreeApp';
|
|
4
4
|
import DebugManager from '../../../../managers/DebugManager';
|
|
5
5
|
import ThreeAssetsManager from '../../../../managers/threes/ThreeAssetsManager';
|
|
6
6
|
|
|
7
|
-
interface
|
|
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
|
-
|
|
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.
|
|
34
|
+
this._environmentMap.texture = ThreeAssetsManager.getHDR(AssetId.THREE_HDR_TEMPLATE);
|
|
39
35
|
this._environmentMap.texture.needsUpdate = true;
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
MainThreeApp.scene.environment = this._environmentMap.texture;
|
|
38
|
+
MainThreeApp.scene.environmentIntensity = this._environmentMap.intensity!;
|
|
43
39
|
|
|
44
|
-
if (DebugManager.
|
|
45
|
-
const environmentFolder = DebugManager.
|
|
40
|
+
if (DebugManager.isActive) {
|
|
41
|
+
const environmentFolder = DebugManager.gui.addFolder('Environment');
|
|
46
42
|
environmentFolder.add(this._environmentMap, 'intensity', 0, 10, 0.01).onChange(() => {
|
|
47
|
-
|
|
43
|
+
MainThreeApp.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.
|
|
68
|
-
const sunLightFolder = DebugManager.
|
|
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');
|
|
@@ -73,5 +69,5 @@ export default class Environment extends Object3D {
|
|
|
73
69
|
}
|
|
74
70
|
}
|
|
75
71
|
|
|
76
|
-
public update(_dt: number): void {}
|
|
72
|
+
public update(_dt: number): void { }
|
|
77
73
|
}
|
package/template-vanilla/src/experiences/views/threes/worlds/components/actors/TemplateFont.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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
|
}
|