mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-12-10 01:52:47 +00:00
52 lines
1.7 KiB
Haxe
52 lines
1.7 KiB
Haxe
package triggers;
|
|
|
|
import mis.MissionElement.MissionElementSimGroup;
|
|
import shapes.Checkpoint;
|
|
import h3d.Vector;
|
|
import src.MarbleWorld;
|
|
import mis.MissionElement.MissionElementTrigger;
|
|
import src.ResourceLoader;
|
|
import mis.MisParser;
|
|
import src.Marble;
|
|
|
|
class CheckpointTrigger extends Trigger {
|
|
public var disableOOB = false;
|
|
public var add:Vector = null;
|
|
public var simGroup:MissionElementSimGroup;
|
|
public var seqNum:Int;
|
|
|
|
override public function new(element:MissionElementTrigger, level:MarbleWorld) {
|
|
super(element, level);
|
|
|
|
this.disableOOB = element.fields.exists('disableOob') ? MisParser.parseBoolean(element.fields['disableOob'][0]) : false;
|
|
this.add = element.fields.exists('add') ? MisParser.parseVector3(element.fields['add'][0]) : null;
|
|
this.seqNum = element.fields.exists('sequence') ? Std.parseInt(element.sequence) : 1;
|
|
}
|
|
|
|
public override function init(onFinish:() -> Void) {
|
|
super.init(() -> {
|
|
ResourceLoader.load("sound/checkpoint.wav").entry.load(onFinish);
|
|
});
|
|
}
|
|
|
|
public override function onMarbleEnter(marble:Marble, time:src.TimeState) {
|
|
super.onMarbleEnter(marble, time);
|
|
if (simGroup == null)
|
|
return;
|
|
var shape = level.simGroups[simGroup].filter(x -> x.identifier == "Checkpoint");
|
|
if (shape.length == 0)
|
|
return;
|
|
var chk:Checkpoint = cast shape[0];
|
|
var prevChk = @:privateAccess this.level.currentCheckpoint;
|
|
var issame = prevChk == chk;
|
|
if (this.level.saveCheckpointState(chk, this)) {
|
|
if (!issame) {
|
|
chk.lastActivatedTime = time.timeSinceLoad;
|
|
for (obj in this.level.dtsObjects) {
|
|
if (obj.identifier == "Checkpoint" && obj != chk)
|
|
cast(obj, Checkpoint).lastActivatedTime = Math.POSITIVE_INFINITY;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|