Show if items can be placed in a slot when hovering (#1480)

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
This commit is contained in:
Moses
2020-07-26 07:25:38 -05:00
committed by GitHub
parent bab1345b87
commit 8e08c64fcf
9 changed files with 135 additions and 4 deletions

View File

@@ -36,6 +36,8 @@ namespace Content.Server.GameObjects
[ViewVariables]
private readonly Dictionary<Slots, ContainerSlot> SlotContainers = new Dictionary<Slots, ContainerSlot>();
private KeyValuePair<Slots, (EntityUid entity, bool fits)>? HoverEntity;
public override void Initialize()
{
base.Initialize();
@@ -93,6 +95,11 @@ namespace Content.Server.GameObjects
}
public T GetSlotItem<T>(Slots slot) where T : ItemComponent
{
if (!SlotContainers.ContainsKey(slot))
{
return null;
}
var containedEntity = SlotContainers[slot].ContainedEntity;
if (containedEntity?.Deleted == true)
{
@@ -358,6 +365,20 @@ namespace Content.Server.GameObjects
}
break;
}
case ClientInventoryUpdate.Hover:
{
var hands = Owner.GetComponent<HandsComponent>();
var activeHand = hands.GetActiveHand;
if (activeHand != null && GetSlotItem(msg.Inventoryslot) == null)
{
var canEquip = CanEquip(msg.Inventoryslot, activeHand, out var reason);
HoverEntity = new KeyValuePair<Slots, (EntityUid entity, bool fits)>(msg.Inventoryslot, (activeHand.Owner.Uid, canEquip));
Dirty();
}
break;
}
}
}
@@ -417,7 +438,11 @@ namespace Content.Server.GameObjects
list.Add(new KeyValuePair<Slots, EntityUid>(slot, container.ContainedEntity.Uid));
}
}
return new InventoryComponentState(list);
var hover = HoverEntity;
HoverEntity = null;
return new InventoryComponentState(list, hover);
}
void IExAct.OnExplosion(ExplosionEventArgs eventArgs)