You still need to use OnPlayerUpdate, but only use the data when the key state changes. It will be called multiple times as long as the key is held down, which you don't want.
|
You still need to use OnPlayerUpdate, but only use the data when the key state changes. It will be called multiple times as long as the key is held down, which you don't want.
|
new pKey[MAX_PLAYERS][4]; // 0=up 1=down 2=left 3=right
public OnPlayerUpdate(playerid)
{
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
if(updown == KEY_UP && !pKey[playerid][0])
{
pKey[playerid][0] = 1; // Remember that they are pressing up
OnPlayerUDLR(playerid, 0); // Call the function
}
if(updown != KEY_UP && pKey[playerid][0]) pKey[playerid][0] = 0; // Up no longer pressed
if(updown == KEY_DOWN && !pKey[playerid][1])
{
pKey[playerid][1] = 1; // Remember that they are pressing down
OnPlayerUDLR(playerid, 1); // Call the function
}
if(updown!= KEY_DOWN && pKey[playerid][1]) pKey[playerid][1] = 0; // Down no longer pressed
if(leftright == KEY_LEFT && !pKey[playerid][2])
{
pKey[playerid][2] = 1; // Remember that they are pressing left
OnPlayerUDLR(playerid, 2); // Call the function
}
if(leftright != KEY_LEFT && pKey[playerid][2]) pKey[playerid][2] = 0; // Left no longer pressed
if(leftright == KEY_RIGHT && !pKey[playerid][3])
{
pKey[playerid][3] = 1; // Remember that they are pressing right
OnPlayerUDLR(playerid, 3); // Call the function
}
if(leftright != KEY_RIGHT && pKey[playerid][3]) pKey[playerid][3] = 0; // Right no longer pressed
return 1;
}
OnPlayerUDLR(playerid, udlr)
{
switch(udlr)
{
case 0:
{
// pressed up
}
case 1:
{
// pressed down
}
case 2:
{
// pressed left
}
case 3:
{
// pressed right
}
}
return 1;
}