Attached Files | 0001-Several-improvements-to-the-physics-properties.patch [^] (5,245 bytes) 2013-02-07 22:35 [Show Content] [Hide Content]From 2b8dd3cfa39c8e02120c9bb3054e0c4f89a8b818 Mon Sep 17 00:00:00 2001
From: Oren Hurvitz <orenh@kitely.com>
Date: Fri, 8 Feb 2013 07:41:14 +0200
Subject: [PATCH 1/2] Several improvements to the physics properties: -
Schedule a prim update when PhysicsShapeType changes -
Made the default prim properties constants - When
serializing a prim, skip serializing the
PhysicsShapeType if it's different from the default
shape - Allow changing Friction via LSL
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 20 ++++++++++++++------
.../Scenes/Serialization/SceneObjectSerializer.cs | 12 ++++++------
.../Shared/Api/Implementation/LSL_Api.cs | 1 +
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 9b29973..83aa0c4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -302,12 +302,18 @@ namespace OpenSim.Region.Framework.Scenes
protected Vector3 m_lastAcceleration;
protected Vector3 m_lastAngularVelocity;
protected int m_lastTerseSent;
-
- protected byte m_physicsShapeType = (byte)PhysShapeType.prim;
- protected float m_density = 1000.0f; // in kg/m^3
- protected float m_gravitymod = 1.0f;
- protected float m_friction = 0.6f; // wood
- protected float m_bounce = 0.5f; // wood
+
+ public static readonly PhysShapeType DEFAULT_PHYSICS_SHAPE_TYPE = PhysShapeType.prim;
+ public static readonly float DEFAULT_DENSITY = 1000.0f; // in kg/m^3
+ public static readonly float DEFAULT_GRAVITY = 1.0f;
+ public static readonly float DEFAULT_FRICTION = 0.6f; // wood
+ public static readonly float DEFAULT_RESTITUTION = 0.5f; // wood
+
+ protected byte m_physicsShapeType = (byte)DEFAULT_PHYSICS_SHAPE_TYPE;
+ protected float m_density = DEFAULT_DENSITY;
+ protected float m_gravitymod = DEFAULT_GRAVITY;
+ protected float m_friction = DEFAULT_FRICTION;
+ protected float m_bounce = DEFAULT_RESTITUTION;
/// <summary>
/// Stores media texture data
@@ -1381,6 +1387,8 @@ namespace OpenSim.Region.Framework.Scenes
PhysActor.PhysicsShapeType = m_physicsShapeType;
}
+ ScheduleFullUpdateIfNone();
+
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
}
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index 39420a6..e2e2efb 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1289,16 +1289,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
writer.WriteElementString("PayPrice3", sop.PayPrice[3].ToString());
writer.WriteElementString("PayPrice4", sop.PayPrice[4].ToString());
- if(sop.PhysicsShapeType != sop.DefaultPhysicsShapeType())
+ if (sop.PhysicsShapeType != (byte)SceneObjectPart.DEFAULT_PHYSICS_SHAPE_TYPE)
writer.WriteElementString("PhysicsShapeType", sop.PhysicsShapeType.ToString().ToLower());
- if (sop.Density != 1000.0f)
+ if (sop.Density != SceneObjectPart.DEFAULT_DENSITY)
writer.WriteElementString("Density", sop.Density.ToString().ToLower());
- if (sop.Friction != 0.6f)
+ if (sop.GravityModifier != SceneObjectPart.DEFAULT_GRAVITY)
+ writer.WriteElementString("GravityModifier", sop.GravityModifier.ToString().ToLower());
+ if (sop.Friction != SceneObjectPart.DEFAULT_FRICTION)
writer.WriteElementString("Friction", sop.Friction.ToString().ToLower());
- if (sop.Restitution != 0.5f)
+ if (sop.Restitution != SceneObjectPart.DEFAULT_RESTITUTION)
writer.WriteElementString("Bounce", sop.Restitution.ToString().ToLower());
- if (sop.GravityModifier != 1.0f)
- writer.WriteElementString("GravityModifier", sop.GravityModifier.ToString().ToLower());
writer.WriteEndElement();
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index be6ac0a..4d3408d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -7604,6 +7604,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
physdata.Density = part.Density;
physdata.Bounce = part.Restitution;
physdata.GravitationModifier = part.GravityModifier;
+ physdata.Friction = part.Friction;
physdata.PhysShapeType = (PhysShapeType)shape_type;
part.UpdateExtraPhysics(physdata);
--
1.7.10.msysgit.1
0002-Added-physics-parameters-support-to-MSSQL-and-SQLite.patch [^] (11,993 bytes) 2013-02-07 22:35 [Show Content] [Hide Content]From 062ecdc66ac2be16f12b3c3945613c75f600d09e Mon Sep 17 00:00:00 2001
From: Oren Hurvitz <orenh@kitely.com>
Date: Thu, 7 Feb 2013 08:23:57 +0200
Subject: [PATCH 2/2] Added physics parameters support to MSSQL and SQLite
(not tested)
---
OpenSim/Data/MSSQL/MSSQLSimulationData.cs | 21 +++++++++++++++++---
.../Data/MSSQL/Resources/RegionStore.migrations | 12 +++++++++++
OpenSim/Data/MySQL/MySQLSimulationData.cs | 19 +++++++++---------
.../Data/MySQL/Resources/RegionStore.migrations | 2 +-
.../Data/SQLite/Resources/RegionStore.migrations | 12 +++++++++++
OpenSim/Data/SQLite/SQLiteSimulationData.cs | 18 +++++++++++++++++
6 files changed, 71 insertions(+), 13 deletions(-)
diff --git a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
index 276a190..476f57a 100644
--- a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
@@ -351,7 +351,8 @@ IF EXISTS (SELECT UUID FROM prims WHERE UUID = @UUID)
ScriptAccessPin = @ScriptAccessPin, AllowedDrop = @AllowedDrop, DieAtEdge = @DieAtEdge, SalePrice = @SalePrice,
SaleType = @SaleType, ColorR = @ColorR, ColorG = @ColorG, ColorB = @ColorB, ColorA = @ColorA, ParticleSystem = @ParticleSystem,
ClickAction = @ClickAction, Material = @Material, CollisionSound = @CollisionSound, CollisionSoundVolume = @CollisionSoundVolume, PassTouches = @PassTouches,
- LinkNumber = @LinkNumber, MediaURL = @MediaURL, DynAttrs = @DynAttrs
+ LinkNumber = @LinkNumber, MediaURL = @MediaURL, DynAttrs = @DynAttrs,
+ PhysicsShapeType = @PhysicsShapeType, Density = @Density, GravityModifier = @GravityModifier, Friction = @Friction, Restitution = @Restitution
WHERE UUID = @UUID
END
ELSE
@@ -366,7 +367,8 @@ ELSE
PayPrice, PayButton1, PayButton2, PayButton3, PayButton4, LoopedSound, LoopedSoundGain, TextureAnimation, OmegaX,
OmegaY, OmegaZ, CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ, CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ,
ForceMouselook, ScriptAccessPin, AllowedDrop, DieAtEdge, SalePrice, SaleType, ColorR, ColorG, ColorB, ColorA,
- ParticleSystem, ClickAction, Material, CollisionSound, CollisionSoundVolume, PassTouches, LinkNumber, MediaURL, DynAttrs
+ ParticleSystem, ClickAction, Material, CollisionSound, CollisionSoundVolume, PassTouches, LinkNumber, MediaURL, DynAttrs,
+ PhysicsShapeType, Density, GravityModifier, Friction, Restitution
) VALUES (
@UUID, @CreationDate, @Name, @Text, @Description, @SitName, @TouchName, @ObjectFlags, @OwnerMask, @NextOwnerMask, @GroupMask,
@EveryoneMask, @BaseMask, @PositionX, @PositionY, @PositionZ, @GroupPositionX, @GroupPositionY, @GroupPositionZ, @VelocityX,
@@ -376,7 +378,8 @@ ELSE
@PayPrice, @PayButton1, @PayButton2, @PayButton3, @PayButton4, @LoopedSound, @LoopedSoundGain, @TextureAnimation, @OmegaX,
@OmegaY, @OmegaZ, @CameraEyeOffsetX, @CameraEyeOffsetY, @CameraEyeOffsetZ, @CameraAtOffsetX, @CameraAtOffsetY, @CameraAtOffsetZ,
@ForceMouselook, @ScriptAccessPin, @AllowedDrop, @DieAtEdge, @SalePrice, @SaleType, @ColorR, @ColorG, @ColorB, @ColorA,
- @ParticleSystem, @ClickAction, @Material, @CollisionSound, @CollisionSoundVolume, @PassTouches, @LinkNumber, @MediaURL, @DynAttrs
+ @ParticleSystem, @ClickAction, @Material, @CollisionSound, @CollisionSoundVolume, @PassTouches, @LinkNumber, @MediaURL, @DynAttrs,
+ @PhysicsShapeType, @Density, @GravityModifier, @Friction, @Restitution
)
END";
@@ -1697,6 +1700,12 @@ VALUES
else
prim.DynAttrs = new DAMap();
+ prim.PhysicsShapeType = Convert.ToByte(primRow["PhysicsShapeType"]);
+ prim.Density = Convert.ToSingle(primRow["Density"]);
+ prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]);
+ prim.Friction = Convert.ToSingle(primRow["Friction"]);
+ prim.Restitution = Convert.ToSingle(primRow["Restitution"]);
+
return prim;
}
@@ -2095,6 +2104,12 @@ VALUES
parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml()));
else
parameters.Add(_Database.CreateParameter("DynAttrs", null));
+
+ parameters.Add(_Database.CreateParameter("PhysicsShapeType", prim.PhysicsShapeType));
+ parameters.Add(_Database.CreateParameter("Density", (double)prim.Density));
+ parameters.Add(_Database.CreateParameter("GravityModifier", (double)prim.GravityModifier));
+ parameters.Add(_Database.CreateParameter("Friction", (double)prim.Friction));
+ parameters.Add(_Database.CreateParameter("Restitution", (double)prim.Restitution));
return parameters.ToArray();
}
diff --git a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
index 92cc38a..b84c2a4 100644
--- a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
@@ -1156,3 +1156,15 @@ BEGIN TRANSACTION
ALTER TABLE prims ADD COLUMN DynAttrs TEXT;
COMMIT
+
+:VERSION 39 #---------------- Extra physics params
+
+BEGIN TRANSACTION
+
+ALTER TABLE prims ADD COLUMN `PhysicsShapeType` tinyint(4) NOT NULL default '0';
+ALTER TABLE prims ADD COLUMN `Density` double NOT NULL default '1000';
+ALTER TABLE prims ADD COLUMN `GravityModifier` double NOT NULL default '1';
+ALTER TABLE prims ADD COLUMN `Friction` double NOT NULL default '0.6';
+ALTER TABLE prims ADD COLUMN `Restitution` double NOT NULL default '0.5';
+
+COMMIT
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 1b02b4f..9cc6f40 100644
--- a/OpenSim/Data/MySQL/MySQLSimulationData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -173,9 +173,9 @@ namespace OpenSim.Data.MySQL
"ParticleSystem, ClickAction, Material, " +
"CollisionSound, CollisionSoundVolume, " +
"PassTouches, " +
- "LinkNumber, MediaURL, " +
+ "LinkNumber, MediaURL, DynAttrs, " +
"PhysicsShapeType, Density, GravityModifier, " +
- "Friction, Restitution, DynAttrs " +
+ "Friction, Restitution " +
") values (" + "?UUID, " +
"?CreationDate, ?Name, ?Text, " +
"?Description, ?SitName, ?TouchName, " +
@@ -208,9 +208,9 @@ namespace OpenSim.Data.MySQL
"?ColorB, ?ColorA, ?ParticleSystem, " +
"?ClickAction, ?Material, ?CollisionSound, " +
"?CollisionSoundVolume, ?PassTouches, " +
- "?LinkNumber, ?MediaURL, " +
+ "?LinkNumber, ?MediaURL, ?DynAttrs, " +
"?PhysicsShapeType, ?Density, ?GravityModifier, " +
- "?Friction, ?Restitution, ?DynAttrs)";
+ "?Friction, ?Restitution)";
FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
@@ -1659,16 +1659,17 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum);
cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl);
- cmd.Parameters.AddWithValue("PhysicsShapeType", prim.PhysicsShapeType);
- cmd.Parameters.AddWithValue("Density", (double)prim.Density);
- cmd.Parameters.AddWithValue("GravityModifier", (double)prim.GravityModifier);
- cmd.Parameters.AddWithValue("Friction", (double)prim.Friction);
- cmd.Parameters.AddWithValue("Restitution", (double)prim.Restitution);
if (prim.DynAttrs.Count > 0)
cmd.Parameters.AddWithValue("DynAttrs", prim.DynAttrs.ToXml());
else
cmd.Parameters.AddWithValue("DynAttrs", null);
+
+ cmd.Parameters.AddWithValue("PhysicsShapeType", prim.PhysicsShapeType);
+ cmd.Parameters.AddWithValue("Density", (double)prim.Density);
+ cmd.Parameters.AddWithValue("GravityModifier", (double)prim.GravityModifier);
+ cmd.Parameters.AddWithValue("Friction", (double)prim.Friction);
+ cmd.Parameters.AddWithValue("Restitution", (double)prim.Restitution);
}
/// <summary>
diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
index 48cd60b..513c784 100644
--- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
@@ -911,7 +911,7 @@ ALTER TABLE prims ADD COLUMN DynAttrs TEXT;
COMMIT;
-:VERSION 47 #---------------- Extra prim params
+:VERSION 47 #---------------- Extra physics params
BEGIN;
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index e583dc2..c6f4b48 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -580,3 +580,15 @@ COMMIT;
BEGIN;
ALTER TABLE prims ADD COLUMN DynAttrs TEXT;
COMMIT;
+
+:VERSION 28
+
+BEGIN;
+
+ALTER TABLE prims ADD COLUMN `PhysicsShapeType` tinyint(4) NOT NULL default '0';
+ALTER TABLE prims ADD COLUMN `Density` double NOT NULL default '1000';
+ALTER TABLE prims ADD COLUMN `GravityModifier` double NOT NULL default '1';
+ALTER TABLE prims ADD COLUMN `Friction` double NOT NULL default '0.6';
+ALTER TABLE prims ADD COLUMN `Restitution` double NOT NULL default '0.5';
+
+COMMIT;
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index 91fc704..d4734a6 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -1235,6 +1235,12 @@ namespace OpenSim.Data.SQLite
createCol(prims, "DynAttrs", typeof(String));
+ createCol(prims, "PhysicsShapeType", typeof(Byte));
+ createCol(prims, "Density", typeof(Double));
+ createCol(prims, "GravityModifier", typeof(Double));
+ createCol(prims, "Friction", typeof(Double));
+ createCol(prims, "Restitution", typeof(Double));
+
// Add in contraints
prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] };
@@ -1724,6 +1730,12 @@ namespace OpenSim.Data.SQLite
prim.DynAttrs = new DAMap();
}
+ prim.PhysicsShapeType = Convert.ToByte(row["PhysicsShapeType"]);
+ prim.Density = Convert.ToSingle(row["Density"]);
+ prim.GravityModifier = Convert.ToSingle(row["GravityModifier"]);
+ prim.Friction = Convert.ToSingle(row["Friction"]);
+ prim.Restitution = Convert.ToSingle(row["Restitution"]);
+
return prim;
}
@@ -2150,6 +2162,12 @@ namespace OpenSim.Data.SQLite
row["DynAttrs"] = prim.DynAttrs.ToXml();
else
row["DynAttrs"] = null;
+
+ row["PhysicsShapeType"] = prim.PhysicsShapeType;
+ row["Density"] = (double)prim.Density;
+ row["GravityModifier"] = (double)prim.GravityModifier;
+ row["Friction"] = (double)prim.Friction;
+ row["Restitution"] = (double)prim.Restitution;
}
/// <summary>
--
1.7.10.msysgit.1
|