@@ -3,19 +3,39 @@ import {
33 Actor ,
44 ActorComponent
55} from "@jolly-pixel/engine" ;
6+ import * as THREE from "three" ;
67
78// Import Internal Dependencies
89import {
910 loadVoxelTiledMap ,
10- VoxelRenderer
11+ TilesetLoader ,
12+ VoxelRenderer ,
13+ type VoxelWorldJSON
1114} from "../../../src/index.ts" ;
1215
1316export class VoxelBehavior extends ActorComponent {
14- world = loadVoxelTiledMap ( this . actor . world . assetManager , "tilemap/brackeys-level.tmj" , {
15- layerMode : "stacked"
16- } ) ;
17- // @ts -ignore
18- voxelRenderer : VoxelRenderer ;
17+ tilesetLoader = new TilesetLoader ( ) ;
18+
19+ world : VoxelWorldJSON | undefined ;
20+
21+ async initialize ( { assetManager } ) {
22+ console . log ( "initialize VoxelBehavior" ) ;
23+
24+ this . tilesetLoader = new TilesetLoader ( {
25+ manager : assetManager . context . manager
26+ } ) ;
27+ const mapLoader = loadVoxelTiledMap (
28+ this . actor . world . assetManager ,
29+ "tilemap/brackeys-level.tmj" ,
30+ {
31+ layerMode : "stacked"
32+ }
33+ ) ;
34+
35+ this . world = await mapLoader . getAsync ( ) ;
36+ console . log ( this . world ) ;
37+ await this . tilesetLoader . fromWorld ( this . world ) ;
38+ }
1939
2040 constructor (
2141 actor : Actor
@@ -27,15 +47,23 @@ export class VoxelBehavior extends ActorComponent {
2747 }
2848
2949 awake ( ) {
30- const world = this . world . get ( ) ;
31-
32- const voxelRenderer = this . actor . getComponent ( VoxelRenderer ) ;
33- if ( ! voxelRenderer ) {
34- throw new Error ( "VoxelRenderer component not found on actor" ) ;
50+ if ( ! this . world ) {
51+ throw new Error ( "world is not initilized" ) ;
3552 }
36- this . voxelRenderer = voxelRenderer ;
37- voxelRenderer
38- . load ( world )
39- . catch ( console . error ) ;
53+
54+ const vr = this . actor . addComponentAndGet ( VoxelRenderer , {
55+ material : "lambert" ,
56+ materialCustomizer : ( material ) => {
57+ if ( material instanceof THREE . MeshStandardMaterial ) {
58+ material . metalness = 0 ;
59+ material . roughness = 0.85 ;
60+ }
61+ } ,
62+ tilesetLoader : this . tilesetLoader
63+ } ) ;
64+
65+ vr . load ( this . world , {
66+ mergeLayers : true
67+ } ) ;
4068 }
4169}
0 commit comments