commit
9898c34759
|
@ -0,0 +1,152 @@
|
|||
-- collision ported to lua for pico 8
|
||||
|
||||
function ellipseVTri(pos, dir, tri)
|
||||
-- tri format: v1,v2,v3,normal
|
||||
local planeConst = -v_dot(tri[4], tri[1])
|
||||
local dist = v_dot(tri[4], pos) + planeConst
|
||||
local modDir = v_dot(tri[4], dir)
|
||||
|
||||
if (dist < 0) return
|
||||
|
||||
local t0, t1, embedded = false
|
||||
if (modDir == 0) then
|
||||
if (abs(dist) < 1) then
|
||||
t0 = 0
|
||||
t1 = 1
|
||||
embedded = true
|
||||
else
|
||||
t0 = 1000
|
||||
t1 = 2000
|
||||
end
|
||||
else
|
||||
t0 = (1-dist)/modDir
|
||||
t1 = ((-1)-dist)/modDir
|
||||
end
|
||||
|
||||
if (t0 > t1) then
|
||||
local temp = t1
|
||||
t1 = t0
|
||||
t0 = temp
|
||||
end
|
||||
|
||||
if (not (t0>1 or t1<0)) then
|
||||
if (t0 < 0) then
|
||||
embedded = true
|
||||
t0 = 0
|
||||
end
|
||||
if (t1 > 1) t1 = 1
|
||||
|
||||
local newT = t0
|
||||
|
||||
local pt = v_cln(pos)
|
||||
if (embedded) then
|
||||
local tmp=v_cln(tri[4])
|
||||
v_scl(tmp,dist)
|
||||
v_sub(pt, tmp)
|
||||
else
|
||||
local tmp=v_cln(dir)
|
||||
v_scl(tmp,newT)
|
||||
v_add(pt, tmp)
|
||||
v_sub(pt, tri[4])
|
||||
end
|
||||
if (pointInTriangle(tri, pt, 0) and newT<t) then
|
||||
t = newT
|
||||
colPlane = tri
|
||||
colPoint = pt
|
||||
edge = false
|
||||
emb = embedded
|
||||
return
|
||||
end
|
||||
|
||||
for j=1,3,1 do
|
||||
local vert = v_cln(pos)
|
||||
v_sub(vert, tri[j])
|
||||
local root = getSmallestRoot(v_dot(dir, dir), 2*v_dot(dir, vert), v_dot(vert, vert)-1, t)
|
||||
if (root ~= -1) then
|
||||
t = root
|
||||
colPlane = tri
|
||||
colPoint = v_cln(tri[j])
|
||||
edge = false
|
||||
end
|
||||
end
|
||||
|
||||
for j=1,3,1 do
|
||||
local vert = tri[j]
|
||||
|
||||
local distVert = v_cln(vert)
|
||||
distVert = v_sub(distVert, pos)
|
||||
local distLine = v_cln(tri[((j%3)+1)])
|
||||
distLine = v_sub(distLine, vert)
|
||||
|
||||
local edgeDist = v_dot(distLine, distLine)
|
||||
local edgeDotVelocity = v_dot(distLine, dir)
|
||||
local edgeDotVert = v_dot(distVert, distLine)
|
||||
|
||||
local root = getSmallestRoot(
|
||||
edgeDist*(-1)*v_dot(dir, dir) + edgeDotVelocity*edgeDotVelocity,
|
||||
edgeDist*2*v_dot(dir, distVert) - 2*edgeDotVelocity*edgeDotVert,
|
||||
edgeDist*(1-v_dot(distVert, distVert)) + edgeDotVert*edgeDotVert,
|
||||
t
|
||||
)
|
||||
|
||||
if (root ~= -1) then
|
||||
local edgePos = (edgeDotVelocity*root - edgeDotVert)/edgeDist
|
||||
|
||||
if (edgePos >= 0 and edgePos <= 1) then
|
||||
t = root
|
||||
colPlane = tri
|
||||
v_scl(distLine,edgePos)
|
||||
colPoint = v_cln(vert)
|
||||
v_add(colPoint,distLine)
|
||||
edge = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function getSmallestRoot(a, b, c, upperLimit)
|
||||
local det = (b*b) - 4*(a*c)
|
||||
if (det<0) then return -1
|
||||
else
|
||||
det = sqrt(det)
|
||||
local root1 = ((-b)-det)/(2*a)
|
||||
local root2 = ((-b)+det)/(2*a)
|
||||
|
||||
if (root1 > root2) then
|
||||
local temp = root1
|
||||
root1 = root2
|
||||
root2 = temp
|
||||
end
|
||||
|
||||
if (root1>0 && root1<upperLimit) then
|
||||
return root1
|
||||
elseif (root2>0 && root2<upperLimit) then
|
||||
return root2
|
||||
else
|
||||
return -1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function pointInTriangle(tri, point, err)
|
||||
local v0 = v_cln(tri[3])
|
||||
v_sub(v0, tri[1])
|
||||
local v1 = v_cln(tri[2])
|
||||
v_sub(v1, tri[1])
|
||||
local v2 = v_cln(point)
|
||||
v_sub(v2, tri[1])
|
||||
|
||||
local dot00 = v_dot(v0, v0)
|
||||
local dot01 = v_dot(v0, v1)
|
||||
local dot02 = v_dot(v0, v2)
|
||||
local dot11 = v_dot(v1, v1)
|
||||
local dot12 = v_dot(v1, v2)
|
||||
|
||||
local inv = 1/(dot00*dot11 - dot01*dot01)
|
||||
local u = (dot11*dot02 - dot01*dot12)*inv
|
||||
local v = (dot00*dot12 - dot01*dot02)*inv
|
||||
|
||||
return (u>=-err && v>=-err && (u+v)<1+err)
|
||||
}
|
|
@ -35,7 +35,7 @@ window.fileStore = new (function(){
|
|||
alert("Fatal database error!");
|
||||
};
|
||||
request.onsuccess = function(event) {
|
||||
if (request.result == null) downloadGame("Mario Kart DS.nds", callback);
|
||||
if (request.result == null) downloadGame(null, callback);
|
||||
else callback(request.result.data);
|
||||
};
|
||||
}
|
Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 260 KiB |
0
Server/node_modules/safe-buffer/LICENSE → server/node_modules/safe-buffer/LICENSE
generated
vendored
0
Server/node_modules/safe-buffer/LICENSE → server/node_modules/safe-buffer/LICENSE
generated
vendored
0
Server/node_modules/safe-buffer/index.js → server/node_modules/safe-buffer/index.js
generated
vendored
0
Server/node_modules/safe-buffer/index.js → server/node_modules/safe-buffer/index.js
generated
vendored
0
Server/node_modules/safe-buffer/test.js → server/node_modules/safe-buffer/test.js
generated
vendored
0
Server/node_modules/safe-buffer/test.js → server/node_modules/safe-buffer/test.js
generated
vendored
0
Server/node_modules/ultron/package.json → server/node_modules/ultron/package.json
generated
vendored
0
Server/node_modules/ultron/package.json → server/node_modules/ultron/package.json
generated
vendored
0
Server/node_modules/ws/lib/BufferUtil.js → server/node_modules/ws/lib/BufferUtil.js
generated
vendored
0
Server/node_modules/ws/lib/BufferUtil.js → server/node_modules/ws/lib/BufferUtil.js
generated
vendored
0
Server/node_modules/ws/lib/Constants.js → server/node_modules/ws/lib/Constants.js
generated
vendored
0
Server/node_modules/ws/lib/Constants.js → server/node_modules/ws/lib/Constants.js
generated
vendored
0
Server/node_modules/ws/lib/ErrorCodes.js → server/node_modules/ws/lib/ErrorCodes.js
generated
vendored
0
Server/node_modules/ws/lib/ErrorCodes.js → server/node_modules/ws/lib/ErrorCodes.js
generated
vendored
0
Server/node_modules/ws/lib/Extensions.js → server/node_modules/ws/lib/Extensions.js
generated
vendored
0
Server/node_modules/ws/lib/Extensions.js → server/node_modules/ws/lib/Extensions.js
generated
vendored
0
Server/node_modules/ws/lib/Receiver.js → server/node_modules/ws/lib/Receiver.js
generated
vendored
0
Server/node_modules/ws/lib/Receiver.js → server/node_modules/ws/lib/Receiver.js
generated
vendored
0
Server/node_modules/ws/lib/Validation.js → server/node_modules/ws/lib/Validation.js
generated
vendored
0
Server/node_modules/ws/lib/Validation.js → server/node_modules/ws/lib/Validation.js
generated
vendored
0
Server/node_modules/ws/lib/WebSocket.js → server/node_modules/ws/lib/WebSocket.js
generated
vendored
0
Server/node_modules/ws/lib/WebSocket.js → server/node_modules/ws/lib/WebSocket.js
generated
vendored
Loading…
Reference in New Issue