11.02.2009, 12:20
Hello,
I wanted to make the camera rotate around a player when he is in class selection
I've done a big part already but it won't really work like how I want it to ><
here is what I have:
the problem is that the camera doesn't rotate around the player, but it makes a large circle over all las venturas 
//edit: pastebin link: http://pastebin.com/f29047ac4
I wanted to make the camera rotate around a player when he is in class selection
I've done a big part already but it won't really work like how I want it to ><
here is what I have:
pawn Код:
new Float:CameraAngle[MAX_PLAYERS];
new Float:CameraPosX[MAX_PLAYERS];
new Float:CameraPosY[MAX_PLAYERS];
forward HoldKey(playerid);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public HoldKey(playerid)
{
SendClientMessage(playerid, COLOR_GREY, "HoldKey");
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
if(keys == KEY_CROUCH ) //left
{
if(PlayerInClassSelection[playerid] == true)
{
CameraAngle[playerid] = floatsub(CameraAngle[playerid],0.5);
GetXYForCamera(CameraPosX[playerid], CameraPosY[playerid], CameraAngle[playerid]);
SetPlayerCameraPos(playerid, CameraPosX[playerid], CameraPosY[playerid],11.5529);
SetPlayerCameraLookAt(playerid, 2087.9612,1910.0950,12.4536);
}
}
if(keys == KEY_JUMP ) //right
{
if(PlayerInClassSelection[playerid] == true)
{
CameraAngle[playerid] = floatadd(CameraAngle[playerid],0.5);
GetXYForCamera(CameraPosX[playerid], CameraPosY[playerid], CameraAngle[playerid]);
SetPlayerCameraPos(playerid, CameraPosX[playerid], CameraPosY[playerid],11.5529);
SetPlayerCameraLookAt(playerid, 2087.9612,1910.0950,12.4536);
}
}
if (keys > 0) SetTimerEx("HoldKey", 50, 0, "d", playerid);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
SetTimerEx("HoldKey", 50, 0, "d", playerid);
if(newkeys == KEY_CROUCH ) //left
{
if(PlayerInClassSelection[playerid] == true)
{
CameraAngle[playerid] = floatsub(CameraAngle[playerid],0.5);
GetXYForCamera(CameraPosX[playerid], CameraPosY[playerid], CameraAngle[playerid]);
SetPlayerCameraPos(playerid, CameraPosX[playerid], CameraPosY[playerid],11.5529);
SetPlayerCameraLookAt(playerid, 2087.9612,1910.0950,12.4536);
}
}
if(newkeys == KEY_JUMP ) //right
{
if(PlayerInClassSelection[playerid] == true)
{
CameraAngle[playerid] = floatadd(CameraAngle[playerid],0.5);
GetXYForCamera(CameraPosX[playerid], CameraPosY[playerid], CameraAngle[playerid]);
SetPlayerCameraPos(playerid, CameraPosX[playerid], CameraPosY[playerid],11.5529);
SetPlayerCameraLookAt(playerid, 2087.9612,1910.0950,12.4536);
}
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 2087.4019,1911.1284,12.4434);
SetPlayerFacingAngle(playerid, 251.7306);
SetPlayerCameraPos(playerid, 2092.0486,1909.7275,11.5529);
SetPlayerCameraLookAt(playerid, 2087.9612,1910.0950,12.4536);
CameraAngle[playerid] = 251.7306;
CameraPosX[playerid] = 2092.0486;
CameraPosY[playerid] = 1909.727;
PlayerInClassSelection[playerid] = true;
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GetXYForCamera(&Float:x, &Float:y, Float:angle)
{
new Float:distance = 3.0;
x += (distance * floatsin(-angle, degrees));
y += (distance * floatcos(-angle, degrees));
}

//edit: pastebin link: http://pastebin.com/f29047ac4