Merge branch 'master' of /home/opensim/var/repo/opensim
commit
a37040d07a
|
@ -300,76 +300,74 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disabled for now as it looks like http://opensimulator.org/mantis/view.php?id=6311 was fixed by fixes
|
// XXX: This code was placed here to try and accomodate RLV which moves given folders named #RLV/~<name>
|
||||||
// to inventory folder versioning allowing the viewer to move the received folder itself as happens on the
|
// to the requested folder, which in this case is #RLV. However, it is the viewer that appears to be
|
||||||
// LL grid. Doing it again server-side then wrongly does a second create and move
|
// response from renaming the #RLV/~example folder to ~example. For some reason this is not yet
|
||||||
// // XXX: This code was placed here to try and accomdate RLV which moves given folders named #RLV/~<name>
|
// happening, possibly because we are not sending the correct inventory update messages with the correct
|
||||||
// // to a folder called name in #RLV. However, this approach may not be ultimately correct - from analysis
|
// transaction IDs
|
||||||
// // of Firestorm 4.2.2 on sending an InventoryOffered instead of TaskInventoryOffered (as was previously
|
else if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted)
|
||||||
// // done), the viewer itself would appear to move and rename the folder, rather than the simulator doing it here.
|
{
|
||||||
// else if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted)
|
UUID destinationFolderID = UUID.Zero;
|
||||||
// {
|
|
||||||
// UUID destinationFolderID = UUID.Zero;
|
if (im.binaryBucket != null && im.binaryBucket.Length >= 16)
|
||||||
//
|
{
|
||||||
// if (im.binaryBucket != null && im.binaryBucket.Length >= 16)
|
destinationFolderID = new UUID(im.binaryBucket, 0);
|
||||||
// {
|
}
|
||||||
// destinationFolderID = new UUID(im.binaryBucket, 0);
|
|
||||||
// }
|
if (destinationFolderID != UUID.Zero)
|
||||||
//
|
{
|
||||||
// if (destinationFolderID != UUID.Zero)
|
InventoryFolderBase destinationFolder = new InventoryFolderBase(destinationFolderID, client.AgentId);
|
||||||
// {
|
if (destinationFolder == null)
|
||||||
// InventoryFolderBase destinationFolder = new InventoryFolderBase(destinationFolderID, client.AgentId);
|
{
|
||||||
// if (destinationFolder == null)
|
m_log.WarnFormat(
|
||||||
// {
|
"[INVENTORY TRANSFER]: TaskInventoryAccepted message from {0} in {1} specified folder {2} which does not exist",
|
||||||
// m_log.WarnFormat(
|
client.Name, scene.Name, destinationFolderID);
|
||||||
// "[INVENTORY TRANSFER]: TaskInventoryAccepted message from {0} in {1} specified folder {2} which does not exist",
|
|
||||||
// client.Name, scene.Name, destinationFolderID);
|
return;
|
||||||
//
|
}
|
||||||
// return;
|
|
||||||
// }
|
IInventoryService invService = scene.InventoryService;
|
||||||
//
|
|
||||||
// IInventoryService invService = scene.InventoryService;
|
UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
|
||||||
//
|
|
||||||
// UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
|
InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId);
|
||||||
//
|
item = invService.GetItem(item);
|
||||||
// InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId);
|
InventoryFolderBase folder = null;
|
||||||
// item = invService.GetItem(item);
|
UUID? previousParentFolderID = null;
|
||||||
// InventoryFolderBase folder = null;
|
|
||||||
// UUID? previousParentFolderID = null;
|
if (item != null) // It's an item
|
||||||
//
|
{
|
||||||
// if (item != null) // It's an item
|
previousParentFolderID = item.Folder;
|
||||||
// {
|
item.Folder = destinationFolderID;
|
||||||
// previousParentFolderID = item.Folder;
|
|
||||||
// item.Folder = destinationFolderID;
|
invService.DeleteItems(item.Owner, new List<UUID>() { item.ID });
|
||||||
//
|
scene.AddInventoryItem(client, item);
|
||||||
// invService.DeleteItems(item.Owner, new List<UUID>() { item.ID });
|
}
|
||||||
// scene.AddInventoryItem(client, item);
|
else
|
||||||
// }
|
{
|
||||||
// else
|
folder = new InventoryFolderBase(inventoryID, client.AgentId);
|
||||||
// {
|
folder = invService.GetFolder(folder);
|
||||||
// folder = new InventoryFolderBase(inventoryID, client.AgentId);
|
|
||||||
// folder = invService.GetFolder(folder);
|
if (folder != null) // It's a folder
|
||||||
//
|
{
|
||||||
// if (folder != null) // It's a folder
|
previousParentFolderID = folder.ParentID;
|
||||||
// {
|
folder.ParentID = destinationFolderID;
|
||||||
// previousParentFolderID = folder.ParentID;
|
invService.MoveFolder(folder);
|
||||||
// folder.ParentID = destinationFolderID;
|
}
|
||||||
// invService.MoveFolder(folder);
|
}
|
||||||
// }
|
|
||||||
// }
|
// Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code).
|
||||||
//
|
if (previousParentFolderID != null)
|
||||||
// // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code).
|
{
|
||||||
// if (previousParentFolderID != null)
|
InventoryFolderBase previousParentFolder
|
||||||
// {
|
= new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId);
|
||||||
// InventoryFolderBase previousParentFolder
|
previousParentFolder = invService.GetFolder(previousParentFolder);
|
||||||
// = new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId);
|
scene.SendInventoryUpdate(client, previousParentFolder, true, true);
|
||||||
// previousParentFolder = invService.GetFolder(previousParentFolder);
|
|
||||||
// scene.SendInventoryUpdate(client, previousParentFolder, true, true);
|
scene.SendInventoryUpdate(client, destinationFolder, true, true);
|
||||||
//
|
}
|
||||||
// scene.SendInventoryUpdate(client, destinationFolder, true, true);
|
}
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
// }
|
|
||||||
else if (
|
else if (
|
||||||
im.dialog == (byte)InstantMessageDialog.InventoryDeclined
|
im.dialog == (byte)InstantMessageDialog.InventoryDeclined
|
||||||
|| im.dialog == (byte)InstantMessageDialog.TaskInventoryDeclined)
|
|| im.dialog == (byte)InstantMessageDialog.TaskInventoryDeclined)
|
||||||
|
|
|
@ -59,7 +59,7 @@ public sealed class BSLinksetCompound : BSLinkset
|
||||||
// refresh will happen once after all the other taints are applied.
|
// refresh will happen once after all the other taints are applied.
|
||||||
public override void Refresh(BSPhysObject requestor)
|
public override void Refresh(BSPhysObject requestor)
|
||||||
{
|
{
|
||||||
// External request for Refresh (from BSPrim) is not necessary
|
// External request for Refresh (from BSPrim) doesn't need to do anything
|
||||||
// InternalRefresh(requestor);
|
// InternalRefresh(requestor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ public sealed class BSLinksetCompound : BSLinkset
|
||||||
DetailLog("{0},BSLinksetCompound.MakeDynamic,call,IsRoot={1}", child.LocalID, IsRoot(child));
|
DetailLog("{0},BSLinksetCompound.MakeDynamic,call,IsRoot={1}", child.LocalID, IsRoot(child));
|
||||||
if (!IsRoot(child))
|
if (!IsRoot(child))
|
||||||
{
|
{
|
||||||
// Physical children are removed from the world as the shape ofthe root compound
|
// The origional prims are removed from the world as the shape of the root compound
|
||||||
// shape takes over.
|
// shape takes over.
|
||||||
BulletSimAPI.AddToCollisionFlags2(child.PhysBody.ptr, CollisionFlags.CF_NO_CONTACT_RESPONSE);
|
BulletSimAPI.AddToCollisionFlags2(child.PhysBody.ptr, CollisionFlags.CF_NO_CONTACT_RESPONSE);
|
||||||
BulletSimAPI.ForceActivationState2(child.PhysBody.ptr, ActivationState.DISABLE_SIMULATION);
|
BulletSimAPI.ForceActivationState2(child.PhysBody.ptr, ActivationState.DISABLE_SIMULATION);
|
||||||
|
@ -118,7 +118,7 @@ public sealed class BSLinksetCompound : BSLinkset
|
||||||
// Called at taint-time!!
|
// Called at taint-time!!
|
||||||
public override void UpdateProperties(BSPhysObject updated)
|
public override void UpdateProperties(BSPhysObject updated)
|
||||||
{
|
{
|
||||||
// Nothing to do for constraints on property updates
|
// Nothing to do for compound linksets on property updates
|
||||||
}
|
}
|
||||||
|
|
||||||
// The children move around in relationship to the root.
|
// The children move around in relationship to the root.
|
||||||
|
@ -257,6 +257,11 @@ public sealed class BSLinksetCompound : BSLinkset
|
||||||
BulletSimAPI.AddChildShapeToCompoundShape2(LinksetRoot.PhysShape.ptr, cPrim.PhysShape.ptr, displacementPos, displacementRot);
|
BulletSimAPI.AddChildShapeToCompoundShape2(LinksetRoot.PhysShape.ptr, cPrim.PhysShape.ptr, displacementPos, displacementRot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: need to phantomize the child prims left behind.
|
||||||
|
// Maybe just destroy the children bodies and shapes and have them rebuild on unlink.
|
||||||
|
// Selection/deselection might cause way too many build/destructions esp. for LARGE linksets.
|
||||||
|
|
||||||
return false; // 'false' says to move onto the next child in the list
|
return false; // 'false' says to move onto the next child in the list
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -190,12 +190,15 @@ public sealed class BSPrim : BSPhysObject
|
||||||
}
|
}
|
||||||
public override bool Selected {
|
public override bool Selected {
|
||||||
set {
|
set {
|
||||||
_isSelected = value;
|
if (value != _isSelected)
|
||||||
PhysicsScene.TaintedObject("BSPrim.setSelected", delegate()
|
|
||||||
{
|
{
|
||||||
DetailLog("{0},BSPrim.selected,taint,selected={1}", LocalID, _isSelected);
|
_isSelected = value;
|
||||||
SetObjectDynamic(false);
|
PhysicsScene.TaintedObject("BSPrim.setSelected", delegate()
|
||||||
});
|
{
|
||||||
|
DetailLog("{0},BSPrim.selected,taint,selected={1}", LocalID, _isSelected);
|
||||||
|
SetObjectDynamic(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public override void CrossingFailure() { return; }
|
public override void CrossingFailure() { return; }
|
||||||
|
@ -678,8 +681,11 @@ public sealed class BSPrim : BSPhysObject
|
||||||
CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_STATIC_OBJECT);
|
CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_STATIC_OBJECT);
|
||||||
// Stop all movement
|
// Stop all movement
|
||||||
ZeroMotion(true);
|
ZeroMotion(true);
|
||||||
// Center of mass is at the center of the object
|
|
||||||
// DEBUG DEBUG BulletSimAPI.SetCenterOfMassByPosRot2(Linkset.LinksetRoot.PhysBody.ptr, _position, _orientation);
|
// Set various physical properties so other object interact properly
|
||||||
|
BulletSimAPI.SetFriction2(PhysBody.ptr, PhysicsScene.Params.defaultFriction);
|
||||||
|
BulletSimAPI.SetRestitution2(PhysBody.ptr, PhysicsScene.Params.defaultRestitution);
|
||||||
|
|
||||||
// Mass is zero which disables a bunch of physics stuff in Bullet
|
// Mass is zero which disables a bunch of physics stuff in Bullet
|
||||||
UpdatePhysicalMassProperties(0f);
|
UpdatePhysicalMassProperties(0f);
|
||||||
// Set collision detection parameters
|
// Set collision detection parameters
|
||||||
|
@ -688,13 +694,15 @@ public sealed class BSPrim : BSPhysObject
|
||||||
BulletSimAPI.SetCcdMotionThreshold2(PhysBody.ptr, PhysicsScene.Params.ccdMotionThreshold);
|
BulletSimAPI.SetCcdMotionThreshold2(PhysBody.ptr, PhysicsScene.Params.ccdMotionThreshold);
|
||||||
BulletSimAPI.SetCcdSweptSphereRadius2(PhysBody.ptr, PhysicsScene.Params.ccdSweptSphereRadius);
|
BulletSimAPI.SetCcdSweptSphereRadius2(PhysBody.ptr, PhysicsScene.Params.ccdSweptSphereRadius);
|
||||||
}
|
}
|
||||||
// There can be special things needed for implementing linksets
|
|
||||||
Linkset.MakeStatic(this);
|
|
||||||
// The activation state is 'disabled' so Bullet will not try to act on it.
|
// The activation state is 'disabled' so Bullet will not try to act on it.
|
||||||
// BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.DISABLE_SIMULATION);
|
// BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.DISABLE_SIMULATION);
|
||||||
// Start it out sleeping and physical actions could wake it up.
|
// Start it out sleeping and physical actions could wake it up.
|
||||||
BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.ISLAND_SLEEPING);
|
BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.ISLAND_SLEEPING);
|
||||||
|
|
||||||
|
// There can be special things needed for implementing linksets
|
||||||
|
Linkset.MakeStatic(this);
|
||||||
|
|
||||||
PhysBody.collisionGroup = CollisionFilterGroups.StaticObjectGroup;
|
PhysBody.collisionGroup = CollisionFilterGroups.StaticObjectGroup;
|
||||||
PhysBody.collisionMask = CollisionFilterGroups.StaticObjectMask;
|
PhysBody.collisionMask = CollisionFilterGroups.StaticObjectMask;
|
||||||
}
|
}
|
||||||
|
@ -1326,7 +1334,7 @@ public sealed class BSPrim : BSPhysObject
|
||||||
// Rebuild the geometry and object.
|
// Rebuild the geometry and object.
|
||||||
// This is called when the shape changes so we need to recreate the mesh/hull.
|
// This is called when the shape changes so we need to recreate the mesh/hull.
|
||||||
// Called at taint-time!!!
|
// Called at taint-time!!!
|
||||||
private void CreateGeomAndObject(bool forceRebuild)
|
public void CreateGeomAndObject(bool forceRebuild)
|
||||||
{
|
{
|
||||||
// If this prim is part of a linkset, we must remove and restore the physical
|
// If this prim is part of a linkset, we must remove and restore the physical
|
||||||
// links if the body is rebuilt.
|
// links if the body is rebuilt.
|
||||||
|
@ -1341,7 +1349,7 @@ public sealed class BSPrim : BSPhysObject
|
||||||
{
|
{
|
||||||
// Called if the current prim body is about to be destroyed.
|
// Called if the current prim body is about to be destroyed.
|
||||||
// Remove all the physical dependencies on the old body.
|
// Remove all the physical dependencies on the old body.
|
||||||
// (Maybe someday make the changing of BSShape an event handled by BSLinkset.)
|
// (Maybe someday make the changing of BSShape an event to be subscribed to by BSLinkset, ...)
|
||||||
needToRestoreLinkset = Linkset.RemoveBodyDependencies(this);
|
needToRestoreLinkset = Linkset.RemoveBodyDependencies(this);
|
||||||
needToRestoreVehicle = _vehicle.RemoveBodyDependencies(this);
|
needToRestoreVehicle = _vehicle.RemoveBodyDependencies(this);
|
||||||
});
|
});
|
||||||
|
|
|
@ -415,7 +415,7 @@ public sealed class BSShapeCollection : IDisposable
|
||||||
if (!haveShape && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_CAPSULE)
|
if (!haveShape && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_CAPSULE)
|
||||||
{
|
{
|
||||||
// an avatar capsule is close to a native shape (it is not shared)
|
// an avatar capsule is close to a native shape (it is not shared)
|
||||||
ret = GetReferenceToNativeShape(prim, BSPhysicsShapeType.SHAPE_CAPSULE,
|
GetReferenceToNativeShape(prim, BSPhysicsShapeType.SHAPE_CAPSULE,
|
||||||
FixedShapeKey.KEY_CAPSULE, shapeCallback);
|
FixedShapeKey.KEY_CAPSULE, shapeCallback);
|
||||||
if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,avatarCapsule,shape={1}", prim.LocalID, prim.PhysShape);
|
if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,avatarCapsule,shape={1}", prim.LocalID, prim.PhysShape);
|
||||||
ret = true;
|
ret = true;
|
||||||
|
@ -423,7 +423,7 @@ public sealed class BSShapeCollection : IDisposable
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compound shapes are handled special as they are rebuilt from scratch.
|
// Compound shapes are handled special as they are rebuilt from scratch.
|
||||||
// This isn't too great a hardship since most of the child shapes will already been created.
|
// This isn't too great a hardship since most of the child shapes will have already been created.
|
||||||
if (!haveShape && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_COMPOUND)
|
if (!haveShape && prim.PreferredPhysicalShape == BSPhysicsShapeType.SHAPE_COMPOUND)
|
||||||
{
|
{
|
||||||
ret = GetReferenceToCompoundShape(prim, shapeCallback);
|
ret = GetReferenceToCompoundShape(prim, shapeCallback);
|
||||||
|
@ -460,6 +460,9 @@ public sealed class BSShapeCollection : IDisposable
|
||||||
&& pbs.PathScaleX == 100 && pbs.PathScaleY == 100
|
&& pbs.PathScaleX == 100 && pbs.PathScaleY == 100
|
||||||
&& pbs.PathShearX == 0 && pbs.PathShearY == 0) ) )
|
&& pbs.PathShearX == 0 && pbs.PathShearY == 0) ) )
|
||||||
{
|
{
|
||||||
|
if (DDetail) DetailLog("{0},BSShapeCollection.CreateGeom,maybeNative,force={1},primScale={2},primSize={3},primShape={4}",
|
||||||
|
prim.LocalID, forceRebuild, prim.Scale, prim.Size, prim.PhysShape.type);
|
||||||
|
|
||||||
// It doesn't look like Bullet scales spheres so make sure the scales are all equal
|
// It doesn't look like Bullet scales spheres so make sure the scales are all equal
|
||||||
if ((pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1)
|
if ((pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1)
|
||||||
&& pbs.Scale.X == pbs.Scale.Y && pbs.Scale.Y == pbs.Scale.Z)
|
&& pbs.Scale.X == pbs.Scale.Y && pbs.Scale.Y == pbs.Scale.Z)
|
||||||
|
@ -538,6 +541,8 @@ public sealed class BSShapeCollection : IDisposable
|
||||||
if (DDetail) DetailLog("{0},BSShapeCollection.AddNativeShapeToPrim,create,newshape={1},scale={2}",
|
if (DDetail) DetailLog("{0},BSShapeCollection.AddNativeShapeToPrim,create,newshape={1},scale={2}",
|
||||||
prim.LocalID, newShape, prim.Scale);
|
prim.LocalID, newShape, prim.Scale);
|
||||||
|
|
||||||
|
// native shapes are scaled by Bullet
|
||||||
|
prim.Scale = prim.Size;
|
||||||
prim.PhysShape = newShape;
|
prim.PhysShape = newShape;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -550,8 +555,8 @@ public sealed class BSShapeCollection : IDisposable
|
||||||
ShapeData nativeShapeData = new ShapeData();
|
ShapeData nativeShapeData = new ShapeData();
|
||||||
nativeShapeData.Type = shapeType;
|
nativeShapeData.Type = shapeType;
|
||||||
nativeShapeData.ID = prim.LocalID;
|
nativeShapeData.ID = prim.LocalID;
|
||||||
nativeShapeData.Scale = prim.Scale;
|
nativeShapeData.Scale = prim.Size;
|
||||||
nativeShapeData.Size = prim.Scale; // unneeded, I think.
|
nativeShapeData.Size = prim.Size; // unneeded, I think.
|
||||||
nativeShapeData.MeshKey = (ulong)shapeKey;
|
nativeShapeData.MeshKey = (ulong)shapeKey;
|
||||||
nativeShapeData.HullKey = (ulong)shapeKey;
|
nativeShapeData.HullKey = (ulong)shapeKey;
|
||||||
|
|
||||||
|
@ -566,8 +571,6 @@ public sealed class BSShapeCollection : IDisposable
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Native shapes are scaled in Bullet so set the scaling to the size
|
// Native shapes are scaled in Bullet so set the scaling to the size
|
||||||
prim.Scale = prim.Size;
|
|
||||||
nativeShapeData.Scale = prim.Scale;
|
|
||||||
newShape = new BulletShape(BulletSimAPI.BuildNativeShape2(PhysicsScene.World.ptr, nativeShapeData), shapeType);
|
newShape = new BulletShape(BulletSimAPI.BuildNativeShape2(PhysicsScene.World.ptr, nativeShapeData), shapeType);
|
||||||
}
|
}
|
||||||
if (newShape.ptr == IntPtr.Zero)
|
if (newShape.ptr == IntPtr.Zero)
|
||||||
|
|
|
@ -5,6 +5,9 @@ CRASHES
|
||||||
20121128.1600: mesh object not rezzing (no physics mesh).
|
20121128.1600: mesh object not rezzing (no physics mesh).
|
||||||
Causes many errors. Doesn't stop after first error with box shape.
|
Causes many errors. Doesn't stop after first error with box shape.
|
||||||
Eventually crashes when deleting the object.
|
Eventually crashes when deleting the object.
|
||||||
|
20121206.1434: rez Sam-pan into OSGrid BulletSim11 region
|
||||||
|
Immediate simulator crash. Mono does not output any stacktrace and
|
||||||
|
log just stops after reporting taint-time linking of the linkset.
|
||||||
|
|
||||||
VEHICLES TODO LIST:
|
VEHICLES TODO LIST:
|
||||||
=================================================
|
=================================================
|
||||||
|
@ -23,9 +26,12 @@ After getting off a vehicle, the root prim is phantom (can be walked through)
|
||||||
Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint)
|
Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint)
|
||||||
Implement referenceFrame for all the motion routines.
|
Implement referenceFrame for all the motion routines.
|
||||||
Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
|
Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
|
||||||
|
Border crossing with linked vehicle causes crash
|
||||||
|
|
||||||
BULLETSIM TODO LIST:
|
BULLETSIM TODO LIST:
|
||||||
=================================================
|
=================================================
|
||||||
|
Duplicating a physical prim causes old prim to jump away
|
||||||
|
Dup a phys prim and the original become unselected and thus interacts w/ selected prim.
|
||||||
Disable activity of passive linkset children.
|
Disable activity of passive linkset children.
|
||||||
Since the linkset is a compound object, the old prims are left lying
|
Since the linkset is a compound object, the old prims are left lying
|
||||||
around and need to be phantomized so they don't collide, ...
|
around and need to be phantomized so they don't collide, ...
|
||||||
|
@ -96,7 +102,7 @@ Breakout code for mesh/hull/compound/native into separate BSShape* classes
|
||||||
Generalize Dynamics and PID with standardized motors.
|
Generalize Dynamics and PID with standardized motors.
|
||||||
Generalize Linkset and vehicles into PropertyManagers
|
Generalize Linkset and vehicles into PropertyManagers
|
||||||
Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies
|
Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies
|
||||||
Possibly generalized a 'pre step action' registration.
|
Potentially add events for shape destruction, etc.
|
||||||
Complete implemention of preStepActions
|
Complete implemention of preStepActions
|
||||||
Replace vehicle step call with prestep event.
|
Replace vehicle step call with prestep event.
|
||||||
Is there a need for postStepActions? postStepTaints?
|
Is there a need for postStepActions? postStepTaints?
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue