This is how triggers are used in Slayer (for capture points):
Create trigger datablock:
datablock TriggerData(Slayer_CPTriggerData)
{
tickPeriodMS = 150; //this is how often Slayer_CPTriggerData::onTickTrigger will be called when an object is in the trigger
};
Create trigger:
function fxDtsBrick::createTrigger(%this,%data)
{
//credits to Space Guy for showing how to create triggers
%t = new Trigger()
{
datablock = %data;
polyhedron = "0 0 0 1 0 0 0 -1 0 0 0 1"; //this determines the shape of the trigger
};
missionCleanup.add(%t);
%boxMax = getWords(%this.getWorldBox(), 3, 5);
%boxMin = getWords(%this.getWorldBox(), 0, 2);
%boxDiff = vectorSub(%boxMax,%boxMin);
%boxDiff = vectorAdd(%boxDiff,"0 0 0.2");
%t.setScale(%boxDiff);
%posA = %this.getWorldBoxCenter();
%posB = %t.getWorldBoxCenter();
%posDiff = vectorSub(%posA, %posB);
%posDiff = vectorAdd(%posDiff, "0 0 0.1");
%t.setTransform(%posDiff);
%this.trigger = %t;
%t.brick = %this;
return %t;
}
package deleteBrickTriggers
{
function fxDtsBrick::onRemove(%this) //make sure to clean up your triggers
{
if(isObject(%this.trigger))
%this.trigger.delete();
parent::onRemove(%this);
}
};
activatePackage(deleteBrickTriggers);
Use trigger:
function Slayer_CPTriggerData::onEnterTrigger(%this,%trigger,%obj)
{
//called when an object enters the trigger
}
function Slayer_CPTriggerData::onLeaveTrigger(%this,%trigger,%obj)
{
//called when an object leaves the trigger
}
function Slayer_CPTriggerData::onTickTrigger(%this,%trigger,%obj)
{
//called every set amount of milliseconds (set in the datablock)
//only called when an object is in the trigger
}