Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions JK-Game-Engine.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@
<None Include="README.md" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\Game Engine\GameObject\Components\BoxCollider.cpp" />
<ClCompile Include="src\Game Engine\GameObject\Components\Collider.cpp" />
<ClCompile Include="src\Game Engine\ModelLoader.cpp" />
<ClCompile Include="src\Game Engine\PhysicsManager.cpp" />
<ClCompile Include="src\Game Engine\SceneLoader.cpp" />
<ClCompile Include="src\Game Engine\AssetCache.cpp" />
<ClCompile Include="src\Game Engine\AssetLoader.cpp" />
Expand Down Expand Up @@ -48,9 +51,13 @@
<ClCompile Include="src\Game Engine\World.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\Game Engine\GameObject\Components\BoxCollider.h" />
<ClInclude Include="src\Game Engine\GameObject\Components\Collider.h" />
<ClInclude Include="src\Game Engine\Line.h" />
<ClInclude Include="src\Game Engine\MeshData.h" />
<ClInclude Include="src\Game Engine\ModelData.h" />
<ClInclude Include="src\Game Engine\ModelLoader.h" />
<ClInclude Include="src\Game Engine\PhysicsManager.h" />
<ClInclude Include="src\Game Engine\SceneLoader.h" />
<ClInclude Include="src\Game Engine\AssetCache.h" />
<ClInclude Include="src\Game Engine\AssetLoader.h" />
Expand Down
27 changes: 27 additions & 0 deletions JK-Game-Engine.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,15 @@
<ClCompile Include="src\Game Engine\SceneLoader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Game Engine\GameObject\Components\Collider.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Game Engine\GameObject\Components\BoxCollider.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Game Engine\PhysicsManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\Game Engine\GameObject\Components\Camera.h">
Expand Down Expand Up @@ -212,5 +221,23 @@
<ClInclude Include="src\Game Engine\SceneLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Game Engine\MeshData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Game Engine\ModelData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Game Engine\GameObject\Components\Collider.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Game Engine\GameObject\Components\BoxCollider.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Game Engine\PhysicsManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Game Engine\Line.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
19 changes: 19 additions & 0 deletions src/Game Engine/EngineManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ void EngineManager::Initialize(GLint windowWidth, GLint windowHeight) {
engine->input = new Input(window->getWindow());
engine->sceneManager = new SceneManager();
engine->time = new Time();
engine->physics = new PhysicsManager();

engine->primitiveFactory = new PrimitiveFactory();

testLine = new Line(glm::vec3(0.5, 0.5, 0.5), glm::vec3(0.5, 0.5, -0.5));
}

Window* EngineManager::getWindowM() {
Expand All @@ -36,6 +39,10 @@ Scene* EngineManager::getCurrentScene() {
return getInstance()->sceneManager->getScene();
}

PhysicsManager* EngineManager::getPhysicsM() {
return getInstance()->physics;
}

PrimitiveFactory* EngineManager::getPrimitiveF() {
return getInstance()->primitiveFactory;
}
Expand All @@ -51,6 +58,8 @@ void EngineManager::Update() {

engine->getTimeM()->UpdateDeltaTime();

physics->CheckForCollisions();

input->CycleKeys();
glfwPollEvents();

Expand All @@ -63,6 +72,16 @@ void EngineManager::Update() {
glViewport(0, 0, engine->getWindowM()->getBufferWidth(), engine->getWindowM()->getBufferHeight());
engine->sceneManager->Render();

physics->RenderBBs();

//glm::mat4 transformMatrix = glm::mat4(1.0f);
//transformMatrix = glm::translate(transformMatrix, glm::vec3(0, 0, 0));
//transformMatrix = transformMatrix * glm::toMat4(glm::quat(1.0f, 0.0f, 0.0f, 0.0f));
//transformMatrix = glm::scale(transformMatrix, glm::vec3(1, 1, 1));
//glm::mat4 mvp = Camera::mainCamera->getProjection() * Camera::mainCamera->calculateViewMatrix() * transformMatrix;
//testLine->setMVP(mvp);
//testLine->draw();

glUseProgram(0);

engine->getWindowM()->SwapBuffers();
Expand Down
6 changes: 6 additions & 0 deletions src/Game Engine/EngineManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
#include "Input.h"
#include "SceneManager.h"
#include "Time.h"
#include "PhysicsManager.h"
#include "Factories/PrimitiveFactory.h"
#include "Line.h"

class EngineManager {

Expand All @@ -24,6 +26,7 @@ class EngineManager {
static SceneManager* getSceneM();
static Time* getTimeM();
static Scene* getCurrentScene();
static PhysicsManager* getPhysicsM();

static PrimitiveFactory* getPrimitiveF();

Expand All @@ -36,9 +39,12 @@ class EngineManager {
Input* input;
SceneManager* sceneManager;
Time* time;
PhysicsManager* physics;

PrimitiveFactory* primitiveFactory;

private:

Line* testLine;
};

2 changes: 2 additions & 0 deletions src/Game Engine/Enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ enum TYPES {
POINT_LIGHT,
SPOT_LIGHT,
DIRECTIONAL_LIGHT,
BOX_COLLIDER,
SPHERE_COLLIDER
};

enum AXIS {
Expand Down
28 changes: 14 additions & 14 deletions src/Game Engine/Factories/PrimitiveFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,20 @@ class PrimitiveFactory {

GLfloat cubeVertices[112] = {
// x y z u v nx ny nz
0.0f, 1.0f, 0.0f, 0.0f, 0.66f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.25f, 0.66f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 1.0f, 0.0f, 0.33f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.25f, 0.33f, 0.0f, 0.0f, 0.0f,
1.0f, 0.0f, 0.0f, 0.5f, 0.66f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f, 0.75f, 0.66f, 0.0f, 0.0f, 0.0f,
1.0f, 0.0f, 1.0f, 0.5f, 0.33f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 1.0f, 0.75f, 0.33f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 1.0f, 0.66f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 1.0f, 1.0f, 0.33f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.25f, 1.0f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 1.0f, 0.25f, 0.0f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 1.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f
-0.5f, 0.5f, -0.5f, 0.0f, 0.66f, 0.0f, 0.0f, 0.0f,
-0.5f, -0.5f, -0.5f, 0.25f, 0.66f, 0.0f, 0.0f, 0.0f,
-0.5f, 0.5f, 0.5f, 0.0f, 0.33f, 0.0f, 0.0f, 0.0f,
-0.5f, -0.5f, 0.5f, 0.25f, 0.33f, 0.0f, 0.0f, 0.0f,
0.5f, -0.5f, -0.5f, 0.5f, 0.66f, 0.0f, 0.0f, 0.0f,
0.5f, 0.5f, -0.5f, 0.75f, 0.66f, 0.0f, 0.0f, 0.0f,
0.5f, -0.5f, 0.5f, 0.5f, 0.33f, 0.0f, 0.0f, 0.0f,
0.5f, 0.5f, 0.5f, 0.75f, 0.33f, 0.0f, 0.0f, 0.0f,
-0.5f, 0.5f, -0.5f, 1.0f, 0.66f, 0.0f, 0.0f, 0.0f,
-0.5f, 0.5f, 0.5f, 1.0f, 0.33f, 0.0f, 0.0f, 0.0f,
-0.5f, 0.5f, -0.5f, 0.25f, 1.0f, 0.0f, 0.0f, 0.0f,
0.5f, 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f,
-0.5f, 0.5f, 0.5f, 0.25f, 0.0f, 0.0f, 0.0f, 0.0f,
0.5f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f
};

unsigned int cubeIndices[36] = {
Expand Down
153 changes: 153 additions & 0 deletions src/Game Engine/GameObject/Components/BoxCollider.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
#include "BoxCollider.h"

BoxCollider::BoxCollider() {

}

BoxCollider::BoxCollider(glm::vec3 origin, glm::vec3 size) {
for (int i = 0; i < 8; i++) {
verts[i] = glm::vec3();
}
position = origin;
scale = size;
}

void BoxCollider::UpdateRanges() {
//glm::mat4 objectMatrix = gameObject->transform->GetTransformMatrix();
//if (!glm::equal(objectMatrix, prevObjectMatrix).b) {
// change container to just use position and scale. Make the origin point be the position with a transformation matrix.

// Get Transformation matrix from variables position/scale + 1,0,0,0 quaternion rotation
glm::quat noRotate = glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
glm::mat4 transformMatrix = glm::mat4(1.0f);
transformMatrix = glm::translate(transformMatrix, position);
transformMatrix = transformMatrix * glm::toMat4(noRotate);
transformMatrix = glm::scale(transformMatrix, scale);

// Multiply by object matrix to get world position matrix
glm::mat4 objectMatrix = gameObject->transform->GetTransformMatrix();
transformMatrix = objectMatrix * transformMatrix;

// decompose to get world position, rotation, scale
glm::vec3 worldPos = glm::vec3(0.0f);
glm::quat worldRot = glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
glm::vec3 worldScale = glm::vec3(1.0f);
glm::vec3 skew = glm::vec3(1.0f);
glm::vec4 perspective = glm::vec4(1.0f);

glm::decompose(transformMatrix, worldScale, worldRot, worldPos, skew, perspective);

// use 1,0,0 for x, 0,1,0 for y, 0,0,1 for z and rotate those values by the world quaternion in order to get forward, right, and up vectors
glm::vec3 forward = glm::normalize(glm::rotate(worldRot, glm::vec3(0.0f, 0.0f, 1.0f)));
glm::vec3 right = glm::normalize(glm::rotate(worldRot, glm::vec3(1.0f, 0.0f, 0.0f)));
glm::vec3 up = glm::normalize(glm::cross(forward, right));

// use those vectors to get the vertice locations
glm::vec3 rightWall = (right * (worldScale.x / 2));
glm::vec3 leftWall = (right * -(worldScale.x / 2));
glm::vec3 topWall = (up * (worldScale.y / 2));
glm::vec3 bottomWall = (up * -(worldScale.y / 2));
glm::vec3 frontWall = (forward * (worldScale.z / 2));
glm::vec3 backWall = (forward * -(worldScale.z / 2));

verts[0] = worldPos + (rightWall + bottomWall + backWall);
verts[1] = worldPos + (leftWall + bottomWall + backWall);
verts[2] = worldPos + (rightWall + bottomWall + frontWall);
verts[3] = worldPos + (leftWall + bottomWall + frontWall);
verts[4] = worldPos + (rightWall + topWall + backWall);
verts[5] = worldPos + (leftWall + topWall + backWall);
verts[6] = worldPos + (rightWall + topWall + frontWall);
verts[7] = worldPos + (leftWall + topWall + frontWall);

SetRanges();
// }

//prevObjectMatrix = objectMatrix;
}

void BoxCollider::SetRanges() {
rangeX = glm::vec2(verts[0].x, verts[0].x);
rangeY = glm::vec2(verts[0].y, verts[0].y);
rangeZ = glm::vec2(verts[0].z, verts[0].z);

for (int i = 0; i < 8; i++) {
glm::vec3 vert = verts[i];

if (vert.x < rangeX.x) rangeX.x = vert.x;
if (vert.x > rangeX.y) rangeX.y = vert.x;
if (vert.y < rangeY.x) rangeY.x = vert.y;
if (vert.y > rangeY.y) rangeY.y = vert.y;
if (vert.z < rangeZ.x) rangeZ.x = vert.z;
if (vert.z > rangeZ.y) rangeZ.y = vert.z;
}
}

glm::vec2 BoxCollider::GetRange(AXIS axis) {
if (axis == AXIS::WORLD_X) return rangeX;
if (axis == AXIS::WORLD_Y) return rangeY;
if (axis == AXIS::WORLD_Z) return rangeZ;

return rangeX;
}

void BoxCollider::CreateBBLines() {
lines.clear();

Line* line1t2 = new Line(verts[0], verts[1]);
Line* line2t4 = new Line(verts[1], verts[3]);
Line* line4t3 = new Line(verts[3], verts[2]);
Line* line3t1 = new Line(verts[2], verts[0]);
Line* line5t6 = new Line(verts[4], verts[5]);
Line* line6t8 = new Line(verts[5], verts[7]);
Line* line8t7 = new Line(verts[7], verts[6]);
Line* line7t5 = new Line(verts[6], verts[4]);
Line* line1t5 = new Line(verts[0], verts[4]);
Line* line2t6 = new Line(verts[1], verts[5]);
Line* line4t8 = new Line(verts[3], verts[7]);
Line* line3t7 = new Line(verts[2], verts[6]);

lines.push_back(line1t2);
lines.push_back(line2t4);
lines.push_back(line4t3);
lines.push_back(line3t1);
lines.push_back(line5t6);
lines.push_back(line6t8);
lines.push_back(line8t7);
lines.push_back(line7t5);
lines.push_back(line1t5);
lines.push_back(line2t6);
lines.push_back(line4t8);
lines.push_back(line3t7);
}

void BoxCollider::RenderBB() {
CreateBBLines();
for (auto line : lines) {
glm::mat4 transformMatrix = glm::mat4(1.0f);
transformMatrix = glm::translate(transformMatrix, glm::vec3(0, 0, 0));
transformMatrix = transformMatrix * glm::toMat4(glm::quat(1.0f, 0.0f, 0.0f, 0.0f));
transformMatrix = glm::scale(transformMatrix, glm::vec3(1, 1, 1));
glm::mat4 mvp = Camera::mainCamera->getProjection() * Camera::mainCamera->calculateViewMatrix() * transformMatrix;

line->setMVP(mvp);
line->draw();
}
}

void BoxCollider::PrintVec3(const char* name, glm::vec3 vector) {
std::cout << name << ": ( " << vector.x << ", " << vector.y << ", " << vector.z << ")" << std::endl;
}

void BoxCollider::PrintVerts() {
std::cout << "verts[0] : ( " << verts[0].x << ", " << verts[0].y << ", " << verts[0].z << ")" << std::endl;
std::cout << "verts[1] : ( " << verts[1].x << ", " << verts[1].y << ", " << verts[1].z << ")" << std::endl;
std::cout << "verts[2] : ( " << verts[2].x << ", " << verts[2].y << ", " << verts[2].z << ")" << std::endl;
std::cout << "verts[3] : ( " << verts[3].x << ", " << verts[3].y << ", " << verts[3].z << ")" << std::endl;
std::cout << "verts[4] : ( " << verts[4].x << ", " << verts[4].y << ", " << verts[4].z << ")" << std::endl;
std::cout << "verts[5] : ( " << verts[5].x << ", " << verts[5].y << ", " << verts[5].z << ")" << std::endl;
std::cout << "verts[6] : ( " << verts[6].x << ", " << verts[6].y << ", " << verts[6].z << ")" << std::endl;
std::cout << "verts[7] : ( " << verts[7].x << ", " << verts[7].y << ", " << verts[7].z << ")" << std::endl;
}

BoxCollider::~BoxCollider() {
}
Loading