#pragma once

#ifndef _VECTOR_
#define _VECTOR_

#define Pi 3.1415926535897932384626433832795028841972

class Matrix;

class Vector
{
	public:
	
	float		x, y, z, w;
	
	Vector();
	Vector(float x, float y, float z);

	Vector	operator*( Vector b );
	Vector	operator*( float scalar );
	void	operator*=( float scalar );
	float	operator^( Vector b );
	Vector	operator-( Vector b );
	Vector	operator+( Vector b );
	void	operator+=( Vector b );
	void	operator-=( Vector b );
	Vector	operator/( Vector b );
	Vector	operator/( float scalar );

	Vector	Bounce(Vector unitNormal, float vertB, float horizB);
	Vector	RotateAbout(float angle, Vector orig, Vector norm);
	float	Length();
	float	LengthSqr();
	Vector	Unit();
	float	DistanceToVector(Vector a);
	Matrix	Tilde();
};

class Matrix
{
	public:
	
	float		data[16];
	
	Matrix();
	/*Matrix(Vector a, Vector b, Vector c);
	Matrix(float aa, float ab, float ac, float ba, float bb, float bc, float ca, float cb, float cc);
	
	Matrix	operator*(float scalar);
	Matrix	operator*(Matrix matrixB);
	Vector	operator*(Vector vector);
	Matrix	operator+(Matrix matrixB);
	Matrix	operator-(Matrix matrixB);
	void	operator+=(Matrix matrixB);
	
	Matrix	Orthognalise();
	Matrix	Transpose();*/
};

Vector	operator*( float scalar, Vector b);
//Matrix	operator*( float scalar, Matrix b);

extern Vector	zeroVector, x, y, z, xy, xz, yz, xyz;
//extern Matrix	identityMatrix;

#endif