From 03ef684691b9c292933e3d804c428d1722b84734 Mon Sep 17 00:00:00 2001 From: ang-xd Date: Wed, 28 Aug 2024 20:50:34 -0400 Subject: [PATCH] New --- MiraAPI/Utilities/Extensions.cs | 33 +++++++++----------------- MiraAPI/Utilities/Helpers.cs | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/MiraAPI/Utilities/Extensions.cs b/MiraAPI/Utilities/Extensions.cs index fa86da6..ffe0c23 100644 --- a/MiraAPI/Utilities/Extensions.cs +++ b/MiraAPI/Utilities/Extensions.cs @@ -4,7 +4,6 @@ using MiraAPI.Modifiers; using MiraAPI.Networking; using Reactor.Networking.Attributes; using Reactor.Utilities; -using System; using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -13,7 +12,7 @@ namespace MiraAPI.Utilities; public static class Extensions { - public static bool IsStatic(this Type type) + public static bool IsStatic(this System.Type type) { return type is { IsClass: true, IsAbstract: true, IsSealed: true }; } @@ -158,18 +157,18 @@ public static class Extensions player.RpcAddModifier(id); } - public static Color DarkenColor(this Color color) + public static Color DarkenColor(this Color color, float amount = 0.45f) { - return new Color(color.r - 0.45f, color.g - 0.45f, color.b - 0.45f); + return new Color(color.r - amount, color.g - amount, color.b - amount); } - public static Color GetAlternateColor(this Color color) + public static Color GetAlternateColor(this Color color, float amount = 0.45f) { - return color.IsColorDark() ? LightenColor(color) : DarkenColor(color); + return color.IsColorDark() ? LightenColor(color, amount) : DarkenColor(color, amount); } - public static Color LightenColor(this Color color) + public static Color LightenColor(this Color color, float amount = 0.45f) { - return new Color(color.r + 0.45f, color.g + 0.45f, color.b + 0.45f); + return new Color(color.r + amount, color.g + amount, color.b + amount); } public static bool IsColorDark(this Color color) @@ -177,24 +176,14 @@ public static class Extensions return color.r < 0.5f && color is { g: < 0.5f, b: < 0.5f }; } - public static DeadBody? NearestDeadBody(this PlayerControl playerControl, float radius) + public static DeadBody? GetNearestDeadBody(this PlayerControl playerControl, float radius) { - var results = new Il2CppSystem.Collections.Generic.List(); - Physics2D.OverlapCircle(playerControl.GetTruePosition(), radius, Helpers.Filter, results); - return results.ToArray() - .Where(collider2D => collider2D.CompareTag("DeadBody")) - .Select(collider2D => collider2D.GetComponent()) - .FirstOrDefault(component => component && !component.Reported); + return Helpers.GetNearestDeadBodies(playerControl.GetTruePosition(), radius).FirstOrDefault(component => component && !component.Reported); } - public static T? GetNearestObjectOfType(this PlayerControl playerControl, float radius, string? colliderTag = null, Func? predicate = null) where T : Component + public static T? GetNearestObjectOfType(this PlayerControl playerControl, float radius, string? colliderTag = null, System.Func? predicate = null) where T : Component { - var results = new Il2CppSystem.Collections.Generic.List(); - Physics2D.OverlapCircle(playerControl.GetTruePosition(), radius, Helpers.Filter, results); - return results.ToArray() - .Where(collider2D => colliderTag == null || collider2D.CompareTag(colliderTag)) - .Select(collider2D => collider2D.GetComponent()) - .FirstOrDefault(predicate ?? (component => component)); + return Helpers.GetNearestObjectsOfType(playerControl.GetTruePosition(), radius, colliderTag).FirstOrDefault(predicate ?? (component => component)); } public static PlayerControl? GetClosestPlayer(this PlayerControl playerControl, bool includeImpostors, float distance, bool ignoreColliders = false) diff --git a/MiraAPI/Utilities/Helpers.cs b/MiraAPI/Utilities/Helpers.cs index 6fbac3c..10085f4 100644 --- a/MiraAPI/Utilities/Helpers.cs +++ b/MiraAPI/Utilities/Helpers.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using TMPro; using UnityEngine; +using Object = UnityEngine.Object; namespace MiraAPI.Utilities; @@ -15,6 +16,46 @@ public static class Helpers return ShipStatus.Instance.AllRooms.ToList().Find(room => room.roomArea.OverlapPoint(pos)); } + public static List GetNearestDeadBodies(Vector2 source, float radius) + { + var results = new Il2CppSystem.Collections.Generic.List(); + Physics2D.OverlapCircle(source, radius, Filter, results); + return results.ToArray() + .Where(collider2D => collider2D.CompareTag("DeadBody")) + .Select(collider2D => collider2D.GetComponent()).ToList(); + } + + public static List GetNearestObjectsOfType(Vector2 source, float radius, string colliderTag = null) where T : Component + { + var results = new Il2CppSystem.Collections.Generic.List(); + Physics2D.OverlapCircle(source, radius, Filter, results); + return results.ToArray() + .Where(collider2D => colliderTag == null || collider2D.CompareTag(colliderTag)) + .Select(collider2D => collider2D.GetComponent()).ToList(); + } + + public static List GetClosestPlayersInCircle(Vector2 source, float radius, bool ignoreColliders = true) + { + List newList = GetNearestObjectsOfType(source, radius); + + if (ignoreColliders) + { + List filteredList = new List(); + foreach (var player in newList) + { + Vector2 vector = player.GetTruePosition() - source; + float magnitude = vector.magnitude; + if (!PhysicsHelpers.AnyNonTriggersBetween(source, vector.normalized, magnitude, Constants.ShipAndObjectsMask)) + { + filteredList.Add(player); + } + } + + return filteredList; + } + + return newList; + } public static List GetClosestPlayers(PlayerControl source, float distance = 2f, bool ignoreColliders = true, bool ignoreSource = true) { if (!ShipStatus.Instance)