|
|
@ -36,8 +36,8 @@ void FaceBall::LoadLevel(int level) |
|
|
|
std::vector<MapSquare>row; |
|
|
|
std::vector<MapSquare>row; |
|
|
|
for (int x = 0; x < MAP_SIZE.x; x++) { |
|
|
|
for (int x = 0; x < MAP_SIZE.x; x++) { |
|
|
|
row.push_back({}); |
|
|
|
row.push_back({}); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y}},{{0,0},{1,0},{0,1}},BLUE }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y}},{{0,0},{0,1},{1,0}},BLUE }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y + 1}},{{0,0},{1,0},{0,1}},BLUE }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y + 1}},{{1,0},{0,1},{1,1}},BLUE }); |
|
|
|
} |
|
|
|
} |
|
|
|
map.push_back(row); |
|
|
|
map.push_back(row); |
|
|
|
} |
|
|
|
} |
|
|
@ -58,20 +58,20 @@ void FaceBall::LoadLevel(int level) |
|
|
|
} |
|
|
|
} |
|
|
|
AddWall(wallData, { x,y }); |
|
|
|
AddWall(wallData, { x,y }); |
|
|
|
if (map[y][x].wallN != NULL) { |
|
|
|
if (map[y][x].wallN != NULL) { |
|
|
|
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{1,0},{0,1}},YELLOW }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{0,1},{1,0}},YELLOW }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x + 1,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{1,0},{0,1}},YELLOW }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x + 1,0,(float)y},{(float)x + 1,1,(float)y}},{{0,1},{1,1},{1,0}},YELLOW }); |
|
|
|
} |
|
|
|
} |
|
|
|
if (map[y][x].wallS != NULL) { |
|
|
|
if (map[y][x].wallS != NULL) { |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x,0,(float)y + 1},{(float)x,1,(float)y + 1}},{{0,0},{1,0},{0,1}},DARK_RED }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x,0,(float)y + 1},{(float)x,1,(float)y + 1}},{{0,0},{1,1},{1,0}},DARK_RED }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x + 1,0,(float)y + 1},{(float)x,0,(float)y + 1}},{{0,0},{1,0},{0,1}},DARK_RED }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x + 1,0,(float)y + 1},{(float)x,0,(float)y + 1}},{{0,0},{0,1},{1,1}},DARK_RED }); |
|
|
|
} |
|
|
|
} |
|
|
|
if (map[y][x].wallW != NULL) { |
|
|
|
if (map[y][x].wallW != NULL) { |
|
|
|
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,1,(float)y + 1}, {(float)x,0,(float)y + 1}},{{0,0},{1,0},{0,1}},MAGENTA }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,1,(float)y + 1}, {(float)x,0,(float)y + 1}},{{1,0},{0,0},{0,1}},MAGENTA }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,1,(float)y}, {(float)x,0,(float)y + 1}}, {{0,0},{1,0},{0,1}},MAGENTA }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,1,(float)y}, {(float)x,0,(float)y + 1}}, {{1,1},{1,0},{0,1}},MAGENTA }); |
|
|
|
} |
|
|
|
} |
|
|
|
if (map[y][x].wallE != NULL) { |
|
|
|
if (map[y][x].wallE != NULL) { |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1},{(float)x + 1,1,(float)y + 1},{(float)x + 1,1,(float)y}},{{0,0},{1,0},{0,1}},CYAN }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1},{(float)x + 1,1,(float)y + 1},{(float)x + 1,1,(float)y}},{{1,1},{1,0},{0,0}},CYAN }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1} ,{(float)x + 1,1,(float)y},{(float)x + 1,0,(float)y}},{{0,0},{1,0},{0,1}},CYAN }); |
|
|
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1} ,{(float)x + 1,1,(float)y},{(float)x + 1,0,(float)y}},{{1,1},{0,0},{0,1}},CYAN }); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -472,8 +472,8 @@ void FaceBall::RenderWorld() { |
|
|
|
vec3d vTarget = { 0,sinf(pitch),cosf(pitch) }; |
|
|
|
vec3d vTarget = { 0,sinf(pitch),cosf(pitch) }; |
|
|
|
mat4x4 matCameraRot = Matrix_MakeRotationY(fYaw); |
|
|
|
mat4x4 matCameraRot = Matrix_MakeRotationY(fYaw); |
|
|
|
vLookDir = Matrix_MultiplyVector(matCameraRot, vTarget); |
|
|
|
vLookDir = Matrix_MultiplyVector(matCameraRot, vTarget); |
|
|
|
vTarget = Vector_Add(player.GetPos(), vLookDir); |
|
|
|
vTarget = Vector_Add(freeRoam?freeRoamCamera:player.GetPos(), vLookDir); |
|
|
|
mat4x4 matCamera = Matrix_PointAt(player.GetPos(), vTarget, vUp); |
|
|
|
mat4x4 matCamera = Matrix_PointAt(freeRoam?freeRoamCamera:player.GetPos(), vTarget, vUp); |
|
|
|
mat4x4 matView = Matrix_QuickInverse(matCamera); |
|
|
|
mat4x4 matView = Matrix_QuickInverse(matCamera); |
|
|
|
|
|
|
|
|
|
|
|
std::vector<Triangle>vecTrianglesToRaster; |
|
|
|
std::vector<Triangle>vecTrianglesToRaster; |
|
|
@ -505,7 +505,7 @@ void FaceBall::RenderWorld() { |
|
|
|
normal = Vector_CrossProduct(line1, line2); |
|
|
|
normal = Vector_CrossProduct(line1, line2); |
|
|
|
normal = Vector_Normalise(normal); |
|
|
|
normal = Vector_Normalise(normal); |
|
|
|
|
|
|
|
|
|
|
|
vec3d vCameraRay = Vector_Sub(triTransformed.p[0], player.GetPos()); |
|
|
|
vec3d vCameraRay = Vector_Sub(triTransformed.p[0], freeRoam?freeRoamCamera:player.GetPos()); |
|
|
|
|
|
|
|
|
|
|
|
if (Vector_DotProduct(normal, vCameraRay) < 0) { |
|
|
|
if (Vector_DotProduct(normal, vCameraRay) < 0) { |
|
|
|
vec3d light_dir = Vector_Mul(vLookDir, -1); |
|
|
|
vec3d light_dir = Vector_Mul(vLookDir, -1); |
|
|
@ -666,24 +666,34 @@ void FaceBall::HandleKeys(float fElapsedTime) { |
|
|
|
pitch = 0; |
|
|
|
pitch = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
if (GetKey(W).bHeld) { |
|
|
|
if (GetKey(W).bHeld) { |
|
|
|
if (!CheckCollision({ vForward.x,0,0 })) { |
|
|
|
if (freeRoam) { |
|
|
|
vec3d xMovement{ vForward.x,0,0 }; |
|
|
|
freeRoamCamera = Vector_Add(freeRoamCamera, vForward); |
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), xMovement)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
if (!CheckCollision({0,0,vForward.z})) { |
|
|
|
else { |
|
|
|
vec3d zMovement{ 0,0,vForward.z }; |
|
|
|
if (!CheckCollision({ vForward.x,0,0 })) { |
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), zMovement)); |
|
|
|
vec3d xMovement{ vForward.x,0,0 }; |
|
|
|
|
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), xMovement)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!CheckCollision({ 0,0,vForward.z })) { |
|
|
|
|
|
|
|
vec3d zMovement{ 0,0,vForward.z }; |
|
|
|
|
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), zMovement)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (GetKey(S).bHeld) { |
|
|
|
if (GetKey(S).bHeld) { |
|
|
|
vec3d vReverse = { -vForward.x,-vForward.y,-vForward.z }; |
|
|
|
vec3d vReverse = { -vForward.x,-vForward.y,-vForward.z }; |
|
|
|
if (!CheckCollision({ vReverse.x,0,0 })) { |
|
|
|
if (freeRoam) { |
|
|
|
vec3d xMovement{ vReverse.x,0,0 }; |
|
|
|
freeRoamCamera = Vector_Add(freeRoamCamera, vReverse); |
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), xMovement)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
if (!CheckCollision({ 0,0,vReverse.z })) { |
|
|
|
else { |
|
|
|
vec3d zMovement{ 0,0,vReverse.z }; |
|
|
|
if (!CheckCollision({ vReverse.x,0,0 })) { |
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), zMovement)); |
|
|
|
vec3d xMovement{ vReverse.x,0,0 }; |
|
|
|
|
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), xMovement)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!CheckCollision({ 0,0,vReverse.z })) { |
|
|
|
|
|
|
|
vec3d zMovement{ 0,0,vReverse.z }; |
|
|
|
|
|
|
|
player.UpdatePos(Vector_Add(player.GetPos(), zMovement)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (GetKey(olc::A).bHeld) { |
|
|
|
if (GetKey(olc::A).bHeld) { |
|
|
@ -733,11 +743,12 @@ bool FaceBall::OnUserCreate() |
|
|
|
circle = new Decal(new Sprite("assets/circle.png")); |
|
|
|
circle = new Decal(new Sprite("assets/circle.png")); |
|
|
|
arrow = new Decal(new Sprite("assets/arrow.png")); |
|
|
|
arrow = new Decal(new Sprite("assets/arrow.png")); |
|
|
|
enemy_ShootMe_tex = new Decal(new Sprite("assets/enemies/ShootMe.png")); |
|
|
|
enemy_ShootMe_tex = new Decal(new Sprite("assets/enemies/ShootMe.png")); |
|
|
|
|
|
|
|
YAZAWA = new Decal(new Sprite("assets/yazawa.png")); |
|
|
|
|
|
|
|
|
|
|
|
InitializeEnemyData(); |
|
|
|
InitializeEnemyData(); |
|
|
|
|
|
|
|
|
|
|
|
Mesh testEnemy("assets/enemies/ShootMe.obj", enemy_ShootMe_tex); |
|
|
|
Mesh testEnemy("assets/enemies/ShootMe.obj", enemy_ShootMe_tex); |
|
|
|
mapMesh.texture = dot; |
|
|
|
mapMesh.texture = YAZAWA; |
|
|
|
|
|
|
|
|
|
|
|
LoadLevel(1); |
|
|
|
LoadLevel(1); |
|
|
|
|
|
|
|
|
|
|
|