예제 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.ItemCollectedMessage"/> class.
 /// </summary>
 /// <param name="item">Item.</param>
 /// <param name="inventoryPosition">Inventory position.</param>
 /// <param name="entity">Entity.</param>
 public ItemCollectedMessage(Entity entity, ItemComponent item, Vector2i inventoryPosition)
 {
     Entity = entity;
     Item = item;
     InventoryPosition = inventoryPosition;
     MessageId = (int) Messaging.MessageId.ItemCollected;
 }
예제 #2
0
        /// <summary>
        /// Hit the specified item, rigidBody, normal and fraction.
        /// </summary>
        /// <param name="item">Item.</param>
        /// <param name="rigidBody">Rigid body.</param>
        /// <param name="normal">Normal.</param>
        /// <param name="fraction">Fraction.</param>
        public void Hit (ItemComponent item, RigidBody rigidBody, Vector3 normal, float fraction)
        {
            var entity = rigidBody.Tag as Entity;

            if (entity != null)
            {
                var model = entity.GetComponent<ModelComponent>().Model;
                var health = entity.GetComponent<HealthComponent>();
                var wallcomp = entity.GetComponent<WallComponent>();
                health.Health = (health.Health - item.AttackStrength) < 0 ? 0 : health.Health - item.AttackStrength;
                var tmp = (health.MaximumHealth - health.Health) / health.MaximumHealth;
                var pos = model.Position;
                pos.Y = 7.5f * tmp + 0.25f;

                if (wallcomp.IsOverworld)
                    pos.Y *= -2;

                model.Position = pos;
                var rbpos = rigidBody.Position;
                rbpos.Y = pos.Y + 8;
                rigidBody.Position = rbpos;
                item.Usage = item.Usage <= (1 - item.UsageDeltaPerUsage) ? item.Usage + item.UsageDeltaPerUsage : 1f;
                wallcomp.IsMoveable = false;
                return;
            }
        }
예제 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.ItemUseMessage"/> class.
 /// </summary>
 /// <param name="entity">Entity on which the usage should be applied.</param>
 /// <param name="usage">Usage which should be applied when sending this message.</param>
 public ItemUseMessage(Entity entity, CoreScene scene, ItemComponent item, ItemUsage usage)
 {
     Usage = usage;
     Entity = entity;
     Item = item;
     Scene = scene;
     MessageId = (int) Messaging.MessageId.ItemUse;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.AddItemToInventoryBarMessage"/> class.
 /// </summary>
 /// <param name="item">The item added to the inventory bar</param>
 /// <param name="itemPositionInInventory">Item position in inventory.</param>
 /// <param name="inventoryBarPosition">Inventory bar position.</param>
 public ItemAddedToInventoryBarMessage(ItemComponent item, Vector2i itemPositionInInventory,
     byte inventoryBarPosition)
 {
     ItemPositionInInventory = itemPositionInInventory;
     InventoryBarPosition = inventoryBarPosition;
     Item = item;
     MessageId = (int) Messaging.MessageId.ItemAddedToInventoryBar;
 }
예제 #5
0
        /// <summary>
        /// Eat the specified item.
        /// </summary>
        /// <param name="item">Item.</param>
        public void Eat (ItemComponent item)
        {
            var playercomp = item.Player.GetComponent<HealthComponent>();

            if (item.Usage <= 1)
            {
                playercomp.Health += item.HealthDelta;
                playercomp.Health = playercomp.Health > playercomp.MaximumHealth ?
                    playercomp.MaximumHealth : playercomp.Health;
                item.Usage = item.Usage <= (1 - item.UsageDeltaPerUsage) ? item.Usage + item.UsageDeltaPerUsage : 1f;
            }
        }
예제 #6
0
        public bool MoveBarItemToPosition(ItemComponent item, byte position)
        {
            if (inventoryBar[position] == null)
            {
                inventoryBar[GetPositionOfBarItem(item)] = null;
                inventoryBar[position] = item.GetHashCode();

                if (MessageCreated != null)
                    MessageCreated(new BarItemMovedMessage(item, position));

                return true;
            }
            return false;
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.SetActiveInventoryBarItemMessage"/>
 /// class.
 /// </summary>
 /// <param name="item">The item at the given position in the inventory bar.</param>
 /// <param name="position">Position.</param>
 public ActiveInventoryBarItemChangedMessage(ItemComponent item, byte position)
 {
     Position = position;
     Item = item;
     MessageId = (int) Messaging.MessageId.ActiveInventoryBarItemChanged;
 }
예제 #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.ItemCollectedMessage"/> class.
 /// </summary>
 /// <param name="item">Item.</param>
 /// <param name="inventoryPositionX">Inventory position x.</param>
 /// <param name="inventoryPositionY">Inventory position y.</param>
 /// <param name="entity">Entity.</param>
 public ItemCollectedMessage(Entity entity, ItemComponent item, int inventoryPositionX, int inventoryPositionY) :
 this(entity, item, new Vector2i(inventoryPositionX, inventoryPositionY))
 {}
예제 #9
0
        public InventoryButton (Base parent, MessageProvider messageProvider, Inventory inventory, ItemComponent item,
            InventoryGUI inventoryGui, Vector2i position, int boxSize) : base (parent)
        {
            ValidMessages = new[] { (int) MessageId.ItemUsageChanged };
            this.boxSize = boxSize;
            this.IsToggle = true;
            this.inventory = inventory;
            this.inventoryGui = inventoryGui;
            this.item = item;
            X = position.X * boxSize + 1;
            Y = position.Y * boxSize + 1;

            if (!string.IsNullOrEmpty(item.ImageLocation))
                SetImage(item.ImageLocation, true);

            usageProgress = new ProgressBar(this);
            usageProgress.AutoLabel = false;
            usageProgress.Text = string.Empty;
            usageProgress.Value = 1 - item.Usage;
            usageProgress.TextPadding = Padding.Zero;
            UpdateSize();
            DragAndDrop_SetPackage (true, "item_drag");

            MessageProvider = messageProvider;

            messageProvider += this;
        }
예제 #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.ItemDroppedMessage"/> class.
 /// </summary>
 /// <param name="item">Item.</param>
 public ItemDroppedMessage(ItemComponent item)
 {
     Item = item;
     MessageId = (int) Messaging.MessageId.ItemDropped;
 }
예제 #11
0
 public ItemComponent TakeOut(ItemComponent item)
 {
     var pos = GetPositionOfItem(item);
     if (pos.X >= 0 && pos.Y >= 0)
         return TakeOut(pos);
     return null;
 }
 public ItemRemovedFromInventoryBarMessage(ItemComponent item)
 {
     Item = item;
     MessageId = (int) Messaging.MessageId.ItemRemovedFromInventoryBar;
 }
예제 #13
0
        public bool Insert(ItemComponent item)
        {
            bool result = false;
            int x = 0, y = 0;
            for (; y < storage.GetLength(1); y++)
            {
                x = 0;
                for (; x < storage.GetLength(0); x++)
                {
                    if (fits(new Vector2i(x, y), item.Size))
                    {
                        result = true;
                        item.Orientation = Orientation.Horizontal;
                        break;
                    }
                    if (fits(new Vector2i(x, y), item.Size.Yx))
                    {
                        result = true;
                        item.Orientation = Orientation.Vertical;
                        break;
                    }
                }
                if (result)
                    break;
            }

            if (!result)
            {
                Logger.Log.AddLogEntry(LogLevel.Debug, "Inventory", "Inventory is full - cannot add item!");
            }

            return result && Insert(item, new Vector2i(x, y));
        }
예제 #14
0
        public bool Insert(ItemComponent item, Vector2i position)
        {
            var size = item.Orientation == Orientation.Vertical ? item.Size.Yx : item.Size;
            if (fits(position, size))
            {
                for (int i = 0; i < size.X; i++)
                {
                    for (int k = 0; k < size.Y; k++)
                    {
                        storage[position.X + i, position.Y + k] = item.GetHashCode();
                    }
                }

                items.Add(item.GetHashCode(), item);

                return true;
            }
            else
            {
                Logger.Log.AddLogEntry(LogLevel.Error, "Inventory",
                    "Failed to insert inventory item '{0}' at position <{1},{2}> - position already in use!",
                    item.Entity.Name, position.X, position.Y);
            }
            return false;
        }
 public ItemAddedToInventoryBarMessage(ItemComponent item, int itemPositionInInventoryX, int itemPositionInInventoryY,
     byte inventoryBarPosition) :
 this(item, new Vector2i(itemPositionInInventoryX, itemPositionInInventoryY), inventoryBarPosition)
 {}
예제 #16
0
 /// <summary>
 /// Throw the specified item.
 /// </summary>
 /// <param name="item">Item.</param>
 public void Throw (ItemComponent item)
 {
     var physics = item.Entity.GetComponent<PhysicsComponent>();
     physics.RigidBody.IsActive = true;
     physics.RigidBody.ApplyImpulse(JVector.Transform(new JVector(0, 0, 10), physics.RigidBody.Orientation));
 }
예제 #17
0
        public byte GetPositionOfBarItem(ItemComponent item)
        {
            var hc = item.GetHashCode();
            byte index = 0;

            while (index < inventoryBar.Length && inventoryBar[index] != hc)
            {
                index++;
            }

            return index;
        }
예제 #18
0
 public void AddItem (ItemComponent item, bool no_message = false)
 {
     if (inventory.Insert(item))
     {
         var pos = inventory.GetPositionOfItem(item);
         AddItem(item, pos, no_message: no_message);
     }
 }
예제 #19
0
        public void AddItem (ItemComponent item, Vector2i position, bool insert = false, bool no_message = false)
        {
            if (insert)
                inventory.Insert(item, position);

            item.Player = player;

            var btn = new InventoryButton(itemGridFrame, MessageProvider, inventory, item, this, position, BoxSize);

            btn.ToggledOn += (sender, arguments) => {
                if (toggledBtn != null && !toggledBtn.IsDisposed)
                {
                    toggledBtn.Item.Entity.GetComponent<ModelComponent>().Model.Enabled = false;
                    toggledBtn.ToggleState = false;
                }

                toggledBtn = btn;
                imagePanel.ImageName = btn.Item.ImageLocation;

                var max = toggledBtn.Item.Size.X > toggledBtn.Item.Size.Y ?
                    toggledBtn.Item.Size.X : toggledBtn.Item.Size.Y;

                int max_height = infoFrameSize;
                if ((infoFrameSize / max) * toggledBtn.Item.Size.Y > imagePanelHeight)
                    max_height = imagePanelHeight;

                imagePanel.Width = (max_height / max) * item.Size.X;
                imagePanel.Height = (max_height / max) * item.Size.Y;
                imagePanel.X = (infoFrameSize - imagePanel.Width) / 2;
                imagePanel.Show();
                setDescriptionLabel(Localizer.Instance.GetValueForName(btn.Item.Description));
                dropBtn.IsDisabled = false;
                useBtn.IsDisabled &= !toggledBtn.Item.ItemUsages.HasFlag (ItemUsage.Eatable);
                rotateBtn.IsDisabled = false;
            };

            btn.ToggledOff += (sender, arguments) => {
                imagePanel.Hide();
                setDescriptionLabel(string.Empty);
                toggledBtn = null;
                dropBtn.IsDisabled = true;
                useBtn.IsDisabled = true;
                rotateBtn.IsDisabled = true;
            };

            item.Location = ItemLocation.Inventory;

            if (MessageCreated != null && !no_message)
                MessageCreated (new ItemCollectedMessage(item.Player, item, position));

            items.Add(btn);
        }
예제 #20
0
        internal void dropItem(Base btn, ItemComponent item, Inventory inv, bool destroy = false)
        {
            var barbtn = barItems.FirstOrDefault(b => b.Item == item);
            barItems.Remove(barbtn);
            if (barbtn != null)
                barbtn.Parent.RemoveChild(barbtn, true);

            inv.TakeOut (item);
            btn.Parent.RemoveChild(btn, true);
            imagePanel.Hide();
            setDescriptionLabel(string.Empty);
            item.Location = ItemLocation.Ground;
            if (!destroy)
                createMessage(new ItemDroppedMessage(item));
            else
                item.Entity.Destroy();
        }
예제 #21
0
        public InventoryBarButton (Base parent, MessageProvider messageProvider, List<InventoryBarButton> barItems,
            Inventory inventory, InventoryGUI inventoryGui, ItemComponent item, byte position, int boxSize) :
        base (parent)
        {
            ValidMessages = new[] { (int) MessageId.ItemUsageChanged, (int) MessageId.BarItemMoved };
            this.boxSize = boxSize;
            this.IsToggle = true;
            this.item = item;
            this.inventory = inventory;
            this.barItems = barItems;
            this.inventoryGui = inventoryGui;

            if (!string.IsNullOrEmpty(item.ImageLocation))
                SetImage(item.ImageLocation, true);

            Width = boxSize - 1;
            Height = boxSize - 1;
            X = boxSize * position + 1;
            Y = 2;

            usageProgress = new ProgressBar(this);
            usageProgress.AutoLabel = false;
            usageProgress.Text = string.Empty;
            usageProgress.TextPadding = Padding.Zero;
            usageProgress.Value = 1 - item.Usage;
            usageProgress.SetSize(Width, 10);
            usageProgress.Y = Height - usageProgress.Height;
            usageProgress.X = 0;

            var max = item.Size.X > item.Size.Y ? item.Size.X : item.Size.Y;
            m_Image.Width = (boxSize / max) * item.Size.X;
            m_Image.Height = (boxSize / max) * item.Size.Y;
            DragAndDrop_SetPackage (true, "bar_drag");

            messageProvider += this;
            this.MessageProvider = messageProvider;
        }
예제 #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FreezingArcher.Messaging.BarItemMovedMessage"/> class.
 /// </summary>
 /// <param name="item">Item.</param>
 /// <param name="position">Position.</param>
 public BarItemMovedMessage(ItemComponent item, byte position)
 {
     Item = item;
     Position = position;
 }
예제 #23
0
        public Vector2i GetPositionOfItem(ItemComponent item)
        {
            var hc = item.GetHashCode();

            int x, y = 0;
            for (; y < storage.GetLength(0); y++)
            {
                x = 0;
                for (; x < storage.GetLength(1); x++)
                {
                    if (storage[y, x] == hc)
                        return new Vector2i(y, x);
                }
            }

            Logger.Log.AddLogEntry(LogLevel.Error, "Inventory", "Item does not exist in inventory!");

            return new Vector2i(-1, -1);
        }