#ifndef __VECTOR_H__
#define __VECTOR_H__

#include <math.h>
#include <string.h>

class vector4;
class mat4x4;

class vector4{
	public:
		float x, y, z, w;
		vector4();
		vector4(float x0, float y0, float z0, float w0);

		void vec(float x0, float y0, float z0, float w0);
		void null(void);

		float& operator[](int i);
		float length(void);
		void negate(void);
		void normalize(void);

		void cross(vector4& v1, vector4& v2);
		void operator+=(vector4& v);
		void operator-=(vector4& v);
		void operator*=(vector4& v);

		vector4 operator+(vector4& v);
		vector4 operator-(vector4& v);
		vector4 operator*(vector4& v);
		vector4 operator*(mat4x4& m);
};

class mat4x4 {
	public:
		float m[4][4];
		
		void null(void);
		void load_identity(void);
		void set_rotation(vector4& dir, float rad);

		vector4 operator*(vector4& v);
		mat4x4 operator*(mat4x4& m1);
};

#endif