int draw_view(struct view *view, struct mouse_state *mouse_state) { struct widget_level *widget_level; struct widget_list *widget_list; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); widget_level = view->widget_level; while(widget_level != NULL) { widget_list = widget_level->widget_list; while(widget_list != NULL) { switch(widget_list->widget->widget_type) { case WIDGET_MENU: if(draw_menu((struct menu*) \ widget_list->widget) == ERROR) return ERROR; break; case WIDGET_PANEL: if(draw_panel((struct panel*) \ widget_list->widget) == ERROR) return ERROR; break; case WIDGET_BUTTON: if(draw_button((struct button*) \ widget_list->widget) == ERROR) return ERROR; break; case WIDGET_BUTTONGRID: if(draw_buttongrid((struct buttongrid*)\ widget_list->widget) == ERROR) return ERROR; break; case WIDGET_LABEL: if(draw_label((struct label*) \ widget_list->widget) == ERROR) return ERROR; break; case WIDGET_SCROLLABLE: if(draw_scrollable((struct scrollable*)\ widget_list->widget) == ERROR) return ERROR; break; case WIDGET_MSGBOX: if(draw_msgbox((struct msgbox*) \ widget_list->widget) == ERROR) return ERROR; break; } widget_list = widget_list->next_widget; } widget_level = widget_level->next_level; } if(view->game_state != NULL) { if(draw_map(&(view->game_state->object_list->map)) == ERROR) return ERROR; draw_cube_map(&(view->game_state->object_list->map), \ &(view->game_state->textures)); if(view->game_state->build_object.type != NIL) if(pinpoint_object_location(\ &(view->game_state->object_list->map), \ mouse_state, \ &(view->game_state->build_object)) == ERROR) return ERROR; draw_map_objects(&(view->game_state->object_list->map), \ &(view->game_state->textures), \ &(view->game_state->models)); draw_select_box(&(view->game_state->object_list->map), \ &(view->game_state->build_object), \ &(view->game_state->models), \ &(view->game_state->textures)); } return REDRAW; }