var DotVectorAngle = pc.createScript('dotVectorAngle');
DotVectorAngle.attributes.add('cameraEntity', {type: 'entity'});
DotVectorAngle.attributes.add('OsloPkt', {type: 'entity'}); DotVectorAngle.attributes.add('StockholmPkt', {type: 'entity'});
DotVectorAngle.attributes.add('KoebenhavnPkt', {type: 'entity'});
DotVectorAngle.attributes.add('TrondheimPkt', {type: 'entity'}); DotVectorAngle.attributes.add('TorshavnPkt', {type: 'entity'});
DotVectorAngle.attributes.add('ReykavikPkt', {type: 'entity'}); DotVectorAngle.attributes.add('HelsinkiPkt', {type: 'entity'});
DotVectorAngle.attributes.add('OsloPos', {type: 'Vec3'}); DotVectorAngle.attributes.add('StockholmPos', {type: 'Vec3'});
DotVectorAngle.attributes.add('KoebenhavnPos', {type: 'Vec3'});
DotVectorAngle.attributes.add('TrondheimPos', {type: 'Vec3'}); DotVectorAngle.attributes.add('TorshavnPos', {type: 'Vec3'});
DotVectorAngle.attributes.add('ReykavikPos', {type: 'Vec3'}); DotVectorAngle.attributes.add('HelsinkiPos', {type: 'Vec3'});
DotVectorAngle.attributes.add('aListLH', { type: 'number', default: 0});
DotVectorAngle.attributes.add('aListLHT', { type: 'number', default: 0});
DotVectorAngle.attributes.add('resultDegree1', { type: 'number', default: 0});
DotVectorAngle.attributes.add('resultDegree2', { type: 'number', default: 0});
// initialize code called once per entity
DotVectorAngle.prototype.initialize = function() {
var app = this.app;
this.cameraEntity = this.app.root.findByName('Camera');
this.app.mouse.on(pc.EVENT_MOUSEDOWN, this.mouseDown, this);
OsloPkt = app.root.findByName("Oslo"); StockholmPkt = app.root.findByName("Stockholm");
OsloPos = OsloPkt.getPosition(); StockholmPos = StockholmPkt.getPosition();
KoebenhavnPkt = app.root.findByName("Koebenhavn"); KoebenhavnPos = KoebenhavnPkt.getPosition();
TrondheimPkt = app.root.findByName("Trondheim"); TorshavnPkt = app.root.findByName("Torshavn");
TrondheimPos = TrondheimPkt.getPosition(); TorshavnPos = TorshavnPkt.getPosition();
ReykavikPkt = app.root.findByName("Reykavik"); ReykavikPos = ReykavikPkt.getPosition();
HelsinkiPkt = app.root.findByName("Helsinki"); HelsinkiPos = HelsinkiPkt.getPosition();
aListLH=[]; aListLHT=[];
};
DotVectorAngle.prototype.mouseDown = function (e) {
this.doRayCast(e); console.log("getEnt vlick");
};
DotVectorAngle.prototype.doRayCast = function (screenPosition) {
var from = this.cameraEntity.getPosition ();//console.log(from);
//console.log(from);
// The vec3 to autoGenTextSquares to
var to = this.cameraEntity.camera.screenToWorld(screenPosition.x, screenPosition.y, this.cameraEntity.camera.farClip);
// autoGenTextSquares between the two points
var result = this.app.systems.rigidbody.raycastFirst(from, to);console.log(result);
// If there was a hit, store the entity
if (result) {
var hitEntity = result.entity; console.log(hitEntity.name);
// Set the target position of the lerp script based on the name of the clicked box
if (hitEntity.name === 'Oslo'){ aListLH.push(OsloPos); aListLHT.push("Oslo"); }
if (hitEntity.name === 'Koebenhavn'){ aListLH.push(KoebenhavnPos); aListLHT.push("Koebenhavn"); }
if (hitEntity.name === 'Stockholm'){ aListLH.push(StockholmPos); aListLHT.push("Stockholm"); }
if (hitEntity.name === 'Reykavik'){ aListLH.push(ReykavikPos); aListLHT.push("Reykavik"); }
if (hitEntity.name === 'Torshavn'){ aListLH.push(TorshavnPos); aListLHT.push("Torshavn"); }
if (hitEntity.name === 'Trondheim'){ aListLH.push(TrondheimPos); aListLHT.push("Trondheim"); }
if (hitEntity.name === 'Helsinki'){ aListLH.push(HelsinkiPos); aListLHT.push("Helsinki"); }
}
};
// update code called every frame
DotVectorAngle.prototype.update = function(dt) {
//Udfyld tekstfelter
var txtEntAfg = this.app.root.findByName("Afgang_Indsk"); txtEntAfg.element.text = aListLHT[0];
var txtEnt1st = this.app.root.findByName("1_stop_Indsk"); txtEnt1st.element.text = aListLHT[1];
var txtEnt2st = this.app.root.findByName("2_stop_Indsk"); txtEnt2st.element.text = aListLHT[2];
var txtEntDest = this.app.root.findByName("Destination_Indsk"); txtEntDest.element.text = aListLHT[3];
var app = this.app;
var colorAng1= new pc.Color(0, 0, 0); var colorAng2= new pc.Color(0, 0, 0);
var color = new pc.Color(0, 0, 0);
if(aListLH.length>1){
var d = new pc.Vec3();
d.sub2(aListLH[0], aListLH[1]);
var distance1 = d.length();
app.renderLine(aListLH[0],aListLH[1], color);
var angle_S;
if(aListLH.length>2){ angle_S =1;
this.calculateAngle(angle_S, aListLH[0], aListLH[1],aListLH[2]);
if(resultDegree1>100 && resultDegree1<180){colorAng1 = new pc.Color(0, 1, 0);} if(resultDegree1>50 && resultDegree1<100.01){colorAng1 = new pc.Color(1, 1, 0);}
if(resultDegree1>0 && resultDegree1<50.01){colorAng1 = new pc.Color(1, 0, 0);}
//
var d2 = new pc.Vec3();
d2.sub2(aListLH[1], aListLH[2]);
var distance2 = d2.length();
app.renderLine(aListLH[1],aListLH[2], color);
var tmpDiff = distance2/distance1; var tmpOne = distance1/distance1;
// Starter med 2dt ben
var r2b = new pc.Vec3();
r2b.lerp( aListLH[1],aListLH[2], 0.33*tmpOne);
// 9. Opad
app.renderLine(aListLH[1],r2b, colorAng1);
// Dernæst første ben
var r1b = new pc.Vec3();
r1b.lerp( aListLH[1],aListLH[0], 0.33*tmpDiff);
// 1. Opad
app.renderLine(aListLH[1],r1b, colorAng1);
var colorBC = new pc.Color(0, 0, 1);
// app.renderLine(r1,rD, colorBC);
this.drawAngle(1, r1b, r2b);
// Første fuldt tværgående:
var rDC12 = new pc.Vec3();
rDC12.lerp( r2b,r1b, 0.5);
var rM = new pc.Vec3(); var length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); var dM = new pc.Vec3(); var lengthBlue = dM.sub2(aListLH[1],rDC12).length();
var L3KS_mult = length3rdKobSto/lengthBlue;
// X_ny; Inddelte tvaergaaende:
var rXC12 = new pc.Vec3();rXC12.lerp( r2b,r1b, 0.11); var rXC23 = new pc.Vec3();rXC23.lerp( rXC12,r1b, 0.125);
var rXC34 = new pc.Vec3();rXC34.lerp( rXC23,r1b, 0.144); var rXC45 = new pc.Vec3();rXC45.lerp( rXC34,r1b, 0.167);
var rXC56 = new pc.Vec3();rXC56.lerp( rXC45,r1b, 0.20); var rXC67 = new pc.Vec3();rXC67.lerp( rXC56,r1b, 0.25);
var rXC78 = new pc.Vec3();rXC78.lerp( rXC67,r1b, 0.33); var rXC89 = new pc.Vec3();rXC89.lerp( rXC78,r1b, 0.50);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC12).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP1 = new pc.Vec3(); rRP1.lerp( aListLH[1],rXC12, L3KS_mult); app.renderLine(aListLH[1],rRP1, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC23).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP2 = new pc.Vec3(); rRP2.lerp( aListLH[1],rXC23, L3KS_mult); app.renderLine(aListLH[1],rRP2, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC34).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP3 = new pc.Vec3(); rRP3.lerp( aListLH[1],rXC34, L3KS_mult); app.renderLine(aListLH[1],rRP3, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC45).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP4 = new pc.Vec3(); rRP4.lerp( aListLH[1],rXC45, L3KS_mult); app.renderLine(aListLH[1],rRP4, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC56).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP5 = new pc.Vec3(); rRP5.lerp( aListLH[1],rXC56, L3KS_mult); app.renderLine(aListLH[1],rRP5, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC67).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP6 = new pc.Vec3(); rRP6.lerp( aListLH[1],rXC67, L3KS_mult); app.renderLine(aListLH[1],rRP6, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC78).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP7 = new pc.Vec3(); rRP7.lerp( aListLH[1],rXC78, L3KS_mult); app.renderLine(aListLH[1],rRP7, colorAng1);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[1],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[1],rXC89).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP8 = new pc.Vec3(); rRP8.lerp( aListLH[1],rXC89, L3KS_mult); app.renderLine(aListLH[1],rRP8, colorAng1);
if(aListLH.length>3){ angle_S =2;
this.calculateAngle(angle_S, aListLH[1], aListLH[2],aListLH[3]);
if(resultDegree2>100 && resultDegree2<180){colorAng2 = new pc.Color(0, 1, 0);} if(resultDegree2>50 && resultDegree2<100.01){colorAng2 = new pc.Color(1, 1, 0);}
if(resultDegree2>0 && resultDegree2<50.01){colorAng2 = new pc.Color(1, 0, 0);}
this.drawAngle(1, r1b, r2b);
var d3 = new pc.Vec3();
d3.sub2(aListLH[2], aListLH[3]);
var distance3 = d3.length();
app.renderLine(aListLH[2],aListLH[3], color); tmpDiff = distance3/distance2;
// Starter med 2dt ben
var r2b_2 = new pc.Vec3();
r2b_2.lerp( aListLH[2],aListLH[3], 0.33*tmpOne);
// 9. Opad
app.renderLine(aListLH[2],r2b_2, colorAng2);
// Dernæst første ben
var r1b_2 = new pc.Vec3();
r1b_2.lerp( aListLH[2],aListLH[1], 0.33*tmpDiff);
// 1. Opad
app.renderLine(aListLH[2],r1b_2, colorAng2);
this.drawAngle(2, r1b_2, r2b_2);
// Første fuldt tværgående:
var rDC12_2 = new pc.Vec3();
rDC12_2.lerp( r2b_2,r1b_2, 0.5);
//var colorDC = new pc.Color(1, 0, 1);
// app.renderLine(r1,rDC, colorDC); // Usynlig nu
var rM_2 = new pc.Vec3(); var length3rdKobSto_2 = rM_2.sub2(aListLH[2],r2b_2).length();
var dM_2 = new pc.Vec3(); var lengthBlue_2 = dM_2.sub2(aListLH[2],rDC12_2).length();
var L3KS_mult_2 = length3rdKobSto_2/lengthBlue_2;
// console.log(" :: "+L3KS_mult.toFixed(2));
var rR_2 = new pc.Vec3();
rR_2.lerp( aListLH[2],rDC12_2, (L3KS_mult_2+1.14)/2); // app.renderLine(KoebenhavnPos,rDC, colorBC);
var rX2C12 = new pc.Vec3();rX2C12.lerp( r2b_2,r1b_2, 0.11); var rX2C23 = new pc.Vec3();rX2C23.lerp( rX2C12,r1b_2, 0.125);
var rX2C34 = new pc.Vec3();rX2C34.lerp( rX2C23,r1b_2, 0.144); var rX2C45 = new pc.Vec3();rX2C45.lerp( rX2C34,r1b_2, 0.167);
var rX2C56 = new pc.Vec3();rX2C56.lerp( rX2C45,r1b_2, 0.20); var rX2C67 = new pc.Vec3();rX2C67.lerp( rX2C56,r1b_2, 0.25);
var rX2C78 = new pc.Vec3();rX2C78.lerp( rX2C67,r1b_2, 0.33); var rX2C89 = new pc.Vec3();rX2C89.lerp( rX2C78,r1b_2, 0.50);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C12).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P1 = new pc.Vec3(); rR2P1.lerp( aListLH[2],rX2C12, L3KS_mult); app.renderLine(aListLH[2],rR2P1, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C23).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P2 = new pc.Vec3(); rR2P2.lerp( aListLH[2],rX2C23, L3KS_mult); app.renderLine(aListLH[2],rR2P2, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C34).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P3 = new pc.Vec3(); rR2P3.lerp( aListLH[2],rX2C34, L3KS_mult); app.renderLine(aListLH[2],rR2P3, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C45).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P4 = new pc.Vec3(); rR2P4.lerp( aListLH[2],rX2C45, L3KS_mult); app.renderLine(aListLH[2],rR2P4, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C56).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P5 = new pc.Vec3(); rR2P5.lerp( aListLH[2],rX2C56, L3KS_mult); app.renderLine(aListLH[2],rR2P5, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C67).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P6 = new pc.Vec3(); rR2P6.lerp( aListLH[2],rX2C67, L3KS_mult); app.renderLine(aListLH[2],rR2P6, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C78).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P7 = new pc.Vec3(); rR2P7.lerp( aListLH[2],rX2C78, L3KS_mult); app.renderLine(aListLH[2],rR2P7, colorAng2);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[2],r2b_2).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[2],rX2C89).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rR2P8 = new pc.Vec3(); rR2P8.lerp( aListLH[2],rX2C89, L3KS_mult); app.renderLine(aListLH[2],rR2P8, colorAng2);
}}}
};
DotVectorAngle.prototype.drawAngle = function(pos, r1bS, r2bS) {
// X_ny; Inddelte tvaergaaende:
var rXC12 = new pc.Vec3();rXC12.lerp( r2bS,r1bS, 0.11); var rXC23 = new pc.Vec3();rXC23.lerp( rXC12,r2bS, 0.125);
var rXC34 = new pc.Vec3();rXC34.lerp( rXC23,this.r1b, 0.144); var rXC45 = new pc.Vec3();rXC45.lerp( rXC34,this.r1b, 0.167);
var rXC56 = new pc.Vec3();rXC56.lerp( rXC45,this.r1b, 0.20); var rXC67 = new pc.Vec3();rXC67.lerp( rXC56,this.r1b, 0.25);
var rXC78 = new pc.Vec3();rXC78.lerp( rXC67,this.r1b, 0.33); var rXC89 = new pc.Vec3();rXC89.lerp( rXC78,this.r1b, 0.50);
var colorAng; if(pos ===1){colorAng = colorAng1;} if(pos ===2){colorAng = colorAng2;}
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC12).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP1 = new pc.Vec3(); rRP1.lerp( aListLH[pos],rXC12, L3KS_mult); app.renderLine(aListLH[pos],rRP1, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC23).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP2 = new pc.Vec3(); rRP2.lerp( aListLH[pos],rXC23, L3KS_mult); app.renderLine(aListLH[pos],rRP2, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC34).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP3 = new pc.Vec3(); rRP3.lerp( aListLH[pos],rXC34, L3KS_mult); app.renderLine(aListLH[pos],rRP3, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC45).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP4 = new pc.Vec3(); rRP4.lerp( aListLH[pos],rXC45, L3KS_mult); app.renderLine(aListLH[pos],rRP4, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC56).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP5 = new pc.Vec3(); rRP5.lerp( aListLH[pos],rXC56, L3KS_mult); app.renderLine(aListLH[pos],rRP5, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC67).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP6 = new pc.Vec3(); rRP6.lerp( aListLH[pos],rXC67, L3KS_mult); app.renderLine(aListLH[pos],rRP6, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC78).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP7 = new pc.Vec3(); rRP7.lerp( aListLH[pos],rXC78, L3KS_mult); app.renderLine(aListLH[pos],rRP7, colorAng);
rM = new pc.Vec3(); length3rdKobSto = rM.sub2(aListLH[pos],r2b).length(); dM = new pc.Vec3(); lengthBlue = dM.sub2(aListLH[pos],rXC89).length(); L3KS_mult = length3rdKobSto/lengthBlue;
var rRP8 = new pc.Vec3(); rRP8.lerp( aListLH[pos],rXC89, L3KS_mult); app.renderLine(aListLH[pos],rRP8, colorAng);
};
DotVectorAngle.prototype.calculateAngle = function(ang, posEt, posTo, posTre){
var p2={ // Start-punkt:
x: posEt.x,
y: posEt.y
};
var p1={ // Spids-punkt:
x: posTo.x,
y: posTo.y
};
var p3={ // Slut-punkt:
x: posTre.x,
y: posTre.y
};
var p12 = Math.sqrt(Math.pow((p1.x - p2.x),2) + Math.pow((p1.y - p2.y),2));
var p13 = Math.sqrt(Math.pow((p1.x - p3.x),2) + Math.pow((p1.y - p3.y),2));
var p23 = Math.sqrt(Math.pow((p2.x - p3.x),2) + Math.pow((p2.y - p3.y),2));
//angle in radians
var resultRadian = Math.acos(((Math.pow(p12, 2)) + (Math.pow(p13, 2)) - (Math.pow(p23, 2))) / (2 * p12 * p13));
//angle in degrees
if(ang === 1){resultDegree1 = Math.acos(((Math.pow(p12, 2)) + (Math.pow(p13, 2)) - (Math.pow(p23, 2))) / (2 * p12 * p13)) * 180 / Math.PI;}
if(ang === 2){resultDegree2 = Math.acos(((Math.pow(p12, 2)) + (Math.pow(p13, 2)) - (Math.pow(p23, 2))) / (2 * p12 * p13)) * 180 / Math.PI;}
};