Add "Drop" functionality to pie menu
parent
16d68749a4
commit
74f89fb22d
|
@ -112,6 +112,7 @@ namespace OpenSim.Framework
|
||||||
IClientAPI remoteClient, UUID AgentID, uint RequestFlags, UUID TaskID);
|
IClientAPI remoteClient, UUID AgentID, uint RequestFlags, UUID TaskID);
|
||||||
|
|
||||||
public delegate void ObjectDeselect(uint localID, IClientAPI remoteClient);
|
public delegate void ObjectDeselect(uint localID, IClientAPI remoteClient);
|
||||||
|
public delegate void ObjectDrop(uint localID, IClientAPI remoteClient);
|
||||||
|
|
||||||
public delegate void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient);
|
public delegate void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient);
|
||||||
|
|
||||||
|
@ -380,6 +381,7 @@ namespace OpenSim.Framework
|
||||||
event UUIDNameRequest OnDetachAttachmentIntoInv;
|
event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||||
event ObjectAttach OnObjectAttach;
|
event ObjectAttach OnObjectAttach;
|
||||||
event ObjectDeselect OnObjectDetach;
|
event ObjectDeselect OnObjectDetach;
|
||||||
|
event ObjectDrop OnObjectDrop;
|
||||||
event StartAnim OnStartAnim;
|
event StartAnim OnStartAnim;
|
||||||
event StopAnim OnStopAnim;
|
event StopAnim OnStopAnim;
|
||||||
event LinkObjects OnLinkObjects;
|
event LinkObjects OnLinkObjects;
|
||||||
|
|
|
@ -242,6 +242,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
private ObjectBuy handlerObjectBuy = null;
|
private ObjectBuy handlerObjectBuy = null;
|
||||||
//private BuyObjectInventory handlerBuyObjectInventory = null;
|
//private BuyObjectInventory handlerBuyObjectInventory = null;
|
||||||
private ObjectDeselect handlerObjectDetach = null;
|
private ObjectDeselect handlerObjectDetach = null;
|
||||||
|
private ObjectDrop handlerObjectDrop = null;
|
||||||
private AgentSit handlerOnUndo = null;
|
private AgentSit handlerOnUndo = null;
|
||||||
|
|
||||||
private ForceReleaseControls handlerForceReleaseControls = null;
|
private ForceReleaseControls handlerForceReleaseControls = null;
|
||||||
|
@ -848,6 +849,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||||
public event ObjectAttach OnObjectAttach;
|
public event ObjectAttach OnObjectAttach;
|
||||||
public event ObjectDeselect OnObjectDetach;
|
public event ObjectDeselect OnObjectDetach;
|
||||||
|
public event ObjectDrop OnObjectDrop;
|
||||||
public event GenericCall2 OnCompleteMovementToRegion;
|
public event GenericCall2 OnCompleteMovementToRegion;
|
||||||
public event UpdateAgent OnAgentUpdate;
|
public event UpdateAgent OnAgentUpdate;
|
||||||
public event AgentRequestSit OnAgentRequestSit;
|
public event AgentRequestSit OnAgentRequestSit;
|
||||||
|
@ -4295,6 +4297,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectDrop:
|
||||||
|
ObjectDropPacket dropp = (ObjectDropPacket)Pack;
|
||||||
|
for (int j = 0; j < dropp.ObjectData.Length; j++)
|
||||||
|
{
|
||||||
|
uint obj = dropp.ObjectData[j].ObjectLocalID;
|
||||||
|
handlerObjectDrop = OnObjectDrop;
|
||||||
|
if (handlerObjectDrop != null)
|
||||||
|
{
|
||||||
|
handlerObjectDrop(obj, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case PacketType.SetAlwaysRun:
|
case PacketType.SetAlwaysRun:
|
||||||
SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack;
|
SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack;
|
||||||
|
|
|
@ -171,6 +171,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
|
||||||
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||||
public event ObjectAttach OnObjectAttach;
|
public event ObjectAttach OnObjectAttach;
|
||||||
public event ObjectDeselect OnObjectDetach;
|
public event ObjectDeselect OnObjectDetach;
|
||||||
|
public event ObjectDrop OnObjectDrop;
|
||||||
public event StartAnim OnStartAnim;
|
public event StartAnim OnStartAnim;
|
||||||
public event StopAnim OnStopAnim;
|
public event StopAnim OnStopAnim;
|
||||||
public event LinkObjects OnLinkObjects;
|
public event LinkObjects OnLinkObjects;
|
||||||
|
|
|
@ -358,6 +358,24 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_activeScripts += number;
|
m_activeScripts += number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected internal void DropObject(uint objectLocalID, IClientAPI remoteClient)
|
||||||
|
{
|
||||||
|
List<EntityBase> EntityList = GetEntities();
|
||||||
|
|
||||||
|
foreach (EntityBase obj in EntityList)
|
||||||
|
{
|
||||||
|
if (obj is SceneObjectGroup)
|
||||||
|
{
|
||||||
|
if (((SceneObjectGroup)obj).LocalId == objectLocalID)
|
||||||
|
{
|
||||||
|
SceneObjectGroup group = (SceneObjectGroup)obj;
|
||||||
|
|
||||||
|
m_parentScene.DetachSingleAttachmentToGround(group.UUID,remoteClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected internal void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
protected internal void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
List<EntityBase> EntityList = GetEntities();
|
List<EntityBase> EntityList = GetEntities();
|
||||||
|
@ -441,10 +459,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
ItemFlags, false, false, remoteClient.AgentId, true);
|
ItemFlags, false, false, remoteClient.AgentId, true);
|
||||||
objatt.SetAttachmentPoint(Convert.ToByte(AttachmentPt));
|
|
||||||
|
|
||||||
if (objatt != null)
|
if (objatt != null)
|
||||||
{
|
{
|
||||||
|
objatt.SetAttachmentPoint(Convert.ToByte(AttachmentPt));
|
||||||
|
|
||||||
AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition);
|
AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition);
|
||||||
objatt.ScheduleGroupForFullUpdate();
|
objatt.ScheduleGroupForFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2293,6 +2293,37 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_innerScene.AttachObject(controllingClient, localID, attachPoint, rot, pos);
|
m_innerScene.AttachObject(controllingClient, localID, attachPoint, rot, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DetachSingleAttachmentToGround(UUID itemID, IClientAPI remoteClient)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = GetSceneObjectPart(itemID);
|
||||||
|
if(part == null || part.ParentGroup == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
UUID inventoryID = part.ParentGroup.GetFromAssetID();
|
||||||
|
|
||||||
|
ScenePresence presence;
|
||||||
|
if (TryGetAvatar(remoteClient.AgentId, out presence))
|
||||||
|
{
|
||||||
|
if(!ExternalChecks.ExternalChecksCanRezObject(part.ParentGroup.Children.Count, remoteClient.AgentId, presence.AbsolutePosition))
|
||||||
|
return;
|
||||||
|
|
||||||
|
presence.Appearance.DetachAttachment(itemID);
|
||||||
|
IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
|
||||||
|
if (ava != null)
|
||||||
|
{
|
||||||
|
ava.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||||
|
}
|
||||||
|
part.ParentGroup.DetachToGround();
|
||||||
|
CachedUserInfo userInfo =
|
||||||
|
CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
|
if (userInfo != null)
|
||||||
|
{
|
||||||
|
userInfo.DeleteItem(inventoryID);
|
||||||
|
remoteClient.SendRemoveInventoryItem(inventoryID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient)
|
public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
ScenePresence presence;
|
ScenePresence presence;
|
||||||
|
|
|
@ -2172,6 +2172,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
client.OnDetachAttachmentIntoInv += DetachSingleAttachmentToInv;
|
client.OnDetachAttachmentIntoInv += DetachSingleAttachmentToInv;
|
||||||
client.OnObjectAttach += m_innerScene.AttachObject;
|
client.OnObjectAttach += m_innerScene.AttachObject;
|
||||||
client.OnObjectDetach += m_innerScene.DetachObject;
|
client.OnObjectDetach += m_innerScene.DetachObject;
|
||||||
|
client.OnObjectDrop += m_innerScene.DropObject;
|
||||||
client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest;
|
client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest;
|
||||||
client.OnObjectDescription += m_innerScene.PrimDescription;
|
client.OnObjectDescription += m_innerScene.PrimDescription;
|
||||||
client.OnObjectName += m_innerScene.PrimName;
|
client.OnObjectName += m_innerScene.PrimName;
|
||||||
|
|
|
@ -766,19 +766,19 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.AttachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.AttachedAvatar);
|
||||||
Vector3 detachedpos = new Vector3(127f,127f,127f);
|
Vector3 detachedpos = new Vector3(127f,127f,127f);
|
||||||
if (avatar != null)
|
if (avatar == null)
|
||||||
{
|
return;
|
||||||
|
|
||||||
detachedpos = avatar.AbsolutePosition;
|
detachedpos = avatar.AbsolutePosition;
|
||||||
avatar.RemoveAttachment(this);
|
|
||||||
}
|
|
||||||
AbsolutePosition = detachedpos;
|
AbsolutePosition = detachedpos;
|
||||||
m_rootPart.AttachedAvatar = UUID.Zero;
|
m_rootPart.AttachedAvatar = UUID.Zero;
|
||||||
m_rootPart.SetParentLocalId(0);
|
m_rootPart.SetParentLocalId(0);
|
||||||
SetAttachmentPoint((byte)0);
|
SetAttachmentPoint((byte)0);
|
||||||
m_rootPart.IsAttachment = false;
|
|
||||||
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
AttachToBackup();
|
AttachToBackup();
|
||||||
|
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
||||||
m_rootPart.ScheduleFullUpdate();
|
m_rootPart.ScheduleFullUpdate();
|
||||||
m_rootPart.ClearUndoState();
|
m_rootPart.ClearUndoState();
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||||
public event ObjectAttach OnObjectAttach;
|
public event ObjectAttach OnObjectAttach;
|
||||||
public event ObjectDeselect OnObjectDetach;
|
public event ObjectDeselect OnObjectDetach;
|
||||||
|
public event ObjectDrop OnObjectDrop;
|
||||||
public event StartAnim OnStartAnim;
|
public event StartAnim OnStartAnim;
|
||||||
public event StopAnim OnStopAnim;
|
public event StopAnim OnStopAnim;
|
||||||
public event LinkObjects OnLinkObjects;
|
public event LinkObjects OnLinkObjects;
|
||||||
|
|
Loading…
Reference in New Issue