public static bool IsVisibleUsingCameraFrustum(ShapeVisibilityTracker tracker, bool ignoreLocalCamera) { var playersWithCameras = QSBPlayerManager.GetPlayersWithCameras(!ignoreLocalCamera); if (playersWithCameras.Count == 0) { DebugLog.ToConsole($"Warning - Trying to run IsVisibleUsingCameraFrustum when there are no players!", MessageType.Warning); return(false); } if (!tracker.gameObject.activeInHierarchy) { return(false); } var frustumMethod = tracker.GetType().GetMethod("IsInFrustum", BindingFlags.NonPublic | BindingFlags.Instance); foreach (var player in playersWithCameras) { if (player.Camera == null) { DebugLog.ToConsole($"Warning - Camera is null for id:{player.PlayerId}!", MessageType.Warning); continue; } var isInFrustum = (bool)frustumMethod.Invoke(tracker, new object[] { player.Camera.GetFrustumPlanes() }); if (isInFrustum) { return(true); } } return(false); }
public static bool IsVisible(ShapeVisibilityTracker tracker, bool ignoreLocalCamera) { return(tracker.gameObject.activeInHierarchy && IsVisibleUsingCameraFrustum(tracker, ignoreLocalCamera) && QSBPlayerManager.GetPlayersWithCameras(!ignoreLocalCamera) .Any(x => VisibilityOccluder.CanYouSee(tracker, x.Camera.mainCamera.transform.position))); }
public static Tuple <bool, List <PlayerInfo> > IsVisibleUsingCameraFrustum(ShapeVisibilityTracker tracker, bool ignoreLocalCamera) { if (!QSBWorldSync.AllObjectsReady) { return(new Tuple <bool, List <PlayerInfo> >(false, new List <PlayerInfo>())); } var playersWithCameras = QSBPlayerManager.GetPlayersWithCameras(!ignoreLocalCamera); if (playersWithCameras.Count == 0) { DebugLog.ToConsole($"Warning - Could not find any players with cameras!", MessageType.Warning); return(new Tuple <bool, List <PlayerInfo> >(false, new List <PlayerInfo>())); } if (!tracker.gameObject.activeInHierarchy) { return(new Tuple <bool, List <PlayerInfo> >(false, new List <PlayerInfo>())); } var playersWhoCanSee = new List <PlayerInfo>(); var foundPlayers = false; foreach (var player in playersWithCameras) { if (player.Camera == null) { DebugLog.ToConsole($"Warning - Camera is null for id:{player.PlayerId}!", MessageType.Warning); continue; } var isInFrustum = tracker.IsInFrustum(player.Camera.GetFrustumPlanes()); if (isInFrustum) { playersWhoCanSee.Add(player); foundPlayers = true; } } return(new Tuple <bool, List <PlayerInfo> >(foundPlayers, playersWhoCanSee)); }
public static bool ShapeIsVisible(ShapeVisibilityTracker __instance, ref bool __result) { __result = QuantumManager.IsVisible(__instance, false); return(false); }
public static bool ShapeVisibilityTracker_IsVisibleUsingCameraFrustum(ShapeVisibilityTracker __instance, out bool __result) { __result = QuantumManager.IsVisibleUsingCameraFrustum(__instance, false).Item1; return(false); }