IPressable
public interface IPressable A component that can be pressed. Like a button. This could be by a player USE'ing it, or by a player walking on it, or by an NPC. A call to Press should ALWAYS call release afterwards. Generally this is done by the player, where holding E presses the button, and releasing E stops pressing it. You need to handle edge cases where the player dies while holding etc.
Methods
virtual Void Hover(Event e) A player has started looking at this
virtual Void Look(Event e) A player is still looking at this. Called every frame.
virtual Void Blur(Event e) A player has stopped looking at this
virtual Boolean Press(Event e) Pressed. Returns true on success, else false. If it returns true then you should call Release when the press finishes. Not everything expects it, but some stuff will.
virtual Boolean Pressing(Event e) Still being pressed. Return true to allow the press to continue, false cancel the press
virtual Void Release(Event e) To be called when the press finishes. You should only call this after a successful press - ie when Press hass returned true.
virtual Boolean CanPress(Event e) Return true if the press is possible right now
virtual Tooltip? GetTooltip(Event e) Get a tooltip to show when looking at this pressable