#include <a_samp>
new Float:playerPos[]={3.93,2.34,4.0};
new Float:playerLookAt[]={3.0,2.0,1.0};
forward Float:GetDistance( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2 );
stock Float:GetDistance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
return VectorSize(x1-x2, y1-y2, z1-z2);
}
//new Float:r=GetDistance(playerPos[0][0],playerPos[0][1],playerPos[0][2],circleCenter[0][0],circleCenter[0][1],circleCenter[0][2]);
//new Float:r=floatabs(floatsqroot(((playerPos[0][0]-circleCenter[0][0])*(playerPos[0][0]-circleCenter[0][0]))+((playerPos[0][1]-circleCenter[0][1])*(playerPos[0][1]-circleCenter[0][1]))+((playerPos[0][2]-circleCenter[0][2])*(cplayerPos[0][2]-circleCenter[0][2]))));
new Float:r=1.0;
main()
{
}
stock RotatePlayerCamera(playerid, Float:pX, Float:pY, Float:pZ, Float:lAx, Float:lAy, Float:lAz, speed)
{
new Float:circleCenter[]={lAx, lAy, pZ};
SetPlayerPos(playerid,pX,pY,pZ);
SetPlayerCameraLookAt(playerid, lAx, lAy, lAz);
new Float:xa,Float:xy;
//new Float:r=floatabs(floatsqroot(((pX-circleCenter[0][0])*(pX-circleCenter[0][0]))+((pY-circleCenter[0][1])*(pY-circleCenter[0][1]))+((pZ-circleCenter[0][2])*(pZ-circleCenter[0][2]))));
xa=acos((pX[0]-circleCenter[0])/r);
xy=asin((pY[1]-circleCenter[1])/r);
new rotatingCoords[360][];
for(new i;i<360;i++)
{
new Float:y,Float:x;
x=circleCenter[0]+r*floatcos(i+xa,degrees);
y=circleCenter[1]+r*floatsin(i+xy,degrees);
rotatingCoords[i][0]=x;
rotatingCoords[i][1]=y;
rotatingCoords[i][2]=circleCenter[0][2];
printf("New post after %d degrees X:%f Y:%f Z:%f,i,rotatingCoords[i][0],rotatingCoords[i][1],rotatingCoords[i][2])
}
//Immer nach speed/360 sekunden
InterpolateCameraLookAt(playerid, pX , pY , pZ , lAx, lAy, lAz, speed, CAMERA_MOVE);
}
Alles anzeigen
Das hier ist der Code zu folgendem Konstrukt
Ich habe einen Ortsvektor mit einem Punkt wo der Spieler hinschauen soll, bspw ein Gebaeude.
Dann habe ich einen Ortsvektor mit den Koordinaten des Spielers von denen aus der Spieler auf den anderen schauen soll.
Weiterhin soll sich der Spieler auf einer Kreisbahn um ein Objekt bewegen, dazu muss ich die fehlenden Ortsvektoren auf der Kreisbahn extrapolieren.
Dazu habe ich einen Ortsvektor des Mittelpunkts angenommen,den Ortsvektor des Punktes auf der Kreisbahn vor der Rotation (also Spieler) und der neue Ortsvektor jener danach. θ sei der Winkel der Bewegung. n sei der normalisierte Normalenvektor der Ebene in der die Kreisbahn liegt.
So nun bin ich jedoch am Raetseln wie ich es umsetzen soll dass der Spieler in speed/360 Zeit jeweils um eine Koordinate weiter geschoben wird, wie kriege ich das vernuenftig realisiert, bspw. durch Timer? Oder gibt es da clevere Loesungen?
Jede speed/360 Sekunde eine Funktion durch einen Timer aufrufen oder so ist ja auch doof.