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);
|
||||
|
||||
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);
|
||||
|
||||
|
@ -380,6 +381,7 @@ namespace OpenSim.Framework
|
|||
event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||
event ObjectAttach OnObjectAttach;
|
||||
event ObjectDeselect OnObjectDetach;
|
||||
event ObjectDrop OnObjectDrop;
|
||||
event StartAnim OnStartAnim;
|
||||
event StopAnim OnStopAnim;
|
||||
event LinkObjects OnLinkObjects;
|
||||
|
|
|
@ -242,6 +242,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
private ObjectBuy handlerObjectBuy = null;
|
||||
//private BuyObjectInventory handlerBuyObjectInventory = null;
|
||||
private ObjectDeselect handlerObjectDetach = null;
|
||||
private ObjectDrop handlerObjectDrop = null;
|
||||
private AgentSit handlerOnUndo = null;
|
||||
|
||||
private ForceReleaseControls handlerForceReleaseControls = null;
|
||||
|
@ -848,6 +849,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||
public event ObjectAttach OnObjectAttach;
|
||||
public event ObjectDeselect OnObjectDetach;
|
||||
public event ObjectDrop OnObjectDrop;
|
||||
public event GenericCall2 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
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;
|
||||
case PacketType.SetAlwaysRun:
|
||||
SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack;
|
||||
|
|
|
@ -171,6 +171,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
|
|||
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||
public event ObjectAttach OnObjectAttach;
|
||||
public event ObjectDeselect OnObjectDetach;
|
||||
public event ObjectDrop OnObjectDrop;
|
||||
public event StartAnim OnStartAnim;
|
||||
public event StopAnim OnStopAnim;
|
||||
public event LinkObjects OnLinkObjects;
|
||||
|
|
|
@ -358,6 +358,24 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
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)
|
||||
{
|
||||
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),
|
||||
ItemFlags, false, false, remoteClient.AgentId, true);
|
||||
objatt.SetAttachmentPoint(Convert.ToByte(AttachmentPt));
|
||||
|
||||
if (objatt != null)
|
||||
{
|
||||
objatt.SetAttachmentPoint(Convert.ToByte(AttachmentPt));
|
||||
|
||||
AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition);
|
||||
objatt.ScheduleGroupForFullUpdate();
|
||||
}
|
||||
|
|
|
@ -2293,6 +2293,37 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
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)
|
||||
{
|
||||
ScenePresence presence;
|
||||
|
|
|
@ -2172,6 +2172,7 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
client.OnDetachAttachmentIntoInv += DetachSingleAttachmentToInv;
|
||||
client.OnObjectAttach += m_innerScene.AttachObject;
|
||||
client.OnObjectDetach += m_innerScene.DetachObject;
|
||||
client.OnObjectDrop += m_innerScene.DropObject;
|
||||
client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest;
|
||||
client.OnObjectDescription += m_innerScene.PrimDescription;
|
||||
client.OnObjectName += m_innerScene.PrimName;
|
||||
|
|
|
@ -766,19 +766,19 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
{
|
||||
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.AttachedAvatar);
|
||||
Vector3 detachedpos = new Vector3(127f,127f,127f);
|
||||
if (avatar != null)
|
||||
{
|
||||
detachedpos = avatar.AbsolutePosition;
|
||||
avatar.RemoveAttachment(this);
|
||||
}
|
||||
if (avatar == null)
|
||||
return;
|
||||
|
||||
detachedpos = avatar.AbsolutePosition;
|
||||
|
||||
AbsolutePosition = detachedpos;
|
||||
m_rootPart.AttachedAvatar = UUID.Zero;
|
||||
m_rootPart.SetParentLocalId(0);
|
||||
SetAttachmentPoint((byte)0);
|
||||
m_rootPart.IsAttachment = false;
|
||||
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
||||
HasGroupChanged = true;
|
||||
AttachToBackup();
|
||||
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
||||
m_rootPart.ScheduleFullUpdate();
|
||||
m_rootPart.ClearUndoState();
|
||||
}
|
||||
|
|
|
@ -66,6 +66,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
|||
public event UUIDNameRequest OnDetachAttachmentIntoInv;
|
||||
public event ObjectAttach OnObjectAttach;
|
||||
public event ObjectDeselect OnObjectDetach;
|
||||
public event ObjectDrop OnObjectDrop;
|
||||
public event StartAnim OnStartAnim;
|
||||
public event StopAnim OnStopAnim;
|
||||
public event LinkObjects OnLinkObjects;
|
||||
|
|
Loading…
Reference in New Issue