
#ifndef SPECTRE_MATH_MATH_H
#define SPECTRE_MATH_MATH_H

#include "Vector3.h"
#include "Vector2.h"
#include "Matrix4.h"

namespace math
{
	float rand(float min, float max);

	// Convert degrees to radians.
	float deg2rad(float deg);

	// ------------------------------
	//  Logarithmic functions.
	// ------------------------------

	double log(double base, double value);

	double log2(double value);

	unsigned int nextPowerOfTwo(unsigned int value);

	// ------------------------------
	//  Matrix Projection functions.
	// ------------------------------

	// Create a orthographic projection matrix.
	Matrix4f orthoProjection(float left, float right, 
		float bottom, float top, 
		float zNear = -1.0f, float zFar = 1.0f);

	// Create a 2D rotation matrix. (rotation around Z-axis)
	Matrix4f rotation(float theta);
	
	// Create a 2D translation matrix.
	Matrix4f translate(const Vector2f& v);

	// Create a 2D scale matrix.
	Matrix4f scale(const Vector2f& f);

	// Get translation part of a matrix.
	Vector3f getTranslate(const Matrix4f matrix);

	Vector3f getUpVector(const Matrix4f matrix);

	Vector3f getForwardVector(const Matrix4f matrix);
};

#endif /* SPECTRE_MATH_MATH_H */