MBHaxe/src/triggers/Trigger.hx
2021-06-13 20:57:35 +05:30

57 lines
1.7 KiB
Haxe

package triggers;
import h3d.col.Bounds;
import h3d.Matrix;
import h3d.Vector;
import mis.MisParser;
import collision.BoxCollisionEntity;
import mis.MissionElement.MissionElementTrigger;
import src.GameObject;
import src.MarbleWorld;
class Trigger extends GameObject {
var id:Float;
var level:MarbleWorld;
var element:MissionElementTrigger;
public var collider:BoxCollisionEntity;
public function new(element:MissionElementTrigger, level:MarbleWorld) {
super();
this.element = element;
this.id = element._id;
this.level = level;
var coordinates = MisParser.parseNumberList(element.polyhedron);
var origin = new Vector(coordinates[0], coordinates[1], coordinates[2]);
var d1 = new Vector(coordinates[3], coordinates[4], coordinates[5]);
var d2 = new Vector(coordinates[6], coordinates[7], coordinates[8]);
var d3 = new Vector(coordinates[9], coordinates[10], coordinates[11]);
// Create the 8 points of the parallelepiped
var p1 = origin.clone();
var p2 = origin.add(d1);
var p3 = origin.add(d2);
var p4 = origin.add(d3);
var p5 = origin.add(d1).add(d2);
var p6 = origin.add(d1).add(d3);
var p7 = origin.add(d2).add(d3);
var p8 = origin.add(d1).add(d2).add(d3);
var mat = new Matrix();
var quat = MisParser.parseRotation(element.rotation);
quat.toMatrix(mat);
mat.setPosition(MisParser.parseVector3(element.position));
var scale = MisParser.parseVector3(element.scale);
mat.scale(scale.x, scale.y, scale.z);
var vertices = [p1, p2, p3, p4, p5, p6, p7, p8].map((vert) -> vert.transformed(mat));
var boundingbox = new Bounds();
for (vector in vertices) {
boundingbox.addPoint(vector.toPoint());
}
collider = new BoxCollisionEntity(boundingbox, this);
}
}