From b59cbe956c5aee23646d33c1304ed539405b52c7 Mon Sep 17 00:00:00 2001 From: kungfooman Date: Fri, 4 Jul 2025 16:55:33 +0200 Subject: [PATCH 1/3] Add options for StandardMaterial --- src/scene/materials/standard-material.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/scene/materials/standard-material.js b/src/scene/materials/standard-material.js index d563a3415d9..364986ddce7 100644 --- a/src/scene/materials/standard-material.js +++ b/src/scene/materials/standard-material.js @@ -575,8 +575,9 @@ class StandardMaterial extends Material { * * // Notify the material that it has been modified * material.update(); + * @param {Partial} [options] - Options for the material. */ - constructor() { + constructor(options) { super(); // storage for texture and cubemap asset references @@ -588,6 +589,10 @@ class StandardMaterial extends Material { this.shaderOptBuilder = new StandardMaterialOptionsBuilder(); this.reset(); + if (options) { + Object.assign(this, options); + this.update(); + } } reset() { From fe4950819ff466e543f0fb7e87f51aa94b626f64 Mon Sep 17 00:00:00 2001 From: kungfooman Date: Fri, 4 Jul 2025 17:40:27 +0200 Subject: [PATCH 2/3] Demonstrate complexity/line savings by shortening four physics examples --- .../physics/compound-collision.example.mjs | 14 ++------------ .../examples/physics/falling-shapes.example.mjs | 15 ++------------- .../physics/offset-collision.example.mjs | 16 ++-------------- .../src/examples/physics/raycast.example.mjs | 15 ++------------- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/examples/src/examples/physics/compound-collision.example.mjs b/examples/src/examples/physics/compound-collision.example.mjs index 96abdfc4f42..b4261c84dfe 100644 --- a/examples/src/examples/physics/compound-collision.example.mjs +++ b/examples/src/examples/physics/compound-collision.example.mjs @@ -60,20 +60,10 @@ app.on('destroy', () => { }); app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2); -/** - * @param {pc.Color} color - The diffuse color. - * @returns {pc.StandardMaterial} The standard material. - */ -function createMaterial(color) { - const material = new pc.StandardMaterial(); - material.diffuse = color; - material.update(); - return material; -} // Create a couple of materials for our objects -const red = createMaterial(new pc.Color(0.7, 0.3, 0.3)); -const gray = createMaterial(new pc.Color(0.7, 0.7, 0.7)); +const red = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.3, 0.3)}); +const gray = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.7, 0.7)}); // Define a scene hierarchy in JSON format. This is loaded/parsed in // the parseScene function below diff --git a/examples/src/examples/physics/falling-shapes.example.mjs b/examples/src/examples/physics/falling-shapes.example.mjs index d59b941efb3..a021c5367ad 100644 --- a/examples/src/examples/physics/falling-shapes.example.mjs +++ b/examples/src/examples/physics/falling-shapes.example.mjs @@ -69,21 +69,10 @@ assetListLoader.load(() => { // Set the gravity for our rigid bodies app.systems.rigidbody.gravity.set(0, -9.81, 0); - /** - * @param {pc.Color} color - The color of the material. - * @returns {pc.StandardMaterial} The new material. - */ - function createMaterial(color) { - const material = new pc.StandardMaterial(); - material.diffuse = color; - // we need to call material.update when we change its properties - material.update(); - return material; - } // create a few materials for our objects - const red = createMaterial(new pc.Color(1, 0.3, 0.3)); - const gray = createMaterial(new pc.Color(0.7, 0.7, 0.7)); + const red = new pc.StandardMaterial({diffuse: new pc.Color(1, 0.3, 0.3)}); + const gray = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.7, 0.7)}); // *********** Create our floor ******************* diff --git a/examples/src/examples/physics/offset-collision.example.mjs b/examples/src/examples/physics/offset-collision.example.mjs index 58ac3385712..449eccc5e07 100644 --- a/examples/src/examples/physics/offset-collision.example.mjs +++ b/examples/src/examples/physics/offset-collision.example.mjs @@ -94,21 +94,9 @@ assetListLoader.load(() => { // Set the gravity for our rigid bodies app.systems.rigidbody.gravity.set(0, -9.81, 0); - /** - * @param {pc.Color} color - The color. - * @returns {pc.StandardMaterial} The material. - */ - function createMaterial(color) { - const material = new pc.StandardMaterial(); - material.diffuse = color; - // we need to call material.update when we change its properties - material.update(); - return material; - } - // create a few materials for our objects - const red = createMaterial(new pc.Color(1, 0.3, 0.3)); - const gray = createMaterial(new pc.Color(0.7, 0.7, 0.7)); + const red = new pc.StandardMaterial({diffuse: new pc.Color(1, 0.3, 0.3)}); + const gray = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.7, 0.7)}); const floor = new pc.Entity(); floor.addComponent('render', { diff --git a/examples/src/examples/physics/raycast.example.mjs b/examples/src/examples/physics/raycast.example.mjs index f5b275676f0..bdec6d7d849 100644 --- a/examples/src/examples/physics/raycast.example.mjs +++ b/examples/src/examples/physics/raycast.example.mjs @@ -67,20 +67,9 @@ assetListLoader.load(() => { app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2); - /** - * @param {pc.Color} color - The color. - * @returns {pc.StandardMaterial} - The material. - */ - function createMaterial(color) { - const material = new pc.StandardMaterial(); - material.diffuse = color; - material.update(); - return material; - } - // Create a couple of materials - const red = createMaterial(new pc.Color(1, 0, 0)); - const green = createMaterial(new pc.Color(0, 1, 0)); + const red = new pc.StandardMaterial({diffuse: pc.Color.RED}); + const green = new pc.StandardMaterial({diffuse: pc.Color.GREEN}); // Create light const light = new pc.Entity(); From fc01b3063b7a4ed0ce0a4ea1296efb448528da17 Mon Sep 17 00:00:00 2001 From: kungfooman Date: Fri, 4 Jul 2025 18:08:24 +0200 Subject: [PATCH 3/3] curly brace linting --- examples/src/examples/physics/compound-collision.example.mjs | 4 ++-- examples/src/examples/physics/falling-shapes.example.mjs | 4 ++-- examples/src/examples/physics/offset-collision.example.mjs | 4 ++-- examples/src/examples/physics/raycast.example.mjs | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/src/examples/physics/compound-collision.example.mjs b/examples/src/examples/physics/compound-collision.example.mjs index b4261c84dfe..65c1124b1fb 100644 --- a/examples/src/examples/physics/compound-collision.example.mjs +++ b/examples/src/examples/physics/compound-collision.example.mjs @@ -62,8 +62,8 @@ app.on('destroy', () => { app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2); // Create a couple of materials for our objects -const red = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.3, 0.3)}); -const gray = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.7, 0.7)}); +const red = new pc.StandardMaterial({ diffuse: new pc.Color(0.7, 0.3, 0.3) }); +const gray = new pc.StandardMaterial({ diffuse: new pc.Color(0.7, 0.7, 0.7) }); // Define a scene hierarchy in JSON format. This is loaded/parsed in // the parseScene function below diff --git a/examples/src/examples/physics/falling-shapes.example.mjs b/examples/src/examples/physics/falling-shapes.example.mjs index a021c5367ad..b5dd5824d4a 100644 --- a/examples/src/examples/physics/falling-shapes.example.mjs +++ b/examples/src/examples/physics/falling-shapes.example.mjs @@ -71,8 +71,8 @@ assetListLoader.load(() => { app.systems.rigidbody.gravity.set(0, -9.81, 0); // create a few materials for our objects - const red = new pc.StandardMaterial({diffuse: new pc.Color(1, 0.3, 0.3)}); - const gray = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.7, 0.7)}); + const red = new pc.StandardMaterial({ diffuse: new pc.Color(1, 0.3, 0.3) }); + const gray = new pc.StandardMaterial({ diffuse: new pc.Color(0.7, 0.7, 0.7) }); // *********** Create our floor ******************* diff --git a/examples/src/examples/physics/offset-collision.example.mjs b/examples/src/examples/physics/offset-collision.example.mjs index 449eccc5e07..1a6b80669ff 100644 --- a/examples/src/examples/physics/offset-collision.example.mjs +++ b/examples/src/examples/physics/offset-collision.example.mjs @@ -95,8 +95,8 @@ assetListLoader.load(() => { app.systems.rigidbody.gravity.set(0, -9.81, 0); // create a few materials for our objects - const red = new pc.StandardMaterial({diffuse: new pc.Color(1, 0.3, 0.3)}); - const gray = new pc.StandardMaterial({diffuse: new pc.Color(0.7, 0.7, 0.7)}); + const red = new pc.StandardMaterial({ diffuse: new pc.Color(1, 0.3, 0.3) }); + const gray = new pc.StandardMaterial({ diffuse: new pc.Color(0.7, 0.7, 0.7) }); const floor = new pc.Entity(); floor.addComponent('render', { diff --git a/examples/src/examples/physics/raycast.example.mjs b/examples/src/examples/physics/raycast.example.mjs index bdec6d7d849..ebde4e19809 100644 --- a/examples/src/examples/physics/raycast.example.mjs +++ b/examples/src/examples/physics/raycast.example.mjs @@ -68,8 +68,8 @@ assetListLoader.load(() => { app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2); // Create a couple of materials - const red = new pc.StandardMaterial({diffuse: pc.Color.RED}); - const green = new pc.StandardMaterial({diffuse: pc.Color.GREEN}); + const red = new pc.StandardMaterial({ diffuse: pc.Color.RED }); + const green = new pc.StandardMaterial({ diffuse: pc.Color.GREEN }); // Create light const light = new pc.Entity();