DEADSOFTWARE

models: remove TModelInfo
[d2df-sdl.git] / src / game / g_menu.pas
index 484b513c208e50a63f9175c540fbd6c53fb45fb3..0f0f2509cb54e7a492867e6afff9f90f021d3d37 100644 (file)
@@ -43,14 +43,13 @@ 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,
+  g_gui, r_textures, r_graphics, g_game, g_map,
+  g_base, g_basic, g_console, g_sound, g_gfx, g_player, g_options, g_weapons,
   e_log, SysUtils, CONFIG, g_playermodel, DateUtils,
   MAPDEF, Math, g_saveload,
-  e_texture, g_language, e_res,
+  g_language, e_res,
   g_net, g_netmsg, g_netmaster, g_items, e_input, g_touch,
-  utils, wadreader, g_system;
+  utils, wadreader, g_system, r_game;
 
 
 type TYNCallback = procedure (yes:Boolean);
@@ -108,7 +107,6 @@ procedure ProcApplyOptions();
 var
   menu: TGUIMenu;
   i: Integer;
-  ovs: Boolean;
 begin
   menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu'));
 
@@ -117,10 +115,7 @@ begin
   else
     gBPP := 32;
 
-  ovs := gVSync;
   gVSync := TGUISwitch(menu.GetControl('swVSync')).ItemIndex = 0;
-  if (ovs <> gVSync) then
-    sys_EnableVSync(gVSync);
 
   gTextureFilter := TGUISwitch(menu.GetControl('swTextureFilter')).ItemIndex = 0;
   glNPOTOverride := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0);
@@ -329,7 +324,7 @@ begin
 
   with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP1Menu').GetControl('mvP1Model')) do
   begin
-    gPlayer1Settings.Model := Model.Name;
+    gPlayer1Settings.Model := Model.GetName();
     gPlayer1Settings.Color := Model.Color;
   end;
 
@@ -340,7 +335,7 @@ begin
                                   TEAM_RED, TEAM_BLUE);
   with TGUIModelView(g_GUI_GetWindow('OptionsPlayersP2Menu').GetControl('mvP2Model')) do
   begin
-    gPlayer2Settings.Model := Model.Name;
+    gPlayer2Settings.Model := Model.GetName();
     gPlayer2Settings.Color := Model.Color;
   end;
 
@@ -681,6 +676,12 @@ begin
     if TGUISwitch(GetControl('swMonsters')).ItemIndex = 0 then
       gsGameFlags := gsGameFlags or GAME_OPTION_MONSTERS;
 
+    case TGUISwitch(GetControl('swTeamHit')).ItemIndex of
+      1: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITTRACE;
+      2: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITPROJECTILE;
+      0: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE;
+    end;
+
     case TGUISwitch(GetControl('swBotsVS')).ItemIndex of
       1: gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSMONSTER;
       2: gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER;
@@ -779,7 +780,7 @@ begin
 
   slWaitStr := _lc[I_NET_SLIST_WAIT];
 
-  g_Game_Draw;
+  r_Game_Draw;
   sys_Repaint;
 
   slReturnPressed := True;
@@ -1348,7 +1349,7 @@ end;
 procedure ProcOptionsPlayersMIMenu();
 var
   s, a: string;
-  b: TModelInfo;
+  i: Integer;
 begin
   if g_ActiveWindow.Name = 'OptionsPlayersP1Menu' then s := 'P1' else s := 'P2';
 
@@ -1356,15 +1357,14 @@ begin
 
   if a = '' then Exit;
 
-  b := g_PlayerModel_GetInfo(a);
-
+  i := g_PlayerModel_GetIndex(a);
   with TGUIMenu(g_GUI_GetWindow('OptionsPlayersMIMenu').GetControl('mOptionsPlayersMIMenu')) do
   begin
-    TGUILabel(GetControl('lbName')).Text := b.Name;
-    TGUILabel(GetControl('lbAuthor')).Text := b.Author;
-    TGUIMemo(GetControl('meComment')).SetText(b.Description);
+    TGUILabel(GetControl('lbName')).Text := PlayerModelsArray[i].Name;
+    TGUILabel(GetControl('lbAuthor')).Text := PlayerModelsArray[i].Author;
+    TGUIMemo(GetControl('meComment')).SetText(PlayerModelsArray[i].Description);
 
-    if b.HaveWeapon then
+    if PlayerModelsArray[i].HaveWeapon then
       TGUILabel(GetControl('lbWeapon')).Text := _lc[I_MENU_YES]
     else
       TGUILabel(GetControl('lbWeapon')).Text := _lc[I_MENU_NO];
@@ -1385,8 +1385,7 @@ begin
   with TGUIModelView(g_ActiveWindow.GetControl('mv'+s+'Model')) do
   begin
     NextAnim();
-    Model.GetCurrentAnimation.Loop := True;
-    Model.GetCurrentAnimationMask.Loop := True;
+    Model.AnimState.Loop := True;
   end;
 end;
 
@@ -1635,6 +1634,15 @@ begin
         ItemIndex := 0
       else
         ItemIndex := 1;
+    with TGUISwitch(menu.GetControl('swTeamHit')) do
+      if (Options and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE)) = (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE) then
+        ItemIndex := 0
+      else if LongBool(Options and GAME_OPTION_TEAMHITTRACE) then
+        ItemIndex := 1
+      else if LongBool(Options and GAME_OPTION_TEAMHITPROJECTILE) then
+        ItemIndex := 2
+      else
+        ItemIndex := 3;
     with TGUISwitch(menu.GetControl('swDeathmatchKeys')) do
       if LongBool(Options and GAME_OPTION_DMKEYS) then
         ItemIndex := 0
@@ -1658,6 +1666,7 @@ begin
     if GameType in [GT_CUSTOM, GT_SERVER] then
       begin
         TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True;
+        TGUISwitch(menu.GetControl('swTeamHit')).Enabled := True;
         if (GameMode in [GM_DM, GM_TDM, GM_CTF]) then
         begin
           TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := True;
@@ -1679,6 +1688,7 @@ begin
     else
       begin
         TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True;
+        TGUISwitch(menu.GetControl('swTeamHit')).Enabled := True;
         TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := False;
         TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_UNACTIVEITEMS_COLOR;
         with TGUIEdit(menu.GetControl('edTimeLimit')) do
@@ -1724,6 +1734,16 @@ begin
         Options := Options and (not GAME_OPTION_TEAMDAMAGE);
     end;
 
+    if TGUISwitch(menu.GetControl('swTeamHit')).Enabled then
+    begin
+      Options := Options and not (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE);
+      case TGUISwitch(menu.GetControl('swTeamHit')).ItemIndex of
+        1: Options := Options or GAME_OPTION_TEAMHITTRACE;
+        2: Options := Options or GAME_OPTION_TEAMHITPROJECTILE;
+        0: Options := Options or GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE;
+      end;
+    end;
+
     if TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled then
     begin
       if TGUISwitch(menu.GetControl('swDeathmatchKeys')).ItemIndex = 0 then
@@ -2193,6 +2213,22 @@ begin
       else
         ItemIndex := 1;
     end;
+    with AddSwitch(_lc[I_MENU_TEAM_HIT]) do
+    begin
+      Name := 'swTeamHit';
+      AddItem(_lc[I_MENU_TEAM_HIT_BOTH]);
+      AddItem(_lc[I_MENU_TEAM_HIT_TRACE]);
+      AddItem(_lc[I_MENU_TEAM_HIT_PROJECTILE]);
+      AddItem(_lc[I_MENU_TEAM_HIT_NOTHING]);
+      if (gsGameFlags and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE)) = (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE) then
+        ItemIndex := 0
+      else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITTRACE) then
+        ItemIndex := 1
+      else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITPROJECTILE) then
+        ItemIndex := 2
+      else
+        ItemIndex := 3;
+    end;
     with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do
     begin
       Name := 'swDeathmatchKeys';
@@ -2412,6 +2448,22 @@ begin
       else
         ItemIndex := 1;
     end;
+    with AddSwitch(_lc[I_MENU_TEAM_HIT]) do
+    begin
+      Name := 'swTeamHit';
+      AddItem(_lc[I_MENU_TEAM_HIT_BOTH]);
+      AddItem(_lc[I_MENU_TEAM_HIT_TRACE]);
+      AddItem(_lc[I_MENU_TEAM_HIT_PROJECTILE]);
+      AddItem(_lc[I_MENU_TEAM_HIT_NOTHING]);
+      if (gsGameFlags and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE)) = (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE) then
+        ItemIndex := 0
+      else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITTRACE) then
+        ItemIndex := 1
+      else if LongBool(gsGameFlags and GAME_OPTION_TEAMHITPROJECTILE) then
+        ItemIndex := 2
+      else
+        ItemIndex := 3;
+    end;
     with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do
     begin
       Name := 'swDeathmatchKeys';
@@ -3295,6 +3347,15 @@ begin
       AddItem(_lc[I_MENU_NO]);
       ItemIndex := 1;
     end;
+    with AddSwitch(_lc[I_MENU_TEAM_HIT]) do
+    begin
+      Name := 'swTeamHit';
+      AddItem(_lc[I_MENU_TEAM_HIT_BOTH]);
+      AddItem(_lc[I_MENU_TEAM_HIT_TRACE]);
+      AddItem(_lc[I_MENU_TEAM_HIT_PROJECTILE]);
+      AddItem(_lc[I_MENU_TEAM_HIT_NOTHING]);
+      ItemIndex := 0
+    end;
     with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do
     begin
       Name := 'swDeathmatchKeys';
@@ -3464,16 +3525,11 @@ end;
 procedure g_Menu_Init();
 begin
   MenuLoadData();
-  g_GUI_Init();
   CreateAllMenus();
 end;
 
 procedure g_Menu_Free();
 begin
-  g_GUI_Destroy();
-
-  e_WriteLog('Releasing menu data...', TMsgType.Notify);
-
   MenuFreeData();
 end;