Add "Drop" functionality to pie menu

0.6.0-stable
Melanie Thielker 2008-10-04 01:09:22 +00:00
parent 16d68749a4
commit 74f89fb22d
8 changed files with 76 additions and 7 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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();
}

View File

@ -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;

View File

@ -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;

View File

@ -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();
}

View File

@ -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;