135 lines
No EOL
3.7 KiB
C#
135 lines
No EOL
3.7 KiB
C#
using Oriels;
|
|
|
|
namespace Greenyard;
|
|
public class Mono {
|
|
// Model greenyardModel = Model.FromFile("greenyard.glb");
|
|
// Mesh[] greenyard;
|
|
// Material greenyardMat = new Material(Shader.FromFile("/shaders/oriel.hlsl"));
|
|
|
|
Vec3 offset = new Vec3(2, 0, -2);
|
|
Vec3 angle = new Vec3(0, 0, 0);
|
|
|
|
Thing[] thing;
|
|
Model model = Model.FromFile("/backrooms/backrooms.glb");
|
|
|
|
public Mono() {
|
|
|
|
}
|
|
|
|
public void Init() {
|
|
// greenyard = new Mesh[12];
|
|
// for (int i = 0; i < greenyard.Length; i++) {
|
|
// greenyard[i] = greenyardModel.GetMesh("Object_" + (i + 2));
|
|
// }
|
|
// greenyardMat.SetMat(101, Cull.None, true);
|
|
// greenyardMat.SetTexture("diffuse", Tex.FromFile("greenyard.jpeg"));
|
|
|
|
thing = new Thing[] {
|
|
new Thing(
|
|
model.GetMesh("Carpet"),
|
|
new Material(Shader.FromFile("/shaders/oriel.hlsl")),
|
|
"backrooms/Carpet.png"
|
|
),
|
|
new Thing(
|
|
model.GetMesh("Walls"),
|
|
new Material(Shader.FromFile("/shaders/oriel.hlsl")),
|
|
"backrooms/Walls.png"
|
|
),
|
|
new Thing(
|
|
model.GetMesh("Ceiling"),
|
|
new Material(Shader.FromFile("/shaders/oriel.hlsl")),
|
|
"backrooms/Ceiling.png"
|
|
),
|
|
new Thing(
|
|
model.GetMesh("Vents"),
|
|
new Material(Shader.FromFile("/shaders/oriel.hlsl")),
|
|
"backrooms/Vents.png"
|
|
),
|
|
new Thing(
|
|
model.GetMesh("Lights"),
|
|
new Material(Shader.FromFile("/shaders/oriel.hlsl")),
|
|
"backrooms/Lights.png"
|
|
),
|
|
};
|
|
}
|
|
|
|
public void Frame() {
|
|
Oriels.Rig rig = Oriels.Mono.inst.rig;
|
|
Oriels.Oriel oriel = Oriels.Mono.inst.oriel;
|
|
|
|
// angle.x += rig.rCon.device.stick.y * Time.Elapsedf;
|
|
angle.y += rig.rCon.device.stick.x * -60f * Time.Elapsedf;
|
|
|
|
Vec3 input = new Vec3(
|
|
rig.lCon.device.stick.x,
|
|
0,
|
|
rig.lCon.device.stick.y
|
|
);
|
|
if (input.MagnitudeSq > 0.01f) {
|
|
offset += (Quat.FromAngles(0, angle.y, 0).Inverse * rig.lCon.ori).Normalized * input * Time.Elapsedf;
|
|
}
|
|
|
|
|
|
|
|
|
|
// Oriel
|
|
float scale = oriel.scale * oriel.multiplier;
|
|
if (oriel.scaleWithHeight) {
|
|
scale *= oriel.bounds.dimensions.y;
|
|
}
|
|
|
|
Matrix simMatrix = Matrix.TRS(
|
|
Vec3.Zero, // -oriel.bounds.dimensions.y / 2.01f
|
|
Quat.FromAngles(0, angle.y, 0),
|
|
Vec3.One * scale
|
|
);
|
|
|
|
// Render
|
|
// greenyardMat.SetVector("_center", oriel.bounds.center);
|
|
// greenyardMat.SetVector("_dimensions", oriel.bounds.dimensions);
|
|
// greenyardMat.SetVector("_light", oriel.ori * new Vec3(0.6f, -0.9f, 0.3f));
|
|
// greenyardMat.SetFloat("_lit", 0);
|
|
// greenyardMat["_matrix"] = (Matrix)System.Numerics.Matrix4x4.Transpose(oriel.matrixInv);
|
|
// for (int i = 0; i < greenyard.Length; i++) {
|
|
// greenyard[i].Draw(greenyardMat,
|
|
// Matrix.TRS(
|
|
// offset,
|
|
// Quat.Identity,
|
|
// new Vec3(1f, 1f, 1f)
|
|
// ) * simMatrix * oriel.matrix,
|
|
// Color.White
|
|
// );
|
|
// }
|
|
|
|
for (int i = 0; i < thing.Length; i++) {
|
|
Thing t = thing[i];
|
|
t.mat.SetVector("_center", oriel.bounds.center);
|
|
t.mat.SetVector("_dimensions", oriel.bounds.dimensions);
|
|
t.mat.SetVector("_light", oriel.ori * new Vec3(0.6f, -0.9f, 0.3f));
|
|
t.mat.SetFloat("_lit", 0);
|
|
t.mat["_matrix"] = (Matrix)System.Numerics.Matrix4x4.Transpose(oriel.matrixInv);
|
|
t.mesh.Draw(t.mat,
|
|
Matrix.TRS(
|
|
offset,
|
|
Quat.Identity,
|
|
new Vec3(1f, 1f, 1f)
|
|
) * simMatrix * oriel.matrix,
|
|
Color.White
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class Thing {
|
|
public Mesh mesh;
|
|
public Material mat;
|
|
|
|
public Thing(Mesh mesh, Material mat, string tex) {
|
|
this.mesh = mesh;
|
|
this.mat = mat;
|
|
|
|
mat.SetMat(101, Cull.None, true);
|
|
mat.SetTexture("diffuse", Tex.FromFile(tex));
|
|
}
|
|
} |