Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Copyright 2023 Maicol Castro (maicolcastro.abc@gmail.com).
- // Distributed under the BSD 3-Clause License.
- // See at https://opensource.org/license/bsd-3-clause.
- #if defined _GETPLAYERTARGET_INC
- #endinput
- #endif
- #define _GETPLAYERTARGET_INC 1
- #include <foreach>
- stock Float:fmin(Float:a, Float:b) { return a > b ? b : a; }
- stock Float:fmax(Float:a, Float:b) { return a > b ? a : b; }
- stock fswap(&Float:a, &Float:b) { new Float:t = a; a = b; b = t; }
- stock bool:_IntersectBox(const Float:ray[6], const Float:box[6])
- {
- new Float:tMin = (box[0] - ray[0]) / ray[3];
- new Float:tMax = (box[3] - ray[0]) / ray[3];
- if (tMin > tMax)
- fswap(tMin, tMax);
- new Float:tyMin = (box[1] - ray[1]) / ray[4];
- new Float:tyMax = (box[4] - ray[1]) / ray[4];
- if (tyMin > tyMax)
- fswap(tyMin, tyMax);
- if ((tMin > tyMax) || (tyMin > tMax))
- return false;
- if (tyMin > tMin)
- tMin = tyMin;
- if (tyMax < tMax)
- tMax = tyMax;
- new Float:tzMin = (box[2] - ray[2]) / ray[5];
- new Float:tzMax = (box[5] - ray[2]) / ray[5];
- if (tzMin > tzMax)
- fswap(tzMin, tzMax);
- if ((tMin > tzMax) || (tzMin > tMax))
- return false;
- if (tzMin > tMin)
- tMin = tzMin;
- if (tzMax < tMax)
- tMax = tzMax;
- return true;
- }
- stock GetPlayerTargetPlayerEx(playerid)
- {
- new keys, updown, leftright;
- GetPlayerKeys(playerid, keys, updown, leftright);
- if (keys & KEY_HANDBRAKE == 0)
- return INVALID_PLAYER_ID;
- if (IsPlayerInAnyVehicle(playerid))
- return INVALID_PLAYER_ID;
- new Float:ray[6];
- new Float:box[6];
- GetPlayerCameraPos(playerid, ray[0], ray[1], ray[2]);
- GetPlayerCameraFrontVector(playerid, ray[3], ray[4], ray[5]);
- foreach (new i : Character)
- {
- if (!IsPlayerConnected(i) || !IsPlayerStreamedIn(i, playerid) || i == playerid)
- continue;
- GetPlayerPos(i, box[0], box[1], box[2]);
- GetPlayerPos(i, box[3], box[4], box[5]);
- box[0] += 0.25;
- box[1] -= 0.4;
- box[2] -= 0.5;
- box[3] -= 0.25;
- box[4] += 0.1;
- GetPlayerKeys(i, keys, updown, leftright);
- if (keys & KEY_CROUCH == 0)
- box[5] += 0.5;
- if (_IntersectBox(ray, box))
- return i;
- }
- return INVALID_PLAYER_ID;
- }
- stock GetPlayerTargetActorEx(playerid)
- {
- new keys, updown, leftright;
- GetPlayerKeys(playerid, keys, updown, leftright);
- if (keys & KEY_HANDBRAKE == 0)
- return INVALID_ACTOR_ID;
- if (IsPlayerInAnyVehicle(playerid))
- return INVALID_ACTOR_ID;
- new Float:ray[6];
- new Float:box[6];
- GetPlayerCameraPos(playerid, ray[0], ray[1], ray[2]);
- GetPlayerCameraFrontVector(playerid, ray[3], ray[4], ray[5]);
- foreach (new i : Actor)
- {
- if (!IsActorStreamedIn(i, playerid))
- continue;
- GetActorPos(i, box[0], box[1], box[2]);
- GetActorPos(i, box[3], box[4], box[5]);
- box[0] += 0.25;
- box[1] -= 0.4;
- box[2] -= 0.5;
- box[3] -= 0.25;
- box[4] += 0.1;
- box[5] += 0.5;
- if (_IntersectBox(ray, box))
- return i;
- }
- return INVALID_ACTOR_ID;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement