The TriggerVolume will react when an object collides with it and matches the TriggerType for the TriggerVolume:
Code: Select all
public void Events_InitialCollisionDetected(EntityCollidable info, Collidable entry, CollidablePairHandler handler)
{
ITrigger t = entry as ITrigger;
if (t == null)
{
return;
}
// Only respond to trigger types that match the trigger types for this class
if ((t.TriggerType & triggerType) != t.TriggerType)
{
return;
}
int numTriggerIDs = triggerIDs.Count;
// Trigger all associated objects
for (int i = 0; i < numTriggerIDs; ++i)
{
// Dictionary of ITriggerable with a TriggerID as the key
//game.ITriggerable[triggerIDs[i]].Trigger();
}
}
Code: Select all
List<RayCastResult> results = new List<RayCastResult>();
if (game.Space.RayCast(new Ray(origin, direction), length, results))
{
int index = -1;
TriggerVolume o = null;
float tMin = float.MaxValue;
int numObjectsHit = results.Count;
for (int i = 0; i < numObjectsHit; ++i)
{
var result = results[i].HitObject.Tag as TriggerVolume;
// Find the closest TriggerVolume
if (result != null && results[i].HitData.T < tMin)
{
index = i;
o = result;
tMin = results[i].HitData.T;
}
}
// Going to have to create a separate method to handle a Ray :(
//o.Events_InitialCollisionDetected(
}
I understand I could use a very fast moving Collidable instead, but I wondered what approach you would suggest?