Пример #1
0
 public MapObjectDeferred(Texture2D texture, MapObject parent)
     : base(new Position3D(parent.Position.X, parent.Position.Y, (int)parent.Z))
 {
     _texture = texture;
     Vertices = getVerticesFromBuffer();
     SortZ = parent.SortZ;
     SortThreshold = parent.SortThreshold;
     SortTiebreaker = parent.SortTiebreaker;
 }
Пример #2
0
        static void onTargetingButton(MapObject worldObject)
        {
            if (worldObject == null)
                return;

            // If isTargeting is true, then the target cursor is active and we are waiting for the player to target something.
            // If not, then we are just clicking the mouse and we need to find out if something is under the mouse cursor.
            switch (_TargettingType)
            {
                case TargetTypes.Object:
                    // Select Object
                    _world.PickType = PickTypes.PickStatics | PickTypes.PickObjects;
                    mouseTargetingEventObject(worldObject);
                    break;
                case TargetTypes.Position:
                    // Select X, Y, Z
                    _world.PickType = PickTypes.PickStatics | PickTypes.PickObjects;
                    mouseTargetingEventObject(worldObject); // mouseTargetingEventXYZ(mouseOverObject);
                    break;
                case TargetTypes.MultiPlacement:
                    // select X, Y, Z
                    mouseTargetingEventXYZ(worldObject);
                    break;
                default:
                    throw new Exception("Unknown targetting type!");
            }
        }
Пример #3
0
        static void onInteractButton(InputEventM e)
        {
            MapObject overObject = (e.EventType == MouseEvent.DragBegin) ? _dragObject : _world.MouseOverObject;
            Vector2 overObjectOffset = (e.EventType == MouseEvent.DragBegin) ? _dragOffset : _world.MouseOverObjectPoint;

            if (e.EventType == MouseEvent.Down)
            {
                _dragObject = overObject;
                _dragOffset = overObjectOffset;
            }

            if (overObject == null)
                return;

            if (isTargeting && e.EventType == MouseEvent.Click)
            {
                // Special case: targeting
                onTargetingButton(overObject);
            }
            else if (_ui.Cursor.IsHolding && e.EventType == MouseEvent.Up)
            {
                // Special case: if we're holding anything, drop it.
                checkDropItem();
            }
            else
            {
                // standard interaction actions ...
                if (overObject is MapObjectGround)
                {
                    // we can't interact with ground tiles.
                }
                else if (overObject is MapObjectStatic)
                {
                    // clicking a static should pop up the name of the static.
                    if (e.EventType == MouseEvent.Click)
                    {

                    }
                }
                else if (overObject is MapObjectItem)
                {
                    Item entity = (Item)overObject.OwnerEntity;
                    // single click = tool tip
                    // double click = use / open
                    // click and drag = pick up
                    switch (e.EventType)
                    {
                        case MouseEvent.Click:
                            // tool tip
                            Interaction.SingleClick(entity);
                            break;
                        case MouseEvent.DoubleClick:
                            Interaction.DoubleClick(entity);
                            break;
                        case MouseEvent.DragBegin:
                            Interaction.PickUpItem(entity, (int)overObjectOffset.X, (int)overObjectOffset.Y);
                            break;
                    }
                }
                else if (overObject is MapObjectMobile)
                {
                    Mobile entity = (Mobile)overObject.OwnerEntity;
                    // single click = tool tip; if npc = request context sensitive menu
                    // double click = set last target; if is human open paper doll; if ridable ride; if self and riding, dismount;
                    // click and drag = pull off status bar
                    switch (e.EventType)
                    {
                        case MouseEvent.Click:
                            // tool tip
                            Interaction.SingleClick(entity);
                            if (ClientVars.EngineVars.WarMode)
                                UltimaClient.Send(new AttackRequestPacket(entity.Serial));
                            else
                                UltimaClient.Send(new RequestContextMenuPacket(entity.Serial));
                            break;
                        case MouseEvent.DoubleClick:
                            Interaction.DoubleClick(entity);
                            ClientVars.EngineVars.LastTarget = entity.Serial;
                            break;
                        case MouseEvent.DragBegin:
                            // pull off status bar
                            break;
                    }
                }
                else if (overObject is MapObjectCorpse)
                {
                    Corpse entity = (Corpse)overObject.OwnerEntity;
                    // click and drag = nothing
                    // single click = tool tip
                    // double click = open loot window.
                }
                else if (overObject is MapObjectText)
                {
                    // clicking on text should somehow indicate the person speaking.
                }
                else
                {
                    throw new Exception("Unknown object type in onInteractButtonDown()");
                }
            }

            e.Handled = true;
        }
Пример #4
0
 static void mouseTargetingEventXYZ(MapObject selectedObject)
 {
     // Send the targetting event back to the server!
     int modelNumber = 0;
     Type type = selectedObject.GetType();
     if (type == typeof(MapObjectStatic))
     {
         modelNumber = selectedObject.ItemID;
     }
     else
     {
         modelNumber = 0;
     }
     // Send the target ...
     UltimaClient.Send(new TargetXYZPacket((short)selectedObject.Position.X, (short)selectedObject.Position.Y, (short)selectedObject.Z, (ushort)modelNumber));
     // ... and clear our targeting cursor.
     clearTargeting();
 }
Пример #5
0
        static void mouseTargetingEventObject(MapObject selectedObject)
        {
            // If we are passed a null object, keep targeting.
            if (selectedObject == null)
                return;
            Serial serial = selectedObject.OwnerSerial;
            // Send the targetting event back to the server
            if (serial.IsValid)
            {
                UltimaClient.Send(new TargetObjectPacket(serial));
            }
            else
            {
                int modelNumber = 0;
                Type type = selectedObject.GetType();
                if (type == typeof(MapObjectStatic))
                {
                    modelNumber = selectedObject.ItemID;
                }
                else
                {
                    modelNumber = 0;
                }
                UltimaClient.Send(new TargetXYZPacket((short)selectedObject.Position.X, (short)selectedObject.Position.Y, (short)selectedObject.Z, (ushort)modelNumber));
            }

            // Clear our target cursor.
            clearTargeting();
        }
Пример #6
0
 static void createHoverLabel(MapObject mapObject)
 {
     if (mapObject.OwnerSerial.IsValid)
     {
         // this object is an entity of some kind.
         createHoverLabel(mapObject.OwnerSerial);
     }
     else if (mapObject is MapObjectStatic)
     {
         // since statics have no entity object, we can't easily create a label for them at the moment.
         // surely this will be fixed.
     }
 }
Пример #7
0
 public void AddMapObject(MapObject[] items)
 {
     for (int i = 0; i < items.Length; i++)
     {
         AddMapObject(items[i]);
     }
 }
Пример #8
0
 public void AddMapObject(MapObject item)
 {
     m_Objects.Add(item);
     _NeedsSorting = true;
     if (item is MapObjectDeferred)
         _HasDeferredObjects = true;
 }
Пример #9
0
 private bool matchNames(MapObject m1, MapObject m2)
 {
     if (Data.TileData.ItemData[m1.ItemID & 0x3FFF].Name ==
         Data.TileData.ItemData[m2.ItemID & 0x3FFF].Name)
     {
         return true;
     }
     return false;
 }
Пример #10
0
        // Check if under a roof.
        public void IsUnder(int originZ, out MapObject underItem, out MapObject underTerrain)
        {
            underItem = null;
            underTerrain = null;

            List<MapObject> iObjects = this.Items;
            for (int i = iObjects.Count - 1; i >= 0; i--)
            {
                if (iObjects[i].Z <= originZ)
                    continue;

                if (iObjects[i] is MapObjectStatic)
                {
                    Data.ItemData iData = Data.TileData.ItemData[((MapObjectStatic)iObjects[i]).ItemID & 0x3FFF];
                    if (iData.Roof || iData.Surface || iData.Wall)
                    {
                        if (underItem == null || iObjects[i].Z < underItem.Z)
                            underItem = iObjects[i];
                    }
                }
                else if (iObjects[i] is MapObjectGround && iObjects[i].Z >= originZ + 20)
                {
                    underTerrain = iObjects[i];
                }
            }
        }