diff --git a/Classes/AerialController.uc b/Classes/AerialController.uc index 76d19fe..ae8f3f1 100644 --- a/Classes/AerialController.uc +++ b/Classes/AerialController.uc @@ -9,6 +9,59 @@ class AerialController extends xPlayer; //Behindview stuff: var CrosshairEmitter AerialCrosshair; var ConstantColor Transparency; +var bool bRememberBehindView; + +// Add replication block +replication +{ + reliable if(Role == ROLE_Authority) + bRememberBehindView; +} + +// Track user preference whenever they manually change camera +exec function BehindView(bool B) +{ + Super.BehindView(B); + if(Vehicle(Pawn) == None) + bRememberBehindView = B; +} + +// Capture camera state when pawn dies +function PawnDied(Pawn P) +{ + if(P != None && Vehicle(P) == None) + bRememberBehindView = bBehindView; + + Super.PawnDied(P); +} + +// Override ClientRestart +function ClientRestart(Pawn NewPawn) +{ + // Save state before entering vehicle + if(NewPawn != None && Vehicle(NewPawn) != None && Pawn != None) + { + bRememberBehindView = bBehindView; + + // Clean up aerial crosshair when entering vehicle + if(AerialCrosshair != None) + { + AerialCrosshair.Destroy(); + AerialCrosshair = None; + } + if(myHUD != None) + myHUD.bCrosshairShow = myHUD.Default.bCrosshairShow; + } + + Super.ClientRestart(NewPawn); + + // Restore camera after Super call completes + if(Vehicle(NewPawn) == None && bRememberBehindView) + { + bBehindView = true; + BehindView(true); + } +} function ChangedWeapon() { @@ -21,8 +74,8 @@ function UpdateCrosshairs() if(Level.GetLocalPlayerController() != self) return; - //Spawn a special crosshair. - if(bBehindView && AerialCrosshair == None && Pawn != None && !Pawn.IsA('Vehicle')) + //Spawn a special crosshair (when not in a vehicle). + if(bBehindView && AerialCrosshair == None && Pawn != None && Vehicle(Pawn) == None) AerialCrosshair = Spawn(class'CrosshairEmitter', self); //Don't show normal crosshair if a special crosshair exists. @@ -41,6 +94,14 @@ event PlayerCalcView(out actor ViewActor, out vector CameraLocation, out rotator local float Distance; Super.PlayerCalcView(ViewActor, CameraLocation, CameraRotation); + + // Do not reposition camera when using ToggleBehindView as a free-floating spectator camera + if(Pawn == None && (ViewTarget == None || ViewTarget == self)) + return; + + // Let vehicles use their standard camera system + if(Vehicle(Pawn) != None) + return; if(bBehindView) { diff --git a/Classes/CrosshairEmitter.uc b/Classes/CrosshairEmitter.uc index 0fa50c1..3ba6997 100644 --- a/Classes/CrosshairEmitter.uc +++ b/Classes/CrosshairEmitter.uc @@ -39,14 +39,34 @@ function SetNormalCrosshair() //Use standard crosshair settings. function SetStandardCrosshair() { + local int CrosshairIndex; + local Material CrosshairMat; + Emitters[0].UseSizeScale = false; Emitters[0].FadeIn = false; CurrentCrosshairColor = C.myhud.CrossHairColor; CurrentCrosshairScale = C.myhud.CrosshairScale; - if(C.Pawn != None && C.Pawn.Weapon != None) - CurrentCrosshairTexture = C.Pawn.Weapon.CustomCrosshairTexture; + // Get the user's selected crosshair + if(HudBase(C.myhud) != None) + { + CrosshairIndex = HudBase(C.myhud).CrosshairStyle; + if(CrosshairIndex >= 0 && CrosshairIndex < HudBase(C.myhud).Crosshairs.Length) + { + CrosshairMat = HudBase(C.myhud).Crosshairs[CrosshairIndex].WidgetTexture; + // Convert Material to Texture + CurrentCrosshairTexture = Texture(CrosshairMat); + + // Fallback if conversion fails + if(CurrentCrosshairTexture == None) + CurrentCrosshairTexture = Texture'Crosshairs.HUD.Crosshair_Triad1'; + } + else + CurrentCrosshairTexture = Texture'Crosshairs.HUD.Crosshair_Triad1'; + } + else + CurrentCrosshairTexture = Texture'Crosshairs.HUD.Crosshair_Triad1'; } //Use per-weapon custom crosshairs diff --git a/Classes/MutUTComp.uc b/Classes/MutUTComp.uc index fd91941..d43ca18 100644 --- a/Classes/MutUTComp.uc +++ b/Classes/MutUTComp.uc @@ -1670,6 +1670,7 @@ static function FillPlayInfo (PlayInfo PlayInfo) PlayInfo.AddSetting("UTComp Settings", "MaxMultiDodges", "Number of additional dodges",255, weight, "Text","2;0:99",); PlayInfo.AddSetting("UTComp Settings", "SuicideInterval", "Minimum time between two suicides", security, weight, "Text", "0;0:1800",, False, False); PlayInfo.AddSetting("UTComp Settings", "bDisableCameraShake", "Disable Camera Shake", security, weight, "Check"); + PlayInfo.AddSetting("UTComp Settings", "bShowTeamScoresInServerBrowser", "Show team scores in server browser", security, weight, "Check"); weight++; PlayInfo.AddSetting("UTComp Settings", "bShowSpawnsDuringWarmup", "Show Spawns during Warmup", security, weight,"Check"); @@ -1768,6 +1769,7 @@ static event string GetDescriptionText(string PropName) case "TeamRadarCullDistance": return "Cull distance of team radar"; case "bAllowTeamRadarMap": return "Allow players to use minimap team radar"; case "bDisableCameraShake": return "Disable camera shake effects"; + case "bShowTeamScoresInServerBrowser": return "Check this to show team scores in the server browser"; case "NewNetUpdateFrequency": return "NewNet Update Frequency (200)"; case "PingTweenTime": return "NewNet Ping Tween Time (3.0)";