Separate physics module
This commit is contained in:
parent
743a8d1a39
commit
24aa6c4787
|
@ -3,7 +3,7 @@ package armory.logicnode;
|
|||
import armory.object.Object;
|
||||
import armory.math.Mat4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class AppendTransformNode extends LogicNode {
|
||||
|
|
|
@ -2,7 +2,7 @@ package armory.logicnode;
|
|||
|
||||
import armory.object.Object;
|
||||
import armory.math.Vec4;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class ApplyImpulseNode extends LogicNode {
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ class CastPhysicsRayNode extends LogicNode {
|
|||
var vto:Vec4 = inputs[1].get();
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb = physics.rayCast(vfrom, vto);
|
||||
|
||||
if (from == 0) { // Object
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.logicnode;
|
||||
|
||||
import armory.object.Object;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class GetContactsNode extends LogicNode {
|
||||
|
||||
|
@ -13,7 +13,7 @@ class GetContactsNode extends LogicNode {
|
|||
var object:Object = inputs[0].get();
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rbs = physics.getContacts(object.getTrait(RigidBody));
|
||||
var obs = [];
|
||||
if (rbs != null) for (rb in rbs) obs.push(rb.object);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.logicnode;
|
||||
|
||||
import armory.object.Object;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class GetFirstContactNode extends LogicNode {
|
||||
|
||||
|
@ -13,7 +13,7 @@ class GetFirstContactNode extends LogicNode {
|
|||
var object:Object = inputs[0].get();
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rbs = physics.getContacts(object.getTrait(RigidBody));
|
||||
if (rbs != null) return rbs[0].object;
|
||||
#end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package armory.logicnode;
|
||||
|
||||
import armory.trait.internal.Navigation;
|
||||
import armory.trait.navigation.Navigation;
|
||||
import armory.object.Object;
|
||||
import armory.math.Vec4;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.logicnode;
|
||||
|
||||
import armory.object.Object;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class HasContactNode extends LogicNode {
|
||||
|
||||
|
@ -14,7 +14,7 @@ class HasContactNode extends LogicNode {
|
|||
var object2:Object = inputs[1].get();
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb2 = object2.getTrait(RigidBody);
|
||||
var rbs = physics.getContacts(object1.getTrait(RigidBody));
|
||||
if (rbs != null) for (rb in rbs) if (rb == rb2) return true;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.logicnode;
|
||||
|
||||
import armory.math.Vec4;
|
||||
import armory.trait.internal.Navigation;
|
||||
import armory.trait.navigation.Navigation;
|
||||
|
||||
class NavigableLocationNode extends LogicNode {
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.logicnode;
|
||||
|
||||
import armory.object.Object;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class OnContactNode extends LogicNode {
|
||||
|
||||
|
@ -24,7 +24,7 @@ class OnContactNode extends LogicNode {
|
|||
var contact = false;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb2 = object2.getTrait(RigidBody);
|
||||
var rbs = physics.getContacts(object1.getTrait(RigidBody));
|
||||
if (rbs != null) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.logicnode;
|
||||
|
||||
#if arm_physics
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
#end
|
||||
|
||||
class OnInitNode extends LogicNode {
|
||||
|
|
|
@ -18,9 +18,9 @@ class PickLocationNode extends LogicNode {
|
|||
if (object == null) null;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var b = physics.pickClosest(coords.x, coords.y);
|
||||
var rb = object.getTrait(armory.trait.internal.RigidBody);
|
||||
var rb = object.getTrait(armory.trait.physics.RigidBody);
|
||||
|
||||
if (rb != null && b == rb) {
|
||||
var p = physics.hitPointWorld;
|
||||
|
|
|
@ -14,7 +14,7 @@ class PickObjectNode extends LogicNode {
|
|||
var coords:Vec4 = inputs[0].get();
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.internal.PhysicsWorld.active;
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb = physics.pickClosest(coords.x, coords.y);
|
||||
if (rb == null) return null;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import armory.math.Mat4;
|
|||
import armory.math.Quat;
|
||||
import armory.math.Vec4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class RotateObjectNode extends LogicNode {
|
||||
|
|
|
@ -4,7 +4,7 @@ import armory.object.Object;
|
|||
import armory.math.Mat4;
|
||||
import armory.math.Vec4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class ScaleObjectNode extends LogicNode {
|
||||
|
|
|
@ -3,7 +3,7 @@ package armory.logicnode;
|
|||
import armory.object.Object;
|
||||
import armory.math.Vec4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class SetLocationNode extends LogicNode {
|
||||
|
|
|
@ -3,7 +3,7 @@ package armory.logicnode;
|
|||
import armory.object.Object;
|
||||
import armory.math.Vec4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class SetRotationNode extends LogicNode {
|
||||
|
|
|
@ -3,7 +3,7 @@ package armory.logicnode;
|
|||
import armory.object.Object;
|
||||
import armory.math.Vec4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class SetScaleNode extends LogicNode {
|
||||
|
|
|
@ -3,7 +3,7 @@ package armory.logicnode;
|
|||
import armory.object.Object;
|
||||
import armory.math.Mat4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class SetTransformNode extends LogicNode {
|
||||
|
|
|
@ -2,7 +2,7 @@ package armory.logicnode;
|
|||
|
||||
import armory.object.Object;
|
||||
import armory.math.Vec4;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class SetVelocityNode extends LogicNode {
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import armory.object.Object;
|
|||
import armory.math.Mat4;
|
||||
import armory.math.Vec4;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.physics.RigidBody;
|
||||
#end
|
||||
|
||||
class TranslateObjectNode extends LogicNode {
|
||||
|
|
|
@ -3,7 +3,7 @@ package armory.trait;
|
|||
import iron.math.Vec4;
|
||||
import iron.system.Input;
|
||||
import iron.object.Object;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
import armory.trait.internal.CameraController;
|
||||
|
||||
class FirstPersonController extends CameraController {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package armory.trait;
|
||||
|
||||
#if arm_navigation
|
||||
import armory.trait.internal.Navigation;
|
||||
import armory.trait.navigation.Navigation;
|
||||
import haxerecast.Recast;
|
||||
#end
|
||||
|
||||
|
|
|
@ -7,8 +7,9 @@ import iron.object.MeshObject;
|
|||
import iron.data.MeshData;
|
||||
import iron.data.SceneFormat;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.bullet.RigidBody; // TODO - import Shape
|
||||
import armory.trait.physics.RigidBody;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
|
||||
|
@ -30,7 +31,7 @@ class PhysicsBreak extends Trait {
|
|||
}
|
||||
|
||||
function init() {
|
||||
if (physics == null) physics = armory.trait.internal.PhysicsWorld.active;
|
||||
if (physics == null) physics = armory.trait.physics.PhysicsWorld.active;
|
||||
|
||||
body = object.getTrait(RigidBody);
|
||||
breaker.initBreakableObject(cast object, body.mass, new Vec4(), new Vec4(), true);
|
||||
|
@ -62,7 +63,7 @@ class PhysicsBreak extends Trait {
|
|||
var ud = breaker.userDataMap.get(cast o);
|
||||
var friction = 0.5;
|
||||
var margin = 0.06;
|
||||
o.addTrait(new armory.trait.internal.RigidBody(ud.mass, Shape.ConvexHull, friction, margin));
|
||||
o.addTrait(new armory.trait.physics.RigidBody(ud.mass, Shape.ConvexHull, friction, margin));
|
||||
if (cast(o, MeshObject).data.geom.positions.length < 600) {
|
||||
o.addTrait(new PhysicsBreak());
|
||||
}
|
||||
|
|
|
@ -4,8 +4,8 @@ import iron.Trait;
|
|||
import iron.system.Input;
|
||||
import iron.math.Vec4;
|
||||
import iron.math.RayCaster;
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.RigidBody;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
#if arm_physics
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
|
@ -32,7 +32,7 @@ class PhysicsDrag extends Trait {
|
|||
}
|
||||
|
||||
function init() {
|
||||
if (physics == null) physics = armory.trait.internal.PhysicsWorld.active;
|
||||
if (physics == null) physics = armory.trait.physics.PhysicsWorld.active;
|
||||
notifyOnUpdate(update);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package armory.trait;
|
|||
|
||||
import iron.math.Vec4;
|
||||
import iron.system.Input;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
import armory.trait.internal.CameraController;
|
||||
|
||||
class ThirdPersonController extends CameraController {
|
||||
|
|
|
@ -5,7 +5,7 @@ import iron.object.Object;
|
|||
import iron.object.CameraObject;
|
||||
import iron.object.Transform;
|
||||
import iron.system.Time;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
#if arm_physics
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
|
@ -51,7 +51,7 @@ class VehicleBody extends Trait {
|
|||
}
|
||||
|
||||
function init() {
|
||||
physics = armory.trait.internal.PhysicsWorld.active;
|
||||
physics = armory.trait.physics.PhysicsWorld.active;
|
||||
transform = object.transform;
|
||||
camera = iron.Scene.active.camera;
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import iron.Trait;
|
|||
import iron.system.Input;
|
||||
import iron.object.Transform;
|
||||
import iron.object.CameraObject;
|
||||
import armory.trait.physics.RigidBody;
|
||||
|
||||
class CameraController extends Trait {
|
||||
|
||||
|
|
|
@ -176,7 +176,7 @@ class DebugConsole extends Trait {
|
|||
updateTime += iron.App.updateTime;
|
||||
animTime += iron.object.Animation.animationTime;
|
||||
#if arm_physics
|
||||
physTime += PhysicsWorld.physTime;
|
||||
physTime += armory.trait.physics.PhysicsWorld.physTime;
|
||||
#end
|
||||
}
|
||||
|
||||
|
|
|
@ -1,206 +0,0 @@
|
|||
package armory.trait.internal;
|
||||
|
||||
import iron.math.Mat4;
|
||||
import iron.math.Vec4;
|
||||
import iron.Trait;
|
||||
import iron.object.Transform;
|
||||
import iron.object.MeshObject;
|
||||
import iron.data.Data;
|
||||
import iron.data.MaterialData;
|
||||
import iron.data.MaterialData.MaterialContext;
|
||||
|
||||
class PathTracer extends Trait {
|
||||
|
||||
var context:MaterialContext;
|
||||
var ray00Location:Int;
|
||||
var ray01Location:Int;
|
||||
var ray10Location:Int;
|
||||
var ray11Location:Int;
|
||||
|
||||
var objectLocations:Array<Int>;
|
||||
var transformMap:Map<Int, Transform>;
|
||||
|
||||
public function new() {
|
||||
super();
|
||||
|
||||
notifyOnInit(init);
|
||||
}
|
||||
|
||||
function getColorFromNode(object:MeshObject):Array<Float> {
|
||||
// Hard code for now
|
||||
// for (c in object.materials[0].contexts[0].raw.bind_constants) {
|
||||
// if (c.name == "baseCol") {
|
||||
// return c.vec4;
|
||||
// }
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
||||
// Data.getMaterial('pt_material', '', function(b:MaterialData) {
|
||||
|
||||
// context = b.getContext('pt_trace_pass');
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "glossiness",
|
||||
// float: 0.6
|
||||
// }
|
||||
// );
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "ray00",
|
||||
// vec3: [0.0, 0.0, 0.0]
|
||||
// }
|
||||
// );
|
||||
// ray00Location = context.raw.bind_constants.length - 1;
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "ray01",
|
||||
// vec3: [0.0, 0.0, 0.0]
|
||||
// }
|
||||
// );
|
||||
// ray01Location = context.raw.bind_constants.length - 1;
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "ray10",
|
||||
// vec3: [0.0, 0.0, 0.0]
|
||||
// }
|
||||
// );
|
||||
// ray10Location = context.raw.bind_constants.length - 1;
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "ray11",
|
||||
// vec3: [0.0, 0.0, 0.0]
|
||||
// }
|
||||
// );
|
||||
// ray11Location = context.raw.bind_constants.length - 1;
|
||||
|
||||
// objectLocations = [];
|
||||
// transformMap = new Map();
|
||||
// var sphereNum = 0;
|
||||
// var cubeNum = 0;
|
||||
// for (n in iron.Scene.active.meshes) {
|
||||
// if (n.name.split(".")[0] == "Sphere") {
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "sphereCenter" + sphereNum,
|
||||
// vec3: [0.0, 0.0, 0.0]
|
||||
// }
|
||||
// );
|
||||
// var loc = context.raw.bind_constants.length - 1;
|
||||
// objectLocations.push(loc);
|
||||
// transformMap.set(loc, n.transform);
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "sphereRadius" + sphereNum,
|
||||
// float: n.transform.size.x / 2 - 0.02
|
||||
// }
|
||||
// );
|
||||
|
||||
// var col = getColorFromNode(n);
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "sphereColor" + sphereNum,
|
||||
// vec3: [col[0], col[1], col[2]]
|
||||
// }
|
||||
// );
|
||||
|
||||
// sphereNum++;
|
||||
// }
|
||||
// else if (n.name.split(".")[0] == "Cube") {
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "cubeCenter" + cubeNum,
|
||||
// vec3: [0.0, 0.0, 0.0]
|
||||
// }
|
||||
// );
|
||||
// var loc = context.raw.bind_constants.length - 1;
|
||||
// objectLocations.push(loc);
|
||||
// transformMap.set(loc, n.transform);
|
||||
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "cubeSize" + cubeNum,
|
||||
// vec3: [n.transform.size.x / 2, n.transform.size.y / 2, n.transform.size.z / 2]
|
||||
// }
|
||||
// );
|
||||
|
||||
// var col = getColorFromNode(n);
|
||||
// context.raw.bind_constants.push(
|
||||
// {
|
||||
// name: "cubeColor" + cubeNum,
|
||||
// vec3: [col[0], col[1], col[2]]
|
||||
// }
|
||||
// );
|
||||
|
||||
// cubeNum++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// notifyOnUpdate(update);
|
||||
// });
|
||||
}
|
||||
|
||||
function update() {
|
||||
// var camera = iron.Scene.active.camera;
|
||||
// var eye = camera.transform.loc;
|
||||
|
||||
// // var jitter = Mat4.identity();
|
||||
// // jitter.initTranslate(Math.random() * 2 - 1, Math.random() * 2 - 1, 0);
|
||||
// // jitter.multiplyScalar(1 / iron.App.w);
|
||||
// // jitter.multiplyScalar(1 / 400);
|
||||
// var mvp = Mat4.identity();
|
||||
// mvp.multmat2(camera.V);
|
||||
// mvp.multmat2(camera.P);
|
||||
// var inverse = Mat4.identity();
|
||||
// // jitter.multmat2(mvp);
|
||||
// // inverse.getInverse(mvp);
|
||||
// var matrix = inverse;
|
||||
|
||||
// // Set uniforms
|
||||
|
||||
// var v = getEyeRay(matrix, -1, -1, eye);
|
||||
// context.raw.bind_constants[ray00Location].vec3 = [v.x, v.y, v.z];
|
||||
|
||||
// var v = getEyeRay(matrix, -1, 1, eye);
|
||||
// context.raw.bind_constants[ray01Location].vec3 = [v.x, v.y, v.z];
|
||||
|
||||
// var v = getEyeRay(matrix, 1, -1, eye);
|
||||
// context.raw.bind_constants[ray10Location].vec3 = [v.x, v.y, v.z];
|
||||
|
||||
// var v = getEyeRay(matrix, 1, 1, eye);
|
||||
// context.raw.bind_constants[ray11Location].vec3 = [v.x, v.y, v.z];
|
||||
|
||||
// for (loc in objectLocations) {
|
||||
// var t:Transform = transformMap.get(loc);
|
||||
// t.buildMatrix();
|
||||
// var c = context.raw.bind_constants[loc];
|
||||
// c.vec3[0] = t.worldx();
|
||||
// c.vec3[1] = t.worldy();
|
||||
// c.vec3[2] = t.worldz();
|
||||
// }
|
||||
}
|
||||
|
||||
function getEyeRay(matrix:Mat4, x:Float, y:Float, eye:Vec4):Vec4 {
|
||||
var v = new Vec4();
|
||||
var vv = new kha.math.FastVector4(x, y, 0, 1);
|
||||
vv = matrix.multvec(vv);
|
||||
v.x = vv.x;
|
||||
v.y = vv.y;
|
||||
v.z = vv.z;
|
||||
v.w = vv.w;
|
||||
v.x /= v.w;
|
||||
v.y /= v.w;
|
||||
v.z /= v.w;
|
||||
v.w /= v.w;
|
||||
v.sub(eye);
|
||||
return v;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package armory.trait.internal;
|
||||
package armory.trait.navigation;
|
||||
|
||||
#if arm_navigation
|
||||
import haxerecast.Recast;
|
19
Sources/armory/trait/physics/PhysicsConstraint.hx
Normal file
19
Sources/armory/trait/physics/PhysicsConstraint.hx
Normal file
|
@ -0,0 +1,19 @@
|
|||
package armory.trait.physics;
|
||||
|
||||
#if (!arm_physics)
|
||||
|
||||
class PhysicsConstraint extends Trait { public function new() { super(); } }
|
||||
|
||||
#else
|
||||
|
||||
#if arm_bullet
|
||||
|
||||
typedef PhysicsConstraint = armory.trait.physics.bullet.PhysicsConstraint;
|
||||
|
||||
#else
|
||||
|
||||
typedef PhysicsConstraint = armory.trait.physics.oimo.PhysicsConstraint;
|
||||
|
||||
#end
|
||||
|
||||
#end
|
19
Sources/armory/trait/physics/PhysicsHook.hx
Normal file
19
Sources/armory/trait/physics/PhysicsHook.hx
Normal file
|
@ -0,0 +1,19 @@
|
|||
package armory.trait.physics;
|
||||
|
||||
#if (!arm_physics)
|
||||
|
||||
class PhysicsHook extends Trait { public function new() { super(); } }
|
||||
|
||||
#else
|
||||
|
||||
#if arm_bullet
|
||||
|
||||
typedef PhysicsHook = armory.trait.physics.bullet.PhysicsHook;
|
||||
|
||||
#else
|
||||
|
||||
typedef PhysicsHook = armory.trait.physics.oimo.PhysicsHook;
|
||||
|
||||
#end
|
||||
|
||||
#end
|
19
Sources/armory/trait/physics/PhysicsWorld.hx
Normal file
19
Sources/armory/trait/physics/PhysicsWorld.hx
Normal file
|
@ -0,0 +1,19 @@
|
|||
package armory.trait.physics;
|
||||
|
||||
#if (!arm_physics)
|
||||
|
||||
class PhysicsWorld extends Trait { public function new() { super(); } }
|
||||
|
||||
#else
|
||||
|
||||
#if arm_bullet
|
||||
|
||||
typedef PhysicsWorld = armory.trait.physics.bullet.PhysicsWorld;
|
||||
|
||||
#else
|
||||
|
||||
typedef PhysicsWorld = armory.trait.physics.oimo.PhysicsWorld;
|
||||
|
||||
#end
|
||||
|
||||
#end
|
19
Sources/armory/trait/physics/RigidBody.hx
Normal file
19
Sources/armory/trait/physics/RigidBody.hx
Normal file
|
@ -0,0 +1,19 @@
|
|||
package armory.trait.physics;
|
||||
|
||||
#if (!arm_physics)
|
||||
|
||||
class RigidBody extends Trait { public function new() { super(); } }
|
||||
|
||||
#else
|
||||
|
||||
#if arm_bullet
|
||||
|
||||
typedef RigidBody = armory.trait.physics.bullet.RigidBody;
|
||||
|
||||
#else
|
||||
|
||||
typedef RigidBody = armory.trait.physics.oimo.RigidBody;
|
||||
|
||||
#end
|
||||
|
||||
#end
|
19
Sources/armory/trait/physics/SoftBody.hx
Normal file
19
Sources/armory/trait/physics/SoftBody.hx
Normal file
|
@ -0,0 +1,19 @@
|
|||
package armory.trait.physics;
|
||||
|
||||
#if (!arm_physics_soft)
|
||||
|
||||
class SoftBody extends Trait { public function new() { super(); } }
|
||||
|
||||
#else
|
||||
|
||||
#if arm_bullet
|
||||
|
||||
typedef SoftBody = armory.trait.physics.bullet.SoftBody;
|
||||
|
||||
#else
|
||||
|
||||
typedef SoftBody = armory.trait.physics.oimo.SoftBody;
|
||||
|
||||
#end
|
||||
|
||||
#end
|
|
@ -1,4 +1,4 @@
|
|||
package armory.trait.internal;
|
||||
package armory.trait.physics.bullet;
|
||||
|
||||
import iron.math.Vec4;
|
||||
import iron.math.Mat4;
|
||||
|
@ -6,16 +6,11 @@ import iron.Trait;
|
|||
import iron.object.MeshObject;
|
||||
import iron.data.MeshData;
|
||||
import iron.data.SceneFormat;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.RigidBody;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
|
||||
class PhysicsConstraint extends Trait {
|
||||
#if (!arm_physics)
|
||||
public function new() { super(); }
|
||||
#else
|
||||
|
||||
var body1:String;
|
||||
var body2:String;
|
||||
|
@ -59,6 +54,4 @@ class PhysicsConstraint extends Trait {
|
|||
// Rigid body not initialized yet
|
||||
notifyOnInit(init);
|
||||
}
|
||||
|
||||
#end
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package armory.trait.internal;
|
||||
package armory.trait.physics.bullet;
|
||||
|
||||
import iron.math.Vec4;
|
||||
import iron.math.Mat4;
|
||||
|
@ -6,16 +6,11 @@ import iron.Trait;
|
|||
import iron.object.MeshObject;
|
||||
import iron.data.MeshData;
|
||||
import iron.data.SceneFormat;
|
||||
#if arm_physics
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.RigidBody;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
|
||||
class PhysicsHook extends Trait {
|
||||
#if (!arm_physics)
|
||||
public function new() { super(); }
|
||||
#else
|
||||
|
||||
var targetName:String;
|
||||
var verts:Array<Float>;
|
||||
|
@ -122,6 +117,4 @@ class PhysicsHook extends Trait {
|
|||
// Rigid body or soft body not initialized yet
|
||||
notifyOnInit(init);
|
||||
}
|
||||
|
||||
#end
|
||||
}
|
|
@ -1,8 +1,6 @@
|
|||
package armory.trait.internal;
|
||||
package armory.trait.physics.bullet;
|
||||
|
||||
#if arm_physics
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
import iron.Trait;
|
||||
import iron.system.Time;
|
||||
import iron.math.Vec4;
|
||||
|
@ -24,9 +22,6 @@ class ContactPair {
|
|||
|
||||
class PhysicsWorld extends Trait {
|
||||
|
||||
#if (!arm_physics)
|
||||
public function new() { super(); }
|
||||
#else
|
||||
#if arm_profile
|
||||
public static var physTime = 0.0;
|
||||
#end
|
||||
|
@ -256,5 +251,4 @@ class PhysicsWorld extends Trait {
|
|||
public function removePreUpdate(f:Void->Void) {
|
||||
preUpdates.remove(f);
|
||||
}
|
||||
#end
|
||||
}
|
|
@ -1,8 +1,6 @@
|
|||
package armory.trait.internal;
|
||||
package armory.trait.physics.bullet;
|
||||
|
||||
#if arm_physics
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
import iron.Trait;
|
||||
import iron.math.Vec4;
|
||||
import iron.object.Transform;
|
||||
|
@ -10,10 +8,6 @@ import iron.object.MeshObject;
|
|||
|
||||
class RigidBody extends Trait {
|
||||
|
||||
#if (!arm_physics)
|
||||
public function new() { super(); }
|
||||
#else
|
||||
|
||||
var shape:Shape;
|
||||
var _motionState:BtMotionStatePointer;
|
||||
|
||||
|
@ -69,7 +63,7 @@ class RigidBody extends Trait {
|
|||
ready = true;
|
||||
|
||||
transform = object.transform;
|
||||
physics = armory.trait.internal.PhysicsWorld.active;
|
||||
physics = armory.trait.physics.PhysicsWorld.active;
|
||||
|
||||
var _shape:BtCollisionShapePointer = null;
|
||||
var _shapeConvex:BtConvexHullShapePointer = null;
|
||||
|
@ -287,7 +281,6 @@ class RigidBody extends Trait {
|
|||
);
|
||||
}
|
||||
}
|
||||
#end
|
||||
}
|
||||
|
||||
@:enum abstract Shape(Int) from Int {
|
|
@ -1,4 +1,4 @@
|
|||
package armory.trait.internal;
|
||||
package armory.trait.physics.bullet;
|
||||
|
||||
import iron.math.Vec4;
|
||||
import iron.math.Mat4;
|
||||
|
@ -7,8 +7,8 @@ import iron.object.MeshObject;
|
|||
import iron.data.MeshData;
|
||||
import iron.data.SceneFormat;
|
||||
#if arm_physics_soft
|
||||
import armory.trait.internal.RigidBody;
|
||||
import armory.trait.internal.PhysicsWorld;
|
||||
import armory.trait.physics.RigidBody;
|
||||
import armory.trait.physics.PhysicsWorld;
|
||||
import haxebullet.Bullet;
|
||||
#end
|
||||
|
||||
|
@ -59,7 +59,7 @@ class SoftBody extends Trait {
|
|||
if (ready) return;
|
||||
ready = true;
|
||||
|
||||
if (physics == null) physics = armory.trait.internal.PhysicsWorld.active;
|
||||
if (physics == null) physics = armory.trait.physics.PhysicsWorld.active;
|
||||
|
||||
var softBodyHelpers = BtSoftBodyHelpers.create();
|
||||
var mo = cast(object, MeshObject);
|
|
@ -2693,14 +2693,14 @@ class ArmoryExporter:
|
|||
self.output['traits'] = []
|
||||
x = {}
|
||||
x['type'] = 'Script'
|
||||
x['class_name'] = 'armory.trait.internal.PhysicsWorld'
|
||||
x['class_name'] = 'armory.trait.physics.PhysicsWorld'
|
||||
self.output['traits'].append(x)
|
||||
if wrd.arm_navigation != 'Disabled' and ArmoryExporter.export_navigation:
|
||||
if not 'traits' in self.output:
|
||||
self.output['traits'] = []
|
||||
x = {}
|
||||
x['type'] = 'Script'
|
||||
x['class_name'] = 'armory.trait.internal.Navigation'
|
||||
x['class_name'] = 'armory.trait.navigation.Navigation'
|
||||
self.output['traits'].append(x)
|
||||
if wrd.arm_play_console:
|
||||
if not 'traits' in self.output:
|
||||
|
@ -2876,7 +2876,7 @@ class ArmoryExporter:
|
|||
body_mass = rb.mass
|
||||
x = {}
|
||||
x['type'] = 'Script'
|
||||
x['class_name'] = 'armory.trait.internal.RigidBody'
|
||||
x['class_name'] = 'armory.trait.physics.RigidBody'
|
||||
x['parameters'] = [str(body_mass), str(shape), str(rb.friction), str(rb.restitution)]
|
||||
if rb.use_margin:
|
||||
x['parameters'].append(str(rb.collision_margin))
|
||||
|
@ -2904,7 +2904,7 @@ class ArmoryExporter:
|
|||
assets.add_khafile_def('arm_physics_soft')
|
||||
cloth_trait = {}
|
||||
cloth_trait['type'] = 'Script'
|
||||
cloth_trait['class_name'] = 'armory.trait.internal.SoftBody'
|
||||
cloth_trait['class_name'] = 'armory.trait.physics.SoftBody'
|
||||
if soft_type == 0:
|
||||
bend = soft_mod.settings.bending_stiffness
|
||||
elif soft_type == 1:
|
||||
|
@ -3068,7 +3068,7 @@ class ArmoryExporter:
|
|||
def add_hook_trait(self, o, bobject, target_name, group_name):
|
||||
hook_trait = {}
|
||||
hook_trait['type'] = 'Script'
|
||||
hook_trait['class_name'] = 'armory.trait.internal.PhysicsHook'
|
||||
hook_trait['class_name'] = 'armory.trait.physics.PhysicsHook'
|
||||
verts = []
|
||||
if group_name != '':
|
||||
group = bobject.vertex_groups[group_name].index
|
||||
|
@ -3084,7 +3084,7 @@ class ArmoryExporter:
|
|||
def add_constraint_trait(self, o, rb1, rb2):
|
||||
constr_trait = {}
|
||||
constr_trait['type'] = 'Script'
|
||||
constr_trait['class_name'] = 'armory.trait.internal.PhysicsConstraint'
|
||||
constr_trait['class_name'] = 'armory.trait.physics.PhysicsConstraint'
|
||||
constr_trait['parameters'] = ["'" + rb1.name + "'", "'" + rb2.name + "'"]
|
||||
o['traits'].append(constr_trait)
|
||||
|
||||
|
|
|
@ -49,7 +49,8 @@ def init_properties():
|
|||
bpy.types.World.arm_project_scene = StringProperty(name="Scene", description="Scene to load when launching player")
|
||||
bpy.types.World.arm_physics = EnumProperty(
|
||||
items = [('Disabled', 'Disabled', 'Disabled'),
|
||||
('Bullet', 'Bullet', 'Bullet')],
|
||||
('Bullet', 'Bullet', 'Bullet'),
|
||||
('Oimo', 'Oimo', 'Oimo')],
|
||||
name = "Physics", default='Bullet')
|
||||
bpy.types.World.arm_navigation = EnumProperty(
|
||||
items = [('Disabled', 'Disabled', 'Disabled'),
|
||||
|
|
|
@ -77,12 +77,17 @@ project.addSources('Sources');
|
|||
|
||||
if export_physics:
|
||||
assets.add_khafile_def('arm_physics')
|
||||
if not os.path.exists('Libraries/haxebullet'):
|
||||
f.write(add_armory_library(sdk_path + '/lib/', 'haxebullet'))
|
||||
if state.target == 'krom' or state.target == 'html5' or state.target == 'node':
|
||||
ammojs_path = sdk_path + '/lib/haxebullet/js/ammo/ammo.js'
|
||||
ammojs_path = ammojs_path.replace('\\', '/')
|
||||
f.write(add_assets(ammojs_path))
|
||||
if wrd.arm_physics == 'Bullet':
|
||||
assets.add_khafile_def('arm_bullet')
|
||||
if not os.path.exists('Libraries/haxebullet'):
|
||||
f.write(add_armory_library(sdk_path + '/lib/', 'haxebullet'))
|
||||
if state.target == 'krom' or state.target == 'html5' or state.target == 'node':
|
||||
ammojs_path = sdk_path + '/lib/haxebullet/js/ammo/ammo.js'
|
||||
ammojs_path = ammojs_path.replace('\\', '/')
|
||||
f.write(add_assets(ammojs_path))
|
||||
elif wrd.arm_physics == 'Oimo':
|
||||
if not os.path.exists('Libraries/oimo'):
|
||||
f.write(add_armory_library(sdk_path + '/lib/', 'oimo'))
|
||||
|
||||
if export_navigation:
|
||||
assets.add_khafile_def('arm_navigation')
|
||||
|
@ -96,6 +101,14 @@ project.addSources('Sources');
|
|||
if not is_publish:
|
||||
f.write("""project.addParameter("--macro include('armory.trait')");\n""")
|
||||
f.write("""project.addParameter("--macro include('armory.trait.internal')");\n""")
|
||||
if export_physics:
|
||||
f.write("""project.addParameter("--macro include('armory.trait.physics')");\n""")
|
||||
if wrd.arm_physics == 'Bullet':
|
||||
f.write("""project.addParameter("--macro include('armory.trait.physics.bullet')");\n""")
|
||||
else:
|
||||
f.write("""project.addParameter("--macro include('armory.trait.physics.oimo')");\n""")
|
||||
if export_navigation:
|
||||
f.write("""project.addParameter("--macro include('armory.trait.navigation')");\n""")
|
||||
|
||||
if import_logicnodes: # Live patching for logic nodes
|
||||
f.write("""project.addParameter("--macro include('armory.logicnode')");\n""")
|
||||
|
|
Loading…
Reference in a new issue