From fd8cac38af18ce8129874ccf199764fec1939009 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Wed, 12 Apr 2023 21:41:07 -0500 Subject: [PATCH] Enemies spawn on the map. --- Faceball2030/assets/floor.png | Bin 0 -> 3247 bytes Faceball2030/assets/wall.png | Bin 0 -> 2821 bytes Faceball2030/main.cpp | 101 ++++++++++++++++++++++------------ Faceball2030/main.h | 20 ++++++- 4 files changed, 84 insertions(+), 37 deletions(-) create mode 100644 Faceball2030/assets/floor.png create mode 100644 Faceball2030/assets/wall.png diff --git a/Faceball2030/assets/floor.png b/Faceball2030/assets/floor.png new file mode 100644 index 0000000000000000000000000000000000000000..5a997792ed89cfa662ccc948ea783771d5c0f45d GIT binary patch literal 3247 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 F@qbZT=sExZ literal 0 HcmV?d00001 diff --git a/Faceball2030/assets/wall.png b/Faceball2030/assets/wall.png new file mode 100644 index 0000000000000000000000000000000000000000..890ed9d94aaab73e660d8d910529e2d3f68d4219 GIT binary patch literal 2821 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 literal 0 HcmV?d00001 diff --git a/Faceball2030/main.cpp b/Faceball2030/main.cpp index 07af438..67df1c6 100644 --- a/Faceball2030/main.cpp +++ b/Faceball2030/main.cpp @@ -9,19 +9,28 @@ using namespace olc; FaceBall* game; +Enemy::Enemy(EnemyID id,vec3d pos,float rot,float radius) + :id(id), health(game->enemyData[id].health), fireDelay(0), + Object({game->enemyData[id].mesh,pos,rot,radius}) { + EnemyData data = game->enemyData[id]; + for (int i = 0; i < data.ammo; i++) { + shots.push_back({ data.reloadTime }); + } + } + void FaceBall::InitializeEnemyData() { - enemyData[EnemyID::NONE] = { "VOID",BLACK }; - enemyData[EXIT] = { "EXIT",GREEN }; - enemyData[START] = { "SPAWN POSITION",{128,64,0} }; - enemyData[SHOOTME] = { "SHOOTME",YELLOW,1,1,PI / 8,2,1,3 }; - enemyData[COIN] = { "Coin",BLUE }; - enemyData[POWERUP_ARMOR] = { "Armor",{96,0,96} }; - enemyData[POWERUP_SPEED] = { "Speed",{96,0,96} }; - enemyData[POWERUP_SHOT] = { "Shot",{96,0,96} }; - enemyData[SPECIAL_CAMO] = { "Camouflage",DARK_RED }; - enemyData[SPECIAL_STOP] = { "Stop",DARK_RED }; - enemyData[SPECIAL_SHIELD] = { "Shield",DARK_RED }; - enemyData[AREA_MAP] = { "Map",GREEN }; + enemyData[EnemyID::NONE] = { "VOID",undefined,BLACK }; + enemyData[EXIT] = { "EXIT",undefined,GREEN }; + enemyData[START] = { "SPAWN POSITION",undefined,{128,64,0} }; + enemyData[SHOOTME] = { "SHOOTME",enemy_ShootMe,YELLOW,1,1,PI / 8,2,1,3 }; + enemyData[COIN] = { "Coin",undefined,BLUE }; + enemyData[POWERUP_ARMOR] = { "Armor",undefined,{96,0,96} }; + enemyData[POWERUP_SPEED] = { "Speed",undefined,{96,0,96} }; + enemyData[POWERUP_SHOT] = { "Shot",undefined,{96,0,96} }; + enemyData[SPECIAL_CAMO] = { "Camouflage",undefined,DARK_RED }; + enemyData[SPECIAL_STOP] = { "Stop",undefined,DARK_RED }; + enemyData[SPECIAL_SHIELD] = { "Shield",undefined,DARK_RED }; + enemyData[AREA_MAP] = { "Map",undefined,GREEN }; } void FaceBall::LoadLevel(int level) @@ -30,14 +39,21 @@ void FaceBall::LoadLevel(int level) std::vector>mapData = editor.LoadLevel(level); MAP_SIZE = { (int)mapData[0].size(),(int)mapData.size() }; map.clear(); - mapMesh.tris.clear(); + mapWalls.tris.clear(); + mapFloor.tris.clear(); objects.clear(); + bullets.clear(); + enemies.clear(); for (int y = 0; y < MAP_SIZE.y; y++) { std::vectorrow; for (int x = 0; x < MAP_SIZE.x; x++) { 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},{0,1},{1,0}},{BLUE,BLUE,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,BLUE,BLUE} }); + mapFloor.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}},{WHITE,WHITE,WHITE} }); + mapFloor.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}},{WHITE,WHITE,WHITE} }); + EnemyID id = mapData[y][x].enemyId; + if (id>=SHOOTME&& id < COIN) { + enemies.push_back({ id,vec3d{x + 0.5f,0,y + 0.5f},((int)mapData[y][x].facingDir-1)*PI/2,0.2f}); + } } map.push_back(row); } @@ -58,24 +74,25 @@ void FaceBall::LoadLevel(int level) } AddWall(wallData, { x,y }); 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},{0,1},{1,0}},{YELLOW,YELLOW,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,YELLOW,YELLOW} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); } 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,1},{1,0}},{DARK_RED,DARK_RED,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,DARK_RED,DARK_RED} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); } 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}},{{1,0},{0,0},{0,1}},{MAGENTA,MAGENTA,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,MAGENTA,MAGENTA} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); } 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}},{{1,1},{1,0},{0,0}},{CYAN,CYAN,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,CYAN,CYAN} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); + mapWalls.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}},{WHITE,WHITE,WHITE} }); } } } - objects.push_back({ mapMesh,{0,0},0,0 }); + objects.push_back({ mapWalls,{0,0},0,0 }); + objects.push_back({ mapFloor,{0,0},0,0 }); } bool FaceBall::CheckCollision(vec3d movementVector,vf2d pos,float radius){ @@ -600,8 +617,8 @@ void FaceBall::RenderWorld() { //matWorld = Matrix_MultiplyMatrix(matWorld, matTrans); vec3d vUp = { 0,1,0 }; - vec3d vTarget = { 0,sinf(pitch),cosf(pitch) }; - mat4x4 matCameraRot = Matrix_MakeRotationY(fYaw-PI/2); + vec3d vTarget = { 0,sinf(freeRoam?freeRoamCamera_pitch:pitch),cosf(freeRoam ? freeRoamCamera_pitch : pitch) }; + mat4x4 matCameraRot = Matrix_MakeRotationY((freeRoam?freeRoamCamera_yaw:fYaw)-PI/2); vLookDir = Matrix_MultiplyVector(matCameraRot, vTarget); vec3d playerCenter = { player.GetPos().x, player.GetPos().y, player.GetPos().z }; vTarget = Vector_Add(freeRoam ? freeRoamCamera : playerCenter, vLookDir); @@ -617,6 +634,9 @@ void FaceBall::RenderWorld() { for (auto& bullet : bullets) { RenderMesh(matView, vecTrianglesToRaster, bullet); } + for (auto& enemy : enemies) { + RenderMesh(matView, vecTrianglesToRaster, enemy); + } //std::sort(vecTrianglesToRaster.begin(),vecTrianglesToRaster.end(),[](triangle&t1,triangle&t2){return (t1.p[0].z+t1.p[1].z+t1.p[2].z)/3.0f>(t2.p[0].z+t2.p[1].z+t2.p[2].z)/3.0f;}); ClearBuffer(BLACK, true); @@ -697,10 +717,10 @@ void FaceBall::HandleKeys(float fElapsedTime) { vec3d vForward = Vector_Mul(vLookDir, std::min(player.GetRadius()-0.00001f,moveSpd*fElapsedTime)); if (freeRoam) { if (GetKey(DOWN).bHeld) { - pitch -= 1 * fElapsedTime; + freeRoamCamera_pitch -= 1 * fElapsedTime; } if (GetKey(UP).bHeld) { - pitch += 1 * fElapsedTime; + freeRoamCamera_pitch += 1 * fElapsedTime; } } else { @@ -741,10 +761,20 @@ void FaceBall::HandleKeys(float fElapsedTime) { } } if (GetKey(olc::A).bHeld) { - fYaw -= 2 * fElapsedTime; + if (freeRoam) { + freeRoamCamera_yaw -= 2 * fElapsedTime; + } + else { + fYaw -= 2 * fElapsedTime; + } } if (GetKey(olc::D).bHeld) { - fYaw += 2 * fElapsedTime; + if (freeRoam) { + freeRoamCamera_yaw += 2 * fElapsedTime; + } + else { + fYaw += 2 * fElapsedTime; + } } if (GetKey(olc::F1).bPressed) { freeRoam = !freeRoam; @@ -788,13 +818,16 @@ bool FaceBall::OnUserCreate() arrow = new Decal(new Sprite("assets/arrow.png")); enemy_ShootMe_tex = new Decal(new Sprite("assets/enemies/ShootMe.png")); YAZAWA = new Decal(new Sprite("assets/yazawa.png")); + wall_tex = new Decal(new Sprite("assets/wall.png")); bullet_tex = new Decal(new Sprite("assets/enemies/bullet.png")); + floor_tex = new Decal(new Sprite("assets/floor.png")); - InitializeEnemyData(); - - Mesh testEnemy("assets/enemies/ShootMe.obj", enemy_ShootMe_tex); + enemy_ShootMe = { "assets/enemies/ShootMe.obj", enemy_ShootMe_tex }; bullet = { "assets/enemies/bullet.obj",bullet_tex }; - mapMesh.texture = YAZAWA; + mapWalls.texture = wall_tex; + mapFloor.texture = floor_tex; + + InitializeEnemyData(); LoadLevel(1); diff --git a/Faceball2030/main.h b/Faceball2030/main.h index d8710c2..b45b248 100644 --- a/Faceball2030/main.h +++ b/Faceball2030/main.h @@ -151,6 +151,7 @@ struct Bullet : Object{ struct EnemyData { std::string name; + Mesh mesh; Pixel col=YELLOW; int health = 1; float movSpd = 1; @@ -165,6 +166,16 @@ struct mat4x4 float m[4][4] = { 0 }; }; +struct Enemy : Object { + private: + EnemyID id; + int health=1; + std::vector shots; + float fireDelay=0; + public: + Enemy(EnemyID id, vec3d pos, float rot, float radius); +}; + class FaceBall : public PixelGameEngine { bool freeRoam = false; @@ -176,15 +187,16 @@ class FaceBall : public PixelGameEngine EnemyData GetData(EnemyID id); Decal* circle,*arrow,*YAZAWA; + std::mapenemyData; private: - Mesh mapMesh,enemy_ShootMe,bullet; + Mesh mapWalls,mapFloor,enemy_ShootMe,bullet,undefined; - Decal* dot, * enemy_ShootMe_tex,*bullet_tex; + Decal* dot, * enemy_ShootMe_tex,*bullet_tex,*wall_tex,*floor_tex; vi2d MAP_SIZE; std::vector>map; - std::mapenemyData; std::vectorobjects; std::vectorbullets; + std::vectorenemies; GAMEMODE mode=GAMEMODE::GAME; Editor editor; int level=1; @@ -201,6 +213,8 @@ class FaceBall : public PixelGameEngine Player player = { {3.7,0.3,0.7}, {{0.5,0.5},0.2} }; vec3d freeRoamCamera = { 1,0.5,1 }; + float freeRoamCamera_pitch = pitch; + float freeRoamCamera_yaw = fYaw; float shotSpd = 3.0f; float moveSpd = 2.0f;