@benjos/create-boilerplate 1.4.0 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benjos/create-boilerplate",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "CLI to scaffold Three.js projects with framework support",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "template-react",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "template-react",
9
- "version": "1.4.0",
9
+ "version": "1.4.1",
10
10
  "dependencies": {
11
11
  "@dimforge/rapier3d": "^0.19.3",
12
12
  "gsap": "^3.14.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "template-react",
3
3
  "private": true,
4
- "version": "1.4.0",
4
+ "version": "1.4.1",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "template-vanilla",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "template-vanilla",
9
- "version": "1.4.0",
9
+ "version": "1.4.1",
10
10
  "dependencies": {
11
11
  "@benjos/cookware": "^1.0.4",
12
12
  "@benjos/spices": "^1.0.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "template-vanilla",
3
3
  "private": true,
4
- "version": "1.4.0",
4
+ "version": "1.4.1",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -4,7 +4,6 @@ import InitCommand from './commands/InitCommand';
4
4
  import MainHTML from './engines/htmls/MainHTML';
5
5
  import MainThree from './engines/threes/MainThree';
6
6
  import LoaderManager from './managers/LoaderManager';
7
- import LoaderThree from './engines/threes/LoaderThree';
8
7
 
9
8
  class Experience {
10
9
  private _isInitialized: boolean = false;
@@ -15,9 +14,8 @@ class Experience {
15
14
 
16
15
  InitCommand.init();
17
16
  MainHTML.init();
18
- LoaderThree.init();
19
17
  MainThree.init();
20
- void LoaderManager.loadAllAssets();
18
+ LoaderManager.loadAllAssets();
21
19
  }
22
20
  }
23
21
 
@@ -3,7 +3,7 @@ import { KeyboardConstant } from '@benjos/spices';
3
3
  import { Vector3 } from 'three';
4
4
  import { OrbitControls } from 'three/examples/jsm/Addons.js';
5
5
  import { CameraId } from '../../constants/experiences/CameraId';
6
- import MainThree from '../../engines/threes/MainThree';
6
+ import MainThreeApp from '../../engines/threes/app/MainThreeApp';
7
7
  import ThreeRaycasterManager from '../../managers/threes/ThreeRaycasterManager';
8
8
  import { ThreeCameraOptions, ThreeCameraType } from '../../types/cameraTypes';
9
9
  import ThreeCameraControllerBase from './bases/ThreeCameraControllerBase';
@@ -38,14 +38,14 @@ export default class DebugThreeCameraController extends ThreeCameraControllerBas
38
38
  }
39
39
 
40
40
  private _setControls(): void {
41
- this._controls = new OrbitControls(this._camera, MainThree.domElementContainer);
41
+ this._controls = new OrbitControls(this._camera, MainThreeApp.domElementContainer);
42
42
  this._controls.enableDamping = true;
43
43
  this._controls.dampingFactor = DebugThreeCameraController._CONTROLS_DAMPING_FACTOR;
44
44
  }
45
45
 
46
46
  private readonly _onMouseDown = (): void => {
47
47
  if (DomKeyboardManager.isKeyDown(DebugThreeCameraController._CONTROLS_CENTER_KEY)) {
48
- const intersect = ThreeRaycasterManager.castFromCameraToPointer(MainThree.scene.children);
48
+ const intersect = ThreeRaycasterManager.castFromCameraToPointer(MainThreeApp.scene.children);
49
49
  if (intersect.length > 0) {
50
50
  this._controls.target.copy(intersect[0].point);
51
51
  this._controls.update();
@@ -1,6 +1,6 @@
1
1
  import { Vector3 } from 'three';
2
2
  import { CameraId } from '../../constants/experiences/CameraId';
3
- import LoaderThree from '../../engines/threes/LoaderThree';
3
+ import LoaderThreeApp from '../../engines/threes/app/LoaderThreeApp';
4
4
  import { ThreeCameraOptions, ThreeCameraType } from '../../types/cameraTypes';
5
5
  import ThreeCameraControllerBase from './bases/ThreeCameraControllerBase';
6
6
 
@@ -15,7 +15,7 @@ export default class LoaderThreeCameraController extends ThreeCameraControllerBa
15
15
  private static readonly _DEFAULT_CONTAINER_POSITION: Vector3 = new Vector3(0, 0, 0);
16
16
 
17
17
  constructor() {
18
- super(CameraId.THREE_LOADER, LoaderThreeCameraController._LOADER_CAMERA_OPTIONS, LoaderThree.scene);
18
+ super(CameraId.THREE_LOADER, LoaderThreeCameraController._LOADER_CAMERA_OPTIONS, LoaderThreeApp.scene);
19
19
  this._container.position.copy(LoaderThreeCameraController._DEFAULT_CONTAINER_POSITION);
20
20
  }
21
21
 
@@ -1,7 +1,7 @@
1
1
  import { DomResizeManager } from '@benjos/cookware';
2
2
  import { Object3D, OrthographicCamera, PerspectiveCamera, Scene } from 'three';
3
3
  import type { CameraId } from '../../../constants/experiences/CameraId';
4
- import MainThree from '../../../engines/threes/MainThree';
4
+ import MainThreeApp from '../../../engines/threes/app/MainThreeApp';
5
5
  import { ThreeCameraOptions, ThreeCameraType, ThreeControls } from '../../../types/cameraTypes';
6
6
 
7
7
  export default abstract class ThreeCameraControllerBase<T extends ThreeControls = ThreeControls> extends Object3D {
@@ -21,7 +21,7 @@ export default abstract class ThreeCameraControllerBase<T extends ThreeControls
21
21
  constructor(
22
22
  cameraId: CameraId,
23
23
  cameraOptions: ThreeCameraOptions = ThreeCameraControllerBase._DEFAULT_CAMERA_OPTIONS,
24
- scene: Scene = MainThree.scene
24
+ scene: Scene = MainThreeApp.scene
25
25
  ) {
26
26
  super();
27
27
  this._cameraId = cameraId;
@@ -1,96 +1,11 @@
1
- import { DomKeyboardManager, DomUtils } from '@benjos/cookware';
2
- import { KeyboardConstant } from '@benjos/spices';
3
- import { MeshStandardMaterial, Scene } from 'three';
4
- import DebugThreeCameraController from '../../cameras/threes/DebugThreeCameraController';
5
- import MainThreeCameraController from '../../cameras/threes/MainThreeCameraController';
6
- import { CameraId } from '../../constants/experiences/CameraId';
7
- import DebugManager from '../../managers/DebugManager';
8
- import ThreeCameraControllerManager from '../../managers/threes/ThreeCameraControllerManager';
9
- import Renderer from '../../renderers/threes/Renderer';
10
- import WorldThreeView from '../../views/threes/worlds/WorldThreeView';
11
- import ThreeBase from './bases/ThreeBase';
1
+ import LoaderThreeApp from "./app/LoaderThreeApp";
2
+ import MainThreeApp from "./app/MainThreeApp";
12
3
 
13
- class MainThree extends ThreeBase {
14
- private static readonly _DEBUG_WIREFRAME_MATERIAL_COLOR: number = 0x3f79f3;
15
- private static readonly _TOGGLE_SWITCH_TO_DEBUG_CAMERA_KEYS: string[] = [
16
- KeyboardConstant.CODES.SHIFT_LEFT,
17
- KeyboardConstant.CODES.KEY_C,
18
- ];
19
- private static readonly _TOGGLE_WIREFRAME_KEYS: string[] = [
20
- KeyboardConstant.CODES.SHIFT_LEFT,
21
- KeyboardConstant.CODES.KEY_W,
22
- ];
23
-
24
- declare private _debugWireframeMaterial: MeshStandardMaterial;
25
-
26
- constructor() {
27
- super(DomUtils.GetApp());
28
- }
29
-
30
- public override init(): void {
31
- super.init();
32
-
33
- if (DebugManager.isActive) {
34
- window.mainThree = this;
35
- DomKeyboardManager.onKeyDown.add(this._onKeyDown);
36
- }
37
- }
38
-
39
- protected override _generateScenes(): void {
40
- this._scene = new Scene();
41
-
42
- if (DebugManager.isActive) {
43
- this._debugWireframeMaterial = new MeshStandardMaterial({
44
- wireframe: true,
45
- color: MainThree._DEBUG_WIREFRAME_MATERIAL_COLOR,
46
- });
47
- }
48
- }
49
-
50
- protected override _generateCameras(): void {
51
- ThreeCameraControllerManager.add(new MainThreeCameraController(), true);
52
- this._cameraController = ThreeCameraControllerManager.get(CameraId.THREE_MAIN);
53
-
54
- if (DebugManager.isActive) {
55
- ThreeCameraControllerManager.add(new DebugThreeCameraController());
56
- }
57
-
58
- ThreeCameraControllerManager.onActiveThreeCameraControllerChange.add(this._onActiveCameraControllerChange);
59
- }
60
-
61
- protected override _generateRenderers(): void {
62
- this._renderer = new Renderer(this._scene, this._cameraController.camera, { antialias: true });
63
- this._domElementContainer.appendChild(this._renderer.domElement);
4
+ class MainThree {
5
+ public init(): void {
6
+ LoaderThreeApp.init();
7
+ MainThreeApp.init();
64
8
  }
65
-
66
- protected override _generateViews(): void {
67
- const worldThreeView = new WorldThreeView();
68
- this._views.push(worldThreeView);
69
- this._setCurrentView(worldThreeView);
70
- }
71
-
72
- private _onActiveCameraControllerChange = (): void => {
73
- this._cameraController = ThreeCameraControllerManager.activeThreeCameraController;
74
- this._renderer.setCamera(this._cameraController.camera);
75
- this._onResize();
76
- };
77
-
78
- private readonly _onKeyDown = (_e: KeyboardEvent): void => {
79
- if (DebugManager.isActive) {
80
- if (DomKeyboardManager.areAllKeysDown(MainThree._TOGGLE_SWITCH_TO_DEBUG_CAMERA_KEYS)) {
81
- ThreeCameraControllerManager.setActiveCamera(
82
- this._cameraController.cameraId === CameraId.THREE_MAIN ? CameraId.THREE_DEBUG : CameraId.THREE_MAIN
83
- );
84
- } else if (DomKeyboardManager.areAllKeysDown(MainThree._TOGGLE_WIREFRAME_KEYS)) {
85
- if (this._scene.overrideMaterial === null) {
86
- this._scene.overrideMaterial = this._debugWireframeMaterial;
87
- } else {
88
- this._scene.overrideMaterial = null;
89
- }
90
- }
91
- }
92
- };
93
9
  }
94
10
 
95
- export type { MainThree };
96
11
  export default new MainThree();
@@ -1,13 +1,13 @@
1
1
  import { DomUtils } from '@benjos/cookware';
2
2
  import { Scene } from 'three';
3
- import LoaderThreeCameraController from '../../cameras/threes/LoaderThreeCameraController';
4
- import { CameraId } from '../../constants/experiences/CameraId';
5
- import ThreeCameraControllerManager from '../../managers/threes/ThreeCameraControllerManager';
6
- import LoaderRenderer from '../../renderers/threes/LoaderRenderer';
7
- import LoaderThreeView from '../../views/threes/loaders/LoaderThreeView';
8
- import ThreeBase from './bases/ThreeBase';
3
+ import LoaderThreeCameraController from '../../../cameras/threes/LoaderThreeCameraController';
4
+ import { CameraId } from '../../../constants/experiences/CameraId';
5
+ import ThreeCameraControllerManager from '../../../managers/threes/ThreeCameraControllerManager';
6
+ import LoaderRenderer from '../../../renderers/threes/LoaderRenderer';
7
+ import LoaderThreeView from '../../../views/threes/loaders/LoaderThreeView';
8
+ import ThreeAppBase from './bases/ThreeAppBase';
9
9
 
10
- class LoaderThree extends ThreeBase {
10
+ class LoaderThreeApp extends ThreeAppBase {
11
11
  constructor() {
12
12
  super(DomUtils.GetLoader());
13
13
  }
@@ -36,4 +36,4 @@ class LoaderThree extends ThreeBase {
36
36
  }
37
37
  }
38
38
 
39
- export default new LoaderThree();
39
+ export default new LoaderThreeApp();
@@ -0,0 +1,96 @@
1
+ import { DomKeyboardManager, DomUtils } from '@benjos/cookware';
2
+ import { KeyboardConstant } from '@benjos/spices';
3
+ import { MeshStandardMaterial, Scene } from 'three';
4
+ import DebugThreeCameraController from '../../../cameras/threes/DebugThreeCameraController';
5
+ import MainThreeCameraController from '../../../cameras/threes/MainThreeCameraController';
6
+ import { CameraId } from '../../../constants/experiences/CameraId';
7
+ import DebugManager from '../../../managers/DebugManager';
8
+ import ThreeCameraControllerManager from '../../../managers/threes/ThreeCameraControllerManager';
9
+ import Renderer from '../../../renderers/threes/Renderer';
10
+ import WorldThreeView from '../../../views/threes/worlds/WorldThreeView';
11
+ import ThreeAppBase from './bases/ThreeAppBase';
12
+
13
+ class MainThreeApp extends ThreeAppBase {
14
+ private static readonly _DEBUG_WIREFRAME_MATERIAL_COLOR: number = 0x3f79f3;
15
+ private static readonly _TOGGLE_SWITCH_TO_DEBUG_CAMERA_KEYS: string[] = [
16
+ KeyboardConstant.CODES.SHIFT_LEFT,
17
+ KeyboardConstant.CODES.KEY_C,
18
+ ];
19
+ private static readonly _TOGGLE_WIREFRAME_KEYS: string[] = [
20
+ KeyboardConstant.CODES.SHIFT_LEFT,
21
+ KeyboardConstant.CODES.KEY_W,
22
+ ];
23
+
24
+ declare private _debugWireframeMaterial: MeshStandardMaterial;
25
+
26
+ constructor() {
27
+ super(DomUtils.GetApp());
28
+ }
29
+
30
+ public override init(): void {
31
+ super.init();
32
+
33
+ if (DebugManager.isActive) {
34
+ window.mainThreeApp = this;
35
+ DomKeyboardManager.onKeyDown.add(this._onKeyDown);
36
+ }
37
+ }
38
+
39
+ protected override _generateScenes(): void {
40
+ this._scene = new Scene();
41
+
42
+ if (DebugManager.isActive) {
43
+ this._debugWireframeMaterial = new MeshStandardMaterial({
44
+ wireframe: true,
45
+ color: MainThreeApp._DEBUG_WIREFRAME_MATERIAL_COLOR,
46
+ });
47
+ }
48
+ }
49
+
50
+ protected override _generateCameras(): void {
51
+ ThreeCameraControllerManager.add(new MainThreeCameraController(), true);
52
+ this._cameraController = ThreeCameraControllerManager.get(CameraId.THREE_MAIN);
53
+
54
+ if (DebugManager.isActive) {
55
+ ThreeCameraControllerManager.add(new DebugThreeCameraController());
56
+ }
57
+
58
+ ThreeCameraControllerManager.onActiveThreeCameraControllerChange.add(this._onActiveCameraControllerChange);
59
+ }
60
+
61
+ protected override _generateRenderers(): void {
62
+ this._renderer = new Renderer(this._scene, this._cameraController.camera, { antialias: true });
63
+ this._domElementContainer.appendChild(this._renderer.domElement);
64
+ }
65
+
66
+ protected override _generateViews(): void {
67
+ const worldThreeView = new WorldThreeView();
68
+ this._views.push(worldThreeView);
69
+ this._setCurrentView(worldThreeView);
70
+ }
71
+
72
+ private _onActiveCameraControllerChange = (): void => {
73
+ this._cameraController = ThreeCameraControllerManager.activeThreeCameraController;
74
+ this._renderer.setCamera(this._cameraController.camera);
75
+ this._onResize();
76
+ };
77
+
78
+ private readonly _onKeyDown = (_e: KeyboardEvent): void => {
79
+ if (DebugManager.isActive) {
80
+ if (DomKeyboardManager.areAllKeysDown(MainThreeApp._TOGGLE_SWITCH_TO_DEBUG_CAMERA_KEYS)) {
81
+ ThreeCameraControllerManager.setActiveCamera(
82
+ this._cameraController.cameraId === CameraId.THREE_MAIN ? CameraId.THREE_DEBUG : CameraId.THREE_MAIN
83
+ );
84
+ } else if (DomKeyboardManager.areAllKeysDown(MainThreeApp._TOGGLE_WIREFRAME_KEYS)) {
85
+ if (this._scene.overrideMaterial === null) {
86
+ this._scene.overrideMaterial = this._debugWireframeMaterial;
87
+ } else {
88
+ this._scene.overrideMaterial = null;
89
+ }
90
+ }
91
+ }
92
+ };
93
+ }
94
+
95
+ export type { MainThreeApp };
96
+ export default new MainThreeApp();
@@ -1,10 +1,10 @@
1
1
  import { DomResizeManager, TickerManager } from '@benjos/cookware';
2
2
  import { Scene } from 'three';
3
- import ThreeCameraControllerBase from '../../../cameras/threes/bases/ThreeCameraControllerBase';
4
- import WebGLRendererBase from '../../../renderers/threes/bases/WebGLRendererBase';
5
- import ThreeViewBase from '../../../views/threes/bases/ThreeViewBase';
3
+ import ThreeCameraControllerBase from '../../../../cameras/threes/bases/ThreeCameraControllerBase';
4
+ import WebGLRendererBase from '../../../../renderers/threes/bases/WebGLRendererBase';
5
+ import ThreeViewBase from '../../../../views/threes/bases/ThreeViewBase';
6
6
 
7
- export default abstract class ThreeBase {
7
+ export default abstract class ThreeAppBase {
8
8
  declare protected _domElementContainer: HTMLElement;
9
9
  declare protected _scene: Scene;
10
10
  declare protected _cameraController: ThreeCameraControllerBase;
@@ -49,12 +49,14 @@ export default abstract class ThreeBase {
49
49
  if (this._currentView === view) return;
50
50
  if (this._currentView) this._removeOldView(this._currentView);
51
51
  this._currentView = view;
52
+ view.init();
52
53
  this.scene.add(this._currentView);
53
54
  }
54
55
 
55
56
  private _removeOldView(view: ThreeViewBase): void {
56
57
  this.scene.remove(view);
57
58
  view.dispose();
59
+ view.reset();
58
60
  }
59
61
 
60
62
  protected _onResize = (): void => {
@@ -2,7 +2,7 @@ import { DomKeyboardManager } from '@benjos/cookware';
2
2
  import { KeyboardConstant } from '@benjos/spices';
3
3
  import GUI from 'lil-gui';
4
4
  import { ThreePerf } from 'three-perf';
5
- import MainThree from '../engines/threes/MainThree';
5
+ import MainThreeApp from '../engines/threes/app/MainThreeApp';
6
6
 
7
7
  class DebugManager {
8
8
  private static readonly _IS_ACTIVE_STRING: string = '#debug';
@@ -40,7 +40,7 @@ class DebugManager {
40
40
  anchorX: DebugManager._THREE_PERF_ANCHOR_X,
41
41
  anchorY: DebugManager._THREE_PERF_ANCHOR_Y,
42
42
  domElement: document.body,
43
- renderer: MainThree.renderer,
43
+ renderer: MainThreeApp.renderer,
44
44
  showGraph: false,
45
45
  });
46
46
  };
@@ -1,6 +1,6 @@
1
1
  import { DomPointerManager } from '@benjos/cookware';
2
2
  import { Object3D, Raycaster, Vector2, type Intersection, type Object3DEventMap } from 'three';
3
- import MainThree from '../../engines/threes/MainThree';
3
+ import MainThreeApp from '../../engines/threes/app/MainThreeApp';
4
4
 
5
5
  class ThreeRaycasterManager {
6
6
  private readonly _raycaster = new Raycaster();
@@ -12,7 +12,7 @@ class ThreeRaycasterManager {
12
12
 
13
13
  public castFromCameraToPointer(objects: Object3D[], recursive = true): Intersection<Object3D<Object3DEventMap>>[] {
14
14
  this._pointerPosition.set(DomPointerManager.ndcX, DomPointerManager.ndcY);
15
- this._raycaster.setFromCamera(this._pointerPosition, MainThree.cameraController.camera);
15
+ this._raycaster.setFromCamera(this._pointerPosition, MainThreeApp.cameraController.camera);
16
16
  const intersects = this._raycaster.intersectObjects(objects, recursive);
17
17
  return intersects;
18
18
  }
@@ -1,9 +1,10 @@
1
- import { MainThree } from '../engines/threes/MainThree';
1
+ import { MainThreeApp } from '../engines/threes/app/MainThreeApp';
2
2
 
3
3
  declare global {
4
4
  interface Window {
5
- mainThree: MainThree;
5
+ mainThreeApp: MainThreeApp;
6
6
  }
7
7
  }
8
8
 
9
- export {};
9
+ export { };
10
+
@@ -10,6 +10,15 @@ export default abstract class ThreeViewBase extends Object3D {
10
10
  this._actors = [];
11
11
  }
12
12
 
13
+ public init(): void {
14
+ this.reset();
15
+ for (const actor of this._actors) actor.init();
16
+ }
17
+
18
+ public reset(): void {
19
+ for (const actor of this._actors) actor.reset();
20
+ }
21
+
13
22
  protected _generateActors(): void {
14
23
  //
15
24
  }
@@ -1,6 +1,6 @@
1
1
  import { DataTexture, DirectionalLight, Object3D, Vector3 } from 'three';
2
2
  import { AssetId } from '../../../../constants/experiences/AssetId';
3
- import MainThree from '../../../../engines/threes/MainThree';
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
 
@@ -34,13 +34,13 @@ export default class Environment extends Object3D {
34
34
  this._environmentMap.texture = ThreeAssetsManager.getHDR(AssetId.THREE_HDR_TEMPLATE);
35
35
  this._environmentMap.texture.needsUpdate = true;
36
36
 
37
- MainThree.scene.environment = this._environmentMap.texture;
38
- MainThree.scene.environmentIntensity = this._environmentMap.intensity!;
37
+ MainThreeApp.scene.environment = this._environmentMap.texture;
38
+ MainThreeApp.scene.environmentIntensity = this._environmentMap.intensity!;
39
39
 
40
40
  if (DebugManager.isActive) {
41
41
  const environmentFolder = DebugManager.gui.addFolder('Environment');
42
42
  environmentFolder.add(this._environmentMap, 'intensity', 0, 10, 0.01).onChange(() => {
43
- MainThree.scene.environmentIntensity = this._environmentMap.intensity!;
43
+ MainThreeApp.scene.environmentIntensity = this._environmentMap.intensity!;
44
44
  });
45
45
  }
46
46
  };
@@ -69,5 +69,5 @@ export default class Environment extends Object3D {
69
69
  }
70
70
  }
71
71
 
72
- public update(_dt: number): void {}
72
+ public update(_dt: number): void { }
73
73
  }
@@ -5,6 +5,14 @@ export default abstract class ActorBase extends Object3D {
5
5
  super();
6
6
  }
7
7
 
8
+ public init(): void {
9
+ this.reset();
10
+ }
11
+
12
+ public reset(): void {
13
+ //
14
+ }
15
+
8
16
  public dispose(): void {
9
17
  //
10
18
  }