X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=cc6afb07be47661fa320584d0d6ecb2f80f5df1e;hb=ada62776e1c2db5a0107b2eed7a3cac72250aa43;hp=dee10aa191af47131130ed12d2b102299d1a2d60;hpb=82108dd50fb12ef54f0cd04891901782781fe442;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index dee10aa..cc6afb0 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -268,6 +268,7 @@ type FDummy: Boolean; FFireTime: Integer; FHandicap: Integer; + FWaitForFirstSpawn: Boolean; // set to `true` in server, used to spawn a player on first full state request // debug: viewport offset viewPortX, viewPortY, viewPortW, viewPortH: Integer; @@ -2178,6 +2179,8 @@ begin FJustTeleported := False; FNetTime := 0; + FWaitForFirstSpawn := false; + resetWeaponQueue(); end; @@ -2332,6 +2335,8 @@ procedure TPlayer.DrawIndicator(Color: TRGB); var indX, indY: Integer; indW, indH: Word; + indA: Single; + a: TDFPoint; nW, nH: Byte; ID: DWORD; c: TRGB; @@ -2343,12 +2348,43 @@ begin if g_Texture_Get('TEXTURE_PLAYER_INDICATOR', ID) then begin e_GetTextureSize(ID, @indW, @indH); - indX := FObj.X + FObj.Rect.X + (FObj.Rect.Width - indW) div 2; - indY := FObj.Y - indH; + a.X := indW div 2; + a.Y := indH div 2; + + if (FObj.X + FObj.Rect.X) < 0 then + begin + indA := 90; + indX := FObj.X + FObj.Rect.X + FObj.Rect.Width; + indY := FObj.Y + FObj.Rect.Y + (FObj.Rect.Height - indW) div 2; + end + + else if (FObj.X + FObj.Rect.X + FObj.Rect.Width) > Max(gMapInfo.Width, gPlayerScreenSize.X) then + begin + indA := 270; + indX := FObj.X + FObj.Rect.X - indH; + indY := FObj.Y + FObj.Rect.Y + (FObj.Rect.Height - indW) div 2; + end + + else if (fObj.Y - indH) < 0 then + begin + indA := 180; + indX := FObj.X + FObj.Rect.X + (FObj.Rect.Width - indW) div 2; + indY := FObj.Y + FObj.Rect.Y + FObj.Rect.Height; + end + + else + begin + indA := 0; + indX := FObj.X + FObj.Rect.X + (FObj.Rect.Width - indW) div 2; + indY := FObj.Y - indH; + end; + + indX := EnsureRange(indX, 0, Max(gMapInfo.Width, gPlayerScreenSize.X) - indW); + indY := EnsureRange(indY, 0, Max(gMapInfo.Height, gPlayerScreenSize.Y) - indH); c := e_Colors; e_Colors := Color; - e_Draw(ID, indX, indY, 0, True, False); + e_DrawAdv(ID, indX, indY, 0, True, False, indA, @a); e_Colors := c; end; end;