MBHaxe/src/triggers/CheckpointTrigger.hx
2024-01-26 21:57:36 +05:30

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;
}
}
}
}
}