Browse Source

Added more structure, added abstraction to existing parts

Kenneth van Ewijk 10 năm trước cách đây
mục cha
commit
049fb28ffc
25 tập tin đã thay đổi với 506 bổ sung411 xóa
  1. 2 0
      Controller.h
  2. 8 0
      CrystalPoint.vcxproj
  3. 27 0
      CrystalPoint.vcxproj.filters
  4. 12 0
      Enemy.cpp
  5. 10 0
      Enemy.h
  6. 2 3
      Header.h
  7. 2 0
      Keyboard.h
  8. 2 0
      LoadingState.h
  9. 3 2
      Main.cpp
  10. 2 0
      MenuState.h
  11. 228 2
      Model.cpp
  12. 55 3
      Model.h
  13. 2 303
      ModelLoader.cpp
  14. 7 98
      ModelLoader.h
  15. 2 0
      Mouse.h
  16. 12 0
      Player.cpp
  17. 17 0
      Player.h
  18. 2 0
      State.h
  19. 2 0
      StateHandler.h
  20. 48 0
      Vector.cpp
  21. 37 0
      Vector.h
  22. 10 0
      Weapon.cpp
  23. 10 0
      Weapon.h
  24. 2 0
      WorldModel.h
  25. 2 0
      WorldState.h

+ 2 - 0
Controller.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class Controller
 {
 public:

+ 8 - 0
CrystalPoint.vcxproj

@@ -151,6 +151,7 @@
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="Controller.h" />
+    <ClInclude Include="Enemy.h" />
     <ClInclude Include="Header.h" />
     <ClInclude Include="Keyboard.h" />
     <ClInclude Include="LoadingState.h" />
@@ -158,13 +159,17 @@
     <ClInclude Include="Model.h" />
     <ClInclude Include="ModelLoader.h" />
     <ClInclude Include="Mouse.h" />
+    <ClInclude Include="Player.h" />
     <ClInclude Include="State.h" />
     <ClInclude Include="StateHandler.h" />
+    <ClInclude Include="Vector.h" />
+    <ClInclude Include="Weapon.h" />
     <ClInclude Include="WorldModel.h" />
     <ClInclude Include="WorldState.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Controller.cpp" />
+    <ClCompile Include="Enemy.cpp" />
     <ClCompile Include="Keyboard.cpp" />
     <ClCompile Include="LoadingState.cpp" />
     <ClCompile Include="Main.cpp" />
@@ -172,8 +177,11 @@
     <ClCompile Include="Model.cpp" />
     <ClCompile Include="ModelLoader.cpp" />
     <ClCompile Include="Mouse.cpp" />
+    <ClCompile Include="Player.cpp" />
     <ClCompile Include="State.cpp" />
     <ClCompile Include="StateHandler.cpp" />
+    <ClCompile Include="Vector.cpp" />
+    <ClCompile Include="Weapon.cpp" />
     <ClCompile Include="WorldModel.cpp" />
     <ClCompile Include="WorldState.cpp" />
   </ItemGroup>

+ 27 - 0
CrystalPoint.vcxproj.filters

@@ -22,6 +22,9 @@
     <Filter Include="Source Files\Model">
       <UniqueIdentifier>{842778c9-ff0f-4a6d-9c86-0a178ad40fcc}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Source Files\Model\Enemy">
+      <UniqueIdentifier>{1be14b84-6fa7-4cfb-94b9-666f3ee14198}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Model.h">
@@ -60,6 +63,18 @@
     <ClInclude Include="WorldState.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="Enemy.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Player.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Weapon.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Vector.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Main.cpp">
@@ -98,5 +113,17 @@
     <ClCompile Include="WorldState.cpp">
       <Filter>Source Files\State</Filter>
     </ClCompile>
+    <ClCompile Include="Enemy.cpp">
+      <Filter>Source Files\Model\Enemy</Filter>
+    </ClCompile>
+    <ClCompile Include="Player.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Weapon.cpp">
+      <Filter>Source Files\Model</Filter>
+    </ClCompile>
+    <ClCompile Include="Vector.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 12 - 0
Enemy.cpp

@@ -0,0 +1,12 @@
+#include "Enemy.h"
+
+
+
+Enemy::Enemy()
+{
+}
+
+
+Enemy::~Enemy()
+{
+}

+ 10 - 0
Enemy.h

@@ -0,0 +1,10 @@
+#pragma once
+#include "Header.h"
+
+class Enemy
+{
+public:
+	Enemy();
+	~Enemy();
+};
+

+ 2 - 3
Header.h

@@ -12,10 +12,9 @@
 #include <fstream>
 #include <iostream>
 #include <algorithm>
+#include <vector>
 
 #include <windows.h>
 #include <gl/GL.h>
 
-//Own files
-#include "Model.h"
-#include "ModelLoader.h"
+using namespace std;

+ 2 - 0
Keyboard.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class Keyboard
 {
 public:

+ 2 - 0
LoadingState.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class LoadingState
 {
 public:

+ 3 - 2
Main.cpp

@@ -1,4 +1,5 @@
 #include "Header.h"
+#include "Model.h"
 
 //Prototypes
 void bindFuncOpenGL(void);
@@ -11,7 +12,7 @@ static int Height;
 float lastFrameTime = 0;
 bool keys[255];
 
-vector<ObjModel*> models;
+vector<Model*> models;
 int currentModel = 0;
 
 struct Camera
@@ -169,5 +170,5 @@ void configureOpenGL()
 
 void loadModels() 
 {
-	models.push_back(new ObjModel("models/ship/shipA_OBJ.obj"));
+	models.push_back(new Model("models/ship/shipA_OBJ.obj"));
 }

+ 2 - 0
MenuState.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class MenuState
 {
 public:

+ 228 - 2
Model.cpp

@@ -1,10 +1,236 @@
 #include "Model.h"
 
-Model::Model()
+#define STB_IMAGE_IMPLEMENTATION
+#include "stb_image.h"
+
+Model::Model(string fileName)
+{
+	std::string dirName = fileName;
+	if (dirName.rfind("/") != std::string::npos)
+		dirName = dirName.substr(0, dirName.rfind("/"));
+	if (dirName.rfind("\\") != std::string::npos)
+		dirName = dirName.substr(0, dirName.rfind("\\"));
+	if (fileName == dirName)
+		dirName = "";
+
+
+	std::ifstream pFile(fileName.c_str());
+
+	if (!pFile.is_open())
+	{
+		std::cout << "Could not open file " << fileName << std::endl;
+		return;
+	}
+
+
+	ObjGroup* currentGroup = new ObjGroup();
+	currentGroup->materialIndex = -1;
+
+
+	while (!pFile.eof())
+	{
+		std::string line;
+		std::getline(pFile, line);
+
+		line = replace(line, "\t", " ");
+		while (line.find("  ") != std::string::npos)
+			line = replace(line, "  ", " ");
+		if (line == "")
+			continue;
+		if (line[0] == ' ')
+			line = line.substr(1);
+		if (line == "")
+			continue;
+		if (line[line.length() - 1] == ' ')
+			line = line.substr(0, line.length() - 1);
+		if (line == "")
+			continue;
+		if (line[0] == '#')
+			continue;
+
+		std::vector<std::string> params = split(line, " ");
+		params[0] = toLower(params[0]);
+
+		if (params[0] == "v")
+			vertices.push_back(Vec3f((float)atof(params[1].c_str()), (float)atof(params[2].c_str()), (float)atof(params[3].c_str())));
+		else if (params[0] == "vn")
+			normals.push_back(Vec3f((float)atof(params[1].c_str()), (float)atof(params[2].c_str()), (float)atof(params[3].c_str())));
+		else if (params[0] == "vt")
+			texcoords.push_back(Vec2f((float)atof(params[1].c_str()), (float)atof(params[2].c_str())));
+		else if (params[0] == "f")
+		{
+			for (size_t ii = 4; ii <= params.size(); ii++)
+			{
+				Face face;
+
+				for (size_t i = ii - 3; i < ii; i++)	//magische forlus om van quads triangles te maken ;)
+				{
+					Vertex vertex;
+					std::vector<std::string> indices = split(params[i == (ii - 3) ? 1 : i], "/");
+					if (indices.size() >= 1)	//er is een positie
+						vertex.position = atoi(indices[0].c_str()) - 1;
+					if (indices.size() == 2)		//alleen texture
+						vertex.texcoord = atoi(indices[1].c_str()) - 1;
+					if (indices.size() == 3)		//v/t/n of v//n
+					{
+						if (indices[1] != "")
+							vertex.texcoord = atoi(indices[1].c_str()) - 1;
+						vertex.normal = atoi(indices[2].c_str()) - 1;
+					}
+					face.vertices.push_back(vertex);
+				}
+				currentGroup->faces.push_back(face);
+			}
+		}
+		else if (params[0] == "s")
+		{//smoothing
+		}
+		else if (params[0] == "mtllib")
+		{
+			loadMaterialFile(dirName + "/" + params[1], dirName);
+		}
+		else if (params[0] == "usemtl")
+		{
+			if (currentGroup->faces.size() != 0)
+				groups.push_back(currentGroup);
+			currentGroup = new ObjGroup();
+			currentGroup->materialIndex = -1;
+
+			for (size_t i = 0; i < materials.size(); i++)
+			{
+				MaterialInfo* info = materials[i];
+				if (info->name == params[1])
+				{
+					currentGroup->materialIndex = i;
+					break;
+				}
+			}
+			if (currentGroup->materialIndex == -1)
+				std::cout << "Could not find material name " << params[1] << std::endl;
+		}
+	}
+	groups.push_back(currentGroup);
+}
+
+
+Model::~Model(void)
 {
 }
 
 
-Model::~Model()
+
+
+void Model::draw()
 {
+	for (auto &g : groups)
+	{
+		if (materials[g->materialIndex]->hasTexture)
+		{
+			glEnable(GL_TEXTURE_2D);
+			materials[g->materialIndex]->texture->bind();
+		}
+
+		glBegin(GL_TRIANGLES);
+		for (auto &f : g->faces)
+		{
+			for (auto &v : f.vertices)
+			{
+				glNormal3f(normals[v.normal].x, normals[v.normal].y, normals[v.normal].z);
+				glTexCoord2f(texcoords[v.texcoord].x, texcoords[v.texcoord].y);
+				glVertex3f(vertices[v.position].x, vertices[v.position].y, vertices[v.position].z);
+			}
+		}
+		glEnd();
+	}
 }
+
+void Model::loadMaterialFile(std::string fileName, std::string dirName)
+{
+	std::ifstream pFile(fileName.c_str());
+	if (!pFile.is_open())
+	{
+		std::cout << "Could not open file " << fileName << std::endl;
+		return;
+	}
+
+	MaterialInfo* currentMaterial = NULL;
+
+	while (!pFile.eof())
+	{
+		std::string line;
+		std::getline(pFile, line);
+
+		line = replace(line, "\t", " ");
+		while (line.find("  ") != std::string::npos)
+			line = replace(line, "  ", " ");
+		if (line == "")
+			continue;
+		if (line[0] == ' ')
+			line = line.substr(1);
+		if (line == "")
+			continue;
+		if (line[line.length() - 1] == ' ')
+			line = line.substr(0, line.length() - 1);
+		if (line == "")
+			continue;
+		if (line[0] == '#')
+			continue;
+
+		std::vector<std::string> params = split(line, " ");
+		params[0] = toLower(params[0]);
+
+		if (params[0] == "newmtl")
+		{
+			if (currentMaterial != NULL)
+			{
+				materials.push_back(currentMaterial);
+			}
+			currentMaterial = new MaterialInfo();
+			currentMaterial->name = params[1];
+		}
+		else if (params[0] == "map_kd")
+		{
+			currentMaterial->hasTexture = true;
+			currentMaterial->texture = new Texture(dirName + "/" + params[1]);
+		}
+		else
+			std::cout << "Didn't parse " << params[0] << " in material file" << std::endl;
+	}
+	if (currentMaterial != NULL)
+		materials.push_back(currentMaterial);
+
+}
+
+Model::MaterialInfo::MaterialInfo()
+{
+	Texture *texture;
+	hasTexture = false;
+}
+
+Model::Texture::Texture(const std::string & fileName)
+{
+	int width, height, bpp;
+	stbi_set_flip_vertically_on_load(true);
+	unsigned char* imgData = stbi_load(fileName.c_str(), &width, &height, &bpp, 4);
+
+	glGenTextures(1, &index);
+	glBindTexture(GL_TEXTURE_2D, index);
+
+	glTexImage2D(GL_TEXTURE_2D,
+		0,		//level
+		GL_RGBA,		//internal format
+		width,		//width
+		height,		//height
+		0,		//border
+		GL_RGBA,		//data format
+		GL_UNSIGNED_BYTE,	//data type
+		imgData);		//data
+	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+	stbi_image_free(imgData);
+}
+
+void Model::Texture::bind()
+{
+	glBindTexture(GL_TEXTURE_2D, index);
+}

+ 55 - 3
Model.h

@@ -1,8 +1,60 @@
 #pragma once
+#include "Header.h"
+#include "ModelLoader.h"
+#include "Vector.h"
+
 class Model
 {
+private:
+	class Vertex
+	{
+	public:
+		int position;
+		int normal;
+		int texcoord;
+	};
+
+	class Face
+	{
+	public:
+		list<Vertex> vertices;
+	};
+
+	class Texture
+	{
+		GLuint index;
+	public:
+		Texture(const std::string &fileName);
+		void bind();
+	};
+
+	class MaterialInfo
+	{
+	public:
+		MaterialInfo();
+		std::string name;
+		Texture* texture;
+		bool hasTexture;
+	};
+
+	class ObjGroup
+	{
+	public:
+		std::string name;
+		int materialIndex;
+		list<Face> faces;
+	};
+
+	std::vector<Vec3f>	vertices;
+	std::vector<Vec3f>	normals;
+	std::vector<Vec2f>	texcoords;
+	std::vector<ObjGroup*> groups;
+	std::vector<MaterialInfo*> materials;
+
+	void loadMaterialFile(std::string fileName, std::string dirName);
 public:
-	Model();
-	~Model();
-};
+	Model(std::string filename);
+	~Model(void);
 
+	void draw();
+};

+ 2 - 303
ModelLoader.cpp

@@ -1,19 +1,7 @@
 #include "Header.h"
 #include "ModelLoader.h"
 
-#define STB_IMAGE_IMPLEMENTATION
-#include "stb_image.h"
-
-ModelLoader::ModelLoader()
-{
-}
-
-
-ModelLoader::~ModelLoader()
-{
-}
-
-std::string replace(std::string str, std::string toReplace, std::string replacement)
+string replace(string str, string toReplace, string replacement)
 {
 	size_t index = 0;
 	while (true)
@@ -27,7 +15,7 @@ std::string replace(std::string str, std::string toReplace, std::string replacem
 	return str;
 }
 
-std::vector<std::string> split(std::string str, std::string sep)
+vector<string> split(string str, string sep)
 {
 	std::vector<std::string> ret;
 	size_t index;
@@ -41,293 +29,4 @@ std::vector<std::string> split(std::string str, std::string sep)
 	}
 	ret.push_back(str);
 	return ret;
-}
-
-inline std::string toLower(std::string data)
-{
-	std::transform(data.begin(), data.end(), data.begin(), ::tolower);
-	return data;
-}
-
-
-
-
-ObjModel::ObjModel(std::string fileName)
-{
-	std::string dirName = fileName;
-	if (dirName.rfind("/") != std::string::npos)
-		dirName = dirName.substr(0, dirName.rfind("/"));
-	if (dirName.rfind("\\") != std::string::npos)
-		dirName = dirName.substr(0, dirName.rfind("\\"));
-	if (fileName == dirName)
-		dirName = "";
-
-
-	std::ifstream pFile(fileName.c_str());
-
-	if (!pFile.is_open())
-	{
-		std::cout << "Could not open file " << fileName << std::endl;
-		return;
-	}
-
-
-	ObjGroup* currentGroup = new ObjGroup();
-	currentGroup->materialIndex = -1;
-
-
-	while (!pFile.eof())
-	{
-		std::string line;
-		std::getline(pFile, line);
-
-		line = replace(line, "\t", " ");
-		while (line.find("  ") != std::string::npos)
-			line = replace(line, "  ", " ");
-		if (line == "")
-			continue;
-		if (line[0] == ' ')
-			line = line.substr(1);
-		if (line == "")
-			continue;
-		if (line[line.length() - 1] == ' ')
-			line = line.substr(0, line.length() - 1);
-		if (line == "")
-			continue;
-		if (line[0] == '#')
-			continue;
-
-		std::vector<std::string> params = split(line, " ");
-		params[0] = toLower(params[0]);
-
-		if (params[0] == "v")
-			vertices.push_back(Vec3f((float)atof(params[1].c_str()), (float)atof(params[2].c_str()), (float)atof(params[3].c_str())));
-		else if (params[0] == "vn")
-			normals.push_back(Vec3f((float)atof(params[1].c_str()), (float)atof(params[2].c_str()), (float)atof(params[3].c_str())));
-		else if (params[0] == "vt")
-			texcoords.push_back(Vec2f((float)atof(params[1].c_str()), (float)atof(params[2].c_str())));
-		else if (params[0] == "f")
-		{
-			for (size_t ii = 4; ii <= params.size(); ii++)
-			{
-				Face face;
-
-				for (size_t i = ii - 3; i < ii; i++)	//magische forlus om van quads triangles te maken ;)
-				{
-					Vertex vertex;
-					std::vector<std::string> indices = split(params[i == (ii - 3) ? 1 : i], "/");
-					if (indices.size() >= 1)	//er is een positie
-						vertex.position = atoi(indices[0].c_str()) - 1;
-					if (indices.size() == 2)		//alleen texture
-						vertex.texcoord = atoi(indices[1].c_str()) - 1;
-					if (indices.size() == 3)		//v/t/n of v//n
-					{
-						if (indices[1] != "")
-							vertex.texcoord = atoi(indices[1].c_str()) - 1;
-						vertex.normal = atoi(indices[2].c_str()) - 1;
-					}
-					face.vertices.push_back(vertex);
-				}
-				currentGroup->faces.push_back(face);
-			}
-		}
-		else if (params[0] == "s")
-		{//smoothing
-		}
-		else if (params[0] == "mtllib")
-		{
-			loadMaterialFile(dirName + "/" + params[1], dirName);
-		}
-		else if (params[0] == "usemtl")
-		{
-			if (currentGroup->faces.size() != 0)
-				groups.push_back(currentGroup);
-			currentGroup = new ObjGroup();
-			currentGroup->materialIndex = -1;
-
-			for (size_t i = 0; i < materials.size(); i++)
-			{
-				MaterialInfo* info = materials[i];
-				if (info->name == params[1])
-				{
-					currentGroup->materialIndex = i;
-					break;
-				}
-			}
-			if (currentGroup->materialIndex == -1)
-				std::cout << "Could not find material name " << params[1] << std::endl;
-		}
-	}
-	groups.push_back(currentGroup);
-}
-
-
-ObjModel::~ObjModel(void)
-{
-}
-
-
-
-
-void ObjModel::draw()
-{
-	for (auto &g : groups)
-	{
-		if (materials[g->materialIndex]->hasTexture)
-		{
-			glEnable(GL_TEXTURE_2D);
-			materials[g->materialIndex]->texture->bind();
-		}
-
-		glBegin(GL_TRIANGLES);
-		for (auto &f : g->faces)
-		{
-			for (auto &v : f.vertices)
-			{
-				glNormal3f(normals[v.normal].x, normals[v.normal].y, normals[v.normal].z);
-				glTexCoord2f(texcoords[v.texcoord].x, texcoords[v.texcoord].y);
-				glVertex3f(vertices[v.position].x, vertices[v.position].y, vertices[v.position].z);
-			}
-		}
-		glEnd();
-	}
-}
-
-void ObjModel::loadMaterialFile(std::string fileName, std::string dirName)
-{
-	std::ifstream pFile(fileName.c_str());
-	if (!pFile.is_open())
-	{
-		std::cout << "Could not open file " << fileName << std::endl;
-		return;
-	}
-
-	MaterialInfo* currentMaterial = NULL;
-
-	while (!pFile.eof())
-	{
-		std::string line;
-		std::getline(pFile, line);
-
-		line = replace(line, "\t", " ");
-		while (line.find("  ") != std::string::npos)
-			line = replace(line, "  ", " ");
-		if (line == "")
-			continue;
-		if (line[0] == ' ')
-			line = line.substr(1);
-		if (line == "")
-			continue;
-		if (line[line.length() - 1] == ' ')
-			line = line.substr(0, line.length() - 1);
-		if (line == "")
-			continue;
-		if (line[0] == '#')
-			continue;
-
-		std::vector<std::string> params = split(line, " ");
-		params[0] = toLower(params[0]);
-
-		if (params[0] == "newmtl")
-		{
-			if (currentMaterial != NULL)
-			{
-				materials.push_back(currentMaterial);
-			}
-			currentMaterial = new MaterialInfo();
-			currentMaterial->name = params[1];
-		}
-		else if (params[0] == "map_kd")
-		{
-			currentMaterial->hasTexture = true;
-			currentMaterial->texture = new Texture(dirName + "/" + params[1]);
-		}
-		else
-			std::cout << "Didn't parse " << params[0] << " in material file" << std::endl;
-	}
-	if (currentMaterial != NULL)
-		materials.push_back(currentMaterial);
-
-}
-
-ObjModel::MaterialInfo::MaterialInfo()
-{
-	Texture *texture;
-	hasTexture = false;
-}
-
-
-Vec3f::Vec3f(float x, float y, float z)
-{
-	this->x = x;
-	this->y = y;
-	this->z = z;
-}
-Vec3f::Vec3f()
-{
-	this->x = 0;
-	this->y = 0;
-	this->z = 0;
-}
-Vec3f::Vec3f(Vec3f &other)
-{
-	this->x = other.x;
-	this->y = other.y;
-	this->z = other.z;
-}
-
-float& Vec3f::operator [](int index)
-{
-	return v[index];
-}
-
-
-
-Vec2f::Vec2f(float x, float y)
-{
-	this->x = x;
-	this->y = y;
-}
-Vec2f::Vec2f()
-{
-	this->x = 0;
-	this->y = 0;
-}
-Vec2f::Vec2f(Vec2f &other)
-{
-	this->x = other.x;
-	this->y = other.y;
-}
-
-float& Vec2f::operator [](int index)
-{
-	return v[index];
-}
-
-ObjModel::Texture::Texture(const std::string & fileName)
-{
-	int width, height, bpp;
-	stbi_set_flip_vertically_on_load(true);
-	unsigned char* imgData = stbi_load(fileName.c_str(), &width, &height, &bpp, 4);
-
-	glGenTextures(1, &index);
-	glBindTexture(GL_TEXTURE_2D, index);
-
-	glTexImage2D(GL_TEXTURE_2D,
-		0,		//level
-		GL_RGBA,		//internal format
-		width,		//width
-		height,		//height
-		0,		//border
-		GL_RGBA,		//data format
-		GL_UNSIGNED_BYTE,	//data type
-		imgData);		//data
-	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-	stbi_image_free(imgData);
-}
-
-void ObjModel::Texture::bind()
-{
-	glBindTexture(GL_TEXTURE_2D, index);
 }

+ 7 - 98
ModelLoader.h

@@ -1,101 +1,10 @@
-#include "Header.h"
-using namespace std;
-
 #pragma once
-class ModelLoader
-{
-public:
-	ModelLoader();
-	~ModelLoader();
-};
-
-class Vec3f
-{
-public:
-	union
-	{
-		struct
-		{
-			float x, y, z;
-		};
-		float v[3];
-	};
-	Vec3f();
-	Vec3f(Vec3f &other);
-	Vec3f(float x, float y, float z);
-	float& operator [](int);
-};
-
-class Vec2f
-{
-public:
-	union
-	{
-		struct
-		{
-			float x, y;
-		};
-		float v[2];
-	};
-	Vec2f();
-	Vec2f(float x, float y);
-	Vec2f(Vec2f &other);
-	float& operator [](int);
-};
-
+#include "Header.h"
 
-class ObjModel
+string replace(string str, string toReplace, string replacement);
+vector<string> split(string str, string sep);
+inline string toLower(string data)
 {
-private:
-	class Vertex
-	{
-	public:
-		int position;
-		int normal;
-		int texcoord;
-	};
-
-	class Face
-	{
-	public:
-		list<Vertex> vertices;
-	};
-
-	class Texture
-	{
-		GLuint index;
-	public:
-		Texture(const std::string &fileName);
-		void bind();
-	};
-
-	class MaterialInfo
-	{
-	public:
-		MaterialInfo();
-		std::string name;
-		Texture* texture;
-		bool hasTexture;
-	};
-
-	class ObjGroup
-	{
-	public:
-		std::string name;
-		int materialIndex;
-		list<Face> faces;
-	};
-
-	std::vector<Vec3f>	vertices;
-	std::vector<Vec3f>	normals;
-	std::vector<Vec2f>	texcoords;
-	std::vector<ObjGroup*> groups;
-	std::vector<MaterialInfo*> materials;
-
-	void loadMaterialFile(std::string fileName, std::string dirName);
-public:
-	ObjModel(std::string filename);
-	~ObjModel(void);
-
-	void draw();
-};
+	std::transform(data.begin(), data.end(), data.begin(), ::tolower);
+	return data;
+}

+ 2 - 0
Mouse.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class Mouse
 {
 public:

+ 12 - 0
Player.cpp

@@ -0,0 +1,12 @@
+#include "Player.h"
+
+
+
+Player::Player()
+{
+}
+
+
+Player::~Player()
+{
+}

+ 17 - 0
Player.h

@@ -0,0 +1,17 @@
+#pragma once
+#include "Header.h"
+#include "Weapon.h"
+
+class Player
+{
+public:
+	Player();
+	~Player();
+private:
+	int level;
+	int xp;
+	Weapon rigth;
+	Weapon left;
+	vector<Weapon> weapons;
+};
+

+ 2 - 0
State.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class State
 {
 public:

+ 2 - 0
StateHandler.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class StateHandler
 {
 public:

+ 48 - 0
Vector.cpp

@@ -0,0 +1,48 @@
+#include "Vector.h"
+
+Vec3f::Vec3f(float x, float y, float z)
+{
+	this->x = x;
+	this->y = y;
+	this->z = z;
+}
+Vec3f::Vec3f()
+{
+	this->x = 0;
+	this->y = 0;
+	this->z = 0;
+}
+Vec3f::Vec3f(Vec3f &other)
+{
+	this->x = other.x;
+	this->y = other.y;
+	this->z = other.z;
+}
+
+float& Vec3f::operator [](int index)
+{
+	return v[index];
+}
+
+
+
+Vec2f::Vec2f(float x, float y)
+{
+	this->x = x;
+	this->y = y;
+}
+Vec2f::Vec2f()
+{
+	this->x = 0;
+	this->y = 0;
+}
+Vec2f::Vec2f(Vec2f &other)
+{
+	this->x = other.x;
+	this->y = other.y;
+}
+
+float& Vec2f::operator [](int index)
+{
+	return v[index];
+}

+ 37 - 0
Vector.h

@@ -0,0 +1,37 @@
+#pragma once
+#include "Header.h"
+
+class Vec3f
+{
+public:
+	union
+	{
+		struct
+		{
+			float x, y, z;
+		};
+		float v[3];
+	};
+	Vec3f();
+	Vec3f(Vec3f &other);
+	Vec3f(float x, float y, float z);
+	float& operator [](int);
+};
+
+class Vec2f
+{
+public:
+	union
+	{
+		struct
+		{
+			float x, y;
+		};
+		float v[2];
+	};
+	Vec2f();
+	Vec2f(float x, float y);
+	Vec2f(Vec2f &other);
+	float& operator [](int);
+};
+

+ 10 - 0
Weapon.cpp

@@ -0,0 +1,10 @@
+#include "Weapon.h"
+
+Weapon::Weapon()
+{
+}
+
+
+Weapon::~Weapon()
+{
+}

+ 10 - 0
Weapon.h

@@ -0,0 +1,10 @@
+#pragma once
+#include "Header.h"
+
+class Weapon
+{
+public:
+	Weapon();
+	~Weapon();
+};
+

+ 2 - 0
WorldModel.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class WorldModel
 {
 public:

+ 2 - 0
WorldState.h

@@ -1,4 +1,6 @@
 #pragma once
+#include "Header.h"
+
 class WorldState
 {
 public: