From 49a78c0d3f625521f50f7cd204ec06b792abbc5d Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 27 Nov 2016 05:47:38 +0700 Subject: [PATCH] physics to addons --- Assets/IsoTools/Addons/Physics.meta | 9 ++ Assets/IsoTools/Addons/Physics/Internal.meta | 9 ++ .../Physics}/Internal/IsoFakeCollider.cs | 2 +- .../Physics}/Internal/IsoFakeCollider.cs.meta | 0 .../Internal/IsoFakeCollisionListener.cs | 2 +- .../Internal/IsoFakeCollisionListener.cs.meta | 0 .../Physics}/Internal/IsoFakeObject.cs | 6 +- .../Physics}/Internal/IsoFakeObject.cs.meta | 0 .../Physics}/Internal/IsoFakeRigidbody.cs | 2 +- .../Internal/IsoFakeRigidbody.cs.meta | 0 .../Internal/IsoFakeTriggerListener.cs | 6 +- .../Internal/IsoFakeTriggerListener.cs.meta | 0 .../Physics/Internal/IsoPhysicsHelper.cs} | 4 +- .../Internal/IsoPhysicsHelper.cs.meta} | 0 .../Internal/IsoPhysicsHelperHolder.cs | 26 ++++ .../Internal/IsoPhysicsHelperHolder.cs.meta} | 0 .../Physics/Internal/IsoPhysicsUtils.cs | 37 ++++++ .../Physics/Internal/IsoPhysicsUtils.cs.meta | 12 ++ .../Physics}/IsoBoxCollider.cs | 2 +- .../Physics}/IsoBoxCollider.cs.meta | 0 .../Physics}/IsoCapsuleCollider.cs | 2 +- .../Physics}/IsoCapsuleCollider.cs.meta | 0 .../Physics}/IsoCollider.cs | 8 +- .../Physics}/IsoCollider.cs.meta | 0 .../Physics}/IsoCollision.cs | 12 +- .../Physics}/IsoCollision.cs.meta | 0 .../Physics}/IsoCollisionListener.cs | 6 +- .../Physics}/IsoCollisionListener.cs.meta | 0 .../Physics}/IsoContactPoint.cs | 8 +- .../Physics}/IsoContactPoint.cs.meta | 0 Assets/IsoTools/Addons/Physics/IsoPhysics.cs | 120 ++++++++++++++++++ .../Addons/Physics/IsoPhysics.cs.meta | 12 ++ .../Physics}/IsoRaycastHit.cs | 8 +- .../Physics}/IsoRaycastHit.cs.meta | 0 .../Physics}/IsoRigidbody.cs | 9 +- .../Physics}/IsoRigidbody.cs.meta | 0 .../Physics}/IsoSphereCollider.cs | 2 +- .../Physics}/IsoSphereCollider.cs.meta | 0 .../Physics}/IsoTriggerListener.cs | 6 +- .../Physics}/IsoTriggerListener.cs.meta | 0 .../Scripts/Dragosha/PlayerController.cs | 1 + .../Scripts/Kenney/AlienBallController.cs | 1 + .../Examples/Scripts/Kenney/AlienDestroyer.cs | 3 +- .../Scripts/Kenney/PhysicEchoListener.cs | 1 + .../Scripts/Kenney/PlayerController.cs | 1 + .../Scripts/Internal/IsoPhysicHelperHolder.cs | 25 ---- 46 files changed, 274 insertions(+), 68 deletions(-) create mode 100644 Assets/IsoTools/Addons/Physics.meta create mode 100644 Assets/IsoTools/Addons/Physics/Internal.meta rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeCollider.cs (88%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeCollider.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeCollisionListener.cs (94%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeCollisionListener.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeObject.cs (79%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeObject.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeRigidbody.cs (89%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeRigidbody.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeTriggerListener.cs (80%) rename Assets/IsoTools/{Scripts => Addons/Physics}/Internal/IsoFakeTriggerListener.cs.meta (100%) rename Assets/IsoTools/{Scripts/Internal/IsoPhysicHelper.cs => Addons/Physics/Internal/IsoPhysicsHelper.cs} (89%) rename Assets/IsoTools/{Scripts/Internal/IsoPhysicHelper.cs.meta => Addons/Physics/Internal/IsoPhysicsHelper.cs.meta} (100%) create mode 100644 Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelperHolder.cs rename Assets/IsoTools/{Scripts/Internal/IsoPhysicHelperHolder.cs.meta => Addons/Physics/Internal/IsoPhysicsHelperHolder.cs.meta} (100%) create mode 100644 Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs create mode 100644 Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs.meta rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoBoxCollider.cs (98%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoBoxCollider.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCapsuleCollider.cs (98%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCapsuleCollider.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCollider.cs (92%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCollider.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCollision.cs (60%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCollision.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCollisionListener.cs (74%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoCollisionListener.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoContactPoint.cs (70%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoContactPoint.cs.meta (100%) create mode 100644 Assets/IsoTools/Addons/Physics/IsoPhysics.cs create mode 100644 Assets/IsoTools/Addons/Physics/IsoPhysics.cs.meta rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoRaycastHit.cs (70%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoRaycastHit.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoRigidbody.cs (97%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoRigidbody.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoSphereCollider.cs (98%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoSphereCollider.cs.meta (100%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoTriggerListener.cs (74%) rename Assets/IsoTools/{Scripts => Addons/Physics}/IsoTriggerListener.cs.meta (100%) delete mode 100644 Assets/IsoTools/Scripts/Internal/IsoPhysicHelperHolder.cs diff --git a/Assets/IsoTools/Addons/Physics.meta b/Assets/IsoTools/Addons/Physics.meta new file mode 100644 index 0000000..93cb46f --- /dev/null +++ b/Assets/IsoTools/Addons/Physics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8dd47e4d38ef9485586318e48755aff9 +folderAsset: yes +timeCreated: 1480174284 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/IsoTools/Addons/Physics/Internal.meta b/Assets/IsoTools/Addons/Physics/Internal.meta new file mode 100644 index 0000000..a938649 --- /dev/null +++ b/Assets/IsoTools/Addons/Physics/Internal.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e3a035a6c93424c7a98d81c8cb5aad1c +folderAsset: yes +timeCreated: 1480174340 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeCollider.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollider.cs similarity index 88% rename from Assets/IsoTools/Scripts/Internal/IsoFakeCollider.cs rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollider.cs index e55e053..a171805 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoFakeCollider.cs +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollider.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace IsoTools.Internal { +namespace IsoTools.Physics.Internal { public class IsoFakeCollider : MonoBehaviour { IsoCollider _isoCollider = null; diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeCollider.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollider.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoFakeCollider.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollider.cs.meta diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollisionListener.cs similarity index 94% rename from Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollisionListener.cs index 0548293..bd012dc 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollisionListener.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace IsoTools.Internal { +namespace IsoTools.Physics.Internal { public class IsoFakeCollisionListener : MonoBehaviour { GameObject _realGameObject = null; diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollisionListener.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeCollisionListener.cs.meta diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeObject.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeObject.cs similarity index 79% rename from Assets/IsoTools/Scripts/Internal/IsoFakeObject.cs rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeObject.cs index 6d15f01..1044904 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoFakeObject.cs +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeObject.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace IsoTools.Internal { +namespace IsoTools.Physics.Internal { public class IsoFakeObject : MonoBehaviour { IsoObject _isoObject = null; @@ -25,9 +25,9 @@ namespace IsoTools.Internal { void FixedUpdate() { CheckLayers(); - if ( !IsoUtils.Vec3Approximately(_lastPosition, isoObject.position) ) { + if ( _lastPosition != isoObject.position ) { _lastPosition = transform.position = isoObject.position; - } else if ( !IsoUtils.Vec3Approximately(_lastPosition, transform.position) ) { + } else if ( _lastPosition != transform.position ) { _lastPosition = isoObject.position = transform.position; } } diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeObject.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeObject.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoFakeObject.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeObject.cs.meta diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeRigidbody.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeRigidbody.cs similarity index 89% rename from Assets/IsoTools/Scripts/Internal/IsoFakeRigidbody.cs rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeRigidbody.cs index 50635c7..43be2b9 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoFakeRigidbody.cs +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeRigidbody.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace IsoTools.Internal { +namespace IsoTools.Physics.Internal { public class IsoFakeRigidbody : MonoBehaviour { IsoRigidbody _isoRigidbody = null; diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeRigidbody.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeRigidbody.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoFakeRigidbody.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeRigidbody.cs.meta diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeTriggerListener.cs similarity index 80% rename from Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeTriggerListener.cs index f78bd0d..b3fb4d1 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeTriggerListener.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace IsoTools.Internal { +namespace IsoTools.Physics.Internal { public class IsoFakeTriggerListener : MonoBehaviour { GameObject _realGameObject = null; @@ -12,14 +12,14 @@ namespace IsoTools.Internal { void OnTriggerEnter(Collider collider) { _realGameObject.SendMessage( "OnIsoTriggerEnter", - IsoUtils.IsoConvertCollider(collider), + IsoPhysicsUtils.IsoConvertCollider(collider), SendMessageOptions.DontRequireReceiver); } void OnTriggerExit(Collider collider) { _realGameObject.SendMessage( "OnIsoTriggerExit", - IsoUtils.IsoConvertCollider(collider), + IsoPhysicsUtils.IsoConvertCollider(collider), SendMessageOptions.DontRequireReceiver); } } diff --git a/Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoFakeTriggerListener.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoFakeTriggerListener.cs.meta diff --git a/Assets/IsoTools/Scripts/Internal/IsoPhysicHelper.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelper.cs similarity index 89% rename from Assets/IsoTools/Scripts/Internal/IsoPhysicHelper.cs rename to Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelper.cs index 564fa11..2aebd1f 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoPhysicHelper.cs +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelper.cs @@ -1,9 +1,9 @@ using UnityEngine; -namespace IsoTools.Internal { +namespace IsoTools.Physics.Internal { [DisallowMultipleComponent] [RequireComponent(typeof(IsoObject))] - public class IsoPhysicHelper : MonoBehaviour { + public class IsoPhysicsHelper : MonoBehaviour { GameObject _isoFakeObject = null; public GameObject isoFakeObject { diff --git a/Assets/IsoTools/Scripts/Internal/IsoPhysicHelper.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelper.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoPhysicHelper.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelper.cs.meta diff --git a/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelperHolder.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelperHolder.cs new file mode 100644 index 0000000..e7e1b18 --- /dev/null +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelperHolder.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using IsoTools.Internal; +using System.Collections.Generic; + +namespace IsoTools.Physics.Internal { + public class IsoPhysicsHelperHolder : MonoBehaviour { + + static List _tmpHolders = new List(7); + + protected GameObject fakeObject { + get { return physicsHelper.isoFakeObject; } + } + + protected IsoPhysicsHelper physicsHelper { + get { return IsoUtils.GetOrCreateComponent(gameObject); } + } + + protected void DestroyUnnecessaryCheck() { + GetComponents(_tmpHolders); + if ( _tmpHolders.Count == 1 && _tmpHolders[0] == this ) { + Destroy(physicsHelper); + } + _tmpHolders.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/IsoTools/Scripts/Internal/IsoPhysicHelperHolder.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelperHolder.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/Internal/IsoPhysicHelperHolder.cs.meta rename to Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsHelperHolder.cs.meta diff --git a/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs new file mode 100644 index 0000000..b7de3eb --- /dev/null +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs @@ -0,0 +1,37 @@ +using UnityEngine; + +namespace IsoTools.Physics.Internal { + public static class IsoPhysicsUtils { + public static IsoCollider IsoConvertCollider(Collider collider) { + var fake_collider = collider ? collider.GetComponent() : null; + return fake_collider ? fake_collider.isoCollider : null; + } + + public static IsoRigidbody IsoConvertRigidbody(Rigidbody rigidbody) { + var fake_rigidbody = rigidbody ? rigidbody.GetComponent() : null; + return fake_rigidbody ? fake_rigidbody.isoRigidbody : null; + } + + public static GameObject IsoConvertGameObject(GameObject game_object) { + var fake_object = game_object ? game_object.GetComponent() : null; + var iso_object = fake_object ? fake_object.isoObject : null; + return iso_object ? iso_object.gameObject : null; + } + + public static IsoContactPoint[] IsoConvertContactPoints(ContactPoint[] points) { + var iso_points = new IsoContactPoint[points.Length]; + for ( int i = 0, e = points.Length; i < e; ++i ) { + iso_points[i] = new IsoContactPoint(points[i]); + } + return iso_points; + } + + public static IsoRaycastHit[] IsoConvertRaycastHits(RaycastHit[] hits) { + var iso_hits = new IsoRaycastHit[hits.Length]; + for ( int i = 0, e = hits.Length; i < e; ++i ) { + iso_hits[i] = new IsoRaycastHit(hits[i]); + } + return iso_hits; + } + } +} \ No newline at end of file diff --git a/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs.meta b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs.meta new file mode 100644 index 0000000..b6f23ed --- /dev/null +++ b/Assets/IsoTools/Addons/Physics/Internal/IsoPhysicsUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0d44532ca15804cdc997583d81cf4df1 +timeCreated: 1480196616 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/IsoTools/Scripts/IsoBoxCollider.cs b/Assets/IsoTools/Addons/Physics/IsoBoxCollider.cs similarity index 98% rename from Assets/IsoTools/Scripts/IsoBoxCollider.cs rename to Assets/IsoTools/Addons/Physics/IsoBoxCollider.cs index 4d50aa3..8655ad4 100644 --- a/Assets/IsoTools/Scripts/IsoBoxCollider.cs +++ b/Assets/IsoTools/Addons/Physics/IsoBoxCollider.cs @@ -5,7 +5,7 @@ using IsoTools.Internal; using UnityEditor; #endif -namespace IsoTools { +namespace IsoTools.Physics { [RequireComponent(typeof(IsoObject))] public class IsoBoxCollider : IsoCollider { diff --git a/Assets/IsoTools/Scripts/IsoBoxCollider.cs.meta b/Assets/IsoTools/Addons/Physics/IsoBoxCollider.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoBoxCollider.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoBoxCollider.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoCapsuleCollider.cs b/Assets/IsoTools/Addons/Physics/IsoCapsuleCollider.cs similarity index 98% rename from Assets/IsoTools/Scripts/IsoCapsuleCollider.cs rename to Assets/IsoTools/Addons/Physics/IsoCapsuleCollider.cs index f70ed97..2f9c842 100644 --- a/Assets/IsoTools/Scripts/IsoCapsuleCollider.cs +++ b/Assets/IsoTools/Addons/Physics/IsoCapsuleCollider.cs @@ -5,7 +5,7 @@ using IsoTools.Internal; using UnityEditor; #endif -namespace IsoTools { +namespace IsoTools.Physics { [RequireComponent(typeof(IsoObject))] public class IsoCapsuleCollider : IsoCollider { diff --git a/Assets/IsoTools/Scripts/IsoCapsuleCollider.cs.meta b/Assets/IsoTools/Addons/Physics/IsoCapsuleCollider.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoCapsuleCollider.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoCapsuleCollider.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoCollider.cs b/Assets/IsoTools/Addons/Physics/IsoCollider.cs similarity index 92% rename from Assets/IsoTools/Scripts/IsoCollider.cs rename to Assets/IsoTools/Addons/Physics/IsoCollider.cs index e5ea36e..2b1bb4a 100644 --- a/Assets/IsoTools/Scripts/IsoCollider.cs +++ b/Assets/IsoTools/Addons/Physics/IsoCollider.cs @@ -1,13 +1,13 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; #if UNITY_EDITOR using UnityEditor; #endif -namespace IsoTools { +namespace IsoTools.Physics { [RequireComponent(typeof(IsoObject))] - public abstract class IsoCollider : IsoPhysicHelperHolder { + public abstract class IsoCollider : IsoPhysicsHelperHolder { protected abstract Collider CreateRealCollider(GameObject target); IsoFakeCollider _fakeCollider; @@ -44,7 +44,7 @@ namespace IsoTools { public IsoRigidbody attachedRigidbody { get { return realCollider - ? IsoUtils.IsoConvertRigidbody(realCollider.attachedRigidbody) + ? IsoPhysicsUtils.IsoConvertRigidbody(realCollider.attachedRigidbody) : null; } } diff --git a/Assets/IsoTools/Scripts/IsoCollider.cs.meta b/Assets/IsoTools/Addons/Physics/IsoCollider.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoCollider.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoCollider.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoCollision.cs b/Assets/IsoTools/Addons/Physics/IsoCollision.cs similarity index 60% rename from Assets/IsoTools/Scripts/IsoCollision.cs rename to Assets/IsoTools/Addons/Physics/IsoCollision.cs index 4ba4bff..108ae05 100644 --- a/Assets/IsoTools/Scripts/IsoCollision.cs +++ b/Assets/IsoTools/Addons/Physics/IsoCollision.cs @@ -1,7 +1,7 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; -namespace IsoTools { +namespace IsoTools.Physics { public class IsoCollision { public IsoCollider collider { get; private set; } @@ -12,12 +12,12 @@ namespace IsoTools { public IsoRigidbody rigidbody { get; private set; } public IsoCollision(Collision collision) { - collider = IsoUtils.IsoConvertCollider(collision.collider); - contacts = IsoUtils.IsoConvertContactPoints(collision.contacts); - gameObject = IsoUtils.IsoConvertGameObject(collision.gameObject); + collider = IsoPhysicsUtils.IsoConvertCollider(collision.collider); + contacts = IsoPhysicsUtils.IsoConvertContactPoints(collision.contacts); + gameObject = IsoPhysicsUtils.IsoConvertGameObject(collision.gameObject); impulse = collision.impulse; relativeVelocity = collision.relativeVelocity; - rigidbody = IsoUtils.IsoConvertRigidbody(collision.rigidbody); + rigidbody = IsoPhysicsUtils.IsoConvertRigidbody(collision.rigidbody); } } } \ No newline at end of file diff --git a/Assets/IsoTools/Scripts/IsoCollision.cs.meta b/Assets/IsoTools/Addons/Physics/IsoCollision.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoCollision.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoCollision.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoCollisionListener.cs b/Assets/IsoTools/Addons/Physics/IsoCollisionListener.cs similarity index 74% rename from Assets/IsoTools/Scripts/IsoCollisionListener.cs rename to Assets/IsoTools/Addons/Physics/IsoCollisionListener.cs index cbda7aa..3036afa 100644 --- a/Assets/IsoTools/Scripts/IsoCollisionListener.cs +++ b/Assets/IsoTools/Addons/Physics/IsoCollisionListener.cs @@ -1,10 +1,10 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; -namespace IsoTools { +namespace IsoTools.Physics { [DisallowMultipleComponent] [RequireComponent(typeof(IsoObject))] - public class IsoCollisionListener : IsoPhysicHelperHolder { + public class IsoCollisionListener : IsoPhysicsHelperHolder { IsoFakeCollisionListener _fakeListener; diff --git a/Assets/IsoTools/Scripts/IsoCollisionListener.cs.meta b/Assets/IsoTools/Addons/Physics/IsoCollisionListener.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoCollisionListener.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoCollisionListener.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoContactPoint.cs b/Assets/IsoTools/Addons/Physics/IsoContactPoint.cs similarity index 70% rename from Assets/IsoTools/Scripts/IsoContactPoint.cs rename to Assets/IsoTools/Addons/Physics/IsoContactPoint.cs index 2c7e545..393502e 100644 --- a/Assets/IsoTools/Scripts/IsoContactPoint.cs +++ b/Assets/IsoTools/Addons/Physics/IsoContactPoint.cs @@ -1,7 +1,7 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; -namespace IsoTools { +namespace IsoTools.Physics { public struct IsoContactPoint { public Vector3 normal { get; private set; } @@ -12,10 +12,10 @@ namespace IsoTools { public IsoContactPoint(ContactPoint contact_point) : this() { normal = contact_point.normal; - otherCollider = IsoUtils.IsoConvertCollider(contact_point.otherCollider); + otherCollider = IsoPhysicsUtils.IsoConvertCollider(contact_point.otherCollider); point = contact_point.point; separation = contact_point.separation; - thisCollider = IsoUtils.IsoConvertCollider(contact_point.thisCollider); + thisCollider = IsoPhysicsUtils.IsoConvertCollider(contact_point.thisCollider); } } } \ No newline at end of file diff --git a/Assets/IsoTools/Scripts/IsoContactPoint.cs.meta b/Assets/IsoTools/Addons/Physics/IsoContactPoint.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoContactPoint.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoContactPoint.cs.meta diff --git a/Assets/IsoTools/Addons/Physics/IsoPhysics.cs b/Assets/IsoTools/Addons/Physics/IsoPhysics.cs new file mode 100644 index 0000000..984cedd --- /dev/null +++ b/Assets/IsoTools/Addons/Physics/IsoPhysics.cs @@ -0,0 +1,120 @@ +using UnityEngine; +using IsoTools.Physics.Internal; + +namespace IsoTools.Physics { + public static class IsoPhysics { + + // + // Raycast + // + + public static bool Raycast(Ray ray, out IsoRaycastHit iso_hit_info) { + return Raycast(ray, out iso_hit_info, + Mathf.Infinity, UnityEngine.Physics.DefaultRaycastLayers, + QueryTriggerInteraction.UseGlobal); + } + + public static bool Raycast(Ray ray, out IsoRaycastHit iso_hit_info, + float max_distance) + { + return Raycast(ray, out iso_hit_info, + max_distance, UnityEngine.Physics.DefaultRaycastLayers, + QueryTriggerInteraction.UseGlobal); + } + + public static bool Raycast(Ray ray, out IsoRaycastHit iso_hit_info, + float max_distance, int layer_mask) + { + return Raycast(ray, out iso_hit_info, + max_distance, layer_mask, + QueryTriggerInteraction.UseGlobal); + } + + public static bool Raycast(Ray ray, out IsoRaycastHit iso_hit_info, + float max_distance, int layer_mask, + QueryTriggerInteraction query_trigger_interaction) + { + var hit_info = new RaycastHit(); + var result = UnityEngine.Physics.Raycast(ray, out hit_info, + max_distance, layer_mask, query_trigger_interaction); + iso_hit_info = result ? new IsoRaycastHit(hit_info) : new IsoRaycastHit(); + return result; + } + + // + // RaycastAll + // + + public static IsoRaycastHit[] RaycastAll(Ray ray) { + return RaycastAll(ray, + Mathf.Infinity, UnityEngine.Physics.DefaultRaycastLayers, + QueryTriggerInteraction.UseGlobal); + } + + public static IsoRaycastHit[] RaycastAll(Ray ray, + float max_distance) + { + return RaycastAll(ray, + max_distance, UnityEngine.Physics.DefaultRaycastLayers, + QueryTriggerInteraction.UseGlobal); + } + + public static IsoRaycastHit[] RaycastAll(Ray ray, + float max_distance, int layer_mask) + { + return RaycastAll(ray, + max_distance, layer_mask, + QueryTriggerInteraction.UseGlobal); + } + + public static IsoRaycastHit[] RaycastAll(Ray ray, + float max_distance, int layer_mask, + QueryTriggerInteraction query_trigger_interaction) + { + var hits_info = UnityEngine.Physics.RaycastAll(ray, + max_distance, layer_mask, query_trigger_interaction); + return IsoPhysicsUtils.IsoConvertRaycastHits(hits_info); + } + + // + // RaycastNonAlloc + // + + public static int RaycastNonAlloc(Ray ray, IsoRaycastHit[] results) { + return RaycastNonAlloc(ray, results, + Mathf.Infinity, UnityEngine.Physics.DefaultRaycastLayers, + QueryTriggerInteraction.UseGlobal); + } + + public static int RaycastNonAlloc(Ray ray, IsoRaycastHit[] results, + float max_distance) + { + return RaycastNonAlloc(ray, results, + max_distance, UnityEngine.Physics.DefaultRaycastLayers, + QueryTriggerInteraction.UseGlobal); + } + + public static int RaycastNonAlloc(Ray ray, IsoRaycastHit[] results, + float max_distance, int layer_mask) + { + return RaycastNonAlloc(ray, results, + max_distance, layer_mask, + QueryTriggerInteraction.UseGlobal); + } + + static RaycastHit[] _raycastNonAllocBuffer = new RaycastHit[128]; + public static int RaycastNonAlloc(Ray ray, IsoRaycastHit[] results, + float max_distance, int layer_mask, + QueryTriggerInteraction query_trigger_interaction) + { + var hit_count = UnityEngine.Physics.RaycastNonAlloc(ray, _raycastNonAllocBuffer, + max_distance, layer_mask, query_trigger_interaction); + var min_hit_count = Mathf.Min(hit_count, results.Length); + for ( var i = 0; i < min_hit_count; ++i ) { + results[i] = new IsoRaycastHit(_raycastNonAllocBuffer[i]); + } + System.Array.Clear(_raycastNonAllocBuffer, 0, _raycastNonAllocBuffer.Length); + return min_hit_count; + } + } +} \ No newline at end of file diff --git a/Assets/IsoTools/Addons/Physics/IsoPhysics.cs.meta b/Assets/IsoTools/Addons/Physics/IsoPhysics.cs.meta new file mode 100644 index 0000000..b4f938a --- /dev/null +++ b/Assets/IsoTools/Addons/Physics/IsoPhysics.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 40ab1c30204174ffa8d877e00af23a62 +timeCreated: 1480174712 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/IsoTools/Scripts/IsoRaycastHit.cs b/Assets/IsoTools/Addons/Physics/IsoRaycastHit.cs similarity index 70% rename from Assets/IsoTools/Scripts/IsoRaycastHit.cs rename to Assets/IsoTools/Addons/Physics/IsoRaycastHit.cs index 5999a38..447be2e 100644 --- a/Assets/IsoTools/Scripts/IsoRaycastHit.cs +++ b/Assets/IsoTools/Addons/Physics/IsoRaycastHit.cs @@ -1,7 +1,7 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; -namespace IsoTools { +namespace IsoTools.Physics { public struct IsoRaycastHit { public IsoCollider collider { get; private set; } @@ -11,11 +11,11 @@ namespace IsoTools { public IsoRigidbody rigidbody { get; private set; } public IsoRaycastHit(RaycastHit hit_info) : this() { - collider = IsoUtils.IsoConvertCollider(hit_info.collider); + collider = IsoPhysicsUtils.IsoConvertCollider(hit_info.collider); distance = hit_info.distance; normal = hit_info.normal; point = hit_info.point; - rigidbody = IsoUtils.IsoConvertRigidbody(hit_info.rigidbody); + rigidbody = IsoPhysicsUtils.IsoConvertRigidbody(hit_info.rigidbody); } } } \ No newline at end of file diff --git a/Assets/IsoTools/Scripts/IsoRaycastHit.cs.meta b/Assets/IsoTools/Addons/Physics/IsoRaycastHit.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoRaycastHit.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoRaycastHit.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoRigidbody.cs b/Assets/IsoTools/Addons/Physics/IsoRigidbody.cs similarity index 97% rename from Assets/IsoTools/Scripts/IsoRigidbody.cs rename to Assets/IsoTools/Addons/Physics/IsoRigidbody.cs index b0ac90d..a94c4c9 100644 --- a/Assets/IsoTools/Scripts/IsoRigidbody.cs +++ b/Assets/IsoTools/Addons/Physics/IsoRigidbody.cs @@ -1,14 +1,14 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; #if UNITY_EDITOR using UnityEditor; #endif -namespace IsoTools { +namespace IsoTools.Physics { [DisallowMultipleComponent] [RequireComponent(typeof(IsoObject))] - public class IsoRigidbody : IsoPhysicHelperHolder { + public class IsoRigidbody : IsoPhysicsHelperHolder { IsoFakeRigidbody _fakeRigidbody; @@ -330,7 +330,8 @@ namespace IsoTools { float max_distance, QueryTriggerInteraction query_trigger_interaction) { return realRigidbody - ? IsoUtils.IsoConvertRaycastHits(realRigidbody.SweepTestAll(direction, max_distance, query_trigger_interaction)) + ? IsoPhysicsUtils.IsoConvertRaycastHits( + realRigidbody.SweepTestAll(direction, max_distance, query_trigger_interaction)) : new IsoRaycastHit[0]; } diff --git a/Assets/IsoTools/Scripts/IsoRigidbody.cs.meta b/Assets/IsoTools/Addons/Physics/IsoRigidbody.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoRigidbody.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoRigidbody.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoSphereCollider.cs b/Assets/IsoTools/Addons/Physics/IsoSphereCollider.cs similarity index 98% rename from Assets/IsoTools/Scripts/IsoSphereCollider.cs rename to Assets/IsoTools/Addons/Physics/IsoSphereCollider.cs index dd20b46..bd45025 100644 --- a/Assets/IsoTools/Scripts/IsoSphereCollider.cs +++ b/Assets/IsoTools/Addons/Physics/IsoSphereCollider.cs @@ -5,7 +5,7 @@ using IsoTools.Internal; using UnityEditor; #endif -namespace IsoTools { +namespace IsoTools.Physics { [RequireComponent(typeof(IsoObject))] public class IsoSphereCollider : IsoCollider { diff --git a/Assets/IsoTools/Scripts/IsoSphereCollider.cs.meta b/Assets/IsoTools/Addons/Physics/IsoSphereCollider.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoSphereCollider.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoSphereCollider.cs.meta diff --git a/Assets/IsoTools/Scripts/IsoTriggerListener.cs b/Assets/IsoTools/Addons/Physics/IsoTriggerListener.cs similarity index 74% rename from Assets/IsoTools/Scripts/IsoTriggerListener.cs rename to Assets/IsoTools/Addons/Physics/IsoTriggerListener.cs index f1e6cf3..84711aa 100644 --- a/Assets/IsoTools/Scripts/IsoTriggerListener.cs +++ b/Assets/IsoTools/Addons/Physics/IsoTriggerListener.cs @@ -1,10 +1,10 @@ using UnityEngine; -using IsoTools.Internal; +using IsoTools.Physics.Internal; -namespace IsoTools { +namespace IsoTools.Physics { [DisallowMultipleComponent] [RequireComponent(typeof(IsoObject))] - public class IsoTriggerListener : IsoPhysicHelperHolder { + public class IsoTriggerListener : IsoPhysicsHelperHolder { IsoFakeTriggerListener _fakeListener; diff --git a/Assets/IsoTools/Scripts/IsoTriggerListener.cs.meta b/Assets/IsoTools/Addons/Physics/IsoTriggerListener.cs.meta similarity index 100% rename from Assets/IsoTools/Scripts/IsoTriggerListener.cs.meta rename to Assets/IsoTools/Addons/Physics/IsoTriggerListener.cs.meta diff --git a/Assets/IsoTools/Examples/Scripts/Dragosha/PlayerController.cs b/Assets/IsoTools/Examples/Scripts/Dragosha/PlayerController.cs index e344b13..a865743 100644 --- a/Assets/IsoTools/Examples/Scripts/Dragosha/PlayerController.cs +++ b/Assets/IsoTools/Examples/Scripts/Dragosha/PlayerController.cs @@ -1,4 +1,5 @@ using UnityEngine; +using IsoTools.Physics; namespace IsoTools.Examples.Dragosha { [RequireComponent(typeof(IsoRigidbody))] diff --git a/Assets/IsoTools/Examples/Scripts/Kenney/AlienBallController.cs b/Assets/IsoTools/Examples/Scripts/Kenney/AlienBallController.cs index 5802aaa..028970a 100644 --- a/Assets/IsoTools/Examples/Scripts/Kenney/AlienBallController.cs +++ b/Assets/IsoTools/Examples/Scripts/Kenney/AlienBallController.cs @@ -1,4 +1,5 @@ using UnityEngine; +using IsoTools.Physics; using System.Collections; namespace IsoTools.Examples.Kenney { diff --git a/Assets/IsoTools/Examples/Scripts/Kenney/AlienDestroyer.cs b/Assets/IsoTools/Examples/Scripts/Kenney/AlienDestroyer.cs index 316e0f6..7ddf6d5 100644 --- a/Assets/IsoTools/Examples/Scripts/Kenney/AlienDestroyer.cs +++ b/Assets/IsoTools/Examples/Scripts/Kenney/AlienDestroyer.cs @@ -1,4 +1,5 @@ using UnityEngine; +using IsoTools.Physics; using System.Collections; namespace IsoTools.Examples.Kenney { @@ -8,7 +9,7 @@ namespace IsoTools.Examples.Kenney { if ( iso_world && Input.GetMouseButtonDown(0) ) { var iso_mouse_pos = iso_world.MouseIsoPosition(); var ray_from_iso_camera = iso_world.RayFromIsoCameraToIsoPoint(iso_mouse_pos); - var hits = iso_world.RaycastAll(ray_from_iso_camera); + var hits = IsoPhysics.RaycastAll(ray_from_iso_camera); for ( var i = 0; i < hits.Length; ++i ) { var alien_go = hits[i].collider.gameObject; if ( alien_go.GetComponent() ) { diff --git a/Assets/IsoTools/Examples/Scripts/Kenney/PhysicEchoListener.cs b/Assets/IsoTools/Examples/Scripts/Kenney/PhysicEchoListener.cs index 428fadc..59f5933 100644 --- a/Assets/IsoTools/Examples/Scripts/Kenney/PhysicEchoListener.cs +++ b/Assets/IsoTools/Examples/Scripts/Kenney/PhysicEchoListener.cs @@ -1,4 +1,5 @@ using UnityEngine; +using IsoTools.Physics; using System.Collections; namespace IsoTools.Examples.Kenney { diff --git a/Assets/IsoTools/Examples/Scripts/Kenney/PlayerController.cs b/Assets/IsoTools/Examples/Scripts/Kenney/PlayerController.cs index 9996cd7..6571547 100644 --- a/Assets/IsoTools/Examples/Scripts/Kenney/PlayerController.cs +++ b/Assets/IsoTools/Examples/Scripts/Kenney/PlayerController.cs @@ -1,4 +1,5 @@ using UnityEngine; +using IsoTools.Physics; namespace IsoTools.Examples.Kenney { [RequireComponent(typeof(IsoRigidbody))] diff --git a/Assets/IsoTools/Scripts/Internal/IsoPhysicHelperHolder.cs b/Assets/IsoTools/Scripts/Internal/IsoPhysicHelperHolder.cs deleted file mode 100644 index bb1f288..0000000 --- a/Assets/IsoTools/Scripts/Internal/IsoPhysicHelperHolder.cs +++ /dev/null @@ -1,25 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace IsoTools.Internal { - public class IsoPhysicHelperHolder : MonoBehaviour { - - static List _tmpHolders = new List(7); - - protected GameObject fakeObject { - get { return physicHelper.isoFakeObject; } - } - - protected IsoPhysicHelper physicHelper { - get { return IsoUtils.GetOrCreateComponent(gameObject); } - } - - protected void DestroyUnnecessaryCheck() { - GetComponents(_tmpHolders); - if ( _tmpHolders.Count == 1 && _tmpHolders[0] == this ) { - Destroy(physicHelper); - } - _tmpHolders.Clear(); - } - } -} \ No newline at end of file