DEADSOFTWARE

Initial Player Indicator Implementation.
[d2df-sdl.git] / src / game / g_menu.pas
index 1af1a57336430d661b07faba3e378fb16d34bc2c..2c3f85153e2ec850f69fade3f52fdda927f0272d 100644 (file)
@@ -1,4 +1,4 @@
-(* Copyright (C)  DooM 2D:Forever Developers
+(* Copyright (C)  Doom 2D: Forever Developers
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,13 +42,14 @@ var
 implementation
 
 uses
+  {$INCLUDE ../nogl/noGLuses.inc}
   g_gui, g_textures, e_graphics, g_main, g_window, g_game, g_map,
   g_basic, g_console, g_sound, g_gfx, g_player, g_options, g_weapons,
-  e_log, SysUtils, CONFIG, g_playermodel, DateUtils,
-  MAPDEF, wadreader, Math, g_saveload,
-  e_texture, GL, GLExt, g_language,
-  g_net, g_netmsg, g_netmaster, g_items, e_input,
-  utils;
+  e_log, SysUtils, CONFIG, g_playermodel, DateUtils, sdl2,
+  MAPDEF, Math, g_saveload,
+  e_texture, g_language,
+  g_net, g_netmsg, g_netmaster, g_items, e_input, g_touch,
+  utils, wadreader;
 
 
 type TYNCallback = procedure (yes:Boolean);
@@ -106,6 +107,7 @@ procedure ProcApplyOptions();
 var
   menu: TGUIMenu;
   i: Integer;
+  ovs: Boolean;
 begin
   menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu'));
 
@@ -113,7 +115,11 @@ begin
     gBPP := 16
   else
     gBPP := 32;
+
+  ovs := gVSync;
   gVSync := TGUISwitch(menu.GetControl('swVSync')).ItemIndex = 0;
+  if (ovs <> gVSync) then g_SetVSync(gVSync);
+
   gTextureFilter := TGUISwitch(menu.GetControl('swTextureFilter')).ItemIndex = 0;
   glLegacyNPOT := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0);
 
@@ -128,6 +134,7 @@ begin
   gMuteWhenInactive := TGUISwitch(menu.GetControl('swInactiveSounds')).ItemIndex = 1;
   gAnnouncer := TGUISwitch(menu.GetControl('swAnnouncer')).ItemIndex;
   gSoundEffectsDF := TGUISwitch(menu.GetControl('swSoundEffects')).ItemIndex = 1;
+  gUseChatSounds := TGUISwitch(menu.GetControl('swChatSpeech')).ItemIndex = 0;
 
   menu := TGUIMenu(g_GUI_GetWindow('OptionsGameMenu').GetControl('mOptionsGameMenu'));
 
@@ -153,6 +160,8 @@ begin
   gShowMessages := TGUISwitch(menu.GetControl('swMessages')).ItemIndex = 0;
   gRevertPlayers := TGUISwitch(menu.GetControl('swRevertPlayers')).ItemIndex = 0;
   gChatBubble := TGUISwitch(menu.GetControl('swChatBubble')).ItemIndex;
+  gPlayerIndicator := TGUISwitch(menu.GetControl('swPlayerIndicator')).ItemIndex = 0;
+  g_dbg_scale := TGUIScroll(menu.GetControl('scScaleFactor')).Value + 1;
 
   menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsMenu').GetControl('mOptionsControlsMenu'));
 
@@ -246,6 +255,15 @@ begin
     end;
   end;
 
+  if g_touch_enabled then
+  begin
+    menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsTouchMenu').GetControl('mOptionsControlsTouchMenu'));
+    g_touch_alt := TGUISwitch(menu.GetControl('swTouchAlt')).ItemIndex = 1;
+    g_touch_size := TGUIScroll(menu.GetControl('scTouchSize')).Value / 10 + 0.5;
+    g_touch_fire := TGUISwitch(menu.GetControl('swTouchFire')).ItemIndex = 1;
+    g_touch_offset := TGUIScroll(menu.GetControl('scTouchOffset')).Value * 5;
+  end;
+
   menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu'));
 
   gPlayer1Settings.Name := b_Text_Unformat(TGUIEdit(menu.GetControl('edP1Name')).Text);
@@ -269,8 +287,8 @@ begin
     gPlayer2Settings.Color := Model.Color;
   end;
 
-  if gPlayer1Settings.Name = '' then gPlayer1Settings.Name := 'Player1';
-  if gPlayer2Settings.Name = '' then gPlayer2Settings.Name := 'Player2';
+  if gPlayer1Settings.Name = '' then gPlayer1Settings.Name := GenPlayerName(1);
+  if gPlayer2Settings.Name = '' then gPlayer2Settings.Name := GenPlayerName(2);
 
   if g_Game_IsServer then
   begin
@@ -346,6 +364,12 @@ begin
     else
       ItemIndex := 0;
 
+  with TGUISwitch(menu.GetControl('swChatSpeech')) do
+    if gUseChatSounds then
+      ItemIndex := 0
+    else
+      ItemIndex := 1;
+
   menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP1Menu').GetControl('mOptionsControlsP1Menu'));
   with menu, gGameControls.P1Control do
   begin
@@ -428,6 +452,17 @@ begin
     end;
   end;
 
+  if g_touch_enabled then
+  begin
+    menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsTouchMenu').GetControl('mOptionsControlsTouchMenu'));
+    with TGUISwitch(menu.GetControl('swTouchAlt')) do
+      if g_touch_alt then ItemIndex := 1 else ItemIndex := 0;
+    TGUIScroll(menu.GetControl('scTouchSize')).Value := Round((g_touch_size - 0.5) * 10);
+    with TGUISwitch(menu.GetControl('swTouchFire')) do
+      if g_touch_fire then ItemIndex := 1 else ItemIndex := 0;
+    TGUIScroll(menu.GetControl('scTouchOffset')).Value := Round(g_touch_offset / 5);
+  end;
+
   menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsMenu').GetControl('mOptionsControlsMenu'));
   with menu, gGameControls.GameControls do
   begin
@@ -477,6 +512,11 @@ begin
 
   with TGUISwitch(menu.GetControl('swChatBubble')) do
     ItemIndex := gChatBubble;
+    
+  with TGUISwitch(menu.GetControl('swPlayerIndicator')) do
+    if gPlayerIndicator then ItemIndex := 0 else ItemIndex := 1;
+
+  TGUIScroll(menu.GetControl('scScaleFactor')).Value := Round(g_dbg_scale - 1);
 
   menu := TGUIMenu(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mOptionsPlayersP1Menu'));
 
@@ -728,6 +768,7 @@ begin
   end
   else
     slWaitStr := _lc[I_NET_SLIST_ERROR];
+  g_Serverlist_GenerateTable(slCurrent, slTable);
 end;
 
 procedure ProcStartCampaign();
@@ -790,7 +831,7 @@ end;
 procedure ProcSelectWAD(Sender: TGUIControl);
 var
   wad: String;
-  list: SArray;
+  list: SSArray;
 begin
   with TGUIMenu(g_GUI_GetWindow('SelectMapMenu').GetControl('mSelectMapMenu')) do
   begin
@@ -974,7 +1015,7 @@ end;
 
 procedure MenuLoadData();
 begin
-  e_WriteLog('Loading menu data...', MSG_NOTIFY);
+  e_WriteLog('Loading menu data...', TMsgType.Notify);
 
   g_Texture_CreateWADEx('MAINMENU_MARKER1', GameWAD+':TEXTURES\MARKER1');
   g_Texture_CreateWADEx('MAINMENU_MARKER2', GameWAD+':TEXTURES\MARKER2');
@@ -1106,7 +1147,7 @@ begin
   begin
     TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Text := g_GetSaveName(a, valid);
     TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := not valid;
-    TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a)).Enabled := valid;
+    //TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a)).Enabled := valid;
   end;
 end;
 
@@ -1114,11 +1155,13 @@ procedure ProcSaveMenu();
 var
   a: Integer;
   valid: Boolean;
+  name: AnsiString;
 begin
   for a := 1 to 8 do
   begin
-    TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Text := g_GetSaveName(a, valid);
-    TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := not valid;
+    name := g_GetSaveName(a, valid);
+    TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Text := name;
+    TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := (name <> '') and (not valid);
   end;
 end;
 
@@ -1143,9 +1186,15 @@ begin
   if g_Game_IsNet then Exit;
   a := StrToInt(Copy(Sender.Name, Length(Sender.Name), 1));
   if g_LoadGame(a) then
+  begin
     g_Game_PauseAllSounds(False)
+  end
   else // Íå çàãðóçèëîñü - âîçâðàò â ìåíþ
+  begin
+    g_Console_Add(_lc[I_MSG_BAD_SAVE_VERSION], true);
     g_GUI_GetWindow('LoadMenu').SetActive(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu'));
+    //g_ActiveWindow := nil;
+  end;
 end;
 
 procedure ProcSingle1Player();
@@ -1234,6 +1283,24 @@ begin
   );
 end;
 
+procedure ProcChangeGameSettings(Sender: TGUIControl);
+var
+  menu: TGUIMenu;
+begin
+  menu := TGUIMenu(g_GUI_GetWindow('OptionsGameMenu').GetControl('mOptionsGameMenu'));
+  g_dbg_scale := TGUIScroll(menu.GetControl('scScaleFactor')).Value + 1;
+end;
+
+procedure ProcChangeTouchSettings(Sender: TGUIControl);
+var
+  menu: TGUIMenu;
+begin
+  menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsTouchMenu').GetControl('mOptionsControlsTouchMenu'));
+  g_touch_alt := TGUISwitch(menu.GetControl('swTouchAlt')).ItemIndex = 1;
+  g_touch_size := TGUIScroll(menu.GetControl('scTouchSize')).Value / 10 + 0.5;
+  g_touch_offset := TGUIScroll(menu.GetControl('scTouchOffset')).Value * 5;
+end;
+
 procedure ProcOptionsPlayersMIMenu();
 var
   s, a: string;
@@ -1298,7 +1365,9 @@ var
 begin
   if g_ActiveWindow.Name = 'OptionsPlayersP1Menu' then s := 'P1' else s := 'P2';
   with TGUIModelView(g_ActiveWindow.GetControl('mv'+s+'Model')).Model do
-    if Direction = D_LEFT then Direction := D_RIGHT else Direction := D_LEFT;
+  begin
+    if Direction = TDirection.D_LEFT then Direction := TDirection.D_RIGHT else Direction := TDirection.D_LEFT;
+  end;
 end;
 
 procedure ProcDefaultMenuKeyDown (yes: Boolean);
@@ -1688,7 +1757,7 @@ end;
 procedure ProcVideoOptionsRes();
 var
   menu: TGUIMenu;
-  list: SArray;
+  list: SSArray;
   SR: DWORD;
 begin
   menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu'));
@@ -1870,7 +1939,7 @@ var
   Menu: TGUIWindow;
   //SR: TSearchRec;
   a, cx, _y, i: Integer;
-  //list: SArray;
+  //list: SSArray;
 begin
   Menu := TGUIWindow.Create('MainMenu');
   with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do
@@ -2534,6 +2603,13 @@ begin
       AddItem(_lc[I_MENU_COMPAT_DOOM2]);
       AddItem(_lc[I_MENU_COMPAT_DF]);
     end;
+    // Ïåðåêëþ÷àòåëü çâóêîâ ÷àòà
+    with AddSwitch (_lc[I_MENU_SOUND_CHAT]) do
+    begin;
+      Name := 'swChatSpeech';
+      AddItem(_lc[I_MENU_YES]);
+      AddItem(_lc[I_MENU_NO]);
+    end;
     with AddSwitch(_lc[I_MENU_SOUND_INACTIVE_SOUNDS]) do
     begin
       Name := 'swInactiveSounds';
@@ -2639,6 +2715,18 @@ begin
       AddItem(_lc[I_MENU_GAME_CHAT_TYPE_COLOR]);
       AddItem(_lc[I_MENU_GAME_CHAT_TYPE_TEXTURE]);
     end;
+    with AddSwitch(_lc[I_MENU_GAME_PLAYER_INDICATOR]) do
+    begin
+      Name := 'swPlayerIndicator';
+      AddItem(_lc[I_MENU_YES]);
+      AddItem(_lc[I_MENU_NO]);
+    end;
+    with AddScroll(_lc[I_MENU_GAME_SCALE_FACTOR]) do
+    begin
+      Name := 'scScaleFactor';
+      Max := 10;
+      OnChange := ProcChangeGameSettings;
+    end;
     ReAlign();
   end;
   Menu.DefControl := 'mOptionsGameMenu';
@@ -2660,9 +2748,16 @@ begin
     AddButton(nil, _lc[I_MENU_PLAYER_2_KBD], 'OptionsControlsP2Menu');
     {AddButton(nil, _lc[I_MENU_PLAYER_2_ALT], 'OptionsControlsP2MenuAlt');}
     AddButton(nil, _lc[I_MENU_PLAYER_2_WEAPONS], 'OptionsControlsP2MenuWeapons');
-    AddSpace();
     if e_JoysticksAvailable <> 0 then
+    begin
+      AddSpace();
       AddButton(nil, _lc[I_MENU_CONTROL_JOYSTICKS], 'OptionsControlsJoystickMenu');
+    end;
+    if g_touch_enabled then
+    begin
+      AddSpace();
+      AddButton(nil, _lc[I_MENU_CONTROL_TOUCH], 'OptionsControlsTouchMenu');
+    end;
   end;
   Menu.DefControl := 'mOptionsControlsMenu';
   g_GUI_AddWindow(Menu);
@@ -2739,6 +2834,39 @@ begin
   Menu.DefControl := 'mOptionsControlsJoystickMenu';
   g_GUI_AddWindow(Menu);
 
+  Menu := TGUIWindow.Create('OptionsControlsTouchMenu');
+  with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_CONTROL_TOUCH]))) do
+  begin
+    Name := 'mOptionsControlsTouchMenu';
+    with AddSwitch(_lc[I_MENU_CONTROL_TOUCH_ALT]) do
+    begin
+      Name := 'swTouchAlt';
+      AddItem(_lc[I_MENU_NO]);
+      AddItem(_lc[I_MENU_YES]);
+      OnChange := ProcChangeTouchSettings;
+    end;
+    with AddScroll(_lc[I_MENU_CONTROL_TOUCH_SIZE]) do
+    begin
+      Name := 'scTouchSize';
+      Max := 20;
+      OnChange := ProcChangeTouchSettings;
+    end;
+    with AddSwitch(_lc[I_MENU_CONTROL_TOUCH_FIRE]) do
+    begin
+      Name := 'swTouchFire';
+      AddItem(_lc[I_MENU_NO]);
+      AddItem(_lc[I_MENU_YES]);
+    end;
+    with AddScroll(_lc[I_MENU_CONTROL_TOUCH_OFFSET]) do
+    begin
+      Name := 'scTouchOffset';
+      Max := 20;
+      OnChange := ProcChangeTouchSettings;
+    end;
+  end;
+  Menu.DefControl := 'mOptionsControlsTouchMenu';
+  g_GUI_AddWindow(Menu);
+
   Menu := TGUIWindow.Create('OptionsPlayersMenu');
   with TGUIMenu(Menu.AddChild(TGUIMenu.Create(gMenuFont, gMenuSmallFont, _lc[I_MENU_PLAYER_OPTIONS]))) do
   begin
@@ -3195,7 +3323,7 @@ procedure g_Menu_Free();
 begin
   g_GUI_Destroy();
 
-  e_WriteLog('Releasing menu data...', MSG_NOTIFY);
+  e_WriteLog('Releasing menu data...', TMsgType.Notify);
 
   MenuFreeData();
 end;
@@ -3209,7 +3337,7 @@ begin
 
   if ex then
   begin
-    e_WriteLog('Recreating menu...', MSG_NOTIFY);
+    e_WriteLog('Recreating menu...', TMsgType.Notify);
 
     CreateAllMenus();