diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | meta/maps/stage_1_boss.bfm | 1 | ||||
-rw-r--r-- | meta/media/sprites/crosshair.png | bin | 0 -> 184 bytes | |||
-rw-r--r-- | src/gameplay.cpp | 31 | ||||
-rw-r--r-- | src/gameplay.hpp | 5 | ||||
-rw-r--r-- | src/main.cpp | 2 | ||||
-rw-r--r-- | src/wp_enemyslingshot.cpp | 41 | ||||
-rw-r--r-- | src/wp_enemyslingshot.hpp | 22 |
8 files changed, 93 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d9e149..95b6ce5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ add_executable(${PROJECT_NAME} src/weapon.cpp src/wp_shotty.cpp src/wp_assaultrifle.cpp + src/wp_enemyslingshot.cpp src/terrain.cpp src/entity.cpp) diff --git a/meta/maps/stage_1_boss.bfm b/meta/maps/stage_1_boss.bfm index dced68f..3e34285 100644 --- a/meta/maps/stage_1_boss.bfm +++ b/meta/maps/stage_1_boss.bfm @@ -1,3 +1,4 @@ BOSS 1 3 ENEMIES 2 100 +WAVES 1 2 NEXT stage_1_boss.bfm diff --git a/meta/media/sprites/crosshair.png b/meta/media/sprites/crosshair.png Binary files differnew file mode 100644 index 0000000..d17bcb5 --- /dev/null +++ b/meta/media/sprites/crosshair.png diff --git a/src/gameplay.cpp b/src/gameplay.cpp index de4ba66..b4c6477 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -18,6 +18,7 @@ #include "window.hpp" #include "wp_assaultrifle.hpp" #include "wp_shotty.hpp" +#include "wp_enemyslingshot.hpp" Game::Game(std::string const& path) : current(path) { std::ifstream ifs(path); @@ -56,19 +57,33 @@ Game::Game(std::string const& path) : current(path) { } ifs.close(); enemies = new std::vector<Entity>; + + AWeapon* shotty = new wp_shotty(SHOTTY_BANG, + SHOTTY_RELOAD + ); + AWeapon* ar = new wp_assaultrifle(AR_BANG, + SHOTTY_RELOAD // TODO: get sound + ); + AWeapon* sling = new wp_enemysling(SHOTTY_BANG, + SHOTTY_RELOAD + ); + for (auto i = 0; i < nPerWave; i++) { if (ehp == 0) { - Entity en(ehp); + Entity en(1); en.radius = radius; en.idleTex = LoadTexture(SBIRE_TEX_IDLE); en.hurtTex = LoadTexture(SBIRE_TEX_HURT); enemies->push_back(en); + en.currentWeapon = nullptr; } else { Entity en(ehp); en.radius = radius; + en.wp[0] = shotty; + en.currentWeapon = en.wp[0]; en.idleTex = LoadTexture(SBIRE_TEX_IDLE); en.hurtTex = LoadTexture(SBIRE_TEX_HURT); - enemies->push_back(en); // legacy code. TODO: remove + enemies->push_back(en); // legacy code. TODO: remove AKchually no } } player = new Entity; @@ -81,14 +96,12 @@ Game::Game(std::string const& path) : current(path) { player->fury = 0; InitAudioDevice(); + crosshair = LoadTexture(CROSSHAIR_TEX); + cam.target = (Vector2){player->posX, player->posY}; cam.offset = (Vector2){SCREENWIDTH / 2.0f, SCREENHEIGHT / 2.0f}; cam.rotation = 0.0f; cam.zoom = 1.0f; - AWeapon* shotty = new wp_shotty(SHOTTY_BANG, SHOTTY_RELOAD); - AWeapon* ar = new wp_assaultrifle(AR_BANG, - SHOTTY_RELOAD // TODO: get sound - ); player->wp[0] = shotty; player->wp[1] = ar; @@ -130,7 +143,7 @@ void Game::draw() { 1.0f, 0.6f, WHITE); } } - // Destination rectangle (screen rectangle where drawing part of texture) + // Destination rectangle Rectangle destRec = {player->posX, player->posY, frameWidth * 1.8f, frameHeight * 1.8f}; @@ -155,7 +168,7 @@ void Game::draw() { int Game::tick() { auto target = GetMousePosition(); - DrawLine(player->posX, player->posY, target.x, target.y, RAYWHITE); + DrawTexture(crosshair, target.x, target.y, WHITE); auto v2 = (Vector2){target.x - player->posX, target.y - player->posY}; @@ -221,7 +234,7 @@ int Game::tick() { return (0); } -int Game::getKeys() const { +int Game::getKeys() { auto oldX = 0, oldY = 0, speed = 7; // get position before processing keys to check // for player movement in threshold mode oldX = player->posX; diff --git a/src/gameplay.hpp b/src/gameplay.hpp index a759f42..6fadb79 100644 --- a/src/gameplay.hpp +++ b/src/gameplay.hpp @@ -27,6 +27,9 @@ // player textures #define MUCHACHO_TEX "../meta/media/sprites/cowboy_idle.png" +// crosshair +#define CROSSHAIR_TEX "../meta/media/sprites/crosshair.png" + // bad boy textures #define SBIRE_TEX_IDLE "../meta/media/sprites/sbire_idle.png" #define SBIRE_TEX_HURT "../meta/media/sprites/sbire_hurt.png" @@ -61,6 +64,8 @@ class Game { Vector2 origin; + Texture2D crosshair; + public: Game(std::string const& path); ~Game(); diff --git a/src/main.cpp b/src/main.cpp index d277919..488de95 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,7 +28,7 @@ int main(void) { std::string path = "../meta/maps"; int i = 0; for (const auto& entry : - std::filesystem::directory_iterator(path)) { // c++17 lol + std::filesystem::directory_iterator(path)) { // NOTE: c++17 lol if (entry.path().filename().generic_string().find("start") != std::string::npos) { pick[i] = entry.path().filename().generic_string(); diff --git a/src/wp_enemyslingshot.cpp b/src/wp_enemyslingshot.cpp new file mode 100644 index 0000000..2a5b9fc --- /dev/null +++ b/src/wp_enemyslingshot.cpp @@ -0,0 +1,41 @@ +#include "wp_enemyslingshot.hpp" + +#include <raylib.h> +#include <raymath.h> +#include <iostream> + +#include "gameplay.hpp" +#include "entity.hpp" + +wp_enemysling::wp_enemysling(const char* s, const char* r) + : AWeapon(300.0f, 10, 2, 0.0, s, r) {} + +int wp_enemysling::bang(std::vector<Entity>* enemies, Entity* baddie) { + if (barrel == 0) { + return (1); + } else { + barrel--; + PlaySound(shot); + t = GetTime(); + // enemysling spawns a new enemy every @reload seconds. thats it. + // it's a slingshot + // + Entity en(1); + en.posX = (baddie->posX += range); + en.posY = (baddie->posY += range); + en.direction = baddie->direction; + en.radius = 20; + en.currentWeapon = nullptr; + en.idleTex = LoadTexture(SBIRE_TEX_IDLE); + en.hurtTex = LoadTexture(SBIRE_TEX_HURT); + enemies->push_back(en); + std::cout << "push back enemy. so far so good " << std::endl; + + // + // there + if (barrel == 0) { + empty = true; + } + return (0); + } +} diff --git a/src/wp_enemyslingshot.hpp b/src/wp_enemyslingshot.hpp new file mode 100644 index 0000000..bcaec09 --- /dev/null +++ b/src/wp_enemyslingshot.hpp @@ -0,0 +1,22 @@ +/*********************************/ +/* THRESHOLD ( // */ +/* enemysling ( )/ */ +/* by salade )(/ */ +/* ________________ ( /) */ +/* ()__)____________))))) :^} */ +/*********************************/ + +#ifndef WP_ENEMYSLING_H_ +#define WP_ENEMYSLING_H_ + +#include "weapon.hpp" + +class wp_enemysling : public AWeapon { + public: + wp_enemysling(const char* s, const char* r); + ~wp_enemysling(); + + int bang(std::vector<Entity>* enemies, Entity* player); +}; + +#endif |