Implements llSetForce() and llGetForce(). These are experimental and the units may not match the Linden implementation.
parent
d58346e798
commit
f74a9bcdc7
|
@ -1374,6 +1374,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PhysicsVector GetForce()
|
||||||
|
{
|
||||||
|
if (PhysActor != null)
|
||||||
|
return PhysActor.Force;
|
||||||
|
else
|
||||||
|
return new PhysicsVector();
|
||||||
|
}
|
||||||
|
|
||||||
[SecurityPermission(SecurityAction.LinkDemand,
|
[SecurityPermission(SecurityAction.LinkDemand,
|
||||||
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
||||||
public virtual void GetObjectData(
|
public virtual void GetObjectData(
|
||||||
|
@ -2296,6 +2304,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetForce(PhysicsVector force)
|
||||||
|
{
|
||||||
|
if (PhysActor != null)
|
||||||
|
{
|
||||||
|
PhysActor.Force = force;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetGroup(LLUUID groupID, IClientAPI client)
|
public void SetGroup(LLUUID groupID, IClientAPI client)
|
||||||
{
|
{
|
||||||
_groupID = groupID;
|
_groupID = groupID;
|
||||||
|
|
|
@ -332,6 +332,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -943,6 +943,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -173,7 +173,7 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
|
|
||||||
public abstract PhysicsVector Position { get; set; }
|
public abstract PhysicsVector Position { get; set; }
|
||||||
public abstract float Mass { get; }
|
public abstract float Mass { get; }
|
||||||
public abstract PhysicsVector Force { get; }
|
public abstract PhysicsVector Force { get; set; }
|
||||||
public abstract PhysicsVector GeometricCenter { get; }
|
public abstract PhysicsVector GeometricCenter { get; }
|
||||||
public abstract PhysicsVector CenterOfMass { get; }
|
public abstract PhysicsVector CenterOfMass { get; }
|
||||||
public abstract PhysicsVector Velocity { get; set; }
|
public abstract PhysicsVector Velocity { get; set; }
|
||||||
|
@ -277,6 +277,7 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -534,6 +534,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return new PhysicsVector(_target_velocity.X, _target_velocity.Y, _target_velocity.Z); }
|
get { return new PhysicsVector(_target_velocity.X, _target_velocity.Y, _target_velocity.Z); }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -103,6 +103,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private CollisionLocker ode;
|
private CollisionLocker ode;
|
||||||
|
|
||||||
private bool m_taintforce = false;
|
private bool m_taintforce = false;
|
||||||
|
private PhysicsVector m_force = new PhysicsVector(0.0f, 0.0f, 0.0f);
|
||||||
private List<PhysicsVector> m_forcelist = new List<PhysicsVector>();
|
private List<PhysicsVector> m_forcelist = new List<PhysicsVector>();
|
||||||
|
|
||||||
private IMesh _mesh;
|
private IMesh _mesh;
|
||||||
|
@ -749,7 +750,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
changeshape(timestep);
|
changeshape(timestep);
|
||||||
//
|
//
|
||||||
|
|
||||||
if (m_taintforce)
|
if (m_taintforce || m_force != new PhysicsVector(0.0f, 0.0f, 0.0f))
|
||||||
changeAddForce(timestep);
|
changeAddForce(timestep);
|
||||||
|
|
||||||
if (m_taintdisable)
|
if (m_taintdisable)
|
||||||
|
@ -1751,7 +1752,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
//m_log.Info("[PHYSICS]: dequeing forcelist");
|
//m_log.Info("[PHYSICS]: dequeing forcelist");
|
||||||
if (IsPhysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
PhysicsVector iforce = new PhysicsVector();
|
//PhysicsVector iforce = new PhysicsVector();
|
||||||
|
PhysicsVector iforce = m_force * 100.0f;
|
||||||
for (int i = 0; i < m_forcelist.Count; i++)
|
for (int i = 0; i < m_forcelist.Count; i++)
|
||||||
{
|
{
|
||||||
iforce = iforce + (m_forcelist[i] * 100);
|
iforce = iforce + (m_forcelist[i] * 100);
|
||||||
|
@ -1856,7 +1858,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
//get { return PhysicsVector.Zero; }
|
||||||
|
get { return m_force; }
|
||||||
|
set { m_force = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -156,6 +156,7 @@ namespace OpenSim.Region.Physics.POSPlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -118,6 +118,7 @@ namespace OpenSim.Region.Physics.POSPlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -340,6 +340,7 @@ namespace OpenSim.Region.Physics.PhysXPlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
@ -669,6 +670,7 @@ namespace OpenSim.Region.Physics.PhysXPlugin
|
||||||
public override PhysicsVector Force
|
public override PhysicsVector Force
|
||||||
{
|
{
|
||||||
get { return PhysicsVector.Zero; }
|
get { return PhysicsVector.Zero; }
|
||||||
|
set { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector CenterOfMass
|
public override PhysicsVector CenterOfMass
|
||||||
|
|
|
@ -42,6 +42,7 @@ using OpenSim.Region.Environment.Interfaces;
|
||||||
using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
|
using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
|
||||||
using OpenSim.Region.Environment.Modules.World.Land;
|
using OpenSim.Region.Environment.Modules.World.Land;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
|
using OpenSim.Region.Physics.Manager;
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||||
|
|
||||||
//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL;
|
//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL;
|
||||||
|
@ -1578,14 +1579,40 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
public void llSetForce(LSL_Types.Vector3 force, int local)
|
public void llSetForce(LSL_Types.Vector3 force, int local)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llSetForce");
|
//NotImplemented("llSetForce");
|
||||||
|
|
||||||
|
if (m_host.ParentGroup != null)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.RootPart != null)
|
||||||
|
{
|
||||||
|
if (local != 0)
|
||||||
|
force *= llGetRot();
|
||||||
|
|
||||||
|
m_host.ParentGroup.RootPart.SetForce(new PhysicsVector((float)force.x, (float)force.y, (float)force.z));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Types.Vector3 llGetForce()
|
public LSL_Types.Vector3 llGetForce()
|
||||||
{
|
{
|
||||||
|
LSL_Types.Vector3 force = new LSL_Types.Vector3(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llGetForce");
|
//NotImplemented("llGetForce");
|
||||||
return new LSL_Types.Vector3();
|
//return new LSL_Types.Vector3();
|
||||||
|
|
||||||
|
if (m_host.ParentGroup != null)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.RootPart != null)
|
||||||
|
{
|
||||||
|
PhysicsVector tmpForce = m_host.ParentGroup.RootPart.GetForce();
|
||||||
|
force.x = tmpForce.X;
|
||||||
|
force.y = tmpForce.Y;
|
||||||
|
force.z = tmpForce.Z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return force;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range)
|
public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range)
|
||||||
|
|
|
@ -43,6 +43,7 @@ using OpenSim.Region.Environment.Interfaces;
|
||||||
using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
|
using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
|
||||||
using OpenSim.Region.Environment.Modules.World.Land;
|
using OpenSim.Region.Environment.Modules.World.Land;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
|
using OpenSim.Region.Physics.Manager;
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
|
using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
|
||||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||||
|
@ -1430,14 +1431,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llSetForce(LSL_Types.Vector3 force, int local)
|
public void llSetForce(LSL_Types.Vector3 force, int local)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llSetForce");
|
//NotImplemented("llSetForce");
|
||||||
|
|
||||||
|
if (m_host.ParentGroup != null)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.RootPart != null)
|
||||||
|
{
|
||||||
|
if (local != 0)
|
||||||
|
force *= llGetRot();
|
||||||
|
|
||||||
|
m_host.ParentGroup.RootPart.SetForce(new PhysicsVector((float)force.x, (float)force.y, (float)force.z));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Types.Vector3 llGetForce()
|
public LSL_Types.Vector3 llGetForce()
|
||||||
{
|
{
|
||||||
|
LSL_Types.Vector3 force = new LSL_Types.Vector3(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llGetForce");
|
//NotImplemented("llGetForce");
|
||||||
return new LSL_Types.Vector3();
|
//return new LSL_Types.Vector3();
|
||||||
|
|
||||||
|
if (m_host.ParentGroup != null)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.RootPart != null)
|
||||||
|
{
|
||||||
|
PhysicsVector tmpForce = m_host.ParentGroup.RootPart.GetForce();
|
||||||
|
force.x = tmpForce.X;
|
||||||
|
force.y = tmpForce.Y;
|
||||||
|
force.z = tmpForce.Z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return force;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range)
|
public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range)
|
||||||
|
|
Loading…
Reference in New Issue