Implement deactivation params
This commit is contained in:
parent
8be4c457c9
commit
0a81944b40
|
@ -23,12 +23,9 @@ 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;
|
||||
var linearFactors:Array<Float>;
|
||||
var angularFactors:Array<Float>;
|
||||
var deactivationParams:Array<Float>;
|
||||
public var group = 1;
|
||||
public var ghost = false;
|
||||
|
||||
|
@ -43,8 +40,8 @@ class RigidBody extends Trait {
|
|||
|
||||
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,
|
||||
linearFactor:Array<Float> = null, angularFactor:Array<Float> = null,
|
||||
group = 1, ghost = false) {
|
||||
linearFactors:Array<Float> = null, angularFactors:Array<Float> = null,
|
||||
group = 1, ghost = false, deactivationParams:Array<Float> = null) {
|
||||
super();
|
||||
|
||||
this.mass = mass;
|
||||
|
@ -55,14 +52,11 @@ class RigidBody extends Trait {
|
|||
this.linearDamping = linearDamping;
|
||||
this.angularDamping = angularDamping;
|
||||
this.passive = passive;
|
||||
this.linearFactorX = linearFactor[0];
|
||||
this.linearFactorY = linearFactor[1];
|
||||
this.linearFactorZ = linearFactor[2];
|
||||
this.angularFactorX = angularFactor[0];
|
||||
this.angularFactorY = angularFactor[1];
|
||||
this.angularFactorZ = angularFactor[2];
|
||||
this.linearFactors = linearFactors;
|
||||
this.angularFactors = angularFactors;
|
||||
this.group = group;
|
||||
this.ghost = ghost;
|
||||
this.deactivationParams = deactivationParams;
|
||||
|
||||
notifyOnAdd(init);
|
||||
notifyOnLateUpdate(lateUpdate);
|
||||
|
@ -163,23 +157,30 @@ class RigidBody extends Trait {
|
|||
body.setRollingFriction(friction);
|
||||
body.setRestitution(restitution);
|
||||
|
||||
id = nextId;
|
||||
nextId++;
|
||||
if (deactivationParams != null) {
|
||||
setDeactivationParams(deactivationParams[0], deactivationParams[1], deactivationParams[2]);
|
||||
}
|
||||
else {
|
||||
setActivationState(ActivationState.NoDeactivation);
|
||||
}
|
||||
|
||||
if (linearDamping != 0.04 || angularDamping != 0.1) {
|
||||
body.setDamping(linearDamping, angularDamping);
|
||||
}
|
||||
|
||||
if (linearFactorX != 1.0 || linearFactorY != 1.0 || linearFactorZ != 1.0) {
|
||||
setLinearFactor(linearFactorX, linearFactorY, linearFactorZ);
|
||||
if (linearFactors != null) {
|
||||
setLinearFactor(linearFactors[0], linearFactors[1], linearFactors[2]);
|
||||
}
|
||||
|
||||
if (angularFactorX != 1.0 || angularFactorY != 1.0 || angularFactorZ != 1.0) {
|
||||
setAngularFactor(angularFactorX, angularFactorY, angularFactorZ);
|
||||
if (angularFactors != null) {
|
||||
setAngularFactor(angularFactors[0], angularFactors[1], angularFactors[2]);
|
||||
}
|
||||
|
||||
if (ghost) body.setCollisionFlags(body.getCollisionFlags() | BtCollisionObject.CF_NO_CONTACT_RESPONSE);
|
||||
|
||||
id = nextId;
|
||||
nextId++;
|
||||
|
||||
#if js
|
||||
//body.setUserIndex(nextId);
|
||||
untyped body.userIndex = id;
|
||||
|
@ -235,6 +236,11 @@ class RigidBody extends Trait {
|
|||
body.setActivationState(newState);
|
||||
}
|
||||
|
||||
public function setDeactivationParams(linearThreshold:Float, angularThreshold:Float, time:Float) {
|
||||
body.setSleepingThresholds(linearThreshold, angularThreshold);
|
||||
// body.setDeactivationTime(time); // not available in ammo
|
||||
}
|
||||
|
||||
public function applyImpulse(impulse:Vec4, loc:Vec4 = null) {
|
||||
activate();
|
||||
if (loc == null) {
|
||||
|
@ -313,7 +319,7 @@ class RigidBody extends Trait {
|
|||
}
|
||||
}
|
||||
|
||||
@:enum abstract Shape(Int) from Int {
|
||||
@:enum abstract Shape(Int) from Int to Int {
|
||||
var Box = 0;
|
||||
var Sphere = 1;
|
||||
var ConvexHull = 2;
|
||||
|
@ -325,7 +331,7 @@ class RigidBody extends Trait {
|
|||
var StaticMesh = 8;
|
||||
}
|
||||
|
||||
@:enum abstract ActivationState(Int) from Int {
|
||||
@:enum abstract ActivationState(Int) from Int to Int {
|
||||
var Active = 1;
|
||||
var NoDeactivation = 4;
|
||||
var NoSimulation = 5;
|
||||
|
|
|
@ -2999,8 +2999,8 @@ class ArmoryExporter:
|
|||
x['parameters'].append(str(rb.linear_damping))
|
||||
x['parameters'].append(str(rb.angular_damping))
|
||||
x['parameters'].append(str(rb.type == 'PASSIVE').lower())
|
||||
lin_fac = '[{0}, {1}, {2}'.format(str(bobject.arm_rb_linear_factor[0]), str(bobject.arm_rb_linear_factor[1]), str(bobject.arm_rb_linear_factor[2]))
|
||||
ang_fac = '[{0}, {1}, {2}'.format(str(bobject.arm_rb_angular_factor[0]), str(bobject.arm_rb_angular_factor[1]), str(bobject.arm_rb_angular_factor[2]))
|
||||
lin_fac = '[{0}, {1}, {2}]'.format(str(bobject.arm_rb_linear_factor[0]), str(bobject.arm_rb_linear_factor[1]), str(bobject.arm_rb_linear_factor[2]))
|
||||
ang_fac = '[{0}, {1}, {2}]'.format(str(bobject.arm_rb_angular_factor[0]), str(bobject.arm_rb_angular_factor[1]), str(bobject.arm_rb_angular_factor[2]))
|
||||
x['parameters'].append(lin_fac)
|
||||
x['parameters'].append(ang_fac)
|
||||
col_group = ''
|
||||
|
@ -3008,6 +3008,11 @@ class ArmoryExporter:
|
|||
col_group = ('1' if b else '0') + col_group
|
||||
x['parameters'].append(str(int(col_group, 2)))
|
||||
x['parameters'].append(str(bobject.arm_rb_ghost).lower())
|
||||
if rb.use_deactivation or bobject.arm_rb_force_deactivation:
|
||||
deact_params = lin_fac = '[{0}, {1}, {2}]'.format(str(rb.deactivate_linear_velocity), str(rb.deactivate_angular_velocity), str(bobject.arm_rb_deactivation_time))
|
||||
x['parameters'].append(deact_params)
|
||||
else:
|
||||
x['parameters'].append('null')
|
||||
o['traits'].append(x)
|
||||
|
||||
# Soft bodies modifier
|
||||
|
|
|
@ -172,6 +172,8 @@ def init_properties():
|
|||
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_rb_ghost = bpy.props.BoolProperty(name="Ghost", description="Disable contact response", default=False)
|
||||
bpy.types.Object.arm_rb_force_deactivation = bpy.props.BoolProperty(name="Force Deactivation", description="Force deactivation on all rigid bodies for performance", default=True)
|
||||
bpy.types.Object.arm_rb_deactivation_time = bpy.props.FloatProperty(name="Deactivation Time", description="Delay putting rigid body into sleep", default=0.0)
|
||||
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='')
|
||||
|
|
|
@ -117,10 +117,19 @@ 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')
|
||||
layout.prop(obj, 'arm_rb_ghost')
|
||||
if obj.rigid_body != None:
|
||||
# use_deactivation = obj.rigid_body.use_deactivation
|
||||
# layout.prop(obj.rigid_body, 'use_deactivation')
|
||||
# row = layout.row()
|
||||
# row.enabled = use_deactivation
|
||||
# row.prop(obj, 'arm_rb_deactivation_time')
|
||||
layout.prop(obj, 'arm_rb_linear_factor')
|
||||
layout.prop(obj, 'arm_rb_angular_factor')
|
||||
layout.prop(obj, 'arm_rb_ghost')
|
||||
layout.prop(obj, 'arm_rb_force_deactivation')
|
||||
|
||||
if obj.soft_body != None:
|
||||
layout.prop(obj, 'arm_soft_body_margin')
|
||||
|
||||
# Menu in data region
|
||||
class DataPropsPanel(bpy.types.Panel):
|
||||
|
|
Loading…
Reference in a new issue