mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
Add forceobject support with ductfan and tornado
This commit is contained in:
parent
1dc1966d8f
commit
abcd9db939
7 changed files with 108 additions and 15 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
package src;
|
package src;
|
||||||
|
|
||||||
|
import src.DtsObject;
|
||||||
import h3d.Vector;
|
import h3d.Vector;
|
||||||
import h3d.scene.CustomObject;
|
import h3d.scene.CustomObject;
|
||||||
|
|
||||||
|
|
@ -10,15 +11,13 @@ enum ForceType {
|
||||||
ForceCone;
|
ForceCone;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ForceData {
|
typedef ForceData = {
|
||||||
public var forceType:ForceType;
|
var forceType:ForceType;
|
||||||
public var forceNode:Int;
|
var forceNode:Int;
|
||||||
public var forceVector:Vector;
|
var forceVector:Vector;
|
||||||
public var forceRadius:Float;
|
var forceRadius:Float;
|
||||||
public var forceStrength:Float;
|
var forceStrength:Float;
|
||||||
public var forceArc:Float;
|
var forceArc:Float;
|
||||||
|
|
||||||
public function new() {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ForceObject extends DtsObject {
|
class ForceObject extends DtsObject {
|
||||||
|
|
@ -37,7 +36,7 @@ class ForceObject extends DtsObject {
|
||||||
var node = this.getMountTransform(forceData.forceNode);
|
var node = this.getMountTransform(forceData.forceNode);
|
||||||
var nodeVec:Vector;
|
var nodeVec:Vector;
|
||||||
if (forceData.forceVector.length() == 0) {
|
if (forceData.forceVector.length() == 0) {
|
||||||
nodeVec = new Vector(node._12, node._22, node._32);
|
nodeVec = node.right();
|
||||||
} else {
|
} else {
|
||||||
nodeVec = forceData.forceVector;
|
nodeVec = forceData.forceVector;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package;
|
package;
|
||||||
|
|
||||||
|
import shapes.Tornado;
|
||||||
|
import shapes.DuctFan;
|
||||||
import dts.DtsFile;
|
import dts.DtsFile;
|
||||||
import src.InteriorGeometry;
|
import src.InteriorGeometry;
|
||||||
import h3d.Quat;
|
import h3d.Quat;
|
||||||
|
|
@ -25,11 +27,7 @@ class Main extends hxd.App {
|
||||||
override function init() {
|
override function init() {
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
dtsObj = new DtsObject();
|
dtsObj = new Tornado();
|
||||||
dtsObj.dtsPath = "data/shapes/hazards/ductfan.dts";
|
|
||||||
dtsObj.isCollideable = false;
|
|
||||||
dtsObj.isTSStatic = false;
|
|
||||||
// dtsObj.setRotation(Math.PI / 2, 0, 0);
|
|
||||||
|
|
||||||
world = new MarbleWorld(s3d);
|
world = new MarbleWorld(s3d);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package src;
|
package src;
|
||||||
|
|
||||||
|
import src.ForceObject;
|
||||||
|
import src.MarbleWorld;
|
||||||
import h3d.Quat;
|
import h3d.Quat;
|
||||||
import src.ResourceLoader;
|
import src.ResourceLoader;
|
||||||
import collision.Collision;
|
import collision.Collision;
|
||||||
|
|
@ -38,6 +40,8 @@ class Marble extends Object {
|
||||||
public var velocity:Vector;
|
public var velocity:Vector;
|
||||||
public var omega:Vector;
|
public var omega:Vector;
|
||||||
|
|
||||||
|
public var level:MarbleWorld;
|
||||||
|
|
||||||
var gravityDir:Vector = new Vector(0, 0, -1);
|
var gravityDir:Vector = new Vector(0, 0, -1);
|
||||||
|
|
||||||
public var _radius = 0.2;
|
public var _radius = 0.2;
|
||||||
|
|
@ -114,6 +118,12 @@ class Marble extends Object {
|
||||||
function getExternalForces(m:Move, dt:Float) {
|
function getExternalForces(m:Move, dt:Float) {
|
||||||
var gWorkGravityDir = gravityDir;
|
var gWorkGravityDir = gravityDir;
|
||||||
var A = gWorkGravityDir.multiply(this._gravity);
|
var A = gWorkGravityDir.multiply(this._gravity);
|
||||||
|
for (obj in level.dtsObjects) {
|
||||||
|
if (obj is ForceObject) {
|
||||||
|
var force = cast(obj, ForceObject).getForce(this.getAbsPos().getPosition());
|
||||||
|
A = A.add(force.multiply(1 / _mass));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (contacts.length != 0) {
|
if (contacts.length != 0) {
|
||||||
var contactForce = 0.0;
|
var contactForce = 0.0;
|
||||||
var contactNormal = new Vector();
|
var contactNormal = new Vector();
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ class MarbleWorld {
|
||||||
|
|
||||||
public function addMarble(marble:Marble) {
|
public function addMarble(marble:Marble) {
|
||||||
this.marbles.push(marble);
|
this.marbles.push(marble);
|
||||||
|
marble.level = cast this;
|
||||||
if (marble.controllable) {
|
if (marble.controllable) {
|
||||||
this.scene.addChild(marble.camera);
|
this.scene.addChild(marble.camera);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
23
src/shapes/DuctFan.hx
Normal file
23
src/shapes/DuctFan.hx
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
package shapes;
|
||||||
|
|
||||||
|
import h3d.Vector;
|
||||||
|
import src.ForceObject;
|
||||||
|
|
||||||
|
class DuctFan extends ForceObject {
|
||||||
|
public function new() {
|
||||||
|
super();
|
||||||
|
this.dtsPath = "data/shapes/hazards/ductfan.dts";
|
||||||
|
this.isCollideable = true;
|
||||||
|
this.isTSStatic = false;
|
||||||
|
this.forceDatas = [
|
||||||
|
{
|
||||||
|
forceType: ForceCone,
|
||||||
|
forceNode: 0,
|
||||||
|
forceStrength: 40,
|
||||||
|
forceRadius: 10,
|
||||||
|
forceArc: 0.7,
|
||||||
|
forceVector: new Vector()
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
23
src/shapes/SmallDuctFan.hx
Normal file
23
src/shapes/SmallDuctFan.hx
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
package shapes;
|
||||||
|
|
||||||
|
import h3d.Vector;
|
||||||
|
import src.ForceObject;
|
||||||
|
|
||||||
|
class SmallDuctFan extends ForceObject {
|
||||||
|
public function new() {
|
||||||
|
super();
|
||||||
|
this.dtsPath = "data/shapes/hazards/ductfan.dts";
|
||||||
|
this.isCollideable = true;
|
||||||
|
this.isTSStatic = false;
|
||||||
|
this.forceDatas = [
|
||||||
|
{
|
||||||
|
forceType: ForceCone,
|
||||||
|
forceNode: 0,
|
||||||
|
forceStrength: 10,
|
||||||
|
forceRadius: 5,
|
||||||
|
forceArc: 0.7,
|
||||||
|
forceVector: new Vector()
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/shapes/Tornado.hx
Normal file
39
src/shapes/Tornado.hx
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
package shapes;
|
||||||
|
|
||||||
|
import h3d.Vector;
|
||||||
|
import src.ForceObject;
|
||||||
|
|
||||||
|
class Tornado extends ForceObject {
|
||||||
|
public function new() {
|
||||||
|
super();
|
||||||
|
this.dtsPath = "data/shapes/hazards/tornado.dts";
|
||||||
|
this.isCollideable = true;
|
||||||
|
this.isTSStatic = false;
|
||||||
|
this.forceDatas = [
|
||||||
|
{
|
||||||
|
forceType: ForceSpherical,
|
||||||
|
forceNode: 0,
|
||||||
|
forceStrength: -60,
|
||||||
|
forceRadius: 8,
|
||||||
|
forceArc: 0,
|
||||||
|
forceVector: new Vector()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
forceType: ForceSpherical,
|
||||||
|
forceNode: 0,
|
||||||
|
forceStrength: 60,
|
||||||
|
forceRadius: 3,
|
||||||
|
forceArc: 0,
|
||||||
|
forceVector: new Vector()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
forceType: ForceField,
|
||||||
|
forceNode: 0,
|
||||||
|
forceStrength: 250,
|
||||||
|
forceRadius: 3,
|
||||||
|
forceArc: 0,
|
||||||
|
forceVector: new Vector(0, 0, 1)
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue