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

📄 vid_menu.pas

📁 delphi编的不错的贪吃蛇
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    '[512 384  ]',
    '[640 480  ]',
    '[800 600  ]',
    '[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 + -