remove some unused files/code

This commit is contained in:
in0finite 2022-09-30 17:02:10 +02:00
parent 54144bf56a
commit 4ab78a9a7d
19 changed files with 2 additions and 998 deletions

View file

@ -131,7 +131,7 @@ namespace SanAndreasUnity.Behaviours.Peds.AI
public static Vector3 GetMoveDestinationBasedOnTargetNode(PathNode targetNode)
{
Vector2 offset = Random.insideUnitCircle * targetNode.PathWidth / 2f * 0.9f;
return targetNode.Position + offset.ToVector3XZ();
return targetNode.Position + offset.ToVec3XZ();
}
public static void FindClosestWalkableNode(PathMovementData pathMovementData, Vector3 position, float radius = 200f)

View file

@ -94,7 +94,7 @@ namespace SanAndreasUnity.Behaviours
transformData = new TransformDataStruct(focusPos);
else
transformData = new TransformDataStruct(
focusPos.position + Random.insideUnitCircle.ToVector3XZ() * 15f,
focusPos.position + Random.insideUnitCircle.ToVec3XZ() * 15f,
Quaternion.Euler(0f, Random.Range(0f, 360f), 0f));
return true;

View file

@ -1,48 +0,0 @@
using UnityEngine;
namespace System.Collections.Generic
{
public static class ListEx
{
public static void RemoveRangeWrapped<T>(this List<T> list, int index, int count)
{
int itemCount = list.Count;
if (count == 0 || itemCount == 0) return;
if (count >= itemCount)
{
list.Clear();
return;
}
int removeIndex = index;
if (count < 0)
{
removeIndex += count;
count = -count;
}
removeIndex = removeIndex.Mod(itemCount);
int backCount = count - (itemCount - removeIndex);
if (backCount <= 0)
{
list.RemoveRange(removeIndex, count);
}
else
{
list.RemoveRange(removeIndex, count - backCount);
list.RemoveRange(0, backCount);
}
}
public static int GetOffsetIndex<T>(this List<T> list, int index, int offset)
{
// wrap around the offsetted index
return (index + offset).Mod(list.Count);
}
}
}

View file

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 189c40774a2f860438db988b236ecfd8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 9750
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,159 +0,0 @@
namespace UnityEngine
{
public static class MathExtension
{
public static float SnapToCenter(this float val, float snapValue)
{
if (snapValue == 0) return val;
return Mathf.Round((val / snapValue) + 0.5f) * snapValue - 0.5f;
}
public static float SnapToEdge(this float val, float snapValue)
{
if (snapValue == 0) return val;
return Mathf.Round(val / snapValue) * snapValue;
}
public static Vector3 SnapToCenter(this Vector2 val, float snapValue)
{
return new Vector2(val.x.SnapToCenter(snapValue), val.y.SnapToCenter(snapValue));
}
public static Vector3 SnapToEdge(this Vector2 val, float snapValue)
{
return new Vector2(val.x.SnapToEdge(snapValue), val.y.SnapToEdge(snapValue));
}
public static Vector3 SnapToCenter(this Vector3 val, float snapValue)
{
return new Vector3(val.x.SnapToCenter(snapValue), val.y.SnapToCenter(snapValue), val.z.SnapToCenter(snapValue));
}
public static Vector3 SnapToEdge(this Vector3 val, float snapValue)
{
return new Vector3(val.x.SnapToEdge(snapValue), val.y.SnapToEdge(snapValue), val.z.SnapToEdge(snapValue));
}
public static Vector3 ToVector3XZ(this Vector2 val)
{
return new Vector3(val.x, 0.0f, val.y);
}
public static float ClosestPointDistance(this Ray val, Vector3 point)
{
return Vector3.Dot(point - val.origin, val.direction);
}
public static Vector3 ClosestPoint(this Ray val, Vector3 point)
{
return val.GetPoint(val.ClosestPointDistance(point));
}
public static float ClosestRayPointDistance(this Ray val, Ray ray)
{
Vector3 v0 = val.origin;
Vector3 v1 = val.direction;
Vector3 v2 = ray.origin;
Vector3 v3 = ray.direction;
Vector3 v4 = v0 - v2;
float d0 = 0.0f;
float d1 = 0.0f;
float dv4v3 = Vector3.Dot(v4, v3);
float dv3v1 = Vector3.Dot(v3, v1);
float dv3v3 = Vector3.Dot(v3, v3);
float dv4v1 = Vector3.Dot(v4, v1);
float dv1v1 = Vector3.Dot(v1, v1);
float denom = dv1v1 * dv3v3 - dv3v1 * dv3v1;
if (Mathf.Abs(denom) > Mathf.Epsilon)
{
float numer = dv4v3 * dv3v1 - dv4v1 * dv3v3;
d0 = numer / denom;
}
else
{
d0 = 0.0f;
}
d1 = (dv4v3 + d0 * dv3v1) / dv3v3;
if (d1 >= 0.0f)
{
return d0;
}
else
{
d1 = 0.0f;
return val.ClosestPointDistance(ray.origin);
}
}
public static Vector3 ClosestRayPoint(this Ray val, Ray ray)
{
return val.GetPoint(val.ClosestRayPointDistance(ray));
}
public static int Mod(this int val, int mod)
{
int r = val % mod;
return r < 0 ? val + mod : r;
}
public static bool PlaneTest(this Ray ray, Vector3 planeCenter, Quaternion planeRot, Vector2 planeSize, out Vector3 hitPosition, float gridSize = 0.0f, bool edge = true)
{
Plane plane = new Plane(planeRot * Vector3.up, planeCenter);
hitPosition = Vector3.zero;
float hitDistance = 0.0f;
if (!plane.Raycast(ray, out hitDistance))
{
return false;
}
hitPosition = ray.origin + ray.direction * hitDistance;
Vector3 hitOffset = hitPosition - planeCenter;
float distanceLf = Vector3.Dot(hitOffset, planeRot * Vector3.left);
float distanceUp = Vector3.Dot(hitOffset, planeRot * Vector3.forward);
if (gridSize > 0.0f)
{
if (edge)
{
distanceLf = distanceLf.SnapToEdge(gridSize);
distanceUp = distanceUp.SnapToEdge(gridSize);
}
else
{
distanceLf = distanceLf.SnapToCenter(gridSize);
distanceUp = distanceUp.SnapToCenter(gridSize);
}
}
hitPosition = planeCenter;
hitPosition += (planeRot * Vector3.left) * distanceLf;
hitPosition += (planeRot * Vector3.forward) * distanceUp;
return true;
}
public static float NormalizeAngle(this float ang)
{
return ang - Mathf.Floor((ang + 180f) / 360f) * 360f;
}
public static float AngleDiff(this float ang, float other)
{
return (other - ang).NormalizeAngle();
}
}
}

View file

@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 287aac3d791d8b245816760000716a6e
timeCreated: 1427296668
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,374 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
//using Facepunch.ConCommands;
//using Facepunch.Networking;
using UnityEngine;
using ThreadState = System.Threading.ThreadState;
namespace Facepunch.Utilities
{
public interface IGateKeeper : IDisposable
{
object Owner { get; }
String Name { get; }
int Counter { get; }
IDisposable Sample();
}
public class PerformanceSampler : SingletonComponent<PerformanceSampler>
{
#pragma warning disable 0618
/// <remarks>
/// http://stackoverflow.com/questions/285031/how-to-get-non-current-threads-stacktrace
/// </remarks>
private static StackTrace GetStackTrace(Thread targetThread, out Exception error)
{
var suspend = targetThread.ThreadState != ThreadState.Suspended;
error = null;
StackTrace stackTrace = null;
Exception ex = null;
if (suspend)
{
var ready = new ManualResetEvent(false);
new Thread(() =>
{
// Backstop to release thread in case of deadlock:
ready.Set();
Thread.Sleep(200);
try
{
targetThread.Resume();
}
catch (Exception e)
{
ex = e;
}
}).Start();
ready.WaitOne();
targetThread.Suspend();
}
try
{
stackTrace = new StackTrace(targetThread, true);
}
catch (Exception e)
{
error = e;
}
finally
{
if (suspend)
{
try
{
targetThread.Resume();
}
catch (Exception e)
{
error = error ?? e;
}
}
}
error = error ?? ex;
return stackTrace;
}
#pragma warning restore 0618
/* [ConCommand(Domain.Shared, "system", "status")]
private static String SystemStatusCommand(ConCommandArgs args)
{
var writer = new StringWriter();
writer.WriteLine("Uptime: {0:F1} minutes", Instance.Uptime.TotalMinutes);
writer.WriteLine("Processor time: {0:F1}%", Instance.ProcessorTimePercent);
writer.WriteLine("Total memory: {0:F1} KB", Instance.TotalMemory / 1024d);
writer.WriteLine("Avg GC period: {0:F2} s", Instance.AverageGarbageCollectionPeriod);
writer.WriteLine("Network status: {0}", Server.Instance.NetStatus);
writer.WriteLine("Network thread status: {0}", Server.Instance.Net.NetThread.ThreadState);
writer.WriteLine("Main thread state: {0}", Instance.MainThreadState);
if (!(Instance.SinceLastUpdate.TotalSeconds > 2d * Instance.SamplePeriod)) return writer.ToString();
writer.WriteLine("Main thread has been hanging for {0:F1} minutes!", Instance.SinceLastUpdate.TotalMinutes);
return writer.ToString();
}
[ConCommand(Domain.Shared, "system", "gate-keepers")]
private static String SystemGateKeepersCommand(ConCommandArgs args)
{
var writer = new StringWriter();
foreach (var gateKeeper in GateKeepers) {
writer.WriteLine("Owner: {0}, Name: {1}, Count: {2}", gateKeeper.Owner, gateKeeper.Name, gateKeeper.Counter);
}
return writer.ToString();
}
*/
private class GateKeeper : IGateKeeper
{
private class Sampler : IDisposable
{
private readonly GateKeeper _keeper;
public Sampler(GateKeeper keeper)
{
_keeper = keeper;
}
public void Dispose()
{
--_keeper.Counter;
}
}
private readonly Sampler _sampler;
public object Owner { get; private set; }
public string Name { get; private set; }
public int Counter { get; private set; }
public GateKeeper(object owner, String name)
{
_sampler = new Sampler(this);
Owner = owner;
Name = name;
Counter = 0;
}
public IDisposable Sample()
{
++Counter;
return _sampler;
}
public void Dispose()
{
_sGateKeepers.Remove(this);
}
}
private static readonly List<GateKeeper> _sGateKeepers = new List<GateKeeper>();
public static IEnumerable<IGateKeeper> GateKeepers { get { return _sGateKeepers.Cast<IGateKeeper>(); } }
public static IGateKeeper CreateGatekeeper(object owner, String name)
{
var keeper = new GateKeeper(owner, name);
_sGateKeepers.Add(keeper);
return keeper;
}
private readonly DateTime _startTime;
private DateTime _lastUpdate;
private TimeSpan _lastProcessorTime;
private DateTime _lastGcPass;
private int _lastGcPasses;
private Thread _mainThread;
private Thread _watcherThread;
private bool _stopWatching;
private readonly AutoResetEvent _sampleWait;
private readonly ManualResetEvent _stopWait;
private readonly Queue<double> _gcPeriods = new Queue<double>();
private readonly Stopwatch _timer = new Stopwatch();
public TimeSpan Uptime
{
get { return DateTime.UtcNow - _startTime; }
}
public ThreadState MainThreadState
{
get { return _mainThread == null ? ThreadState.Unstarted : _mainThread.ThreadState; }
}
public TimeSpan SinceLastUpdate
{
get { return DateTime.UtcNow - _lastUpdate; }
}
public double ProcessorTimePercent { get; private set; }
public double AverageGarbageCollectionPeriod
{
get
{
return _gcPeriods.Count == 0
? float.PositiveInfinity
: (_gcPeriods.Sum() + (DateTime.UtcNow - _lastGcPass).TotalSeconds)
/ (_gcPeriods.Count + 1);
}
}
public long TotalMemory { get; private set; }
[Range(1f, 60f)]
public float SamplePeriod = 2f;
[Range(1, 200)]
public int GarbageCollectionSamples = 10;
public PerformanceSampler()
{
_startTime = _lastGcPass = DateTime.UtcNow;
_sampleWait = new AutoResetEvent(false);
_stopWait = new ManualResetEvent(true);
Sample(false);
}
private static void SampleFailed()
{
UnityEngine.Debug.LogErrorFormat("!!! PerformanceSampler has failed to sample (time: {0}) !!!", DateTime.UtcNow);
// UnityEngine.Debug.LogFormat("HangNotifyUrl: {0}", NetConfig.HangNotifyUrl);
/*
if (String.IsNullOrEmpty(NetConfig.HangNotifyUrl)) return;
using (var client = new WebClient()) {
client.UploadString(NetConfig.HangNotifyUrl, "POST", new JObject {
{"status", "hanging"},
{"time", DateTime.UtcNow.ToBinary()},
{"last_state", SystemStatusCommand(null)},
{"port", NetConfig.Port}
}.ToString());
}
*/
}
private void WatcherEntry()
{
_stopWait.Reset();
while (!_stopWatching)
{
if (_sampleWait.WaitOne(TimeSpan.FromSeconds(SamplePeriod * 2d + 10d))) continue;
if (_stopWatching) return;
SampleFailed();
break;
}
_stopWait.Set();
}
private void Sample(bool watch)
{
if (watch && _watcherThread == null)
{
_watcherThread = new Thread(WatcherEntry);
_watcherThread.Start();
}
if (_mainThread == null) _mainThread = Thread.CurrentThread;
_lastUpdate = DateTime.UtcNow;
_sampleWait.Set();
var diff = _timer.Elapsed.TotalSeconds;
var proc = Process.GetCurrentProcess();
var processorTime = proc.TotalProcessorTime;
var gcPasses = GC.CollectionCount(0);
var gcPassDiff = gcPasses - _lastGcPasses;
_lastGcPasses = gcPasses;
if (gcPassDiff > 0)
{
var gcTimeDiff = _lastUpdate - _lastGcPass;
if (gcPassDiff == 1)
{
_gcPeriods.Enqueue(gcTimeDiff.TotalSeconds);
}
else
{
var avg = diff / (gcPassDiff - 1) + (gcTimeDiff.TotalSeconds - diff);
for (var i = 0; i < gcPassDiff; ++i)
{
_gcPeriods.Enqueue(avg);
}
}
_lastGcPass = _lastUpdate;
while (_gcPeriods.Count > GarbageCollectionSamples)
{
_gcPeriods.Dequeue();
}
}
TotalMemory = GC.GetTotalMemory(false);
var processorTimeDiff = processorTime.Subtract(_lastProcessorTime);
ProcessorTimePercent = (float)((processorTimeDiff.TotalSeconds * 100d / Environment.ProcessorCount) / diff);
_lastProcessorTime = processorTime;
_timer.Reset();
_timer.Start();
}
public StackTrace GetMainThreadStackTrace(out Exception ex)
{
if (_mainThread.ThreadState == ThreadState.Stopped)
{
ex = new Exception("Thread stopped");
return null;
}
return GetStackTrace(_mainThread, out ex);
}
// ReSharper disable once UnusedMember.Local
private void Update()
{
if (!(_timer.Elapsed.TotalSeconds > SamplePeriod)) return;
Sample(true);
}
private void OnDestroy()
{
UnityEngine.Debug.Log("Destroying PerformanceSampler");
_stopWatching = true;
_sampleWait.Set();
if (_watcherThread != null && !_stopWait.WaitOne(1000))
{
UnityEngine.Debug.LogWarning("Timeout while stopping watcher thread!");
_watcherThread.Abort();
}
_watcherThread = null;
}
}
}

View file

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a98e98d51707b164eb99d6aa73952dfc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 8800
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,25 +0,0 @@
using System.Linq;
using UnityEngine.UI;
namespace UnityEngine
{
public static class RectTransformEx
{
private static readonly Vector3[] _sCorners = new Vector3[4];
public static Vector2 GetWorldSize(this RectTransform trans)
{
trans.GetWorldCorners(_sCorners);
return new Vector2(_sCorners.Max(x => x.x) - _sCorners.Min(x => x.x), _sCorners.Max(x => x.y) - _sCorners.Min(x => x.y));
}
public static float GetPreferredTextHeight(this RectTransform trans, Text text)
{
if (text == null) return 0;
var settings = text.GetGenerationSettings(new Vector2(trans.rect.size.x, 0.0f));
return text.cachedTextGeneratorForLayout.GetPreferredHeight(text.text, settings) / text.pixelsPerUnit;
}
}
}

View file

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 524199494ffd4ff45acb452bf109b95a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 11000
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,43 +0,0 @@
using System.Collections.Generic;
using System.Linq;
namespace System.Reflection
{
public static class ReflectionEx
{
public static bool Matches(this MethodInfo method, MethodInfo delegateInfo)
{
if (!delegateInfo.ReturnType.IsAssignableFrom(method.ReturnType)) return false;
var mParams = method.GetParameters();
var dParams = delegateInfo.GetParameters();
if (mParams.Length != dParams.Length) return false;
for (var i = 0; i < mParams.Length; ++i)
{
if (!dParams[i].ParameterType.IsAssignableFrom(mParams[i].ParameterType)) return false;
}
return true;
}
public static bool HasAttribute<TAttribute>(this ICustomAttributeProvider obj, bool inherit)
where TAttribute : Attribute
{
return obj.GetCustomAttributes(typeof(TAttribute), inherit).Any();
}
public static TAttribute GetAttribute<TAttribute>(this ICustomAttributeProvider obj, bool inherit)
where TAttribute : Attribute
{
return (TAttribute)obj.GetCustomAttributes(typeof(TAttribute), inherit).FirstOrDefault();
}
public static IEnumerable<TAttribute> GetAttributes<TAttribute>(this ICustomAttributeProvider obj, bool inherit)
where TAttribute : Attribute
{
return obj.GetCustomAttributes(typeof(TAttribute), inherit).Cast<TAttribute>();
}
}
}

View file

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 226e18327cacf9e499983b493038a46d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 6500
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,35 +0,0 @@
using System.Linq;
namespace UnityEngine
{
public abstract class SingletonComponent<TComponent> : MonoBehaviour
where TComponent : SingletonComponent<TComponent>
{
private static TComponent _sInstance;
public static TComponent Instance
{
get { return _sInstance ?? (_sInstance = FindObjectOfType<TComponent>()); }
}
// ReSharper disable once UnusedMember.Local
private void Awake()
{
if (FindObjectsOfType<TComponent>().Any(x => x != this && x.isActiveAndEnabled))
{
DestroyImmediate(this);
return;
}
_sInstance = (TComponent)this;
DontDestroyOnLoad(gameObject);
OnAwake();
}
protected virtual void OnAwake()
{
}
}
}

View file

@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 9ce94c97eec14504599707f5bafd37bd
timeCreated: 1427296668
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,28 +0,0 @@
#if STEAM
using Steamworks;
namespace Facepunch.Steam
{
public static class SteamEx
{
public static string Format(this CSteamID steamID)
{
if (steamID.GetEAccountType() == EAccountType.k_EAccountTypeInvalid ||
steamID.GetEAccountType() == EAccountType.k_EAccountTypeIndividual) {
uint accountID = steamID.GetAccountID().m_AccountID;
if (steamID.GetEUniverse() <= EUniverse.k_EUniversePublic) {
return string.Format("STEAM_0:{0}:{1}", accountID & 1, accountID >> 1);
} else {
return string.Format("STEAM_{2}:{0}:{1}", accountID & 1, accountID >> 1,
(int) steamID.GetEUniverse());
}
} else {
return steamID.ToString();
}
}
}
}
#endif

View file

@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 5e9e8f28de69d7b4b911f327eef3c58f
timeCreated: 1427296668
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -1,62 +0,0 @@
namespace System.IO
{
public static class StreamEx
{
public static void Clear(this Stream stream)
{
stream.Reset();
stream.SetLength(0);
}
public static void Reset(this Stream stream)
{
stream.Seek(0, SeekOrigin.Begin);
}
public static Stream ClearWriteReset(this Stream stream, Action<Stream> write)
{
stream.Clear();
write(stream);
stream.Reset();
return stream;
}
public static Stream ClearWriteReset(this Stream stream, byte[] contents)
{
stream.Clear();
stream.Write(contents, 0, contents.Length);
stream.Reset();
return stream;
}
private const int DefaultCopyBufferSize = 2048;
public static void CopyTo(this Stream from, Stream dest, byte[] buffer = null)
{
buffer = buffer ?? new byte[DefaultCopyBufferSize];
var bufferSize = buffer.Length;
int read;
while ((read = from.Read(buffer, 0, bufferSize)) > 0)
{
dest.Write(buffer, 0, read);
}
}
public static void CopyTo(this Stream from, Stream dest, int length, byte[] buffer = null)
{
buffer = buffer ?? new byte[DefaultCopyBufferSize];
var bufferSize = buffer.Length;
int toRead, read, total = 0;
while ((toRead = Math.Min(length - total, bufferSize)) > 0
&& (read = from.Read(buffer, 0, toRead)) > 0)
{
dest.Write(buffer, 0, read);
total += read;
}
}
}
}

View file

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 2baba2a845843584696d7762a9b2ba3b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 10500
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -18,97 +18,6 @@ namespace UnityEngine
return null;
}
//
// Get all of the children in this transform, recursively
//
public static List<Transform> GetAllChildren(this Transform transform)
{
var list = new List<Transform>();
transform.AddAllChildren(list);
return list;
}
//
// Add all of the children in this transform to this list
//
public static void AddAllChildren(this Transform transform, List<Transform> list)
{
list.Add(transform);
for (int i = 0; i < transform.childCount; i++)
{
transform.GetChild(i).AddAllChildren(list);
}
}
//
// Return all children with the specified tag
//
public static Transform[] GetChildrenWithTag(this Transform transform, string strTag)
{
var children = GetAllChildren(transform);
return children.Where(x => x.CompareTag(strTag)).ToArray();
}
//
// Set local position and rotation to 0
//
public static void Identity(this GameObject go)
{
go.transform.localPosition = Vector3.zero;
go.transform.localRotation = Quaternion.identity;
}
//
// Create an empty child
//
public static GameObject CreateChild(this GameObject go)
{
var child = new GameObject();
child.transform.parent = go.transform;
child.Identity();
return child;
}
//
// Create an empty child
//
public static GameObject CreateChild(this GameObject go, string name)
{
var child = new GameObject(name);
child.transform.parent = go.transform;
child.Identity();
return child;
}
//
// Create a prefab as a child of this game object
//
public static GameObject InstantiateChild(this GameObject go, GameObject prefab)
{
var child = GameObject.Instantiate(prefab) as GameObject;
child.transform.parent = go.transform;
child.Identity();
return child;
}
//
// Create a prefab as a child of this game object
//
public static GameObject InstantiateChild(this GameObject go, GameObject prefab, string name)
{
var child = InstantiateChild(go, prefab);
child.name = name;
return child;
}
//
// Change the layer of every object on this mother fucker
//
public static void SetLayerRecursive(this GameObject go, int Layer)
{
go.layer = Layer;
@ -119,9 +28,6 @@ namespace UnityEngine
}
}
//
// Change the layer of every object on this mother fucker
//
public static void SetLayerRecursive(this GameObject go, string layer)
{
var layerint = LayerMask.NameToLayer(layer);
@ -133,42 +39,5 @@ namespace UnityEngine
go.SetLayerRecursive(layerint);
}
//
// Invoke in x seconds, but only if we're not already invoking
//
public static void InvokeAtomic(this MonoBehaviour mb, string strName, float fDelay)
{
UnityEngine.Profiling.Profiler.BeginSample("InvokeAtomic");
if (!mb.IsInvoking(strName))
{
mb.Invoke(strName, fDelay);
}
UnityEngine.Profiling.Profiler.EndSample();
}
//
// Returns a Bounds object of this object and all of its children's renderers (apart from particle systems)
//
public static Bounds WorkoutRenderBounds(this Transform tx)
{
Bounds b = new Bounds(Vector3.zero, Vector3.zero);
var renderers = tx.GetComponentsInChildren<Renderer>();
foreach (var r in renderers)
{
//if (r is ParticleRenderer) continue; // no longer available in newer versions of Unity
if (r is ParticleSystemRenderer) continue;
if (b.center == Vector3.zero)
b = r.bounds;
else
b.Encapsulate(r.bounds);
}
return b;
}
}
}