BulletSim: fix line endings in BSActor*
parent
747ece59d2
commit
75b8cf428e
|
@ -1,168 +1,171 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
* * Redistributions of source code must retain the above copyright
|
* * Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
* * Redistributions in binary form must reproduce the above copyrightD
|
* * Redistributions in binary form must reproduce the above copyrightD
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* * Neither the name of the OpenSimulator Project nor the
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
* names of its contributors may be used to endorse or promote products
|
* names of its contributors may be used to endorse or promote products
|
||||||
* derived from this software without specific prior written permission.
|
* derived from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
using OMV = OpenMetaverse;
|
using OMV = OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Region.Physics.BulletSPlugin
|
namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
public class BSActorLockAxis : BSActor
|
public class BSActorLockAxis : BSActor
|
||||||
{
|
{
|
||||||
bool TryExperimentalLockAxisCode = false;
|
bool TryExperimentalLockAxisCode = false;
|
||||||
BSConstraint LockAxisConstraint = null;
|
BSConstraint LockAxisConstraint = null;
|
||||||
|
|
||||||
public BSActorLockAxis(BSScene physicsScene, BSPhysObject pObj, string actorName)
|
public BSActorLockAxis(BSScene physicsScene, BSPhysObject pObj, string actorName)
|
||||||
: base(physicsScene, pObj,actorName)
|
: base(physicsScene, pObj,actorName)
|
||||||
{
|
{
|
||||||
LockAxisConstraint = null;
|
PhysicsScene.DetailLog("{0},BSActorLockAxis,constructor", Prim.LocalID);
|
||||||
}
|
LockAxisConstraint = null;
|
||||||
|
}
|
||||||
// BSActor.isActive
|
|
||||||
public override bool isActive
|
// BSActor.isActive
|
||||||
{
|
public override bool isActive
|
||||||
get { return Enabled && Prim.IsPhysicallyActive; }
|
{
|
||||||
}
|
get { return Enabled && Prim.IsPhysicallyActive; }
|
||||||
|
}
|
||||||
// Release any connections and resources used by the actor.
|
|
||||||
// BSActor.Release()
|
// Release any connections and resources used by the actor.
|
||||||
public override void Release()
|
// BSActor.Dispose()
|
||||||
{
|
public override void Dispose()
|
||||||
RemoveAxisLockConstraint();
|
{
|
||||||
}
|
RemoveAxisLockConstraint();
|
||||||
|
}
|
||||||
// Called when physical parameters (properties set in Bullet) need to be re-applied.
|
|
||||||
// Called at taint-time.
|
// Called when physical parameters (properties set in Bullet) need to be re-applied.
|
||||||
// BSActor.Refresh()
|
// Called at taint-time.
|
||||||
public override void Refresh()
|
// BSActor.Refresh()
|
||||||
{
|
public override void Refresh()
|
||||||
// If all the axis are free, we don't need to exist
|
{
|
||||||
if (Prim.LockedAxis == Prim.LockedAxisFree)
|
PhysicsScene.DetailLog("{0},BSActorLockAxis,refresh,lockedAxis={1},enabled={2},pActive={3}",
|
||||||
{
|
Prim.LocalID, Prim.LockedAxis, Enabled, Prim.IsPhysicallyActive);
|
||||||
Prim.PhysicalActors.RemoveAndRelease(ActorName);
|
// If all the axis are free, we don't need to exist
|
||||||
return;
|
if (Prim.LockedAxis == Prim.LockedAxisFree)
|
||||||
}
|
{
|
||||||
// If the object is physically active, add the axis locking constraint
|
Prim.PhysicalActors.RemoveAndRelease(ActorName);
|
||||||
if (Enabled
|
return;
|
||||||
&& Prim.IsPhysicallyActive
|
}
|
||||||
&& TryExperimentalLockAxisCode
|
// If the object is physically active, add the axis locking constraint
|
||||||
&& Prim.LockedAxis != Prim.LockedAxisFree)
|
if (Enabled
|
||||||
{
|
&& Prim.IsPhysicallyActive
|
||||||
if (LockAxisConstraint != null)
|
&& TryExperimentalLockAxisCode
|
||||||
AddAxisLockConstraint();
|
&& Prim.LockedAxis != Prim.LockedAxisFree)
|
||||||
}
|
{
|
||||||
else
|
if (LockAxisConstraint != null)
|
||||||
{
|
AddAxisLockConstraint();
|
||||||
RemoveAxisLockConstraint();
|
}
|
||||||
}
|
else
|
||||||
}
|
{
|
||||||
|
RemoveAxisLockConstraint();
|
||||||
// The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
|
}
|
||||||
// Register a prestep action to restore physical requirements before the next simulation step.
|
}
|
||||||
// Called at taint-time.
|
|
||||||
// BSActor.RemoveBodyDependencies()
|
// The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
|
||||||
public override void RemoveBodyDependencies()
|
// Register a prestep action to restore physical requirements before the next simulation step.
|
||||||
{
|
// Called at taint-time.
|
||||||
if (LockAxisConstraint != null)
|
// BSActor.RemoveBodyDependencies()
|
||||||
{
|
public override void RemoveBodyDependencies()
|
||||||
// If a constraint is set up, remove it from the physical scene
|
{
|
||||||
RemoveAxisLockConstraint();
|
if (LockAxisConstraint != null)
|
||||||
// Schedule a call before the next simulation step to restore the constraint.
|
{
|
||||||
PhysicsScene.PostTaintObject(Prim.LockedAxisActorName, Prim.LocalID, delegate()
|
// If a constraint is set up, remove it from the physical scene
|
||||||
{
|
RemoveAxisLockConstraint();
|
||||||
Refresh();
|
// Schedule a call before the next simulation step to restore the constraint.
|
||||||
});
|
PhysicsScene.PostTaintObject(Prim.LockedAxisActorName, Prim.LocalID, delegate()
|
||||||
}
|
{
|
||||||
}
|
Refresh();
|
||||||
|
});
|
||||||
private void AddAxisLockConstraint()
|
}
|
||||||
{
|
}
|
||||||
// Lock that axis by creating a 6DOF constraint that has one end in the world and
|
|
||||||
// the other in the object.
|
private void AddAxisLockConstraint()
|
||||||
// http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=20817
|
{
|
||||||
// http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=26380
|
// Lock that axis by creating a 6DOF constraint that has one end in the world and
|
||||||
|
// the other in the object.
|
||||||
// Remove any existing axis constraint (just to be sure)
|
// http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=20817
|
||||||
RemoveAxisLockConstraint();
|
// http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=26380
|
||||||
|
|
||||||
BSConstraint6Dof axisConstrainer = new BSConstraint6Dof(PhysicsScene.World, Prim.PhysBody,
|
// Remove any existing axis constraint (just to be sure)
|
||||||
OMV.Vector3.Zero, OMV.Quaternion.Inverse(Prim.RawOrientation),
|
RemoveAxisLockConstraint();
|
||||||
true /* useLinearReferenceFrameB */, true /* disableCollisionsBetweenLinkedBodies */);
|
|
||||||
LockAxisConstraint = axisConstrainer;
|
BSConstraint6Dof axisConstrainer = new BSConstraint6Dof(PhysicsScene.World, Prim.PhysBody,
|
||||||
PhysicsScene.Constraints.AddConstraint(LockAxisConstraint);
|
OMV.Vector3.Zero, OMV.Quaternion.Inverse(Prim.RawOrientation),
|
||||||
|
true /* useLinearReferenceFrameB */, true /* disableCollisionsBetweenLinkedBodies */);
|
||||||
// The constraint is tied to the world and oriented to the prim.
|
LockAxisConstraint = axisConstrainer;
|
||||||
|
PhysicsScene.Constraints.AddConstraint(LockAxisConstraint);
|
||||||
// Free to move linearly
|
|
||||||
OMV.Vector3 linearLow = OMV.Vector3.Zero;
|
// The constraint is tied to the world and oriented to the prim.
|
||||||
OMV.Vector3 linearHigh = PhysicsScene.TerrainManager.DefaultRegionSize;
|
|
||||||
axisConstrainer.SetLinearLimits(linearLow, linearHigh);
|
// Free to move linearly
|
||||||
|
OMV.Vector3 linearLow = OMV.Vector3.Zero;
|
||||||
// Angular with some axis locked
|
OMV.Vector3 linearHigh = PhysicsScene.TerrainManager.DefaultRegionSize;
|
||||||
float f2PI = (float)Math.PI * 2f;
|
axisConstrainer.SetLinearLimits(linearLow, linearHigh);
|
||||||
OMV.Vector3 angularLow = new OMV.Vector3(-f2PI, -f2PI, -f2PI);
|
|
||||||
OMV.Vector3 angularHigh = new OMV.Vector3(f2PI, f2PI, f2PI);
|
// Angular with some axis locked
|
||||||
if (Prim.LockedAxis.X != 1f)
|
float f2PI = (float)Math.PI * 2f;
|
||||||
{
|
OMV.Vector3 angularLow = new OMV.Vector3(-f2PI, -f2PI, -f2PI);
|
||||||
angularLow.X = 0f;
|
OMV.Vector3 angularHigh = new OMV.Vector3(f2PI, f2PI, f2PI);
|
||||||
angularHigh.X = 0f;
|
if (Prim.LockedAxis.X != 1f)
|
||||||
}
|
{
|
||||||
if (Prim.LockedAxis.Y != 1f)
|
angularLow.X = 0f;
|
||||||
{
|
angularHigh.X = 0f;
|
||||||
angularLow.Y = 0f;
|
}
|
||||||
angularHigh.Y = 0f;
|
if (Prim.LockedAxis.Y != 1f)
|
||||||
}
|
{
|
||||||
if (Prim.LockedAxis.Z != 1f)
|
angularLow.Y = 0f;
|
||||||
{
|
angularHigh.Y = 0f;
|
||||||
angularLow.Z = 0f;
|
}
|
||||||
angularHigh.Z = 0f;
|
if (Prim.LockedAxis.Z != 1f)
|
||||||
}
|
{
|
||||||
axisConstrainer.SetAngularLimits(angularLow, angularHigh);
|
angularLow.Z = 0f;
|
||||||
|
angularHigh.Z = 0f;
|
||||||
PhysicsScene.DetailLog("{0},BSPrim.LockAngularMotion,create,linLow={1},linHi={2},angLow={3},angHi={4}",
|
}
|
||||||
Prim.LocalID, linearLow, linearHigh, angularLow, angularHigh);
|
axisConstrainer.SetAngularLimits(angularLow, angularHigh);
|
||||||
|
|
||||||
// Constants from one of the posts mentioned above and used in Bullet's ConstraintDemo.
|
PhysicsScene.DetailLog("{0},BSPrim.LockAngularMotion,create,linLow={1},linHi={2},angLow={3},angHi={4}",
|
||||||
axisConstrainer.TranslationalLimitMotor(true /* enable */, 5.0f, 0.1f);
|
Prim.LocalID, linearLow, linearHigh, angularLow, angularHigh);
|
||||||
|
|
||||||
axisConstrainer.RecomputeConstraintVariables(Prim.RawMass);
|
// Constants from one of the posts mentioned above and used in Bullet's ConstraintDemo.
|
||||||
}
|
axisConstrainer.TranslationalLimitMotor(true /* enable */, 5.0f, 0.1f);
|
||||||
|
|
||||||
private void RemoveAxisLockConstraint()
|
axisConstrainer.RecomputeConstraintVariables(Prim.RawMass);
|
||||||
{
|
}
|
||||||
if (LockAxisConstraint != null)
|
|
||||||
{
|
private void RemoveAxisLockConstraint()
|
||||||
PhysicsScene.Constraints.RemoveAndDestroyConstraint(LockAxisConstraint);
|
{
|
||||||
LockAxisConstraint = null;
|
if (LockAxisConstraint != null)
|
||||||
PhysicsScene.DetailLog("{0},BSPrim.CleanUpLockAxisPhysicals,destroyingConstraint", Prim.LocalID);
|
{
|
||||||
}
|
PhysicsScene.Constraints.RemoveAndDestroyConstraint(LockAxisConstraint);
|
||||||
}
|
LockAxisConstraint = null;
|
||||||
}
|
PhysicsScene.DetailLog("{0},BSPrim.CleanUpLockAxisPhysicals,destroyingConstraint", Prim.LocalID);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,123 +1,131 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
* * Redistributions of source code must retain the above copyright
|
* * Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
* * Redistributions in binary form must reproduce the above copyrightD
|
* * Redistributions in binary form must reproduce the above copyrightD
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* * Neither the name of the OpenSimulator Project nor the
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
* names of its contributors may be used to endorse or promote products
|
* names of its contributors may be used to endorse or promote products
|
||||||
* derived from this software without specific prior written permission.
|
* derived from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace OpenSim.Region.Physics.BulletSPlugin
|
namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
public class BSActorCollection
|
public class BSActorCollection
|
||||||
{
|
{
|
||||||
private BSScene PhysicsScene { get; set; }
|
private BSScene PhysicsScene { get; set; }
|
||||||
private Dictionary<string, BSActor> m_actors;
|
private Dictionary<string, BSActor> m_actors;
|
||||||
|
|
||||||
public BSActorCollection(BSScene physicsScene)
|
public BSActorCollection(BSScene physicsScene)
|
||||||
{
|
{
|
||||||
PhysicsScene = physicsScene;
|
PhysicsScene = physicsScene;
|
||||||
m_actors = new Dictionary<string, BSActor>();
|
m_actors = new Dictionary<string, BSActor>();
|
||||||
}
|
}
|
||||||
public void Add(string name, BSActor actor)
|
public void Add(string name, BSActor actor)
|
||||||
{
|
{
|
||||||
m_actors[name] = actor;
|
m_actors[name] = actor;
|
||||||
}
|
}
|
||||||
public bool RemoveAndRelease(string name)
|
public bool RemoveAndRelease(string name)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (m_actors.ContainsKey(name))
|
if (m_actors.ContainsKey(name))
|
||||||
{
|
{
|
||||||
BSActor beingRemoved = m_actors[name];
|
BSActor beingRemoved = m_actors[name];
|
||||||
beingRemoved.Release();
|
beingRemoved.Dispose();
|
||||||
m_actors.Remove(name);
|
m_actors.Remove(name);
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
Release();
|
Release();
|
||||||
m_actors.Clear();
|
m_actors.Clear();
|
||||||
}
|
}
|
||||||
public bool HasActor(string name)
|
public bool HasActor(string name)
|
||||||
{
|
{
|
||||||
return m_actors.ContainsKey(name);
|
return m_actors.ContainsKey(name);
|
||||||
}
|
}
|
||||||
public void ForEachActor(Action<BSActor> act)
|
public void ForEachActor(Action<BSActor> act)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<string, BSActor> kvp in m_actors)
|
foreach (KeyValuePair<string, BSActor> kvp in m_actors)
|
||||||
act(kvp.Value);
|
act(kvp.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Release()
|
public void Release()
|
||||||
{
|
{
|
||||||
ForEachActor(a => a.Release());
|
ForEachActor(a => a.Dispose());
|
||||||
}
|
}
|
||||||
public void Refresh()
|
public void Refresh()
|
||||||
{
|
{
|
||||||
ForEachActor(a => a.Refresh());
|
ForEachActor(a => a.Refresh());
|
||||||
}
|
}
|
||||||
public void RemoveBodyDependencies()
|
public void RemoveBodyDependencies()
|
||||||
{
|
{
|
||||||
ForEachActor(a => a.RemoveBodyDependencies());
|
ForEachActor(a => a.RemoveBodyDependencies());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
public abstract class BSActor
|
/// <summary>
|
||||||
{
|
/// Each physical object can have 'actors' who are pushing the object around.
|
||||||
protected BSScene PhysicsScene { get; private set; }
|
/// This can be used for hover, locking axis, making vehicles, etc.
|
||||||
protected BSPhysObject Prim { get; private set; }
|
/// Each physical object can have multiple actors acting on it.
|
||||||
protected bool Enabled { get; set; }
|
///
|
||||||
public string ActorName { get; private set; }
|
/// An actor usually registers itself with physics scene events (pre-step action)
|
||||||
|
/// and modifies the parameters on the host physical object.
|
||||||
public BSActor(BSScene physicsScene, BSPhysObject pObj, string actorName)
|
/// </summary>
|
||||||
{
|
public abstract class BSActor
|
||||||
PhysicsScene = physicsScene;
|
{
|
||||||
Prim = pObj;
|
protected BSScene PhysicsScene { get; private set; }
|
||||||
ActorName = actorName;
|
protected BSPhysObject Prim { get; private set; }
|
||||||
Enabled = true;
|
protected bool Enabled { get; set; }
|
||||||
}
|
public string ActorName { get; private set; }
|
||||||
|
|
||||||
// Return 'true' if activily updating the prim
|
public BSActor(BSScene physicsScene, BSPhysObject pObj, string actorName)
|
||||||
public virtual bool isActive
|
{
|
||||||
{
|
PhysicsScene = physicsScene;
|
||||||
get { return Enabled; }
|
Prim = pObj;
|
||||||
}
|
ActorName = actorName;
|
||||||
// Turn the actor on an off.
|
Enabled = true;
|
||||||
public virtual void Enable(bool setEnabled)
|
}
|
||||||
{
|
|
||||||
Enabled = setEnabled;
|
// Return 'true' if activily updating the prim
|
||||||
}
|
public virtual bool isActive
|
||||||
// Release any connections and resources used by the actor.
|
{
|
||||||
public abstract void Release();
|
get { return Enabled; }
|
||||||
// Called when physical parameters (properties set in Bullet) need to be re-applied.
|
}
|
||||||
public abstract void Refresh();
|
// Turn the actor on an off.
|
||||||
// The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
|
public virtual void Enable(bool setEnabled)
|
||||||
// Register a prestep action to restore physical requirements before the next simulation step.
|
{
|
||||||
public abstract void RemoveBodyDependencies();
|
Enabled = setEnabled;
|
||||||
|
}
|
||||||
}
|
// Release any connections and resources used by the actor.
|
||||||
}
|
public abstract void Dispose();
|
||||||
|
// Called when physical parameters (properties set in Bullet) need to be re-applied.
|
||||||
|
public abstract void Refresh();
|
||||||
|
// The object's physical representation is being rebuilt so pick up any physical dependencies (constraints, ...).
|
||||||
|
// Register a prestep action to restore physical requirements before the next simulation step.
|
||||||
|
public abstract void RemoveBodyDependencies();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue