/*********************************************************************************************
* 
*   raylib.vector3
*    
*   Some useful functions to work with Vector3
* 
*   Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
*    
*   This software is provided "as-is", without any express or implied warranty. In no event 
*   will the authors be held liable for any damages arising from the use of this software.
*
*   Permission is granted to anyone to use this software for any purpose, including commercial 
*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
*     1. The origin of this software must not be misrepresented; you must not claim that you 
*     wrote the original software. If you use this software in a product, an acknowledgment 
*     in the product documentation would be appreciated but is not required.
*
*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
*     as being the original software.
*
*     3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************/

#ifndef VECTOR3_H
#define VECTOR3_H

#include "raylib.h"        // Defines Vector3 structure

#ifdef __cplusplus
extern "C" {            // Prevents name mangling of functions
#endif

//------------------------------------------------------------------------------------
// Global Variables Definition
//------------------------------------------------------------------------------------
// It's lonely here...

//------------------------------------------------------------------------------------
// Functions Declaration to work with Vector3
//------------------------------------------------------------------------------------
Vector3 VectorAdd(Vector3 v1, Vector3 v2);            // Add two vectors
Vector3 VectorSubtract(Vector3 v1, Vector3 v2);       // Substract two vectors
Vector3 VectorCrossProduct(Vector3 v1, Vector3 v2);   // Calculate two vectors cross product
Vector3 VectorPerpendicular(Vector3 v);               // Calculate one vector perpendicular vector
float VectorDotProduct(Vector3 v1, Vector3 v2);       // Calculate two vectors dot product
float VectorLength(const Vector3 v);                  // Calculate vector lenght
void VectorScale(Vector3 *v, float scale);            // Scale provided vector
void VectorInverse(Vector3 *v);                       // Invert provided vector (direction)
void VectorNormalize(Vector3 *v);                     // Normalize provided vector

#ifdef __cplusplus
}
#endif

#endif // VECTOR3_H