| Blockland Forums > Modification Help |
| How to use brick triggers? [Solved] |
| (1/1) |
| Ipquarx:
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. |
| Greek2me:
This is how triggers are used in Slayer (for capture points): Create trigger datablock: --- Code: ---datablock TriggerData(Slayer_CPTriggerData) { tickPeriodMS = 150; //this is how often Slayer_CPTriggerData::onTickTrigger will be called when an object is in the trigger }; --- End code --- Create trigger: --- Code: ---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); --- End code --- Use trigger: --- Code: ---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 } --- End code --- |
| Ipquarx:
--- Quote from: Greek2me on April 21, 2012, 02:11:19 PM ---This is how triggers are used in Slayer (for capture points): Create trigger datablock: --- Code: ---datablock TriggerData(Slayer_CPTriggerData) { tickPeriodMS = 150; //this is how often Slayer_CPTriggerData::onTickTrigger will be called when an object is in the trigger }; --- End code --- --- End quote --- So is the tick function called when the object enters the trigger and after every tick, or just every tick? --- Quote from: Greek2me on April 21, 2012, 02:11:19 PM ---Create trigger: --- Code: ---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; } --- End code --- --- End quote --- So then i do somebrick.createtrigger(); right? But what's %data? --- Quote from: Greek2me on April 21, 2012, 02:11:19 PM ---Use trigger: --- Code: ---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 } --- End code --- --- End quote --- Makes sense. |
| Greek2me:
--- Quote from: Ipquarx on April 21, 2012, 06:08:50 PM ---So is the tick function called when the object enters the trigger and after every tick, or just every tick? --- End quote --- Every tick. --- Quote from: Ipquarx on April 21, 2012, 06:08:50 PM ---So then i do somebrick.createtrigger(); right? But what's %data? --- End quote --- Yep. %data is the trigger datablock. I didn't use the best var names in this. Hope this helped! |
| Ipquarx:
Great, thank you. |
| Navigation |
| Message Index |