From 427c125721739c62dcfbab3665971125f2acd5e8 Mon Sep 17 00:00:00 2001 From: Gryfenfer Date: Sun, 22 Jan 2023 16:10:21 +0100 Subject: [PATCH] strength bar --- assets/img/strengthBar.png | Bin 0 -> 1861 bytes src/game.c | 80 ++++++++++++++++++++++++++++++++----- src/scene.c | 16 ++++++-- src/scene.h | 1 + 4 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 assets/img/strengthBar.png diff --git a/assets/img/strengthBar.png b/assets/img/strengthBar.png new file mode 100644 index 0000000000000000000000000000000000000000..e49473fb6385cf0a97dda4b7cf3e5ca75bda32a4 GIT binary patch literal 1861 zcmV-L2fFx)P)EX>4Tx04R}tkv&MmP!xqvQ?*hm4i*t{$WWc^q9Tr3g(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yV$x;QDiNQw6)g%&Yhc*)0k_Z;544-gs^rdeIHfTr7K zI++l&xm7XriU0-?rf-kTEMrcRQt+*>d+MXQi}Ni1zCWu^&07ozh{UtZFm2)u;^|G> z;Ji;9WhGf9J|`YG>43zKTvt4P<6LxE;F(b~lb$Dz5{tzSRyvrKOpSPoIHqbkH~2kUt1vm?B}EcI_lx6vi~^xupjmgE?_eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00kXML_t(o!;M)>vfD5WBYgieKXhS<1V}p5F5V=uE%5_@ zkc+-lkB9)zZ$Lya7=ArJN5uO)>_hE|t_k@qv3Tm*;=;*o)|CK>sbm3_qxDemXL_Qw##p;!_V$~JCDo~xGlZ{7 zVD#F_KE%+Lp6AOq%-XcN53Rw%*Kt4FbEy4Ni$0#Sn8WK6Qjgpkf+e2Mcx(BbT3mif z&F5SaR>Sv4F#ZCrGpHa5F1719myVS#J0>C5w|~U{%*Mi4>6`0pi01k8jt`xMJ5D8+ ztuM)yTA+G*`FeNK84mFWyXH@wm3UQG2bNr$3|oC|d1lr!#(c)&c|N%Xe?~n@nW_jr zRn$A9hVOtYAp@DyZ|@}BSar9wG(U?5DOYB`G{5(&23>DmU(Oob;)Hw9D2xE{`o9kk z!qI!30W|GOEzR1M>&O}y#+f~cc;ndD9da=>|AW`v>p7NjUF7arRl_LWEj`|c2Q<8> zhgA=9m2Z4=*Aij(2i*^uwxQukF|2Wa%(t$yw-4QCs$Vb+LjWl}vALU6 zhxBgoXq-CXb7^|)^-L0*C*gV~1I4!m8eTZ+*JFz2Y59ShweGTy>)~<+(p>PNx0`=! zp6rFF>JLmwwH9(LiL!CD1dsvH?vrs>mXvn%3q6LKY7*)c{kb@`N=j?qTg-q2E0nO)$Px+xO z9UIs*Y>BJ;o7CDd13r9+<>9_8vEOxBycw4Nv@zZr4&bMR-Y?yUa;`IOC~w=Wl@}Ic z{;39cKg1UQb`7!gqMmu^V+Uhaj#m=me>wcXcK?_My$^|L3J1jt0ug^F2Q{mWBM8ME ze`vn?(e~=iJV~2}3y!8=Xd0z`-R47^2LqJKVbzc3%Z5&^vnc%Bvgu0ao%m{O{oAxb z_1xmvFz#oGEf*NCnCCw>&+dM4;{#l?!NG@r;9U?r23VPy00000NkvXXu0mjf2T6`g literal 0 HcmV?d00001 diff --git a/src/game.c b/src/game.c index c705755..5d077bc 100644 --- a/src/game.c +++ b/src/game.c @@ -1,4 +1,5 @@ #include "game.h" +#include #include #include #include @@ -6,7 +7,7 @@ #include "scene.h" #include "text.h" -#define SPEED 1.f/10000000000 +#define SLIDER_SPEED 1.f/500 #define GRAVITY 10000.f static Mix_Music * music; @@ -21,7 +22,8 @@ static const float startPersonPositionY = CAMERA_HEIGHT * 0.4f; static float personPositionX = startPersonPositionX; static float personPositionY = startPersonPositionY; -static const float personVelocityX = 200; +static const float startPersonVelocityX = 200; +static float personVelocityX = 200; static float personVelocityY = 0; float jetons = 0.f; @@ -31,6 +33,22 @@ static RenderId_t personId; RenderObject_t scoreText; static RenderId_t scoreTextId = -1; +static RenderObject_t strengthBar; +static RenderId_t strengthBarId; +static float strength = 0.f; +static bool increaseStrength = true; + + +static float adameStrength = 1.f; // this value is not const as it will be possible to improve the strenght of Adame. + +static RenderObject_t strengthBarSlider; +static float strengthBarSliderDistance = 0.f; +static RenderId_t strengthBarSliderId; +static bool increaseStrengthBarSlider = true; + + + + static void playMusic(){ music = Mix_LoadMUS("./assets/music/jojo arab.mp3"); if(music == NULL) { @@ -91,20 +109,54 @@ int game_staticRender(void){ scoreTextId = scene_addRenderObject(&gameScene, scoreText, gameScene.x + 2, 0); + SDL_Surface* strengthBarSurface = IMG_Load("./assets/img/strengthBar.png"); + strcpy(strengthBar.name, "strengthBar"); + strengthBar.z = 100; + strengthBar.surface = strengthBarSurface; + strengthBar.width = 0.50f; + strengthBar.height = 0.025f; + strengthBarId = scene_addRenderObject(&gameScene, strengthBar, 0.30f * CAMERA_WIDTH, 0.9f * CAMERA_HEIGHT); + + + SDL_Surface* strengthBarSliderSurface = IMG_Load("./assets/img/building.png"); + strcpy(strengthBarSlider.name, "strengthBarSlider"); + strengthBarSlider.z = 101; + strengthBarSlider.surface = strengthBarSliderSurface; + strengthBarSlider.width = 0.005f; + strengthBarSlider.height = 0.05f; + strengthBarSliderId = scene_addRenderObject(&gameScene, strengthBarSlider, 0.30f * CAMERA_WIDTH, 0.89f * CAMERA_HEIGHT); + return 0; } int game_render([[maybe_unused]] float delta){ - //for(unsigned i = 0; i < menuObjectsSize; ++i){ - // scene_removeRenderObject(&gameScene, menuObjects[i]); - //} - // if(scoreTextId > 0) - // scene_removeRenderObject(&gameScene, scoreTextId); - - deltaAccu += delta; + if(!isSpaceKeypressed && !crashed && deltaAccu >= SLIDER_SPEED){ + // if(increaseStrength && strength >= 2.f) + // increaseStrength = false; + // else if(increaseStrength) + // strength += 0.1; + // else if(!increaseStrength && strength <= 0.f) + // increaseStrength = true; + // else + // strength -= 0.1; + if(increaseStrengthBarSlider && strengthBarSliderDistance >= 0.50f) + increaseStrengthBarSlider = false; + else if(increaseStrengthBarSlider){ + strengthBarSliderDistance += 0.005f; + scene_moveRenderObject(&gameScene, strengthBarSliderId, 0.30f * CAMERA_WIDTH + strengthBarSliderDistance * CAMERA_WIDTH, 0.89f * CAMERA_HEIGHT); + } + else if(!increaseStrengthBarSlider && strengthBarSliderDistance <= 0.0001f) + increaseStrengthBarSlider = true; + else{ + strengthBarSliderDistance -= 0.005f; + scene_moveRenderObject(&gameScene, strengthBarSliderId, 0.30f * CAMERA_WIDTH + strengthBarSliderDistance * CAMERA_WIDTH, 0.89f * CAMERA_HEIGHT); + } + + deltaAccu = 0; + } // if(!crashed && deltaAccu >= SPEED && isSpaceKeypressed){ if(!crashed && isSpaceKeypressed){ const float distance = personVelocityX * delta; @@ -131,8 +183,6 @@ int game_render([[maybe_unused]] float delta){ scene_moveRenderObject(&gameScene, personId, personPositionX, personPositionY); - // scoreTextId = scene_addRenderObject(&gameScene, scoreText, gameScene.x + 2, 0); - return 0; } @@ -147,13 +197,21 @@ void game_handleSpaceKeyInput(void){ crashed = false; personPositionX = startPersonPositionX; personPositionY = startPersonPositionY; + personVelocityX = startPersonVelocityX; personVelocityY = 0; isSpaceKeypressed = false; gameScene.x = 0; gameScene.y = 0; + strengthBarSliderDistance = 0.f; scene_moveRenderObject(&gameScene, scoreTextId, gameScene.x + 2, 0); + scene_moveRenderObject(&gameScene, strengthBarId, 0.30f * CAMERA_WIDTH, 0.9f * CAMERA_HEIGHT); } else{ isSpaceKeypressed = true; + strength = - 32 * powf(fabs(strengthBarSliderDistance - 0.5f/2), 2) + 2; + personVelocityX *= strength * adameStrength; + scene_moveRenderObject(&gameScene, strengthBarId, 0, CAMERA_HEIGHT * 2); + scene_moveRenderObject(&gameScene, strengthBarSliderId, 0, CAMERA_HEIGHT * 2); + } } diff --git a/src/scene.c b/src/scene.c index 98ba966..a27f002 100644 --- a/src/scene.c +++ b/src/scene.c @@ -8,7 +8,7 @@ #include #include -const RenderObject_t EMPTY_RENDER_OBJECT = { 0, 0, 0, 0, NULL, "Undefined" }; +const RenderObject_t EMPTY_RENDER_OBJECT = { 0, 0.f, 0.f, 0.f, 0.f, 0.f, NULL, "Undefined" }; static int compartSort(const SceneObject_t * a, const SceneObject_t * b) { return a->renderObj.z - b->renderObj.z; @@ -18,7 +18,7 @@ void scene_render(const Scene_t * scene) { MonitorSize_t monitorSize = renderer_getMonitorSize(); for(int i = 0; i < scene->objectCount; i++) { - printf("Rendering %d, %s\n", scene->objects[i].id, scene->objects[i].renderObj.name); + // printf("Rendering %d, %s\n", scene->objects[i].id, scene->objects[i].renderObj.name); const SceneObject_t * object = &scene->objects[i]; float x = (object->x - scene->x) / CAMERA_WIDTH; float y = (object->y - scene->y) / CAMERA_HEIGHT; @@ -31,7 +31,17 @@ void scene_render(const Scene_t * scene) { round(object->renderObj.height * monitorSize.height) }; - int error = SDL_RenderCopyEx(renderer, object->cache, NULL, &rect, object->renderObj.angle_degre, NULL, SDL_FLIP_NONE); + int error; + + if(object->renderObj.angle_x == FLT_MIN || object->renderObj.angle_y == FLT_MIN){ + error = SDL_RenderCopyEx(renderer, object->cache, NULL, &rect, object->renderObj.angle_degre, NULL, SDL_FLIP_NONE); + } + else{ + SDL_Point center; + center.x = object->renderObj.angle_x * rect.w; + center.x = object->renderObj.angle_y * rect.h; + error = SDL_RenderCopyEx(renderer, object->cache, NULL, &rect, object->renderObj.angle_degre, ¢er, SDL_FLIP_NONE); + } if(error != 0) { fprintf(stderr, "Render error in object %d with error %s\n", object->id, SDL_GetError()); exit(1); diff --git a/src/scene.h b/src/scene.h index c9fc300..e7966ea 100644 --- a/src/scene.h +++ b/src/scene.h @@ -13,6 +13,7 @@ typedef struct RenderObject { int z; float width, height; //ratio between 0 & 1 of the monitor resolution float angle_degre; + float angle_x, angle_y; // position for the center of the rotation SDL_Surface * surface; char name[40]; } RenderObject_t;