mirror of
https://github.com/BlackMATov/unity-iso-tools.git
synced 2025-12-16 14:09:00 +07:00
begin physic events optimization
This commit is contained in:
30
Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs
Normal file
30
Assets/IsoTools/Scripts/Internal/IsoFakeCollisionListener.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace IsoTools.Internal {
|
||||
public class IsoFakeCollisionListener : MonoBehaviour {
|
||||
IsoCollisionListener _isoListener = null;
|
||||
|
||||
public IsoFakeCollisionListener Init(IsoCollisionListener iso_listener) {
|
||||
_isoListener = iso_listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
IsoCollisionListener isoListener {
|
||||
get { return _isoListener; }
|
||||
}
|
||||
|
||||
void OnCollisionEnter(Collision collision) {
|
||||
isoListener.gameObject.SendMessage(
|
||||
"OnIsoCollisionEnter",
|
||||
new IsoCollision(collision),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnCollisionExit(Collision collision) {
|
||||
isoListener.gameObject.SendMessage(
|
||||
"OnIsoCollisionExit",
|
||||
new IsoCollision(collision),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b3ba702b17e9f4b85aad7b29b1a06eed
|
||||
timeCreated: 1461097028
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -31,33 +31,5 @@ namespace IsoTools.Internal {
|
||||
_lastPosition = isoObject.position = transform.position;
|
||||
}
|
||||
}
|
||||
|
||||
void OnTriggerEnter(Collider collider) {
|
||||
isoObject.gameObject.SendMessage(
|
||||
"OnIsoTriggerEnter",
|
||||
IsoUtils.IsoConvertCollider(collider),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnTriggerExit(Collider collider) {
|
||||
isoObject.gameObject.SendMessage(
|
||||
"OnIsoTriggerExit",
|
||||
IsoUtils.IsoConvertCollider(collider),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnCollisionEnter(Collision collision) {
|
||||
isoObject.gameObject.SendMessage(
|
||||
"OnIsoCollisionEnter",
|
||||
new IsoCollision(collision),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnCollisionExit(Collision collision) {
|
||||
isoObject.gameObject.SendMessage(
|
||||
"OnIsoCollisionExit",
|
||||
new IsoCollision(collision),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
30
Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs
Normal file
30
Assets/IsoTools/Scripts/Internal/IsoFakeTriggerListener.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace IsoTools.Internal {
|
||||
public class IsoFakeTriggerListener : MonoBehaviour {
|
||||
IsoTriggerListener _isoListener = null;
|
||||
|
||||
public IsoFakeTriggerListener Init(IsoTriggerListener iso_listener) {
|
||||
_isoListener = iso_listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
IsoTriggerListener isoListener {
|
||||
get { return _isoListener; }
|
||||
}
|
||||
|
||||
void OnTriggerEnter(Collider collider) {
|
||||
isoListener.gameObject.SendMessage(
|
||||
"OnIsoTriggerEnter",
|
||||
IsoUtils.IsoConvertCollider(collider),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnTriggerExit(Collider collider) {
|
||||
isoListener.gameObject.SendMessage(
|
||||
"OnIsoTriggerExit",
|
||||
IsoUtils.IsoConvertCollider(collider),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85a92cf713a8c4da68454e88e803bbce
|
||||
timeCreated: 1461097013
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -6,18 +6,23 @@ namespace IsoTools.Internal {
|
||||
[RequireComponent(typeof(IsoObject))]
|
||||
public class IsoPhysicHelper : MonoBehaviour {
|
||||
|
||||
static List<IsoCollider > _tmpColliders = new List<IsoCollider >(7);
|
||||
static List<IsoRigidbody> _tmpRigidbodies = new List<IsoRigidbody>(7);
|
||||
static List<IsoCollider> _tmpColliders = new List<IsoCollider>(7);
|
||||
static List<IsoRigidbody> _tmpRigidbodies = new List<IsoRigidbody>(7);
|
||||
static List<IsoTriggerListener> _tmpTriggerListeners = new List<IsoTriggerListener>(7);
|
||||
static List<IsoCollisionListener> _tmpCollisionListeners = new List<IsoCollisionListener>(7);
|
||||
|
||||
GameObject _isoFakeObject = null;
|
||||
public GameObject isoFakeObject {
|
||||
get { return _isoFakeObject; }
|
||||
}
|
||||
|
||||
//TODO: fix copy-paste
|
||||
public void DestroyIfUnnecessary(Component except) {
|
||||
var unnecessary = true;
|
||||
GetComponents<IsoCollider >(_tmpColliders);
|
||||
GetComponents<IsoRigidbody>(_tmpRigidbodies);
|
||||
GetComponents<IsoCollider> (_tmpColliders);
|
||||
GetComponents<IsoRigidbody> (_tmpRigidbodies);
|
||||
GetComponents<IsoTriggerListener> (_tmpTriggerListeners);
|
||||
GetComponents<IsoCollisionListener>(_tmpCollisionListeners);
|
||||
if ( unnecessary ) {
|
||||
for ( int i = 0, e = _tmpColliders.Count; i < e; ++i ) {
|
||||
if ( _tmpColliders[i] != except ) {
|
||||
@@ -34,8 +39,26 @@ namespace IsoTools.Internal {
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( unnecessary ) {
|
||||
for ( int i = 0, e = _tmpTriggerListeners.Count; i < e; ++i ) {
|
||||
if ( _tmpTriggerListeners[i] != except ) {
|
||||
unnecessary = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( unnecessary ) {
|
||||
for ( int i = 0, e = _tmpCollisionListeners.Count; i < e; ++i ) {
|
||||
if ( _tmpCollisionListeners[i] != except ) {
|
||||
unnecessary = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
_tmpColliders.Clear();
|
||||
_tmpRigidbodies.Clear();
|
||||
_tmpTriggerListeners.Clear();
|
||||
_tmpCollisionListeners.Clear();
|
||||
if ( unnecessary ) {
|
||||
Destroy(this);
|
||||
}
|
||||
|
||||
30
Assets/IsoTools/Scripts/IsoCollisionListener.cs
Normal file
30
Assets/IsoTools/Scripts/IsoCollisionListener.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
using IsoTools.Internal;
|
||||
|
||||
namespace IsoTools {
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(IsoObject))]
|
||||
public class IsoCollisionListener : MonoBehaviour {
|
||||
|
||||
IsoFakeCollisionListener _fakeListener;
|
||||
|
||||
GameObject fakeObject {
|
||||
get { return physicHelper.isoFakeObject; }
|
||||
}
|
||||
|
||||
IsoPhysicHelper physicHelper {
|
||||
get { return IsoUtils.GetOrCreateComponent<IsoPhysicHelper>(gameObject); }
|
||||
}
|
||||
|
||||
void Awake() {
|
||||
_fakeListener = fakeObject.AddComponent<IsoFakeCollisionListener>().Init(this);
|
||||
}
|
||||
|
||||
void OnDestroy() {
|
||||
if ( _fakeListener ) {
|
||||
Destroy(_fakeListener);
|
||||
}
|
||||
physicHelper.DestroyIfUnnecessary(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
12
Assets/IsoTools/Scripts/IsoCollisionListener.cs.meta
Normal file
12
Assets/IsoTools/Scripts/IsoCollisionListener.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c9634e461d1e942de8174ee80528a2d3
|
||||
timeCreated: 1461096905
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
30
Assets/IsoTools/Scripts/IsoTriggerListener.cs
Normal file
30
Assets/IsoTools/Scripts/IsoTriggerListener.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
using IsoTools.Internal;
|
||||
|
||||
namespace IsoTools {
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(IsoObject))]
|
||||
public class IsoTriggerListener : MonoBehaviour {
|
||||
|
||||
IsoFakeTriggerListener _fakeListener;
|
||||
|
||||
GameObject fakeObject {
|
||||
get { return physicHelper.isoFakeObject; }
|
||||
}
|
||||
|
||||
IsoPhysicHelper physicHelper {
|
||||
get { return IsoUtils.GetOrCreateComponent<IsoPhysicHelper>(gameObject); }
|
||||
}
|
||||
|
||||
void Awake() {
|
||||
_fakeListener = fakeObject.AddComponent<IsoFakeTriggerListener>().Init(this);
|
||||
}
|
||||
|
||||
void OnDestroy() {
|
||||
if ( _fakeListener ) {
|
||||
Destroy(_fakeListener);
|
||||
}
|
||||
physicHelper.DestroyIfUnnecessary(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
12
Assets/IsoTools/Scripts/IsoTriggerListener.cs.meta
Normal file
12
Assets/IsoTools/Scripts/IsoTriggerListener.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1925507eee33e42c2a04a1ae1eaa1ec5
|
||||
timeCreated: 1461096892
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user