1
1
Fork 0
Browse Source

mute button

master
alistair 1 year ago
parent
commit
17ec7741ec
  1. 93
      src/draw.c
  2. 36
      src/game.c
  3. 9
      src/types.h

93
src/draw.c

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
#include "draw.h"
#include "environment.h"
#include "game.h"
#include "types.h"
#include <SDL2/SDL_mutex.h>
@ -652,6 +653,97 @@ void draw_level_time(SDL_Renderer *ren, const struct environment * e) { @@ -652,6 +653,97 @@ void draw_level_time(SDL_Renderer *ren, const struct environment * e) {
position.y += 40;
draw_text_default(ren, position, colour, time_string);
}
void draw_mute_button(SDL_Renderer *ren) {
struct colour c = get_scene_watch()->colours.fg1;
struct colour i = get_scene_watch()->colours.bg;
if (mute_button.held) {
struct colour t = c;
c = i;
i = t;
}
SDL_Rect rect;
rect.x = mute_button.x;
rect.y = mute_button.y;
rect.w = mute_button.w;
rect.h = mute_button.h;
SDL_SetRenderDrawColor(ren, c.r, c.g, c.b, 255);
SDL_RenderFillRect(ren, &rect);
rect.x += mute_button.w / 6;
rect.y += mute_button.w / 4;
rect.w = mute_button.w / 5;
rect.h = mute_button.h / 2;
SDL_SetRenderDrawColor(ren, i.r, i.g, i.b, 255);
SDL_RenderFillRect(ren, &rect);
int j = 0;
for (int i = rect.x + rect.w; i < rect.x + rect.w + mute_button.w / 5; i++) {
SDL_RenderDrawLine(ren, i, rect.y + j + rect.h, i, rect.y - j);
j++;
}
j -= 8;
if (!mute_button.state) {
for (int i = rect.x + rect.w + mute_button.w / 5;
i < mute_button.x + mute_button.w - 5; i++) {
if ((i) % 8 < 4) {
SDL_RenderDrawLine(ren, i, rect.y + j + rect.h, i, rect.y - j);
}
if (i % 8 == 0) j += 4;
}
} else {
int w = mute_button.w / 5;
int i = rect.x + rect.w + mute_button.w / 5 + w/2;
int j = rect.y + w / 2;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
i += 1;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
i -= 1;
j += 1;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
j -= 1;
j += 1;
i += 1;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
j -= 1;
i -= 1;
i -= 1;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
i += 1;
j -= 1;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
j += 1;
j -= 1;
i -= 1;
SDL_RenderDrawLine(ren, i, j + w, i + w, j);
SDL_RenderDrawLine(ren, i + w, j + w, i, j);
j += 1;
i += 1;
}
}
void draw_pause_screen(SDL_Renderer *ren, struct environment *e) {
@ -802,6 +894,7 @@ void redraw_buffer(SDL_Renderer * ren) { @@ -802,6 +894,7 @@ void redraw_buffer(SDL_Renderer * ren) {
lplayer.colliding);
draw_collision_poly(ren, &lplayer);
draw_forces(ren, &lplayer);
draw_mute_button(ren);
if (gameui.currently_bound_textbox) {
draw_level_chooser_tbox(ren);

36
src/game.c

@ -50,11 +50,13 @@ long level_time; @@ -50,11 +50,13 @@ long level_time;
int get_floor_ceiling();
struct sg_times_list save_times_lst;
/* object that draw.c watches */
struct draw_watcher draw_watch = {};
/* object that handles ui interactions in game.c and which draw watches */
struct textbox_info textboxes[1];
struct button mute_button;
struct ui_state gameui = {};
@ -1752,12 +1754,23 @@ void startgame(SDL_Renderer * ren) { @@ -1752,12 +1754,23 @@ void startgame(SDL_Renderer * ren) {
game_paused = 0;
viewport_pos.x = player.physics->position.x - width / 2;
viewport_pos.y = player.physics->position.y - height / 2;
mute_button.x = 90.0/100 * width;
mute_button.y = 90.0/100 * height;
mute_button.w = 50;
mute_button.h = 50;
mute_button.state = mute;
mute_button.held = false;
}
double get_abs(double x,double y) {
return (sqrt(x*x + y*y));
}
bool aabb_check(float x, float y, float rx, float ry, float w, float h) {
return x > rx && x < rx + w && y > ry && y < ry + h;
}
/*
*
* Make a player walk along the ground. Only enabled in debug mode.
@ -1824,6 +1837,7 @@ void handle_input_event(SDL_Event event) { @@ -1824,6 +1837,7 @@ void handle_input_event(SDL_Event event) {
pull_rope(900);
} if (sc == input_map.mute) {
mute = !mute;
mute_button.state = mute;
} if (sc == input_map.pause) {
if (in_game)
game_paused = !game_paused;
@ -1860,6 +1874,14 @@ void handle_input_event(SDL_Event event) { @@ -1860,6 +1874,14 @@ void handle_input_event(SDL_Event event) {
break;
case SDL_MOUSEBUTTONDOWN:
if (aabb_check(event.button.x, event.button.y,
mute_button.x, mute_button.y, mute_button.w,
mute_button.h)) {
mute_button.held = true;
break;
}
add_rope(event.button.x, event.button.y);
if (event.button.button == input_map.mouse_attach_rope)
mouse_down = true;
@ -1867,7 +1889,21 @@ void handle_input_event(SDL_Event event) { @@ -1867,7 +1889,21 @@ void handle_input_event(SDL_Event event) {
pull_rope(900);
break;
case SDL_MOUSEBUTTONUP:
mute_button.held = false;
if (aabb_check(event.button.x, event.button.y,
mute_button.x, mute_button.y, mute_button.w,
mute_button.y)) {
mute = !mute;
mute_button.state = mute;
break;
}
if (event.button.button == input_map.mouse_attach_rope) {
mouse_down = false;
delete_rope();
}

9
src/types.h

@ -226,4 +226,13 @@ enum { @@ -226,4 +226,13 @@ enum {
E_ROOM_TILES = E_ROOM_WIDTH / E_ROOM_RES,
};
struct button {
char *name;
bool state;
bool held;
int x, y, w, h;
};
extern struct button mute_button;
#endif

Loading…
Cancel
Save