diff --git a/build/BeagleRescue b/build/BeagleRescue index d6c45b0..fbaf288 100755 Binary files a/build/BeagleRescue and b/build/BeagleRescue differ diff --git a/src/config/config.json b/src/config/config.json index 0b0e538..bffe0fe 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -3,5 +3,5 @@ "WindowName":"Beagle Rescue", "WindowSize":{"w":320,"h":240}, "WindowFullScreen": 0, -"GlobalScale": 4 +"GlobalScale": 3 } diff --git a/src/ecs/ECS.cpp b/src/ecs/ECS.cpp index 6faaf7c..a8095b9 100644 --- a/src/ecs/ECS.cpp +++ b/src/ecs/ECS.cpp @@ -12,3 +12,8 @@ void Entity::addGroup(Group mGroup) groupBitset[mGroup] = true; manager.AddToGroup(this, mGroup); } +void Entity::setTag(std::string t) +{ + this->tag = t; +} + diff --git a/src/ecs/ECS.h b/src/ecs/ECS.h index 26ee1d4..cdd7647 100644 --- a/src/ecs/ECS.h +++ b/src/ecs/ECS.h @@ -37,7 +37,8 @@ template inline ComponentID getComponentTypeID() noexcept } constexpr std::size_t maxComponents = 32; -constexpr std::size_t maxGroups =32; +constexpr std::size_t maxGroups = 32; +constexpr std::size_t maxEntities = 32; using ComponentBitSet = std::bitset; using GroupBitset = std::bitset; @@ -90,6 +91,14 @@ public: { groupBitset[mGroup] = false; } + + std::string tag; + void setTag(std::string t); + + Entity* getEntity() + { + return this; + } template bool hasComponent() const { @@ -124,6 +133,7 @@ class Manager private: std::vector> entities; std::array, maxGroups> groupedEntities; + std::vector> taggedEntities; public: void update() { @@ -159,6 +169,19 @@ public: { groupedEntities[mGroup].emplace_back(mEntity); } + + std::vector getEntitiesByTag(std::string t) + { + std::vector taggedEntities; + for (int e = 0; e<=entities.size(); e++) + { + if (entities[e]->tag == t) + { + taggedEntities.emplace_back(entities[e]->getEntity()); + } + } + return taggedEntities; + } std::vector& getGroup(Group mGroup) { diff --git a/src/ecs/KeyboardController.h b/src/ecs/KeyboardController.h index 338c3bc..f0e31bb 100644 --- a/src/ecs/KeyboardController.h +++ b/src/ecs/KeyboardController.h @@ -39,18 +39,22 @@ public: case SDLK_DOWN: break; case SDLK_LEFT: - transform->velocity.x = -1; - if(Game::playerIsGrounded){ - sprite->Play("Walk"); + if(Game::gsm->currentState == GameStateManager::ST_COREGAME){ + transform->velocity.x = -1; + if(Game::playerIsGrounded){ + sprite->Play("Walk"); + } + sprite->spriteFlip = SDL_FLIP_NONE; } - sprite->spriteFlip = SDL_FLIP_NONE; break; case SDLK_RIGHT: - transform->velocity.x = 1; - if(Game::playerIsGrounded){ - sprite->Play("Walk"); + if(Game::gsm->currentState == GameStateManager::ST_COREGAME){ + transform->velocity.x = 1; + if(Game::playerIsGrounded){ + sprite->Play("Walk"); + } + sprite->spriteFlip = SDL_FLIP_HORIZONTAL; } - sprite->spriteFlip = SDL_FLIP_HORIZONTAL; break; case SDLK_k: if (!Game::debugCollisionBoxes) @@ -59,13 +63,15 @@ public: {Game::debugCollisionBoxes = false; } break; case SDLK_j: - if (Mix_PlayChannel(-1, Game::assets->GetSoundClip("bwoop"),0) == 0) - { - Mix_PlayChannel(-1, Game::assets->GetSoundClip("bwoop"),0); - } - Game::gravityOnPlayer = true; - sprite->Play("Jump"); - transform->velocity.y = -2; + if(Game::gsm->currentState == GameStateManager::ST_COREGAME){ + if (Mix_PlayChannel(-1, Game::assets->GetSoundClip("bwoop"),0) == 0) + { + Mix_PlayChannel(-1, Game::assets->GetSoundClip("bwoop"),0); + } + Game::gravityOnPlayer = true; + sprite->Play("Jump"); + transform->velocity.y = -2; + } break; case SDLK_u: Game::gsm->AdvanceState(); @@ -82,36 +88,42 @@ public: switch (Game::event.key.keysym.sym) { case SDLK_UP: - transform->velocity.y = 0; +// transform->velocity.y = 0; // sprite->Play("idle"); // sprite->spriteFlip = SDL_FLIP_NONE; break; case SDLK_DOWN: - transform->velocity.y = 0; +// transform->velocity.y = 0; // sprite->Play("idle"); // sprite->spriteFlip = SDL_FLIP_NONE; break; case SDLK_LEFT: - transform->velocity.x = 0; - sprite->Play("Idle"); - if (!Game::gravityOnPlayer){ - Game::gravityOnPlayer = true; -// sprite->Play("Fall"); + if(Game::gsm->currentState == GameStateManager::ST_COREGAME){ + transform->velocity.x = 0; + sprite->Play("Idle"); + if (!Game::gravityOnPlayer){ + Game::gravityOnPlayer = true; + // sprite->Play("Fall"); + } } break; case SDLK_RIGHT: - transform->velocity.x = 0; - sprite->Play("Idle"); - if (!Game::gravityOnPlayer){ - Game::gravityOnPlayer = true; + if(Game::gsm->currentState == GameStateManager::ST_COREGAME){ + transform->velocity.x = 0; + sprite->Play("Idle"); + if (!Game::gravityOnPlayer){ + Game::gravityOnPlayer = true; + } } break; case SDLK_k: break; case SDLK_j: - transform->velocity.y = 0; - sprite->Play("Fall"); - Game::gravityOnPlayer = true; + if(Game::gsm->currentState == GameStateManager::ST_COREGAME){ + transform->velocity.y = 0; + sprite->Play("Fall"); + Game::gravityOnPlayer = true; + } break; case SDLK_u: break; diff --git a/src/ecs/SpriteComponent.h b/src/ecs/SpriteComponent.h index f620e28..6aa4b25 100644 --- a/src/ecs/SpriteComponent.h +++ b/src/ecs/SpriteComponent.h @@ -70,6 +70,21 @@ public: spriteType = sType; if(sType == spriteAnimation) { + std::string bogusPath = "src/config/credits.json"; + std::ifstream fin(bogusPath); + + if(fin.is_open()){ + std::cout<<"file is open"<ParseString(myText, 12, 22, globalScale); + text->ParseString(myText, 12, 22, globalScale, "text"); SDL_Rect myDestRect = SDL_Rect(); myDestRect.x = 12; myDestRect.y = 8; @@ -145,6 +148,16 @@ void Game::init(const char *title, int width, int height, bool fullscreen, int g puppy.addComponent("puppy", SpriteComponent::spriteObject); puppy.addGroup(groupObjects); +// const char* strA = "r"; +// const char* strB = "r"; +// +// if (strcmp(strA,strB)==0) +// { +// printf("strcomp evaluated to true"); +// } else { +// printf("strcomp false or not evaluated"); +// } + // enemy.addComponent(180*globalScale,180*globalScale,32,32,globalScale); // enemy.addComponent("robber", SpriteComponent::spriteAnimation, "assets/textures/actors/robberrodent.json"); // enemy.addGroup(groupEnemies); @@ -186,12 +199,24 @@ void Game::update() SDL_Rect playerCol = player.getComponent().collider; Vector2D playerPos = player.getComponent().position; - if (Mix_PlayingMusic() == 0) +// if (gsm->currentState == GameStateManager::ST_INIT) +// { +// const char* initText = "Loading..."; +// text->ParseString(initText,12,22,gScale,"init"); +// const char* titleText = "Beagle Rescue"; +// const char* gameOverText = "Game Over"; +// } + + + if (Mix_PlayingMusic() == 0 && gsm->currentState == GameStateManager::ST_COREGAME) { // std::cout << "Play Music Now" << std::endl; -// Mix_PlayMusic(assets->GetMusicTrack("simonZ"), -1); + Mix_PlayMusic(assets->GetMusicTrack("simonZ"), -1); } - + if (Mix_PlayingMusic() != 0 && gsm->currentState != GameStateManager::ST_COREGAME) + { + Mix_HaltMusic(); + } // if (Mix_PlayChannel(-1, Game::assets->GetSoundClip("bark1"),0) == 0) // { // Mix_PlayChannel(-1, Game::assets->GetSoundClip("bark1"),0); @@ -274,7 +299,7 @@ void Game::render() { p->draw(); } - if (gsm->currentState==GameStateManager::ST_TITLESCREEN){ + if (gsm->currentState==GameStateManager::ST_TITLESCREEN||gsm->currentState==GameStateManager::ST_INIT||gsm->currentState==GameStateManager::ST_GAMEOVER){ for (auto& guiElement : gui) { guiElement->draw(); diff --git a/src/game/Main.cpp b/src/game/Main.cpp index b4c9b61..f3a9316 100644 --- a/src/game/Main.cpp +++ b/src/game/Main.cpp @@ -25,20 +25,21 @@ int main(int argc, const char * argv[]) // ============================= // Load cJSON config.json file // ============================= +// Starting with Error Checking + std::string configPath = "src/config/config.json"; + std::ifstream fin(configPath); + + if(fin.is_open()){ +// std::cout<<"config.json is opened successfully"<valuestring != NULL)) -// { -// printf("Window Name is: %s\n", windowName->valuestring); -// } cJSON * windowSize = cJSON_GetObjectItem(myJSON, "WindowSize"); int windowWidth = cJSON_GetObjectItem(windowSize, "w")->valueint; int windowHeight = cJSON_GetObjectItem(windowSize, "h")->valueint; -// printf("Window:\nwidth:%d\nheight:%d\n",windowWidth,windowHeight); int windowFS = cJSON_GetObjectItem(myJSON, "WindowFullScreen")->valueint; int globalScale = cJSON_GetObjectItem(myJSON, "GlobalScale")->valueint; bool isWindowFS; @@ -73,5 +74,15 @@ int main(int argc, const char * argv[]) } game->clean(); + } else { + std::cout<<"config.json not found or opened"< #include +#include extern Manager manager; -UIText::UIText(const char* text, std::string texId, int x, int y, int letterW, int letterH, int lScale) +UIText::UIText(std::string text, std::string texId, int x, int y, int letterW, int letterH, int lScale) { inputText = text; textureID = texId; @@ -30,7 +31,7 @@ UIText::~UIText() { } -void UIText::ParseString(const char* inputText, int x, int y, int scale) +void UIText::ParseString(std::string inputText, int x, int y, int scale, std::string tag) { //Parse input text into an array of char int posX = x; @@ -38,30 +39,47 @@ void UIText::ParseString(const char* inputText, int x, int y, int scale) int i = 0; // printf(inputText); char current = inputText[i]; +// const char* newLineChar{10}; + +// std::vector writableStr(inputText.begin(), inputText.end()); +// writableStr.push_back('\0'); + do { +// for (int i = 0; i < writableStr.size(); i++) +// { +// if (writableStr.at(i) == '\n') +// { +// printf("found new line"); +// } +// } ++i; - if (strcmp(¤t,"\n")) + if (strcmp(¤t,"\n")!=0) { posX += letterWidth; } else { -// printf("new line detected"); +// printf("new line detected/n"); posX = x; posY += letterHeight; } - UIText::AddLetter(posX, posY, current); + UIText::AddLetter(posX, posY, current, tag); current = inputText[i]; } while ((strcmp(¤t,"\0"))!=0); } -void UIText::AddLetter(int xpos, int ypos, char crnt) +void UIText::AddLetter(int xpos, int ypos, char crnt, std::string tag) { auto& letter(manager.addEntity()); letter.addComponent(xpos*scale, ypos*scale, letterWidth, letterHeight, 1); // printf("Scale: %d\n",scale); letter.addComponent("font", SpriteComponent::spriteText, crnt, letterWidth, letterHeight, scale); + letter.setTag(tag); letter.addGroup(Game::groupUI_Layer1); } + +// void UIText::RemoveLetter() +// { +// } diff --git a/src/ui/UIText.h b/src/ui/UIText.h index 12d3c74..2df464c 100644 --- a/src/ui/UIText.h +++ b/src/ui/UIText.h @@ -14,18 +14,18 @@ class UIText { public: - const char* inputText; + std::string inputText; int letterHeight; int letterWidth; int posX; int posY; std::string textureID; - UIText(const char* inputText, std::string texID, int x, int y, int letterW, int letterH, int lScale); + UIText(std::string inputText, std::string texID, int x, int y, int letterW, int letterH, int lScale); ~UIText(); // void SetCharClips(SDL_Texture* fontTex, int x, int y, int letterW, int letterH); - void AddLetter(int xpos, int ypos, char crnt); - void ParseString(const char* inputText, int x, int y, int scale); + void AddLetter(int xpos, int ypos, char crnt, std::string tag); + void ParseString(std::string inputText, int x, int y, int scale, std::string tag); int scale; };