mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
smooth shading + fix pause focus shit
This commit is contained in:
parent
c622e59b6d
commit
9cac52a5e4
3 changed files with 60 additions and 1 deletions
BIN
marblegame.hl
BIN
marblegame.hl
Binary file not shown.
|
|
@ -40,6 +40,12 @@ class DifBuilderTriangle {
|
|||
public function new() {}
|
||||
}
|
||||
|
||||
typedef VertexBucket = {
|
||||
var referenceNormal:Point3F;
|
||||
var triangleIndices:Array<Int>;
|
||||
var normals:Array<Point3F>;
|
||||
}
|
||||
|
||||
class DifBuilder {
|
||||
static var materialDict = [
|
||||
"friction_none" => {
|
||||
|
|
@ -96,6 +102,8 @@ class DifBuilder {
|
|||
return tex.substring(slashpos, dotpos);
|
||||
}
|
||||
|
||||
var vertexBuckets = new Map<Point3F, Array<VertexBucket>>();
|
||||
|
||||
for (i in 0...hulls.length) {
|
||||
var hullTris = [];
|
||||
var hull = hulls[i];
|
||||
|
|
@ -196,6 +204,33 @@ class DifBuilder {
|
|||
colliderSurface.indices.push(colliderSurface.indices.length);
|
||||
colliderSurface.indices.push(colliderSurface.indices.length);
|
||||
colliderSurface.indices.push(colliderSurface.indices.length);
|
||||
|
||||
for (v in [p1, p2, p3]) {
|
||||
var buckets = vertexBuckets.get(v);
|
||||
if (buckets == null) {
|
||||
buckets = [];
|
||||
vertexBuckets.set(v, buckets);
|
||||
}
|
||||
|
||||
var bucket:VertexBucket = null;
|
||||
for (j in 0...buckets.length) {
|
||||
bucket = buckets[j];
|
||||
if (normal.dot(bucket.referenceNormal) > Math.cos(Math.PI / 12))
|
||||
break;
|
||||
bucket = null;
|
||||
}
|
||||
if (bucket == null) {
|
||||
bucket = {
|
||||
referenceNormal: normal,
|
||||
triangleIndices: [],
|
||||
normals: []
|
||||
};
|
||||
buckets.push(bucket);
|
||||
}
|
||||
|
||||
bucket.triangleIndices.push(triangles.length - 1);
|
||||
bucket.normals.push(normal);
|
||||
}
|
||||
}
|
||||
|
||||
colliderSurface.generateBoundingBox();
|
||||
|
|
@ -203,6 +238,28 @@ class DifBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
for (vtex => buckets in vertexBuckets) {
|
||||
for (i in 0...buckets.length) {
|
||||
var bucket = buckets[i];
|
||||
var avgNormal = new Point3F();
|
||||
|
||||
for (normal in bucket.normals)
|
||||
avgNormal = avgNormal.add(normal);
|
||||
avgNormal = avgNormal.scalarDiv(bucket.normals.length);
|
||||
|
||||
for (j in 0...bucket.triangleIndices.length) {
|
||||
var index = bucket.triangleIndices[j];
|
||||
var tri = triangles[index];
|
||||
if (tri.p1 == vtex)
|
||||
tri.normal1 = avgNormal;
|
||||
if (tri.p2 == vtex)
|
||||
tri.normal2 = avgNormal;
|
||||
if (tri.p3 == vtex)
|
||||
tri.normal3 = avgNormal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var mats = new Map<String, Array<DifBuilderTriangle>>();
|
||||
|
||||
for (index => value in triangles) {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class MarbleGame {
|
|||
js.Browser.document.addEventListener('pointerlockchange', () -> {
|
||||
if (!paused && world != null) {
|
||||
if (world.finishTime == null && world._ready) {
|
||||
trace(js.Browser.document.pointerLockElement);
|
||||
trace(@:privateAccess Window.getInstance().canvas);
|
||||
if (js.Browser.document.pointerLockElement != @:privateAccess Window.getInstance().canvas) {
|
||||
paused = true;
|
||||
handlePauseGame();
|
||||
|
|
@ -102,7 +104,7 @@ class MarbleGame {
|
|||
}, (sender) -> {
|
||||
canvas.popDialog(exitGameDlg);
|
||||
world.restart();
|
||||
world.setCursorLock(true);
|
||||
// world.setCursorLock(true);
|
||||
paused = !paused;
|
||||
});
|
||||
canvas.pushDialog(exitGameDlg);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue