From 9cac52a5e430aa5d4ac1e5639944f178231f230c Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Tue, 13 Jul 2021 22:33:08 +0530 Subject: [PATCH] smooth shading + fix pause focus shit --- marblegame.hl | Bin 1790952 -> 1792039 bytes src/DifBuilder.hx | 57 ++++++++++++++++++++++++++++++++++++++++++++++ src/MarbleGame.hx | 4 +++- 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/marblegame.hl b/marblegame.hl index c00f9a92762d313c6249f31ebc71297b71a2c274..4f4f3d0b8bb009ec230193b95dd62dd70eee7ae4 100644 GIT binary patch delta 20123 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 V>Y0sPoZ^{-+&k4X7r9T^{{b>XZPx$* delta 19204 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 diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index ebc4e956..0a5ce142 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -40,6 +40,12 @@ class DifBuilderTriangle { public function new() {} } +typedef VertexBucket = { + var referenceNormal:Point3F; + var triangleIndices:Array; + var normals:Array; +} + class DifBuilder { static var materialDict = [ "friction_none" => { @@ -96,6 +102,8 @@ class DifBuilder { return tex.substring(slashpos, dotpos); } + var vertexBuckets = new Map>(); + 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>(); for (index => value in triangles) { diff --git a/src/MarbleGame.hx b/src/MarbleGame.hx index f355ea6c..6ff4b469 100644 --- a/src/MarbleGame.hx +++ b/src/MarbleGame.hx @@ -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);