Skip to content

Commit da98061

Browse files
yuripourrejulien-moreau
authored andcommitted
Add Grid Material
1 parent 0f9fc1c commit da98061

File tree

5 files changed

+77
-4
lines changed

5 files changed

+77
-4
lines changed

editor/src/editor/dialogs/command-palette/material.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Editor } from "../../main";
22

3-
import { addPBRMaterial, addStandardMaterial, addNodeMaterial, addSkyMaterial } from "../../../project/add/material";
3+
import { addPBRMaterial, addStandardMaterial, addNodeMaterial, addSkyMaterial, addGridMaterial } from "../../../project/add/material";
44

55
import { ICommandPaletteType } from "./command-palette";
66

@@ -30,5 +30,11 @@ export function getMaterialCommands(editor?: Editor): ICommandPaletteType[] {
3030
key: "add-sky-material",
3131
action: () => editor && addSkyMaterial(editor.layout.preview.scene),
3232
},
33+
{
34+
text: "Grid Material",
35+
label: "Add a new grid material to the scene",
36+
key: "add-grid-material",
37+
action: () => editor && addGridMaterial(editor.layout.preview.scene),
38+
},
3339
];
3440
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { Component, ReactNode } from "react";
2+
3+
import { AbstractMesh } from "babylonjs";
4+
import { GridMaterial } from "babylonjs-materials";
5+
6+
import { EditorInspectorStringField } from "../fields/string";
7+
import { EditorInspectorSwitchField } from "../fields/switch";
8+
import { EditorInspectorNumberField } from "../fields/number";
9+
import { EditorInspectorVectorField } from "../fields/vector";
10+
import { EditorInspectorSectionField } from "../fields/section";
11+
import { EditorInspectorColorField } from "../fields/color";
12+
13+
import { EditorMaterialInspectorUtilsComponent } from "./utils";
14+
15+
export interface IEditorGridMaterialInspectorProps {
16+
mesh?: AbstractMesh;
17+
material: GridMaterial;
18+
}
19+
20+
export class EditorGridMaterialInspector extends Component<IEditorGridMaterialInspectorProps> {
21+
public constructor(props: IEditorGridMaterialInspectorProps) {
22+
super(props);
23+
}
24+
25+
public render(): ReactNode {
26+
return (
27+
<>
28+
<EditorInspectorSectionField title="Material" label={this.props.material.getClassName()}>
29+
<EditorInspectorStringField label="Name" object={this.props.material} property="name" />
30+
<EditorInspectorSwitchField label="Back Face Culling" object={this.props.material} property="backFaceCulling" />
31+
32+
<EditorMaterialInspectorUtilsComponent mesh={this.props.mesh} material={this.props.material} />
33+
</EditorInspectorSectionField>
34+
35+
<EditorInspectorSectionField title="Material Grid">
36+
<EditorInspectorVectorField object={this.props.material} property="gridOffset" label="Grid Offset" />
37+
<EditorInspectorNumberField object={this.props.material} property="gridRatio" label="Grid Ratio" min={0} max={10} />
38+
<EditorInspectorNumberField object={this.props.material} property="majorUnitFrequency" label="Major Unit Frequency" min={0} max={100} />
39+
<EditorInspectorNumberField object={this.props.material} property="minorUnitVisibility" label="Minor Unit Visibility" min={0} max={1} />
40+
<EditorInspectorNumberField object={this.props.material} property="gridVisibility" label="Grid Visibility" min={0} max={1} />
41+
<EditorInspectorNumberField object={this.props.material} property="opacity" label="Opacity" min={0} max={1} />
42+
<EditorInspectorSwitchField object={this.props.material} property="preMultiplyAlpha" label="Pre-multiply Alpha" />
43+
</EditorInspectorSectionField>
44+
45+
<EditorInspectorSectionField title="Material Colors">
46+
<EditorInspectorColorField object={this.props.material} property="mainColor" label="Main Color" />
47+
<EditorInspectorColorField object={this.props.material} property="lineColor" label="Line Color" />
48+
</EditorInspectorSectionField>
49+
</>
50+
);
51+
}
52+
}

editor/src/editor/layout/inspector/material/multi.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { extname } from "path/posix";
22

33
import { Component, DragEvent, ReactNode } from "react";
44

5-
import { SkyMaterial } from "babylonjs-materials";
5+
import { SkyMaterial, GridMaterial } from "babylonjs-materials";
66
import { Material, MultiMaterial, PBRMaterial, StandardMaterial } from "babylonjs";
77

88
import { Table, TableBody, TableCaption, TableCell, TableRow } from "../../../../ui/shadcn/ui/table";
@@ -14,6 +14,7 @@ import { registerUndoRedo } from "../../../../tools/undoredo";
1414
import { EditorInspectorSectionField } from "../fields/section";
1515

1616
import { EditorSkyMaterialInspector } from "./sky";
17+
import { EditorGridMaterialInspector } from "./grid";
1718
import { EditorPBRMaterialInspector } from "./pbr";
1819
import { EditorStandardMaterialInspector } from "./standard";
1920

@@ -118,6 +119,8 @@ export class EditorMultiMaterialInspector extends Component<IEditorPBRMaterialIn
118119
return <EditorStandardMaterialInspector key={this.state.material.id} material={this.state.material as StandardMaterial} />;
119120
case "SkyMaterial":
120121
return <EditorSkyMaterialInspector key={this.state.material.id} material={this.state.material as SkyMaterial} />;
122+
case "GridMaterial":
123+
return <EditorGridMaterialInspector key={this.state.material.id} material={this.state.material as GridMaterial} />;
121124
}
122125
}
123126
}

editor/src/editor/layout/inspector/mesh/mesh.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { FaCopy, FaLink } from "react-icons/fa6";
55
import { IoAddSharp, IoCloseOutline } from "react-icons/io5";
66
import { AiOutlinePlus } from "react-icons/ai";
77

8-
import { SkyMaterial } from "babylonjs-materials";
8+
import { SkyMaterial, GridMaterial } from "babylonjs-materials";
99
import { AbstractMesh, InstancedMesh, Material, Mesh, MorphTarget, MultiMaterial, Node, Observer, PBRMaterial, StandardMaterial, NodeMaterial } from "babylonjs";
1010

1111
import { CollisionMesh } from "../../../nodes/collision";
@@ -39,6 +39,7 @@ import { IEditorInspectorImplementationProps } from "../inspector";
3939

4040
import { EditorPBRMaterialInspector } from "../material/pbr";
4141
import { EditorSkyMaterialInspector } from "../material/sky";
42+
import { EditorGridMaterialInspector } from "../material/grid";
4243
import { EditorNodeMaterialInspector } from "../material/node";
4344
import { EditorMultiMaterialInspector } from "../material/multi";
4445
import { EditorStandardMaterialInspector } from "../material/standard";
@@ -303,6 +304,9 @@ export class EditorMeshInspector extends Component<IEditorInspectorImplementatio
303304

304305
case "SkyMaterial":
305306
return <EditorSkyMaterialInspector mesh={this.props.object} material={this.props.object.material as SkyMaterial} />;
307+
308+
case "GridMaterial":
309+
return <EditorGridMaterialInspector mesh={this.props.object} material={this.props.object.material as GridMaterial} />;
306310
}
307311
}
308312

editor/src/project/add/material.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SkyMaterial } from "babylonjs-materials";
1+
import { SkyMaterial, GridMaterial } from "babylonjs-materials";
22
import { Scene, Tools, PBRMaterial, StandardMaterial, NodeMaterial } from "babylonjs";
33

44
import { UniqueNumber } from "../../tools/tools";
@@ -35,3 +35,11 @@ export function addSkyMaterial(scene: Scene) {
3535

3636
return material;
3737
}
38+
39+
export function addGridMaterial(scene: Scene) {
40+
const material = new GridMaterial("New Grid Material", scene);
41+
material.id = Tools.RandomId();
42+
material.uniqueId = UniqueNumber.Get();
43+
44+
return material;
45+
}

0 commit comments

Comments
 (0)