⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vid_menu.pas

📁 雷神之锤2(Quake2)Delphi源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    '[960 720  ]',
    '[1024 768 ]',
    '[1152 864 ]',
    '[1280 960 ]',
    '[1600 1200]',
    '[2048 1536]',
    nil);

  refs: array[0..4] of PChar = (
    '[software      ]',
    '[default OpenGL]',
    '[3Dfx OpenGL   ]',
    '[PowerVR OpenGL]',
    nil);

  yesno_names: array[0..2] of PChar = (
    'no',
    'yes',
    nil);
begin
  if ( gl_driver = nil) then
    gl_driver:= Cvar_Get( 'gl_driver', 'opengl32', 0 );
  if ( gl_picmip = nil ) then
    gl_picmip:= Cvar_Get( 'gl_picmip', '0', 0 );
  if ( gl_mode = nil ) then
    gl_mode:= Cvar_Get( 'gl_mode', '3', 0 );
  if ( sw_mode = nil ) then
    sw_mode:= Cvar_Get( 'sw_mode', '0', 0 );
  if ( gl_ext_palettedtexture = nil ) then
    gl_ext_palettedtexture:= Cvar_Get( 'gl_ext_palettedtexture', '1', CVAR_ARCHIVE );
  if ( gl_finish = nil ) then
    gl_finish:= Cvar_Get( 'gl_finish', '0', CVAR_ARCHIVE );

  if ( sw_stipplealpha = nil ) then
    sw_stipplealpha:= Cvar_Get( 'sw_stipplealpha', '0', CVAR_ARCHIVE );

  s_mode_list[SOFTWARE_MENU].curvalue := Trunc(sw_mode^.value);
  s_mode_list[OPENGL_MENU].curvalue   := Trunc(gl_mode^.value);

  if ( scr_viewsize = nil ) then
    scr_viewsize:= Cvar_Get ('viewsize', '100', CVAR_ARCHIVE);

  s_screensize_slider[SOFTWARE_MENU].curvalue := scr_viewsize^.value/10;
  s_screensize_slider[OPENGL_MENU].curvalue   := scr_viewsize^.value/10;

  if ( strcmp( vid_ref^.string_, 'soft' ) = 0 ) then
  begin
    s_current_menu_index:= SOFTWARE_MENU;
    s_ref_list[0].curvalue:= REF_SOFT;
    s_ref_list[1].curvalue:= REF_SOFT;
  end
  else if ( strcmp( vid_ref^.string_, 'gl' ) = 0 ) then
  begin
    s_current_menu_index:= OPENGL_MENU;
    if ( strcmp( gl_driver^.string_, '3dfxgl' ) = 0 ) then
      s_ref_list[s_current_menu_index].curvalue:= REF_3DFX
    else if ( strcmp( gl_driver^.string_, 'pvrgl' ) = 0 ) then
      s_ref_list[s_current_menu_index].curvalue:= REF_POWERVR
    else if ( strcmp( gl_driver^.string_, 'opengl32' ) = 0 ) then
      s_ref_list[s_current_menu_index].curvalue:= REF_OPENGL
    else
//    s_ref_list[s_current_menu_index].curvalue:= REF_VERITE;
      s_ref_list[s_current_menu_index].curvalue:= REF_OPENGL;
  end;

  s_software_menu.x      := viddef.width div 2;
  s_software_menu.nitems := 0;
  s_opengl_menu.x        := viddef.width div 2;
  s_opengl_menu.nitems   := 0;

  for i:= 0 to 1 do
  begin
    s_ref_list[i].generic.type_    := MTYPE_SPINCONTROL;
    s_ref_list[i].generic.name    := 'driver';
    s_ref_list[i].generic.x       := 0;
    s_ref_list[i].generic.y       := 0;
    s_ref_list[i].generic.callback:= DriverCallback;
    s_ref_list[i].itemnames       := @refs;

    s_mode_list[i].generic.type_ := MTYPE_SPINCONTROL;
    s_mode_list[i].generic.name := 'video mode';
    s_mode_list[i].generic.x    := 0;
    s_mode_list[i].generic.y    := 10;
    s_mode_list[i].itemnames    := @resolutions;

    s_screensize_slider[i].generic.type_     := MTYPE_SLIDER;
    s_screensize_slider[i].generic.x        := 0;
    s_screensize_slider[i].generic.y        := 20;
    s_screensize_slider[i].generic.name     := 'screen size';
    s_screensize_slider[i].minvalue         := 3;
    s_screensize_slider[i].maxvalue         := 12;
    s_screensize_slider[i].generic.callback := @ScreenSizeCallback;

    s_brightness_slider[i].generic.type_     := MTYPE_SLIDER;
    s_brightness_slider[i].generic.x        := 0;
    s_brightness_slider[i].generic.y        := 30;
    s_brightness_slider[i].generic.name     := 'brightness';
    s_brightness_slider[i].generic.callback := @BrightnessCallback;
    s_brightness_slider[i].minvalue         := 5;
    s_brightness_slider[i].maxvalue         := 13;
    s_brightness_slider[i].curvalue         := ( 1.3 - vid_gamma^.value + 0.5 ) * 10;

    s_fs_box[i].generic.type_:= MTYPE_SPINCONTROL;
    s_fs_box[i].generic.x   := 0;
    s_fs_box[i].generic.y   := 40;
    s_fs_box[i].generic.name:= 'fullscreen';
    s_fs_box[i].itemnames   := @yesno_names;
    s_fs_box[i].curvalue    := Round(vid_fullscreen^.value);

    s_defaults_action[i].generic.type_     := MTYPE_ACTION;
    s_defaults_action[i].generic.name     := 'reset to defaults';
    s_defaults_action[i].generic.x        := 0;
    s_defaults_action[i].generic.y        := 90;
    s_defaults_action[i].generic.callback := @ResetDefaults;

    s_cancel_action[i].generic.type_     := MTYPE_ACTION;
    s_cancel_action[i].generic.name     := 'cancel';
    s_cancel_action[i].generic.x        := 0;
    s_cancel_action[i].generic.y        := 100;
    s_cancel_action[i].generic.callback := @OnCancelChanges;
  end;

  s_stipple_box.generic.type_:= MTYPE_SPINCONTROL;
  s_stipple_box.generic.x   := 0;
  s_stipple_box.generic.y   := 60;
  s_stipple_box.generic.name:= 'stipple alpha';
  s_stipple_box.curvalue    := Trunc(sw_stipplealpha^.value);
  s_stipple_box.itemnames   := @yesno_names;

  s_tq_slider.generic.type_ := MTYPE_SLIDER;
  s_tq_slider.generic.x	   := 0;
  s_tq_slider.generic.y	   := 60;
  s_tq_slider.generic.name := 'texture quality';
  s_tq_slider.minvalue     := 0;
  s_tq_slider.maxvalue     := 3;
  s_tq_slider.curvalue     := 3-gl_picmip^.value;

  s_paletted_texture_box.generic.type_:= MTYPE_SPINCONTROL;
  s_paletted_texture_box.generic.x   := 0;
  s_paletted_texture_box.generic.y   := 70;
  s_paletted_texture_box.generic.name:= '8-bit textures';
  s_paletted_texture_box.itemnames   := @yesno_names;
  s_paletted_texture_box.curvalue    := Trunc(gl_ext_palettedtexture^.value);

  s_finish_box.generic.type_:= MTYPE_SPINCONTROL;
  s_finish_box.generic.x   := 0;
  s_finish_box.generic.y   := 80;
  s_finish_box.generic.name:= 'sync every frame';
  s_finish_box.curvalue    := Trunc(gl_finish^.value);
  s_finish_box.itemnames   := @yesno_names;

  Menu_AddItem( @s_software_menu, @s_ref_list[SOFTWARE_MENU] );
  Menu_AddItem( @s_software_menu, @s_mode_list[SOFTWARE_MENU] );
  Menu_AddItem( @s_software_menu, @s_screensize_slider[SOFTWARE_MENU] );
  Menu_AddItem( @s_software_menu, @s_brightness_slider[SOFTWARE_MENU] );
  Menu_AddItem( @s_software_menu, @s_fs_box[SOFTWARE_MENU] );
  Menu_AddItem( @s_software_menu, @s_stipple_box );

  Menu_AddItem( @s_opengl_menu, @s_ref_list[OPENGL_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_mode_list[OPENGL_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_screensize_slider[OPENGL_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_brightness_slider[OPENGL_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_fs_box[OPENGL_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_tq_slider );
  Menu_AddItem( @s_opengl_menu, @s_paletted_texture_box );
  Menu_AddItem( @s_opengl_menu, @s_finish_box );

  Menu_AddItem( @s_software_menu, @s_defaults_action[SOFTWARE_MENU] );
  Menu_AddItem( @s_software_menu, @s_cancel_action[SOFTWARE_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_defaults_action[OPENGL_MENU] );
  Menu_AddItem( @s_opengl_menu, @s_cancel_action[OPENGL_MENU] );

  Menu_Center( @s_software_menu );
  Menu_Center( @s_opengl_menu );
  s_opengl_menu.x   := s_opengl_menu.x - 8;
  s_software_menu.x := s_software_menu.x - 8;
end;

(*
================
VID_MenuDraw
================
*)
{void}
procedure VID_MenuDraw; // (void)
var
  w, h: integer;
begin
  if ( s_current_menu_index = 0 ) then
    s_current_menu := @menuframework_s(s_software_menu)
  else
    s_current_menu := @menuframework_s(s_opengl_menu);

  (*
  ** draw the banner
  *)
  re.DrawGetPicSize( @w, @h, 'm_banner_video' );
  re.DrawPic( viddef.width div 2 - w div 2, viddef.height div 2 - 110, 'm_banner_video' );

  (*
  ** move cursor to a reasonable starting position
  *)
  Menu_AdjustCursor( s_current_menu, 1 );

  (*
  ** draw the menu
  *)
  Menu_Draw( s_current_menu );
end;

(*
================
VID_MenuKey
================
*)
function VID_MenuKey( key: integer ): PChar;
const
  sound: PChar = 'misc/menu1.wav';
var
   m: menuframework_p;
begin
  m := s_current_menu;

  Result := sound;

  case ( key ) of
    K_ESCAPE:
    begin
      ApplyChanges( m );
      Result:=nil;
    end;
    K_KP_UPARROW,
    K_UPARROW:
    begin
      dec(m^.cursor);
      Menu_AdjustCursor( m, -1 );
    end;
    K_KP_DOWNARROW,
    K_DOWNARROW:
    begin
      inc(m^.cursor);
      Menu_AdjustCursor( m, 1 );
    end;
    K_KP_LEFTARROW,
    K_LEFTARROW:
      Menu_SlideItem( m, -1 );
    K_KP_RIGHTARROW,
    K_RIGHTARROW:
      Menu_SlideItem( m, 1 );
    K_KP_ENTER,
    K_ENTER:
      if ( not Menu_SelectItem( m ) ) then
        ApplyChanges( m );
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -