dvander@1069: /** dvander@1069: * vim: set ts=4 : dvander@1069: * =============================================================== dvander@1069: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@1069: * =============================================================== dvander@1069: * dvander@1069: * This file is part of the SourceMod/SourcePawn SDK. This file may only be used dvander@1069: * or modified under the Terms and Conditions of its License Agreement, which is found dvander@1069: * in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins dvander@1069: * may change at any time. To view the latest information, see: dvander@1069: * http://www.sourcemod.net/license.php dvander@1069: * dvander@1069: * Version: $Id$ dvander@1069: */ dvander@1069: dvander@1069: #if defined _vector_included dvander@1069: #endinput dvander@1069: #endif dvander@1069: #define _vector_included dvander@1069: dvander@1069: /** dvander@1069: * Calculates a vector's length. dvander@1069: * dvander@1069: * @param vec Vector. dvander@1069: * @param squared If true, the result will be squared (for optimization). dvander@1069: * @return Vector length (magnitude). dvander@1069: */ dvander@1069: native Float:GetVectorLength(const Float:vec[3], bool:squared=false); dvander@1069: dvander@1069: /** dvander@1069: * Calculates the distance between two vectors. dvander@1069: * dvander@1069: * @param vec1 First vector. dvander@1069: * @param vec2 Second vector. dvander@1069: * @param squared If true, the result will be squared (for optimization). dvander@1069: * @return Vector distance. dvander@1069: */ dvander@1069: native Float:GetVectorDistance(const Float:vec1[3], const Float:vec2[3], bool:squared=false); dvander@1069: dvander@1069: /** dvander@1069: * Calculates the dot product of two vectors. dvander@1069: * dvander@1069: * @param vec1 First vector. dvander@1069: * @param vec2 Second vector. dvander@1069: * @return Dot product of the two vectors. dvander@1069: */ dvander@1069: native Float:GetVectorDotProduct(const Float:vec1[3], const Float:vec2[3]); dvander@1069: dvander@1069: /** dvander@1069: * Computes the cross product of two vectors. Any input array can be the same dvander@1069: * as the output array. dvander@1069: * dvander@1069: * @param vec1 First vector. dvander@1069: * @param vec2 Second vector. dvander@1069: * @param result Resultant vector. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: native GetVectorCrossProduct(const Float:vec1[3], const Float:vec2[3], Float:result[3]); dvander@1069: dvander@1069: /** dvander@1069: * Normalizes a vector. The input array can be the same as the output array. dvander@1069: * dvander@1069: * @param vec Vector. dvander@1069: * @param result Resultant vector. dvander@1069: * @return Vector length. dvander@1069: */ dvander@1069: native Float:NormalizeVector(const Float:vec[3], Float:result[3]); dvander@1069: dvander@1069: /** dvander@1069: * Returns vectors in the direction of an angle. dvander@1069: * dvander@1069: * @param angle Angle. dvander@1069: * @param fwd Forward vector buffer or NULL_VECTOR. dvander@1069: * @param right Right vector buffer or NULL_VECTOR. dvander@1069: * @param up Up vector buffer or NULL_VECTOR. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: native GetAngleVectors(const Float:angle[3], Float:fwd[3], Float:right[3], Float:up[3]); dvander@1069: dvander@1069: /** dvander@1069: * Returns angles from a vector. dvander@1069: * dvander@1069: * @param vec Vector. dvander@1069: * @param angle Angle buffer. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: native GetVectorAngles(const Float:vec[3], Float:angle[3]); dvander@1069: dvander@1069: /** dvander@1069: * Returns direction vectors from a vector. dvander@1069: * dvander@1069: * @param vec Vector. dvander@1069: * @param right Right vector buffer or NULL_VECTOR. dvander@1069: * @param up Up vector buffer or NULL_VECTOR. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: native GetVectorVectors(const Float:vec[3], Float:right[3], Float:up[3]); dvander@1069: dvander@1069: /** dvander@1069: * Adds two vectors. It is safe to use either input buffer as an output dvander@1069: * buffer. dvander@1069: * dvander@1069: * @param vec1 First vector. dvander@1069: * @param vec2 Second vector. dvander@1069: * @param result Result buffer. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: stock AddVectors(const Float:vec1[3], const Float:vec2[3], Float:result[3]) dvander@1069: { dvander@1069: result[0] = vec1[0] + vec2[0]; dvander@1069: result[1] = vec1[1] + vec2[1]; dvander@1069: result[2] = vec1[2] + vec2[2]; dvander@1069: } dvander@1069: dvander@1069: /** dvander@1069: * Subtracts a vector from another vector. It is safe to use either input dvander@1069: * buffer as an output buffer. dvander@1069: * dvander@1069: * @param vec1 First vector. dvander@1069: * @param vec2 Second vector to subtract from first. dvander@1069: * @param result Result buffer. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: stock SubtractVectors(const Float:vec1[3], const Float:vec2[3], Float:result[3]) dvander@1069: { dvander@1069: result[0] = vec1[0] - vec2[0]; dvander@1069: result[1] = vec1[1] - vec2[1]; dvander@1069: result[2] = vec1[2] - vec2[2]; dvander@1069: } dvander@1069: dvander@1069: /** dvander@1069: * Scales a vector. dvander@1069: * dvander@1069: * @param vec Vector. dvander@1069: * @param scale Scale value. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: stock ScaleVector(Float:vec[3], Float:scale) dvander@1069: { dvander@1069: vec[0] *= scale; dvander@1069: vec[1] *= scale; dvander@1069: vec[2] *= scale; dvander@1069: } dvander@1069: dvander@1069: /** dvander@1069: * Negatives a vector. dvander@1069: * dvander@1069: * @param vec Vector. dvander@1069: * @noreturn dvander@1069: */ dvander@1069: stock NegateVector(Float:vec[3]) dvander@1069: { dvander@1069: vec[0] = -vec[0]; dvander@1069: vec[1] = -vec[1]; dvander@1069: vec[2] = -vec[2]; dvander@1069: } dvander@1155: dvander@1155: /** dvander@1155: * Builds a vector from two points by subtracting the points. dvander@1155: * dvander@1155: * @param pt1 First point (to be subtracted from the second). dvander@1155: * @param pt2 Second point. dvander@1155: * @param output Output vector buffer. dvander@1155: * @noreturn dvander@1155: */ dvander@1155: stock MakeVectorFromPoints(const Float:pt1[3], const Float:pt2[3], Float:output[3]) dvander@1155: { dvander@1155: output[0] = pt2[0] - pt1[0]; dvander@1155: output[1] = pt2[1] - pt1[1]; dvander@1155: output[2] = pt2[2] - pt1[2]; dvander@1155: }