using System.Collections.Generic;
using UnityEngine;
namespace Passer {
///
/// Target side
///
public enum Side {
AnySide,
Left,
Right,
}
///
/// A main tracking transform
///
public abstract class Target : MonoBehaviour {
protected bool _showRealObjects = true;
///
/// show the target meshes
///
public virtual bool showRealObjects {
get { return _showRealObjects; }
set { _showRealObjects = value; }
}
public virtual void InitComponent() { }
public abstract void StartTarget();
public abstract void InitSensors();
public virtual void StartSensors() { }
protected virtual void UpdateSensors() { }
public virtual void StopSensors() { }
public abstract void UpdateTarget();
public static List SetColliderToTrigger(GameObject obj) {
Rigidbody rb = obj.GetComponent();
if (rb != null)
return SetColliderToTrigger(rb);
else {
List changedColliders = new List();
Collider[] colliders = obj.GetComponentsInChildren();
for (int j = 0; j < colliders.Length; j++) {
if (!colliders[j].isTrigger) {
colliders[j].isTrigger = true;
changedColliders.Add(colliders[j]);
}
}
return changedColliders;
}
}
public static List SetColliderToTrigger(Rigidbody rb) {
List changedColliders = new List();
Collider[] colliders = rb.GetComponentsInChildren();
for (int j = 0; j < colliders.Length; j++) {
Rigidbody colliderRigidbody = colliders[j].attachedRigidbody;
if (colliderRigidbody == null || colliderRigidbody == rb) {
if (!colliders[j].isTrigger) {
colliders[j].isTrigger = true;
changedColliders.Add(colliders[j]);
}
}
}
return changedColliders;
}
public static void UnsetColliderToTrigger(List colliders) {
if (colliders == null)
return;
foreach (Collider c in colliders) {
if (c != null)
c.isTrigger = false;
}
}
public static void UnsetColliderToTrigger(List colliders, Collider collider) {
if (colliders == null || collider == null)
return;
if (colliders.Contains(collider))
collider.isTrigger = false;
}
}
}