Exemple #1
0
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);
    }
}
Exemple #2
0
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);
}
Exemple #3
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);
    }
}
Exemple #4
0
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);
    }
}
Exemple #5
0
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);
}
Exemple #6
0
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;
}
Exemple #7
0
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;
}