/** * \brief Update controls. */ void ptb::frame_play_story::update_controls() { if ( !m_levels.empty() ) { update_level_name(); update_all_players_status(); update_bonus(); m_thumb->set_picture(get_thumb()); m_status_picture->set_picture(get_status_picture()); } } // frame_play_story::update_controls()
/* Return release mask */ void player_process_dropped_tile(PLAYER *player) { int released_mask; int w, d, h, layer_count; int layer_capacity; int layer_mask; char *layer; released_mask = 0; layer_mask = 1; layer_capacity = BoardWidth * BoardDepth; layer = player->board; player->score += player->bonus; update_score(PT_FOREGROUND, player->score, player->layers); player->bonus = -1; update_bonus(PT_FOREGROUND, -1); for (h=0; h<BoardHeight; h++) { layer_count = 0; for (d=0; d<BoardDepth; d++) for (w=0; w<BoardWidth; w++) if (*layer++) layer_count++; if (layer_count == layer_capacity) released_mask |= layer_mask; else if (layer_count == 0) break; layer_mask <<= 1; } player->released_details = released_mask; if (released_mask) player_animate_release(player); }
int board_accept_new_tile(PLAYER *player, short tile_code, const short tile_pos[], const short tile_size[]) { char *board; if (player->status & PLST_FINISHED) return 0; player->status &= ~PLST_DROPPED; player->status |= PLST_NEWTILE; player->released_details = 0; player->bonus = (player->options & PLOP_SHOWNEXT) ? 15 : 20; board = player->board; if (!check_tile_insert(board, tile_pos, tile_size)) { player->status |= PLST_FINISHED; draw_board(PT_FOREGROUND, player, 0); return 0; } memcpy(player->tile_pos, tile_pos, sizeof(short)*Dimension); memcpy(player->tile_size, tile_size, sizeof(short)*Dimension); player->tile_code = tile_code; tile_insert(board, tile_pos, tile_size, tile_code); player->status |= PLST_CHANGED; if (player->options & PLOP_SHOWNEXT) show_next(PT_FOREGROUND, player); update_bonus(PT_FOREGROUND, player->bonus); draw_board(PT_FOREGROUND, player, 0); return 1; }