diff --git a/libs/client/cl_screen.c b/libs/client/cl_screen.c index 4a0fc0d44..c37c9fc9a 100644 --- a/libs/client/cl_screen.c +++ b/libs/client/cl_screen.c @@ -104,6 +104,37 @@ static viewstate_t *_vs;//FIXME ick canvas_system_t cl_canvas_sys; +static ecs_system_t cl_view_system; + +static view_t +clscr_view (int x, int y, int w, int h, grav_t gravity) +{ + auto view = View_New (cl_view_system, cl_screen_view); + View_SetPos (view, x, y); + View_SetLen (view, w, h); + View_SetGravity (view, gravity); + View_SetVisible (view, 0); + return view; +} + +static void +clscr_set_pic (view_t view, qpic_t *pic) +{ + Ent_SetComponent (view.id, canvas_pic, view.reg, &pic); +} + +static void +clscr_set_cachepic (view_t view, const char *name) +{ + Ent_SetComponent (view.id, canvas_cachepic, view.reg, &name); +} + +static void +clscr_set_canvas_func (view_t view, canvas_func_f func) +{ + Ent_SetComponent (view.id, canvas_func, view.reg, &func); +} + static void SCR_CShift (void) { @@ -188,11 +219,46 @@ cl_vidsize_listener (void *data, const viddef_t *vdef) cl_set_size (); } +static void +cl_create_views (void) +{ + qpic_t *pic; + const char *name; + + pic = r_funcs->Draw_PicFromWad ("ram"); + ram_view = clscr_view (32, 0, pic->width, pic->height, grav_northwest); + clscr_set_pic (ram_view, pic); + + pic = r_funcs->Draw_PicFromWad ("turtle"); + turtle_view = clscr_view (32, 0, pic->width, pic->height, grav_northwest); + clscr_set_pic (turtle_view, pic); + + pic = r_funcs->Draw_PicFromWad ("net"); + net_view = clscr_view (64, 0, pic->width, pic->height, grav_northwest); + clscr_set_pic (net_view, pic); + + timegraph_view = clscr_view (0, 0, r_data->vid->width, 100, grav_southwest); + clscr_set_canvas_func (timegraph_view, R_TimeGraph); + View_SetVisible (timegraph_view, r_timegraph); + + zgraph_view = clscr_view (0, 0, r_data->vid->width, 100, grav_southwest); + clscr_set_canvas_func (zgraph_view, R_ZGraph); + View_SetVisible (zgraph_view, r_zgraph); + + name = "gfx/loading.lmp"; + pic = r_funcs->Draw_CachePic (name, 1); + loading_view = clscr_view (0, -24, pic->width, pic->height, grav_center); + clscr_set_cachepic (loading_view, name); + + name = "gfx/pause.lmp"; + pic = r_funcs->Draw_CachePic (name, 1); + pause_view = clscr_view (0, -24, pic->width, pic->height, grav_center); + clscr_set_cachepic (pause_view, name); +} + void CL_Init_Screen (void) { - qpic_t *pic; - __auto_type reg = ECS_NewRegistry (); Canvas_InitSys (&cl_canvas_sys, reg); if (con_module) { @@ -207,7 +273,7 @@ CL_Init_Screen (void) cl_xlen = viddef.width; cl_ylen = viddef.height; - ecs_system_t vsys = { + cl_view_system = (ecs_system_t) { .reg = reg, .base = cl_canvas_sys.view_base, }; @@ -222,68 +288,11 @@ CL_Init_Screen (void) View_SetGravity (cl_screen_view, grav_northwest); View_SetVisible (cl_screen_view, 1); - pic = r_funcs->Draw_PicFromWad ("ram"); - ram_view = View_New (vsys, cl_screen_view); - View_SetPos (ram_view, 32, 0); - View_SetLen (ram_view, pic->width, pic->height); - View_SetGravity (ram_view, grav_northwest); - Ent_SetComponent (ram_view.id, canvas_pic, ram_view.reg, &pic); - View_SetVisible (ram_view, 0); - - pic = r_funcs->Draw_PicFromWad ("turtle"); - turtle_view = View_New (vsys, cl_screen_view); - View_SetPos (turtle_view, 32, 0); - View_SetLen (turtle_view, pic->width, pic->height); - View_SetGravity (turtle_view, grav_northwest); - Ent_SetComponent (turtle_view.id, canvas_pic, turtle_view.reg, &pic); - View_SetVisible (turtle_view, 0); - Cvar_Register (&scr_showpause_cvar, 0, 0); Cvar_Register (&scr_showram_cvar, 0, 0); Cvar_Register (&scr_showturtle_cvar, 0, 0); - pic = r_funcs->Draw_PicFromWad ("net"); - net_view = View_New (vsys, cl_screen_view); - View_SetPos (net_view, 64, 0); - View_SetLen (net_view, pic->width, pic->height); - View_SetGravity (net_view, grav_northwest); - Ent_SetComponent (net_view.id, canvas_pic, net_view.reg, &pic); - View_SetVisible (net_view, 0); - - timegraph_view = View_New (vsys, cl_screen_view); - View_SetPos (timegraph_view, 0, 0); - View_SetLen (timegraph_view, r_data->vid->width, 100); - View_SetGravity (timegraph_view, grav_southwest); - void *rtg = R_TimeGraph; - Ent_SetComponent (timegraph_view.id, canvas_func, timegraph_view.reg, &rtg); - View_SetVisible (timegraph_view, r_timegraph); - - zgraph_view = View_New (vsys, cl_screen_view); - View_SetPos (zgraph_view, 0, 0); - View_SetLen (zgraph_view, r_data->vid->width, 100); - View_SetGravity (zgraph_view, grav_southwest); - void *rzg = R_ZGraph; - Ent_SetComponent (zgraph_view.id, canvas_func, zgraph_view.reg, &rzg); - View_SetVisible (zgraph_view, r_zgraph); - - const char *name = "gfx/loading.lmp"; - pic = r_funcs->Draw_CachePic (name, 1); - loading_view = View_New (vsys, cl_screen_view); - View_SetPos (loading_view, 0, -24); - View_SetLen (loading_view, pic->width, pic->height); - View_SetGravity (loading_view, grav_center); - Ent_SetComponent (loading_view.id, canvas_cachepic, - loading_view.reg, &name); - View_SetVisible (loading_view, 0); - - name = "gfx/pause.lmp"; - pic = r_funcs->Draw_CachePic (name, 1); - pause_view = View_New (vsys, cl_screen_view); - View_SetPos (pause_view, 0, -24); - View_SetLen (pause_view, pic->width, pic->height); - View_SetGravity (pause_view, grav_center); - Ent_SetComponent (pause_view.id, canvas_cachepic, pause_view.reg, &name); - View_SetVisible (pause_view, 0); + cl_create_views (); cvar_t *con_scale = Cvar_FindVar ("con_scale"); Cvar_AddListener (con_scale, cl_scale_listener, 0);