More race stuff

- Loop track type
- Simple respawn when falling off track
- col limit
This commit is contained in:
RHY3756547 committed 2018-03-25 16:08:09 +01:00
1 parent 4af42625a0
commit 5f89b4518b
4 files changed
+163 -20

No files matched your search

+18 -2
View File
@@ -42,7 +42,14 @@ window.cameraIngame = function(kart) {
camNormal[2] += (kart.kartNormal[2]-camNormal[2])*0.075;
vec3.normalize(camNormal, camNormal);
camAngle += dirDiff(kart.physicalDir+kart.driftOff/2, camAngle)*0.075;
if (kart.physBasis != null) {
var kartA = kart.physicalDir+kart.driftOff/2;
var forward = [Math.sin(kartA), 0, -Math.cos(kartA)];
vec3.transformMat4(forward, forward, kart.physBasis.mat);
camAngle += dirDiff(Math.atan2(forward[0], -forward[2]), camAngle)*0.075;
} else {
camAngle += dirDiff(kart.physicalDir+kart.driftOff/2, camAngle)*0.075;
}
camAngle = fixDir(camAngle);
boostOff += (((kart.boostNorm+kart.boostMT > 0)?5:0) - boostOff)*0.075
@@ -59,7 +66,16 @@ window.cameraIngame = function(kart) {
function buildBasis() {
//order y, x, z
var basis = gramShmidt(camNormal, [Math.cos(camAngle), 0, Math.sin(camAngle)], [Math.sin(camAngle), 0, -Math.cos(camAngle)]);
var kart = thisObj.kart;
var forward = [Math.sin(camAngle), 0, -Math.cos(camAngle)];
var side = [Math.cos(camAngle), 0, Math.sin(camAngle)];
/*
if (kart.physBasis != null) {
vec3.transformMat4(forward, forward, kart.physBasis.mat);
vec3.transformMat4(side, side, kart.physBasis.mat);
}
*/
var basis = gramShmidt(camNormal, side, forward);
var temp = basis[0];
basis[0] = basis[1];
basis[1] = temp; //todo: cleanup
+26 -1
View File
@@ -19,6 +19,7 @@ window.controlRaceCPU = function(nkm) {
}
this.fetchInput = fetchInput;
this.setRouteID = setRouteID;
var battleMode = (nkm.sections["EPAT"] == null);
@@ -53,11 +54,30 @@ window.controlRaceCPU = function(nkm) {
var dist = vec3.dot(destNorm, kart.pos) + destConst;
if (dist < ePoi.pointSize) advancePoint();
if (ePath.loop) debugger;
destPoint = vec3.add([], ePoi.pos, vec3.scale([], vec3.lerp([], posOffset, destOff, offTrans), ePoi.pointSize));
var dirToPt = Math.atan2(destPoint[0]-kart.pos[0], kart.pos[2]-destPoint[2]);
var diff = dirDiff(dirToPt, kart.physicalDir);
var physDir = kart.physicalDir;
if (kart.physBasis) {
if (kart.physBasis.loop) {
return {
accel: true, //x
decel: false, //z
drift: false, //s
item: false, //a
//-1 to 1, intensity.
turn: 0,
airTurn: 0 //air excitebike turn, doesn't really have much function
};
}
var forward = [Math.sin(physDir), 0, -Math.cos(physDir)];
vec3.transformMat4(forward, forward, kart.physBasis.mat);
var physDir = Math.atan2(forward[0], -forward[2]);
}
var diff = dirDiff(dirToPt, physDir);
var turn = Math.min(Math.max(-1, (diff*3)), 1);
offTrans += 1/240;
@@ -94,6 +114,11 @@ window.controlRaceCPU = function(nkm) {
}
function setRouteID(routeID) {
ePoiInd = routeID-1
advancePoint();
}
function advancePoint() {
if (++ePoiInd < ePath.startInd+ePath.pathLen) {
//next within this path