void controls_click(SDL_MouseButtonEvent *ev, state_t *state) { if(ev->button == SDL_BUTTON_RIGHT) { state->selected = TT_NONE; } else if(in_main_area(ev->x, ev->y)) { int gx = ev->x/GRID_SIZE; int gy = ev->y/GRID_SIZE; if(ev->button == SDL_BUTTON_LEFT && state->selected != TT_NONE && state->gil >= tower_cost) { int power = state->max_power - state->power_used; power = power > 100 ? 100 : power; tower_t *tower = tower_new(gx, gy, power, state->selected); if(tower != NULL) { state->gil -= tower_cost; tower_cost += 200; state->towers++; state->power_used += tower->power; } } } else if(in_sel_box(ev->x, ev->y)) { int x = ev->x; int y = YRES - ev->y; if(x % BTN_SIZE > BTN_OFFSET && y % BTN_SIZE > BTN_OFFSET) sel_click(x / BTN_SIZE, y / BTN_SIZE, state); } }
/* @brief mouse event dispatcher... might want an improved architecture later */ void controls_click(SDL_MouseButtonEvent *ev, state_t *state) { if(ev->button == SDL_BUTTON_RIGHT) { state->type_selected = ATTR_NONE; } else if((ev->x > SEL_X + SEL_BUFFER || ev->y < SEL_Y - SEL_BUFFER) && ev->y < BOT_BAR - BOT_BAR_BUFFER) { int gx = ev->x/GRID_SIZE; int gy = ev->y/GRID_SIZE; if(ev->button == SDL_BUTTON_LEFT && state->type_selected != ATTR_NONE) place_tower(gx, gy, 100, state->type_selected); } else if(ev->x < SEL_X && ev->y > SEL_Y) { int x = ev->x; int y = YRES - ev->y; if(x % BTN_SIZE > BTN_OFFSET && y % BTN_SIZE > BTN_OFFSET) sel_click(x / BTN_SIZE, y / BTN_SIZE, state); } else if(ev->y > BOT_BAR) { } }