DEADSOFTWARE

Initial Player Indicator Implementation.
[d2df-sdl.git] / src / game / g_options.pas
index 493e07cb48c9475bd4043c04ddbc253a1756cf3b..1f3bd4881e0f9f7e5d4e8d5032d5c11bb6695caf 100644 (file)
@@ -61,6 +61,8 @@ type
     P2Control:    TPlayerControl;
   end;
 
+function GenPlayerName (n: Integer): String;
+
 procedure g_Options_SetDefault();
 procedure g_Options_Read(FileName: String);
 procedure g_Options_Write(FileName: String);
@@ -137,40 +139,70 @@ uses
   {$INCLUDE ../nogl/noGLuses.inc}
   e_log, e_input, g_window, g_sound, g_gfx, g_player, Math,
   g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game, g_main, e_texture,
-  g_items, wadreader, e_graphics, g_touch, SDL2;
+  g_items, wadreader, e_graphics, g_touch, SDL2, envvars;
+
+  var
+    machine: Integer;
+
+  function GenPlayerName (n: Integer): String;
+  begin
+    ASSERT(n >= 1);
+    Result := GetUserName;
+    if Result = '' then
+      Result := 'Player' + IntToStr(machine MOD 10000);
+    if n = 1 then
+      Result := Copy(Result, 1, 12) + ' '
+    else
+      Result := Copy(Result, 1, 10) + ' ' + IntToStr(n)
+  end;
 
 procedure g_Options_SetDefaultVideo;
-{$IF DEFINED(ANDROID)}
 var
-  display: TSDL_DisplayMode;
-{$ENDIF}
+  target, closest, display: TSDL_DisplayMode;
+  percentage: Integer;
 begin
+  (* Display 0 = Primary display *)
+  SDL_GetDesktopDisplayMode(0, @display);
   {$IF DEFINED(ANDROID)}
-    (* On android set max screen size *)
-    SDL_GetCurrentDisplayMode(0, @display);
     gScreenWidth := display.w;
     gScreenHeight := display.h;
-    gWinRealPosX := 0;
-    gWinRealPosY := 0;
-    gWinMaximized := False;
-    gFullScreen := False; (* if True then rotation not allowed *)
+    //gBPP := SDL_BITSPERPIXEL(dispaly.format);
     gBPP := 32;
-    gVSync := True;
-    gTextureFilter := True;
-    glLegacyNPOT := False;
+    gFullScreen := True; (* rotation not allowed? *)
   {$ELSE}
-    (* On other systems use default 800x600 *)
-    gScreenWidth := 800;
-    gScreenHeight := 600;
-    gWinRealPosX := 0;
-    gWinRealPosY := 0;
-    gWinMaximized := False;
-    gFullScreen := False;
+    (* Window must be smaller than display *)
+    closest.w := display.w;
+    closest.h := display.h;
+    percentage := 75;
+    while (display.w - closest.w < 48) or (display.h - closest.h < 48) do
+    begin
+      if percentage < 25 then
+      begin
+        closest.w := display.w * 75 div 100;
+        closest.h := display.h * 75 div 100;
+        break;
+      end;
+      target.w := display.w * percentage div 100;
+      target.h := display.h * percentage div 100;
+      target.format := 0; (* didn't care *)
+      target.refresh_rate := 0; (* didn't care *)
+      target.driverdata := nil; (* init *)
+      SDL_GetClosestDisplayMode(0, @target, @closest);
+      Dec(percentage);
+    end;
+    gScreenWidth := closest.w;
+    gScreenHeight := closest.h;
+    //gBPP := SDL_BITSPERPIXEL(closest.format); (* Resolution list didn't work for some reason *)
     gBPP := 32;
-    gVSync := True;
-    gTextureFilter := True;
-    glLegacyNPOT := False;
+    gFullScreen := False;
   {$ENDIF}
+  (* Must be positioned on primary display *)
+  gWinRealPosX := SDL_WINDOWPOS_CENTERED;
+  gWinRealPosY := SDL_WINDOWPOS_CENTERED;
+  gWinMaximized := False;
+  gVSync := True;
+  gTextureFilter := True;
+  glLegacyNPOT := False;
   e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gScreenWidth) + ' h = ' + IntToStr(gScreenHeight));
 end;
 
@@ -244,7 +276,7 @@ begin
 
   with gPlayer1Settings do
   begin
-    Name := 'Player1';
+    Name := GenPlayerName(1);
     Model := STD_PLAYER_MODEL;
     Color.R := PLAYER1_DEF_COLOR.R;
     Color.G := PLAYER1_DEF_COLOR.G;
@@ -289,7 +321,7 @@ begin
 
   with gPlayer2Settings do
   begin
-    Name := 'Player2';
+    Name := GenPlayerName(2);
     Model := STD_PLAYER_MODEL;
     Color.R := PLAYER2_DEF_COLOR.R;
     Color.G := PLAYER2_DEF_COLOR.G;
@@ -325,6 +357,7 @@ begin
   gShowMessages := True;
   gRevertPlayers := False;
   gChatBubble := 4;
+  gPlayerIndicator := True;
   gSFSDebug := False;
   gSFSFastMode := False;
   e_FastScreenshots := True;
@@ -604,6 +637,7 @@ begin
   ReadBoolean(gShowMessages, 'Messages');
   ReadBoolean(gRevertPlayers, 'RevertPlayers');
   ReadInteger(gChatBubble, 'ChatBubble', 0, 4);
+  ReadBoolean(gPlayerIndicator, 'PlayerIndicator');
   ReadBoolean(gSFSDebug, 'SFSDebug'); wadoptDebug := gSFSDebug;
   ReadBoolean(gSFSFastMode, 'SFSFastMode'); wadoptFast := gSFSFastMode;
   ReadBoolean(e_FastScreenshots, 'FastScreenshots');
@@ -842,6 +876,7 @@ begin
   config.WriteBool('Game', 'Messages', gShowMessages);
   config.WriteBool('Game', 'RevertPlayers', gRevertPlayers);
   config.WriteInt('Game', 'ChatBubble', gChatBubble);
+  config.WriteBool('Game', 'PlayerIndicator', gPlayerIndicator);
   config.WriteBool('Game', 'SFSDebug', gSFSDebug);
   config.WriteBool('Game', 'SFSFastMode', gSFSFastMode);
   config.WriteBool('Game', 'FastScreenshots', e_FastScreenshots);
@@ -938,6 +973,9 @@ begin
   config.WriteBool('Video', 'Fullscreen', gFullscreen);
   config.WriteBool('Video', 'Maximized', gWinMaximized);
 
+  config.WriteStr('Player1', 'Name', gPlayer1Settings.Name);
+  config.WriteStr('Player2', 'Name', gPlayer2Settings.Name);
+
   config.SaveFile(FileName);
   config.Free();
 end;
@@ -1024,4 +1062,6 @@ begin
   config.Free();
 end;
 
+initialization
+  machine := Random(10000)
 end.