void mechlab_render(scene *scene) { mechlab_local *local = scene_get_userdata(scene); for(int i = 0; i < sizeof(local->bg_obj)/sizeof(object); i++) { object_render(&local->bg_obj[i]); } // Render dashboard guiframe_render(local->frame); guiframe_render(local->dashboard); // Only render mech in stats dashboard if(local->dashtype == DASHBOARD_STATS) { object_render(local->mech); } }
void render(Outbreak * outbreak) { if (!outbreak->paused) { // clear screen SDL_FillRect(outbreak->screen, NULL, BACKGROUND_COLOR); // draw paddle object_render(outbreak->player, outbreak->screen); // draw blocks int i; for (i = 0; i < outbreak->num_blocks; i++) { object_render(outbreak->blocks[i], outbreak->screen); } // draw ball object_render(outbreak->ball, outbreak->screen); } SDL_UpdateRect(outbreak->screen, 0, 0, 0, 0); }
void vs_render(scene *scene) { vs_local *local = scene_get_userdata(scene); game_player *player1 = game_state_get_player(scene->gs, 0); game_player *player2 = game_state_get_player(scene->gs, 1); // player 1 HAR object_render(&local->player1_har); // player 2 HAR object_render(&local->player2_har); // player 1 portrait object_render(&local->player1_portrait); // player 2 portrait object_render(&local->player2_portrait); font_render_shadowed(&font_small, local->vs_str, 160-((strlen(local->vs_str)*font_small.w)/2), 0, COLOR_YELLOW, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); if (player2->selectable) { // arena selection video_render_sprite(&local->arena_select_bg, 55, 150, BLEND_ALPHA, 0); object_render(&local->arena_select); // arena name font_render_wrapped(&font_small, lang_get(56+local->arena), 56+72, 153, (211-72)-4, COLOR_GREEN); // arena description font_render_wrapped(&font_small, lang_get(66+local->arena), 56+72, 160, (211-72)-4, COLOR_GREEN); } else if (player2->pilot_id == 10 && settings_get()->gameplay.difficulty < 2) { // kriessack, but not on Veteran or higher font_render_wrapped(&font_small, lang_get(747), 59, 160, 200, COLOR_YELLOW); } else { font_render_wrapped(&font_small, lang_get(749+(11*player1->pilot_id)+player2->pilot_id), 59, 160, 150, COLOR_YELLOW); font_render_wrapped(&font_small, lang_get(870+(11*player2->pilot_id)+player1->pilot_id), 320-(59+150), 180, 150, COLOR_YELLOW); } }
void melee_render(scene *scene) { melee_local *local = scene_get_userdata(scene); game_player *player2 = game_state_get_player(scene->gs, 1); int current_a = 5*local->row_a + local->column_a; int current_b = 5*local->row_b + local->column_b; if (local->selection == 0) { video_render_sprite(&local->feh, 70, 0, BLEND_ALPHA, 0); video_render_sprite(&local->bleh, 0, 62, BLEND_ALPHA, 0); // player bio font_render_wrapped_shadowed(&font_small, lang_get(135+current_a), 4, 66, 152, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); // player stats font_render_shadowed(&font_small, lang_get(216), 74+27, 4, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(217), 74+19, 22, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(218), 74+12, 40, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); component_render(local->bar_power[0]); component_render(local->bar_agility[0]); component_render(local->bar_endurance[0]); if (player2->selectable) { video_render_sprite(&local->feh, 320-70-local->feh.w, 0, BLEND_ALPHA, 0); video_render_sprite(&local->bleh, 320-local->bleh.w, 62, BLEND_ALPHA, 0); // player bio font_render_wrapped_shadowed(&font_small, lang_get(135+current_b), 320-local->bleh.w+4, 66, 152, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); // player stats font_render_shadowed(&font_small, lang_get(216), 320-66-local->feh.w+27, 4, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(217), 320-66-local->feh.w+19, 22, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(218), 320-66-local->feh.w+12, 40, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); component_render(local->bar_power[1]); component_render(local->bar_agility[1]); component_render(local->bar_endurance[1]); } else { // 'choose your pilot' font_render_wrapped_shadowed(&font_small, lang_get(187), 160, 97, 160, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); } } object_render(&local->player2_placeholder); if (local->selection == 0) { // player 1 name font_render_wrapped_shadowed(&font_small, lang_get(20+current_a), 0, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); if (player2->selectable) { // player 2 name font_render_wrapped_shadowed(&font_small, lang_get(20+current_b), 320-66, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } render_highlights(scene); for(int i = 0; i < 10; i++) { object_render(&local->pilots[i]); } object_render(&local->bigportrait1); if (player2->selectable) { object_render(&local->bigportrait2); } } else { // render the stupid unselected HAR portraits before anything // so we can render anything else on top of them object_render(&local->unselected_har_portraits); render_highlights(scene); // currently selected player object_render(&local->bigportrait1); //currently selected HAR object_render(&local->harportraits_player1[5*local->row_a + local->column_a]); object_render(&local->har_player1[5*local->row_a + local->column_a]); // player 1 name font_render_wrapped_shadowed(&font_small, lang_get(20+local->pilot_id_a), 0, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); if (player2->selectable) { // player 2 name font_render_wrapped_shadowed(&font_small, lang_get(20+local->pilot_id_b), 320-66, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); // currently selected player object_render(&local->bigportrait2); // currently selected HAR object_render(&local->harportraits_player2[5*local->row_b + local->column_b]); object_render(&local->har_player2[5*local->row_b + local->column_b]); // render HAR name (Har1 VS. Har2) char vstext[48]; strcpy(vstext, har_get_name(5*local->row_a + local->column_a)); strcat(vstext, " VS. "); strcat(vstext, har_get_name(5*local->row_b + local->column_b)); font_render_wrapped_shadowed(&font_small, vstext, 80, 107, 150, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } else { // 'choose your HAR' font_render_wrapped_shadowed(&font_small, lang_get(186), 160, 97, 160, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); // render HAR name font_render_wrapped_shadowed(&font_small, har_get_name(5*local->row_a + local->column_a), 130, 107, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } } if (player2->selectable) { chr_score *s1 = game_player_get_score(game_state_get_player(scene->gs, 0)); chr_score *s2 = game_player_get_score(game_state_get_player(scene->gs, 1)); char winstext[48]; snprintf(winstext, 48, "Wins: %d", s1->wins); font_render_shadowed(&font_small, winstext, 8, 107, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); snprintf(winstext, 48, "Wins: %d", s2->wins); font_render_shadowed(&font_small, winstext, 312-(strlen(winstext)*font_small.w), 107, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } }
void simulation_render(simulation_t* sim) { const color_t red=get_color(255,0,0); const color_t white=get_color(255,255,255); orbit_t* current_orbit=&sim->current_spacecraft->orbit; //Calculate camera position and orientation sim->camera.position=sim->current_spacecraft->base.position; //vector_t primary_to_cam=vector_subtract(sim->camera.position,current_orbit->primary->base.position); sim->camera.rotation=0;//atan2(primary_to_cam.y,primary_to_cam.x)+M_PI_2; //Plot apoapsis and periapsis vector_t apoapsis=vector_transform(orbit_get_position(current_orbit,current_orbit->longitude_of_periapsis+M_PI),sim->camera); vector_t periapsis=vector_transform(orbit_get_position(current_orbit,current_orbit->longitude_of_periapsis),sim->camera); draw_cross(apoapsis,red); draw_cross(periapsis,red); draw_text(apoapsis.x-20,apoapsis.y-20,"Apoapsis"); draw_text(periapsis.x-20,periapsis.y-20,"Periapsis"); //Render arrow on spacecraft draw_arrow(vector_transform(sim->current_spacecraft->base.position,sim->camera),sim->current_spacecraft->base.rotation+sim->camera.rotation,get_color(0,255,255)); //Show orbit orbit_show(current_orbit,sim->camera,get_color(0,255,0)); char str[64]; //Show speedup if(sim->speedup==1)draw_text(20,650,"Real time"); else { sprintf(str,"Fast forward: %dx",sim->speedup); draw_text(20,650,str); } int i; for(i=0;i<sim->num_celestial_bodies;i++) { //Show orbit if(sim->celestial_bodies[i].orbit.primary!=NULL) { orbit_show(&sim->celestial_bodies[i].orbit,sim->camera,get_color(255,255,0)); simulation_render_lagrange_points(sim,&sim->celestial_bodies[i]); } //Draw planet object_render((object_t*)(&sim->celestial_bodies[i]),sim->camera); //Show name vector_t position=vector_transform(sim->celestial_bodies[i].base.position,sim->camera); draw_text(position.x,position.y,sim->celestial_bodies[i].name); //Draw sphere of influence int j; double theta=0; for(j=0;j<32;j++) { vector_t line_start=sim->celestial_bodies[i].base.position; line_start.x+=sim->celestial_bodies[i].sphere_of_influence*sin(theta); line_start.y+=sim->celestial_bodies[i].sphere_of_influence*cos(theta); line_start=vector_transform(line_start,sim->camera); theta+=M_PI/32; vector_t line_end=sim->celestial_bodies[i].base.position; line_end.x+=sim->celestial_bodies[i].sphere_of_influence*sin(theta); line_end.y+=sim->celestial_bodies[i].sphere_of_influence*cos(theta); line_end=vector_transform(line_end,sim->camera); theta+=M_PI/32; draw_line(line_start.x,line_start.y,line_end.x,line_end.y,white); } } for(i=0;i<sim->num_spacecraft;i++) { object_render((object_t*)(&sim->spacecraft[i]),sim->camera); } render_spacecraft_info(sim->current_spacecraft,50,50); //render_celestial_body_info(sim->current_spacecraft->orbit.primary,500,50); //render_celestial_body_info(&sim->celestial_bodies[5],950,50); }
static void ghost_display_effect (sync_info *sync, void *params, int iparam) { glass_data *gdata = (glass_data *) params; /*GXTexObj spiderweb_tex_obj;*/ Mtx mvtmp, rot, mvtmp2; Mtx sep_scale; f32 indmtx[2][3]; /* Channels for indirect lookup go: R -> - G -> U B -> T A -> S We have G/B channels, so map those to S/T. */ indmtx[0][0] = 0.0; indmtx[0][1] = 0.5; indmtx[0][2] = 0.0; indmtx[1][0] = 0.0; indmtx[1][1] = 0.0; indmtx[1][2] = 0.5; GX_SetIndTexMatrix (GX_ITM_0, indmtx, 2); GX_SetZMode (GX_FALSE, GX_LEQUAL, GX_FALSE); GX_SetBlendMode (GX_BM_NONE, GX_BL_ONE, GX_BL_ONE, GX_LO_SET); GX_SetColorUpdate (GX_TRUE); GX_SetAlphaUpdate (GX_FALSE); GX_SetCullMode (GX_CULL_NONE); screenspace_rect (gdata->refraction_postpass_shader, GX_VTXFMT1, 1); /*GX_LoadTexObj (&spiderweb_tex_obj, GX_TEXMAP1); draw_square (1, 128 + 127 * sin (thr * M_PI / 360.0), 128 + 127 * sin (thr * M_PI / 200.0));*/ guMtxIdentity (mvtmp); guMtxRotAxisDeg (rot, &((guVector) { 0, 1, 0 }), gdata->thr); guMtxConcat (rot, mvtmp, mvtmp); guMtxRotAxisDeg (rot, &((guVector) { 1, 0, 0 }), gdata->thr * 0.7); guMtxConcat (rot, mvtmp, mvtmp); /*guMtxScale (sep_scale, 6.0, 6.0, 6.0);*/ set_sep_scale (sep_scale, sync); guMtxTransApply (mvtmp, mvtmp2, gdata->xoffset, 0, 0); object_set_matrices (&scene, &gdata->obj_loc, scene.camera, mvtmp2, sep_scale, perspmat, GX_PERSPECTIVE); shader_load (gdata->glass_postpass_shader); GX_SetBlendMode (GX_BM_BLEND, GX_BL_ONE, GX_BL_SRCALPHA, GX_LO_SET); object_set_arrays (&blobby_thing_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0, 0); object_render (&blobby_thing_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0); /* guMtxTransApply (mvtmp, mvtmp2, 13, 0, 0); object_set_matrices (&scene, &gdata->obj_loc, scene.camera, mvtmp2, sep_scale, NULL, 0); object_render (&spooky_ghost_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0); guMtxTransApply (mvtmp, mvtmp2, -13, 0, 0); object_set_matrices (&scene, &gdata->obj_loc, scene.camera, mvtmp2, sep_scale, NULL, 0); object_render (&spooky_ghost_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0); */ gdata->thr += 1; }
static display_target ghost_prepare_frame (sync_info *sync, void *params, int iparam) { glass_data *gdata = (glass_data *) params; /*GXTexObj spiderweb_tex_obj;*/ Mtx mvtmp, rot, mvtmp2; Mtx sep_scale; /*TPL_GetTexture (&spiderwebTPL, spiderweb, &spiderweb_tex_obj);*/ GX_InvalidateTexAll (); rendertarget_texture (RTT_WIDTH, RTT_HEIGHT, COPYFMT, GX_FALSE, GX_PF_RGB8_Z24, GX_ZC_LINEAR); GX_SetZMode (GX_FALSE, GX_LEQUAL, GX_FALSE); GX_SetBlendMode (GX_BM_NONE, GX_BL_ONE, GX_BL_ONE, GX_LO_SET); GX_SetColorUpdate (GX_TRUE); GX_SetAlphaUpdate (GX_FALSE); screenspace_rect (gdata->plain_texture_shader, GX_VTXFMT1, 0); GX_SetCopyClear ((GXColor) { 128, 128, 128, 0 }, 0x00ffffff); GX_CopyTex (gdata->grabbed_texture, GX_TRUE); GX_PixModeSync (); rendertarget_texture (RTT_WIDTH, RTT_HEIGHT, COPYFMT, GX_FALSE, GX_PF_RGB8_Z24, GX_ZC_LINEAR); GX_SetCopyClear ((GXColor) { 128, 128, 128, 0 }, 0x00ffffff); GX_SetColorUpdate (GX_TRUE); GX_SetAlphaUpdate (GX_FALSE); /* We need a grey background! This isn't very efficient though. */ GX_CopyTex (gdata->grabbed_texture, GX_TRUE); GX_SetCopyClear ((GXColor) { 0, 0, 0, 0 }, 0x00ffffff); GX_SetZMode (GX_FALSE, GX_LEQUAL, GX_FALSE); GX_SetBlendMode (GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); GX_SetColorUpdate (GX_TRUE); GX_SetAlphaUpdate (GX_FALSE); GX_SetCullMode (GX_CULL_NONE); guMtxIdentity (mvtmp); guMtxRotAxisDeg (rot, &((guVector) { 0, 1, 0 }), gdata->thr); guMtxConcat (rot, mvtmp, mvtmp); guMtxRotAxisDeg (rot, &((guVector) { 1, 0, 0 }), gdata->thr * 0.7); guMtxConcat (rot, mvtmp, mvtmp); if (sync->time_offset < 1000) gdata->xoffset = -(float) (1000 - sync->time_offset) / 10.0; else if (sync->time_offset > 16000) gdata->xoffset = (float) (sync->time_offset - 16000) / 10.0; else gdata->xoffset = 0.0; /*guMtxScale (sep_scale, 6.0, 6.0, 6.0);*/ set_sep_scale (sep_scale, sync); guMtxTransApply (mvtmp, mvtmp2, gdata->xoffset, 0, 0); object_set_matrices (&scene, &gdata->obj_loc, scene.camera, mvtmp2, sep_scale, perspmat, GX_PERSPECTIVE); light_update (scene.camera, &light0); shader_load (gdata->refraction_shader); object_set_arrays (&blobby_thing_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0, 0); object_render (&blobby_thing_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0); /* guMtxTransApply (mvtmp, mvtmp2, 13, 0, 0); object_set_matrices (&scene, &gdata->obj_loc, scene.camera, mvtmp2, sep_scale, NULL, 0); object_render (&spooky_ghost_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0); guMtxTransApply (mvtmp, mvtmp2, -13, 0, 0); object_set_matrices (&scene, &gdata->obj_loc, scene.camera, mvtmp2, sep_scale, NULL, 0); object_render (&spooky_ghost_obj, OBJECT_POS | OBJECT_NORM, GX_VTXFMT0); */ GX_CopyTex (gdata->grabbed_texture, GX_TRUE); GX_PixModeSync (); return MAIN_BUFFER; }