Expose linear and angular factor for rigid body

This commit is contained in:
Lubos Lenco 2017-10-23 17:26:17 +02:00
parent 21c89b3eec
commit 505ccb7caf
5 changed files with 35 additions and 2 deletions

View file

@ -9,7 +9,8 @@
"links": [
{
"name": "eye",
"link": "_cameraPosition"
"link": "_cameraPosition",
"ifdef": ["_Rad"]
},
{
"name": "eyeSnap",

View file

@ -23,6 +23,12 @@ class RigidBody extends Trait {
public var linearDamping:Float;
public var angularDamping:Float;
public var passive:Bool;
var linearFactorX:Float;
var linearFactorY:Float;
var linearFactorZ:Float;
var angularFactorX:Float;
var angularFactorY:Float;
var angularFactorZ:Float;
public var body:BtRigidBodyPointer = null;
public var ready = false;
@ -34,7 +40,9 @@ class RigidBody extends Trait {
public var onReady:Void->Void = null;
public function new(mass = 1.0, shape = Shape.Box, friction = 0.5, restitution = 0.0, collisionMargin = 0.0,
linearDamping = 0.04, angularDamping = 0.1, passive = false) {
linearDamping = 0.04, angularDamping = 0.1, passive = false,
linearFactorX = 1.0, linearFactorY = 1.0, linearFactorZ = 1.0,
angularFactorX = 1.0, angularFactorY = 1.0, angularFactorZ = 1.0) {
super();
this.mass = mass;
@ -45,6 +53,12 @@ class RigidBody extends Trait {
this.linearDamping = linearDamping;
this.angularDamping = angularDamping;
this.passive = passive;
this.linearFactorX = linearFactorX;
this.linearFactorY = linearFactorY;
this.linearFactorZ = linearFactorZ;
this.angularFactorX = angularFactorX;
this.angularFactorY = angularFactorY;
this.angularFactorZ = angularFactorZ;
notifyOnAdd(init);
notifyOnLateUpdate(lateUpdate);
@ -152,6 +166,14 @@ class RigidBody extends Trait {
body.setDamping(linearDamping, angularDamping);
}
if (linearFactorX != 1.0 || linearFactorY != 1.0 || linearFactorZ != 1.0) {
setLinearFactor(linearFactorX, linearFactorY, linearFactorZ);
}
if (angularFactorX != 1.0 || angularFactorY != 1.0 || angularFactorZ != 1.0) {
setAngularFactor(angularFactorX, angularFactorY, angularFactorZ);
}
#if js
//body.setUserIndex(nextId);
untyped body.userIndex = id;

View file

@ -3000,6 +3000,12 @@ class ArmoryExporter:
x['parameters'].append(str(rb.linear_damping))
x['parameters'].append(str(rb.angular_damping))
x['parameters'].append(str(rb.type == 'PASSIVE').lower())
x['parameters'].append(str(bobject.arm_rb_linear_factor[0]))
x['parameters'].append(str(bobject.arm_rb_linear_factor[1]))
x['parameters'].append(str(bobject.arm_rb_linear_factor[2]))
x['parameters'].append(str(bobject.arm_rb_angular_factor[0]))
x['parameters'].append(str(bobject.arm_rb_angular_factor[1]))
x['parameters'].append(str(bobject.arm_rb_angular_factor[2]))
o['traits'].append(x)
# Soft bodies modifier

View file

@ -166,6 +166,8 @@ def init_properties():
bpy.types.Object.arm_spawn = bpy.props.BoolProperty(name="Spawn", description="Auto-add this object when creating scene", default=True)
bpy.types.Object.arm_mobile = bpy.props.BoolProperty(name="Mobile", description="Object moves during gameplay", default=True)
bpy.types.Object.arm_soft_body_margin = bpy.props.FloatProperty(name="Soft Body Margin", description="Collision margin", default=0.04)
bpy.types.Object.arm_rb_linear_factor = bpy.props.FloatVectorProperty(name="Linear Factor", size=3, description="Set to 0 to lock axis", default=[1,1,1])
bpy.types.Object.arm_rb_angular_factor = bpy.props.FloatVectorProperty(name="Angular Factor", size=3, description="Set to 0 to lock axis", default=[1,1,1])
bpy.types.Object.arm_animation_enabled = bpy.props.BoolProperty(name="Animation", description="Enable skinning & timeline animation", default=True)
bpy.types.Object.arm_tilesheet = bpy.props.StringProperty(name="Tilesheet", description="Set tilesheet animation", default='')
bpy.types.Object.arm_tilesheet_action = bpy.props.StringProperty(name="Tilesheet Action", description="Set startup action", default='')

View file

@ -117,6 +117,8 @@ class PhysicsPropsPanel(bpy.types.Panel):
if obj == None:
return
layout.prop(obj, 'arm_rb_linear_factor')
layout.prop(obj, 'arm_rb_angular_factor')
layout.prop(obj, 'arm_soft_body_margin')
# Menu in data region