diff --git a/src/Main.cpp b/src/Main.cpp index a67ed53..817377c 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -13,20 +13,40 @@ class MainState : public State { AnimatedObject objs; TextObject text; Object title; + Object title2; + Object title3; + Object title4; + SDL_Rect camera = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}; virtual void Create() { title.create(0, 0, "data/bg.png"); AddObject(&title); - objs.create(50, 50, "data/smile.png"); + + title2.create(640, 0, "data/bg.png"); + AddObject(&title2); + + title3.create(640, 480, "data/bg.png"); + AddObject(&title3); + + title4.create(0, 480, "data/bg.png"); + AddObject(&title4); + objs.create(0, 0, "data/smile.png"); AddObject(&objs); objs.AddAnimation("idle", {{0, 0, 50, 50}, {50, 0, 50, 50}}); objs.PlayAnimation("idle"); objs.framerate = 1; + objs.setCamera(&camera); + title.setCamera(&camera); + title2.setCamera(&camera); + title3.setCamera(&camera); + title4.setCamera(&camera); title.scale.y = 0; + objs.centerSelf(); + title.center.x = WINDOW_WIDTH/2; title.center.y = WINDOW_HEIGHT/2; - text.create(50, 480 - 100, "Welcome to the funny application\nMake yourself at home :)", "data/monogram.ttf", {255, 255, 255, 255}, TTF_STYLE_NORMAL, 40); + text.create(50, 480 - 100, "Welcome to the funny application\nMake yourself at home :)\n- haya", "data/monogram.ttf", {255, 255, 255, 255}, TTF_STYLE_NORMAL, 40); AddObject(&text); } int yvel = 0; @@ -43,6 +63,8 @@ class MainState : public State { title.scale.y = sin(elaped); title.scale.x = cos(elaped); + pointTo(&camera, objs); + title.centerSelf(); text.centerSelf(); diff --git a/src/Render.cpp b/src/Render.cpp index 834218b..54d093f 100644 --- a/src/Render.cpp +++ b/src/Render.cpp @@ -75,13 +75,17 @@ vector Render::State::get_obj() { void Render::Object::Draw(float dt) { _x = x; - _sc_x = x-cam_rect.x; + _sc_x = x-cam_rect->x; _y = y; - _sc_y = y-cam_rect.y; + _sc_y = y-cam_rect->y; _w = w*scale.x; - _sc_w = _w-cam_rect.w; + _sc_w = _w; _h = h*scale.y; - _sc_h = _h-cam_rect.h; + _sc_h = _h; +} + +void Render::Object::setCamera(SDL_Rect* cam_p) { + cam_rect = cam_p; } void Render::AnimatedObject::Draw(float dt) { @@ -286,4 +290,26 @@ bool Render::playMusic(string path) { currentMusic = path; return true; +} + +void Render::pointTo(SDL_Rect* camera, Object object) { + camera->x = ( object.x + (object.w / 2)/2 ) - WINDOW_WIDTH / 2; + camera->y = ( object.y + (object.h / 2) ) - WINDOW_HEIGHT / 2; + + if( camera->x < 0 ) + { + camera->x = 0; + } + if( camera->y < 0 ) + { + camera->y = 0; + } + if( camera->x > camera->w ) + { + camera->x = camera->w; + } + if( camera->y > camera->h ) + { + camera->y = camera->h; + } } \ No newline at end of file diff --git a/src/Render.hpp b/src/Render.hpp index 4f4671e..f7cbfd8 100644 --- a/src/Render.hpp +++ b/src/Render.hpp @@ -82,10 +82,13 @@ namespace Render { * Center object on the center of the screen on a certain axis. Defaults to both X and Y. */ void centerSelf(AXIS axis = XY); + + void setCamera(SDL_Rect* cam_p); private: int _x, _y, _w, _h; int _ori_w, _ori_h; - SDL_Rect cam_rect = {0, 0, 0, 0}; + SDL_Rect du = {0, 0, 0, 0}; + SDL_Rect* cam_rect = &du; map _properties; }; @@ -208,5 +211,10 @@ namespace Render { * Passing a blank string (e.g. "") will stop the current playing music. */ bool playMusic(string path); + + /* + * Make the camera center itself on an object. + */ + void pointTo(SDL_Rect* camera, Object object); } #endif \ No newline at end of file