diff --git a/bin/assets/images/return_button.png b/bin/assets/images/return_button.png new file mode 100644 index 0000000..ecb8e77 Binary files /dev/null and b/bin/assets/images/return_button.png differ diff --git a/main.c b/main.c index 05f13be..271ada8 100644 --- a/main.c +++ b/main.c @@ -184,7 +184,7 @@ void INITIALIZE() { Load_Textures(renderer); HIGHSCORES_Initialize(); BACKGROUND_Initialize(renderer, width, height); - Settings_Initialize(renderer); + Settings_Initialize(renderer,&scenery); printf("Initializing finished!\n"); } /* INITIALIZE */ diff --git a/settings.c b/settings.c index 1405bb5..70842ba 100644 --- a/settings.c +++ b/settings.c @@ -10,42 +10,46 @@ #define Scalar_width 20 #define Bar_width 400 #define round(x) ((int) ((x) + .5)) +#define distance(x1,y1,x2,y2) ((int)(sqrt(pow(x2-x1,2)+pow(y2-y1,2)))) SDL_Texture* Settings_Texture; -SDL_Texture* Settings_Ball_Texture; +SDL_Texture* Settings_Return_Button_Texture; SDL_Rect Settings_rect; -SDL_Rect Settings_Ball_rect; +SDL_Rect Settings_Return_Button_rect; Slider BV; Slider BS; Slider BT; - +Uint32 Mousestate; bool Settings_IsInit=false; -void Settings_Initialize (SDL_Renderer* renderer) { - Initialize_Slider(400,300,Scalar_width,Bar_width,Slider_height,1,2,&BV); - Initialize_Slider(400,500,Scalar_width,Bar_width,Slider_height,10.0f,20.0f,&BS); - Initialize_Slider(400,700,Scalar_width,Bar_width,Slider_height,0,1,&BT); +void Settings_Initialize (SDL_Renderer* renderer,Scenery* scenery) { + Initialize_Slider(400,300,Scalar_width,Bar_width,Slider_height,1,2,&BV,1.5); + Initialize_Slider(400,500,Scalar_width,Bar_width,Slider_height,30,100,&BS,scenery->ball.TargetRect.w); + Initialize_Slider(400,700,Scalar_width,Bar_width,Slider_height,0,8,&BT,scenery->ball.TextureIndex); Settings_Texture = IMG_LoadTexture(renderer, "assets/images/settings_title.png"); Settings_rect = (SDL_Rect){.x = 800, .y = 180, .w=313, .h=100}; - Settings_Ball_Texture = IMG_LoadTexture(renderer, "assets/images/ball.png"); - Settings_Ball_rect = (SDL_Rect){.x = 1200, .y = 300, .w=100, .h=100}; + Settings_Return_Button_Texture = IMG_LoadTexture(renderer, "assets/images/return_button.png"); + Settings_Return_Button_rect = (SDL_Rect){.x = 200, .y = 200, .w=75, .h=75}; Settings_IsInit = true; } void Settings_Draw (SDL_Renderer* renderer,Scenery* scenery) { double x; + scenery->ball.TargetRect.x=900; + scenery->ball.TargetRect.y=700; SDL_RenderCopy(renderer, Settings_Texture, NULL, &Settings_rect); - SDL_RenderCopy(renderer, Settings_Ball_Texture, NULL, &Settings_Ball_rect); + SDL_RenderCopy(renderer, Settings_Return_Button_Texture, NULL, &Settings_Return_Button_rect); Draw_Slider(renderer,&BV); Draw_Slider(renderer,&BS); Draw_Slider(renderer,&BT); Draw_Ballstate(renderer,scenery); - mapping(&x,&BS); - scenery->ball.Speed=x; mapping(&x,&BT); - x=round(x); - scenery->ball.TextureIndex=x; + scenery->ball.TextureIndex=round(x); + mapping(&x,&BS); + scenery->ball.TargetRect.w=x; + scenery->ball.TargetRect.h=x; + Settings_Return(); } void Settings_Deinitialize(){ @@ -60,7 +64,7 @@ void Draw_Slider(SDL_Renderer* renderer,Slider* beta){ SDL_SetRenderDrawColor(renderer,255,255,255,255); SDL_RenderDrawRect(renderer,&beta->Bar_rect); int x,y; - Uint32 Mousestate=SDL_GetMouseState(&x,&y); + Mousestate=SDL_GetMouseState(&x,&y); if(y<=((beta->Bar_rect.y)+(beta->Bar_rect.h))&&y>=(beta->Bar_rect.y)&&x<=(beta->Bar_rect.w+beta->Bar_rect.x)&&x>=(beta->Bar_rect.x)&&(Mousestate & SDL_BUTTON(SDL_BUTTON_LEFT))){ SDL_RenderFillRect(renderer,&beta->Scalar_rect); SDL_RenderDrawRect(renderer,&beta->Scalar_rect); @@ -90,10 +94,17 @@ void mapping(double *x,Slider* beta){ *x=((beta->max-beta->min)/(beta->Bar_rect.w-(beta->Scalar_rect.w)))*(beta->Slider_value-beta->Bar_rect.x-beta->Scalar_rect.w/2)+beta->min; } -void Initialize_Slider(int x,int y,int sw,int bw,int h,double min,double max,Slider* beta){ - beta->Scalar_rect = (SDL_Rect){.x=x,.y=y,.w=sw,.h=h}; +void Initialize_Slider(int x,int y,int sw,int bw,int h,double min,double max,Slider* beta,double defaultvalue){ + beta->Scalar_rect = (SDL_Rect){.x=(defaultvalue-min)/(max-min)*(bw-sw/2)+x,.y=y,.w=sw,.h=h}; beta->Bar_rect = (SDL_Rect){.x=x,.y=y,.w=bw,.h=h}; beta->max=max; beta->min=min; - beta->Slider_value=x+beta->Scalar_rect.w/2; + beta->Slider_value=(defaultvalue-min)/(max-min)*(bw-sw/2)+x; +} + +void Settings_Return(Scenery* scenery){ + int x,y; + Mousestate=SDL_GetMouseState(&x,&y); + if((distance(x,y,237,237)<=37)&&(Mousestate & SDL_BUTTON(SDL_BUTTON_LEFT))) + GAME_ChangeState(MainMenu); } diff --git a/settings.h b/settings.h index f053f6e..c1a518b 100644 --- a/settings.h +++ b/settings.h @@ -7,7 +7,10 @@ #include #include #include +#include #include "breakout.h" +#include "gamestate.h" +#include "main.h" typedef struct sliderstruct { SDL_Rect Bar_rect; @@ -22,12 +25,14 @@ void Draw_Slider(SDL_Renderer* renderer,Slider* beta); void Draw_Ballstate(SDL_Renderer* renderer,Scenery* scenery); -void Settings_Initialize (SDL_Renderer* renderer); +void Settings_Initialize (SDL_Renderer* renderer,Scenery* scenery); -void Initialize_Slider(int x,int y,int sw,int bw,int h,double min,double max,Slider* beta); +void Initialize_Slider(int x,int y,int sw,int bw,int h,double min,double max,Slider* beta,double defaultvalue); void Settings_Deinitialize(); void mapping(double *x,Slider* beta); +void Settings_Return(); + #endif