Skip to content

Commit 34ac52f

Browse files
committed
Update engine & js demo features
1 parent ea8f6df commit 34ac52f

6 files changed

Lines changed: 231 additions & 38 deletions

File tree

src/engine/sample_engine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "graphics/sample_renderer.h"
99
#include "graphics/renderer_storage.h"
10+
#include "graphics/primitives/quad_mesh.h"
1011

1112
#include "engine/scene.h"
1213

@@ -46,7 +47,7 @@ int SampleEngine::post_initialize()
4647
{
4748
MeshInstance3D* grid = new MeshInstance3D();
4849
grid->set_name("Grid");
49-
grid->add_surface(RendererStorage::get_surface("quad"));
50+
grid->set_mesh(new QuadMesh());
5051
grid->set_position(glm::vec3(0.0f));
5152
grid->rotate(glm::radians(90.0f), glm::vec3(1.0f, 0.0f, 0.0f));
5253
grid->scale(glm::vec3(10.f));

www/index.js

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ if (ENVIRONMENT_IS_NODE) {
3131

3232
// --pre-jses are emitted after the Module integration code, so that they can
3333
// refer to Module (if they choose; they can also define Module)
34-
// include: C:\Users\alexr\AppData\Local\Temp\tmpyqskrwfr.js
34+
// include: C:\Users\alexr\AppData\Local\Temp\tmp856z7ti0.js
3535

3636
Module['expectedDataFileDownloads'] ??= 0;
3737
Module['expectedDataFileDownloads']++;
@@ -221,7 +221,7 @@ Module['FS_createPath']("/data/textures", "environments", true, true);
221221

222222
})();
223223

224-
// end include: C:\Users\alexr\AppData\Local\Temp\tmpyqskrwfr.js
224+
// end include: C:\Users\alexr\AppData\Local\Temp\tmp856z7ti0.js
225225

226226

227227
var arguments_ = [];
@@ -6078,12 +6078,65 @@ async function createWasm() {
60786078
};
60796079

60806080

6081+
6082+
var emval_returnValue = (returnType, destructorsRef, handle) => {
6083+
var destructors = [];
6084+
var result = returnType['toWireType'](destructors, handle);
6085+
if (destructors.length) {
6086+
// void, primitives and any other types w/o destructors don't need to allocate a handle
6087+
HEAPU32[((destructorsRef)>>2)] = Emval.toHandle(destructors);
6088+
}
6089+
return result;
6090+
};
6091+
var __emval_as = (handle, returnType, destructorsRef) => {
6092+
handle = Emval.toValue(handle);
6093+
returnType = requireRegisteredType(returnType, 'emval::as');
6094+
return emval_returnValue(returnType, destructorsRef, handle);
6095+
};
6096+
6097+
6098+
var emval_symbols = {
6099+
};
6100+
6101+
var getStringOrSymbol = (address) => {
6102+
var symbol = emval_symbols[address];
6103+
if (symbol === undefined) {
6104+
return readLatin1String(address);
6105+
}
6106+
return symbol;
6107+
};
6108+
6109+
var __emval_get_module_property = (name) => {
6110+
name = getStringOrSymbol(name);
6111+
return Emval.toHandle(Module[name]);
6112+
};
6113+
6114+
var __emval_instanceof = (object, constructor) => {
6115+
object = Emval.toValue(object);
6116+
constructor = Emval.toValue(constructor);
6117+
return object instanceof constructor;
6118+
};
6119+
6120+
6121+
6122+
var __emval_run_destructors = (handle) => {
6123+
var destructors = Emval.toValue(handle);
6124+
runDestructors(destructors);
6125+
__emval_decref(handle);
6126+
};
6127+
6128+
60816129
var __emval_take_value = (type, arg) => {
60826130
type = requireRegisteredType(type, '_emval_take_value');
60836131
var v = type['readValueFromPointer'](arg);
60846132
return Emval.toHandle(v);
60856133
};
60866134

6135+
var __emval_typeof = (handle) => {
6136+
handle = Emval.toValue(handle);
6137+
return Emval.toHandle(typeof handle);
6138+
};
6139+
60876140
var INT53_MAX = 9007199254740992;
60886141

60896142
var INT53_MIN = -9007199254740992;
@@ -11594,8 +11647,20 @@ var wasmImports = {
1159411647
/** @export */
1159511648
_embind_register_void: __embind_register_void,
1159611649
/** @export */
11650+
_emval_as: __emval_as,
11651+
/** @export */
11652+
_emval_decref: __emval_decref,
11653+
/** @export */
11654+
_emval_get_module_property: __emval_get_module_property,
11655+
/** @export */
11656+
_emval_instanceof: __emval_instanceof,
11657+
/** @export */
11658+
_emval_run_destructors: __emval_run_destructors,
11659+
/** @export */
1159711660
_emval_take_value: __emval_take_value,
1159811661
/** @export */
11662+
_emval_typeof: __emval_typeof,
11663+
/** @export */
1159911664
_gmtime_js: __gmtime_js,
1160011665
/** @export */
1160111666
_localtime_js: __localtime_js,
@@ -11951,6 +12016,7 @@ var dynCall_iiffiii = Module['dynCall_iiffiii'] = (a0, a1, a2, a3, a4, a5, a6) =
1195112016
var dynCall_iifffiiiii = Module['dynCall_iifffiiiii'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (dynCall_iifffiiiii = Module['dynCall_iifffiiiii'] = wasmExports['dynCall_iifffiiiii'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
1195212017
var dynCall_iiiiiiiii = Module['dynCall_iiiiiiiii'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (dynCall_iiiiiiiii = Module['dynCall_iiiiiiiii'] = wasmExports['dynCall_iiiiiiiii'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);
1195312018
var dynCall_iiffii = Module['dynCall_iiffii'] = (a0, a1, a2, a3, a4, a5) => (dynCall_iiffii = Module['dynCall_iiffii'] = wasmExports['dynCall_iiffii'])(a0, a1, a2, a3, a4, a5);
12019+
var dynCall_viiifii = Module['dynCall_viiifii'] = (a0, a1, a2, a3, a4, a5, a6) => (dynCall_viiifii = Module['dynCall_viiifii'] = wasmExports['dynCall_viiifii'])(a0, a1, a2, a3, a4, a5, a6);
1195412020
var dynCall_viifff = Module['dynCall_viifff'] = (a0, a1, a2, a3, a4, a5) => (dynCall_viifff = Module['dynCall_viifff'] = wasmExports['dynCall_viifff'])(a0, a1, a2, a3, a4, a5);
1195512021
var dynCall_viiifff = Module['dynCall_viiifff'] = (a0, a1, a2, a3, a4, a5, a6) => (dynCall_viiifff = Module['dynCall_viiifff'] = wasmExports['dynCall_viiifff'])(a0, a1, a2, a3, a4, a5, a6);
1195612022
var dynCall_viji = Module['dynCall_viji'] = (a0, a1, a2, a3) => (dynCall_viji = Module['dynCall_viji'] = wasmExports['dynCall_viji'])(a0, a1, a2, a3);

www/index.wasm

168 KB
Binary file not shown.

www/script.js

Lines changed: 111 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,6 @@ this.onRender = function() {
187187
const meshInstance3D = WGE.parseObj( "torus.obj", true, ( meshInstance3D ) => {
188188
scene.addNode( meshInstance3D, -1 );
189189
window.torus = meshInstance3D; // Store the torus mesh instance globally for debugging
190-
191-
// const torusMaterial = meshInstance3D.getSurfaceMaterial();
192-
// // torusMaterial.cullType = WGE.CullType.CULL_NONE;
193-
// torusMaterial.color = new WGE.vec4(1, 0, 1, 1);
194-
// torusMaterial.setShader( WGE.RendererStorage.getShaderFromName( "mesh_forward", torusMaterial ) );
195-
196-
// const torusSurface = meshInstance3D.getSurface( 0 );
197-
// meshInstance3D.setSurfaceMaterialOverride( torusSurface, torusMaterial );
198190
});
199191
}
200192

@@ -241,7 +233,8 @@ this.onRender = function() {
241233
{ name: "Sphere", callback: this.onAddMesh.bind( this ) },
242234
{ name: "Capsule", callback: this.onAddMesh.bind( this ) },
243235
{ name: "Cylinder", callback: this.onAddMesh.bind( this ) },
244-
{ name: "Torus", callback: this.onAddMesh.bind( this ) }
236+
{ name: "Torus", callback: this.onAddMesh.bind( this ) },
237+
{ name: "Text", callback: this.onAddMesh.bind( this ) },
245238
] },
246239
{ name: "Light", submenu: [
247240
{ name: "Directional", callback: this.onAddLight.bind( this ) },
@@ -298,19 +291,20 @@ this.onRender = function() {
298291
{
299292
name: "Translate",
300293
icon: "Move",
301-
callback: (value, event) => console.log(value),
302-
selectable: true
294+
callback: this.onGizmoMode.bind( this ),
295+
selectable: true,
296+
selected: true,
303297
},
304298
{
305299
name: "Rotate",
306300
icon: "RotateRight",
307-
callback: (value, event) => console.log(value),
301+
callback: this.onGizmoMode.bind( this ),
308302
selectable: true
309303
},
310304
{
311305
name: "Scale",
312306
icon: "Scale3d",
313-
callback: (value, event) => console.log(value),
307+
callback: this.onGizmoMode.bind( this ),
314308
selectable: true
315309
}
316310
],
@@ -531,7 +525,46 @@ this.onRender = function() {
531525
},
532526

533527
onNewScene() {
534-
LX.prompt("Are you sure you want to create a new scene? This will discard the current scene.", "New Scene", (ok) => {}, { input: false });
528+
LX.prompt("Are you sure you want to create a new scene? This will discard the current scene.", "New Scene", () => {
529+
530+
this.scene.deleteAll();
531+
532+
// Add new environment
533+
{
534+
this.environment = new WGE.Environment3D();
535+
this.environment.setTexture( "test.hdr" );
536+
this.scene.addNode( this.environment, -1 );
537+
}
538+
539+
this.sceneTreePanel.refresh();
540+
this.selectedNode = null;
541+
542+
this.objectPanel.clear();
543+
this.geometryPanel.clear();
544+
this.materialPanel.clear();
545+
this.scriptPanel.clear();
546+
547+
this.nodePanelTabs.tabDOMs[ "Object" ].classList.toggle( "hidden", true );
548+
this.nodePanelTabs.tabDOMs[ "Geometry" ].classList.toggle( "hidden", true );
549+
this.nodePanelTabs.tabDOMs[ "Material" ].classList.toggle( "hidden", true );
550+
this.nodePanelTabs.tabDOMs[ "Script" ].classList.toggle( "hidden", true );
551+
552+
}, { input: false });
553+
},
554+
555+
onGizmoMode( mode ) {
556+
switch( mode )
557+
{
558+
case "Translate":
559+
this.gizmo.operation = WGE.GizmoOp.TRANSLATE;
560+
break;
561+
case "Rotate":
562+
this.gizmo.operation = WGE.GizmoOp.ROTATE;
563+
break;
564+
case "Scale":
565+
this.gizmo.operation = WGE.GizmoOp.SCALE;
566+
break;
567+
}
535568
},
536569

537570
onDeleteNode() {
@@ -564,6 +597,12 @@ this.onRender = function() {
564597

565598
const meshInstance = new WGE.MeshInstance3D();
566599

600+
if( geometryType === "Text" )
601+
{
602+
this.addTextMesh();
603+
return;
604+
}
605+
567606
// Create a mesh instance
568607
const geometryClass = WGE[ `${ geometryType }Mesh` ];
569608

@@ -622,6 +661,17 @@ this.onRender = function() {
622661
}
623662
},
624663

664+
addTextMesh( ) {
665+
666+
const textInstance = new WGE.Text3D("Empty Text");
667+
textInstance.name = `${ textInstance.mesh.type }_${ LX.guidGenerator() }`;
668+
textInstance.generateMesh();
669+
670+
this.scene.addNode( textInstance, -1 );
671+
672+
this.sceneTreePanel.refresh();
673+
},
674+
625675
addLight() {
626676
const light = new WGE.DirectionalLight3D();
627677
light.setPosition( new WGE.vec3(0.0, 5.0, 0.0) );
@@ -646,11 +696,6 @@ this.onRender = function() {
646696

647697
const surfaces = node.mesh.surfaces;
648698

649-
if( surfaces.size() > 0 )
650-
{
651-
this.geometryPanel.addSeparator();
652-
}
653-
654699
for( let i = 0; i < surfaces.size(); i++ )
655700
{
656701
const surface = surfaces.get( i );
@@ -702,7 +747,10 @@ this.onRender = function() {
702747

703748
if( obj.constructor.properties?.length )
704749
{
705-
panel.branch( options.propertiesTitle ?? "Properties", { icon: options.propertiesIcon } );
750+
if( options.branch ?? true )
751+
{
752+
panel.branch( options.propertiesTitle ?? "Properties", { icon: options.propertiesIcon } );
753+
}
706754

707755
for( let p of obj.constructor.properties )
708756
{
@@ -741,6 +789,23 @@ this.onRender = function() {
741789
case Boolean:
742790
panel.addCheckbox( widgetName, defaultValue, defaultCallback, { disabled: p.disabled } );
743791
break;
792+
case WGE.vec2:
793+
{
794+
const value = obj[ p.name ] ?? new WGE.vec2( 0.0, 0.0 );
795+
panel.addVector2( widgetName, [ value.x, value.y ], value => {
796+
const vec2 = new WGE.vec2( value[ 0 ], value[ 1 ] );
797+
if( p.setter )
798+
{
799+
p.setter.call( obj, vec2 );
800+
}
801+
else
802+
{
803+
obj[ p.name ] = vec2;
804+
}
805+
LX.emit( `@on_${ p.name }_changed`, { obj, value } );
806+
}, { min: p.min, max: p.max, step: p.step, disabled: p.disabled } );
807+
break;
808+
}
744809
case WGE.vec3:
745810
{
746811
const value = obj[ p.name ] ?? new WGE.vec3( 0.0, 0.0, 0.0 );
@@ -873,6 +938,32 @@ this.onRender = function() {
873938

874939
break;
875940
}
941+
case WGE.Skeleton:
942+
{
943+
const skeleton = defaultValue;
944+
945+
if( !panel.addSkeleton )
946+
{
947+
LX.ADD_CUSTOM_WIDGET( "Skeleton", {
948+
icon,
949+
default: {},
950+
onCreate: ( panel, skeleton, node ) => {
951+
if( !skeleton )
952+
{
953+
skeleton = node.skeleton = new WGE.Skeleton();
954+
}
955+
956+
this.inspectPropertiesAndMethods( node, skeleton, panel, false, { branch: false } );
957+
}
958+
});
959+
}
960+
961+
panel.addSkeleton( widgetName, skeleton, ( value ) => {
962+
LX.emit( `@on_${ p.name }_changed`, { obj, value } );
963+
}, skeleton, node );
964+
965+
break;
966+
}
876967
case WGE.AABB:
877968
{
878969
const aabb = defaultValue;

0 commit comments

Comments
 (0)