Files
unity-iso-tools/Assets/IsoTools/Scripts/Internal/IsoFakeObject.cs
2016-03-29 02:40:57 +06:00

68 lines
1.8 KiB
C#

using UnityEngine;
namespace IsoTools.Internal {
public class IsoFakeObject : MonoBehaviour {
IsoObject _isoObject = null;
Vector3 _lastPosition = Vector3.zero;
public void Init(IsoObject iso_object) {
_isoObject = iso_object;
_lastPosition = iso_object.position;
transform.position = iso_object.position;
}
public IsoObject isoObject {
get { return _isoObject; }
}
void FixLayers() {
var iso_object_layer = isoObject.gameObject.layer;
if ( gameObject.layer != iso_object_layer ) {
gameObject.layer = iso_object_layer;
for ( int i = 0, e = transform.childCount; i < e; ++i ) {
var child = transform.GetChild(i);
child.gameObject.layer = iso_object_layer;
}
}
}
void FixedUpdate() {
FixLayers();
if ( !IsoUtils.Vec3Approximately(_lastPosition, isoObject.position) ) {
_lastPosition = transform.position = isoObject.position;
} else if ( !IsoUtils.Vec3Approximately(_lastPosition, transform.position) ) {
_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);
}
}
}