mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
57 lines
1.7 KiB
Haxe
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);
|
|
}
|
|
}
|