Author Topic: How to use brick triggers? [Solved]  (Read 1018 times)

How do you create and use triggers on a brick through script? I havn't seen many examples of them being used, so I havn't been able to find anything to learn off of.
« Last Edit: April 22, 2012, 10:37:44 AM by Ipquarx »

This is how triggers are used in Slayer (for capture points):

Create trigger datablock:
Code: [Select]
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:
Code: [Select]
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:
Code: [Select]
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
}

This is how triggers are used in Slayer (for capture points):

Create trigger datablock:
Code: [Select]
datablock TriggerData(Slayer_CPTriggerData)
{
tickPeriodMS = 150; //this is how often Slayer_CPTriggerData::onTickTrigger will be called when an object is in the trigger
};
So is the tick function called when the object enters the trigger and after every tick, or just every tick?
Create trigger:
Code: [Select]
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;
}
So then i do somebrick.createtrigger(); right? But what's %data?
Use trigger:
Code: [Select]
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
}
Makes sense.

So is the tick function called when the object enters the trigger and after every tick, or just every tick?
Every tick.

So then i do somebrick.createtrigger(); right? But what's %data?
Yep. %data is the trigger datablock. I didn't use the best var names in this.

Hope this helped!