diff --git a/src/states/GameState.h b/src/states/GameState.h index 267d357..07dabab 100644 --- a/src/states/GameState.h +++ b/src/states/GameState.h @@ -14,7 +14,7 @@ public: virtual void init() = 0; virtual void handleEvents(SDL_Event& event) = 0; virtual void update() = 0; - virtual void render(SDL_Renderer* renderer) = 0; + virtual void render(SDL_Renderer* renderer, double deltaTime) = 0; void changeRoom(const std::string& stateName) { nextStateName = stateName; diff --git a/src/states/InGameState.cpp b/src/states/InGameState.cpp index 366bdf4..afbc281 100644 --- a/src/states/InGameState.cpp +++ b/src/states/InGameState.cpp @@ -33,11 +33,11 @@ void InGameState::checkCollision() { opponents.erase(opponents.begin() + i); } if (player.x < o.x + 80 && player.x + 80 > o.x && player.y < o.y + 96 && player.y + 96 > o.y) { - if (player.health > 0) { + if (player.health > 1) { player.health--; } else { - // TODO: Game over sccreen + this->changeRoom("ending"); } opponents.erase(opponents.begin() + i); @@ -50,6 +50,7 @@ void InGameState::checkCollision() { switch (item.type) { case Type::HEALTH: if (player.health < 3) { + items.erase(items.begin() + i); player.health++; } break; @@ -58,7 +59,6 @@ void InGameState::checkCollision() { break; } - items.erase(items.begin() + i); } } } @@ -141,6 +141,8 @@ void InGameState::renderHUD(SDL_Renderer* renderer, SDL_Texture* heart) const { } void InGameState::init() { + std::cout << "Game state initialized\n"; + SDL_ShowCursor(SDL_ENABLE); startTime = time(nullptr); } @@ -190,16 +192,17 @@ void InGameState::update() { } for (Opponent& o : opponents) { - o.move(10); + o.move(3); } - if (keys[0]) player.moveY(-20); - if (keys[1]) player.moveX(-20); - if (keys[2]) player.moveY(20); - if (keys[3]) player.moveX(20); + int speed = 10; + if (keys[0]) player.moveY(speed * -1); + if (keys[1]) player.moveX(speed * -1); + if (keys[2]) player.moveY(speed); + if (keys[3]) player.moveX(speed); } -void InGameState::render(SDL_Renderer* renderer) { +void InGameState::render(SDL_Renderer* renderer, double deltaTime) { SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 35, 39, 42, SDL_ALPHA_OPAQUE); @@ -207,6 +210,10 @@ void InGameState::render(SDL_Renderer* renderer) { SDL_Texture* background = IMG_LoadTexture(renderer, "./res/background.png"); drawTexture(renderer, background, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + for (Item i : this->items) { + renderItem(renderer, i); + } + SDL_Texture* playerTexture = IMG_LoadTexture(renderer, "./res/player.png"); renderPlayer(renderer, playerTexture, this->player); @@ -215,10 +222,6 @@ void InGameState::render(SDL_Renderer* renderer) { renderOpponent(renderer, opponentTexture, o); } - for (Item i : this->items) { - renderItem(renderer, i); - } - SDL_Texture* heart = IMG_LoadTexture(renderer, "./res/heart.png"); renderHUD(renderer, heart); diff --git a/src/states/InGameState.h b/src/states/InGameState.h index 4f0516d..152d5dd 100644 --- a/src/states/InGameState.h +++ b/src/states/InGameState.h @@ -32,7 +32,7 @@ public: void init() override; void handleEvents(SDL_Event& event) override; void update() override; - void render(SDL_Renderer* renderer) override; + void render(SDL_Renderer* renderer, double deltaTime) override; void spawnItem(Type type); void createOpponent(); diff --git a/src/states/MainMenuState.cpp b/src/states/MainMenuState.cpp index 031048a..77508a1 100644 --- a/src/states/MainMenuState.cpp +++ b/src/states/MainMenuState.cpp @@ -4,12 +4,22 @@ #include "../Renderer.h" +int mouseX = 0; +int mouseY = 0; + +int randomR = 255; +int randomG = 255; +int randomB = 255; + +int randomSkip = 0; + void MainMenuState::update() { - // Handle updates like animations if necessary + // hide cursor } void MainMenuState::init() { std::cout << "Main menu state initialized\n"; + SDL_ShowCursor(SDL_DISABLE); } void MainMenuState::handleEvents(SDL_Event& event) { @@ -32,18 +42,35 @@ void MainMenuState::handleEvents(SDL_Event& event) { } if (event.type == SDL_MOUSEMOTION) { - std::cout << "Mouse moved\n"; + mouseX = event.motion.x; + mouseY = event.motion.y; } } -void MainMenuState::render(SDL_Renderer* renderer) { +void MainMenuState::render(SDL_Renderer* renderer, double deltaTime) { SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); SDL_RenderClear(renderer); SDL_Texture* title = IMG_LoadTexture(renderer, "./res/logo.png"); - drawTexture(renderer, title, WINDOW_WIDTH/2-75, 100, 150, 150); + drawTexture(renderer, title, WINDOW_WIDTH/2-115, 100, 230, 125); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); + drawCircle(renderer, mouseX, mouseY, 10); + TTF_Font *font = TTF_OpenFont("./res/font.ttf", 24); + + while (randomSkip == 30) { + randomR = rand() % 200 + 55; + randomG = rand() % 200 + 55; + randomB = rand() % 200 + 55; + randomSkip = 0; + } + + drawText(renderer, font, "Click to Start", WINDOW_WIDTH/2-160, 320, {randomR, randomG, randomB, SDL_ALPHA_OPAQUE}); + + randomSkip++; SDL_RenderPresent(renderer); + + SDL_Delay(deltaTime < 16 ? 16 - deltaTime : 0); } diff --git a/src/states/MainMenuState.h b/src/states/MainMenuState.h index 76238e0..f7dcd11 100644 --- a/src/states/MainMenuState.h +++ b/src/states/MainMenuState.h @@ -10,7 +10,7 @@ public: void init() override; void handleEvents(SDL_Event& event) override; void update() override; - void render(SDL_Renderer* renderer) override; + void render(SDL_Renderer* renderer, double deltaTime) override; }; #endif \ No newline at end of file