/// <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; }
/// <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; } }
/// <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; }
/// <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; } }
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; }
/// <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)) {}
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; }
/// <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; }
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; }
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)); }
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) {}
/// <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)); }
public byte GetPositionOfBarItem(ItemComponent item) { var hc = item.GetHashCode(); byte index = 0; while (index < inventoryBar.Length && inventoryBar[index] != hc) { index++; } return index; }
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); } }
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); }
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(); }
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; }
/// <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; }
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); }