Skip to content

Commit

Permalink
feat(input): add interaction to drill (#85)
Browse files Browse the repository at this point in the history
  • Loading branch information
Xenira committed Jan 24, 2024
1 parent 2016a51 commit 9bdd6ff
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 2 deletions.
54 changes: 54 additions & 0 deletions plugin/src/input/ui/machine/DrillInteractableUi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using TechtonicaVR.Util;
using UnityEngine;

namespace TechtonicaVR.Input.Ui.Machine;

public class DrillInteractableUi : InventoryInteractableUI
{
private static PluginLogger Logger = PluginLogger.GetLogger<DrillInteractableUi>();

public DrillInteractableUi(GameObject gameObject) : base(gameObject)
{
zIndex = 0.001f;

var outputResourceSlot = GameObjectFinder.FindChildObjectByName("Output Resource Slot", gameObject)
.GetComponent<InventoryResourceSlotUI>();
var fuelResourceSlot = GameObjectFinder.FindChildObjectByName("Fuel Resource Slot", gameObject)
.GetComponent<InventoryResourceSlotUI>();

interactable = [
getInteractable(outputResourceSlot),
getInteractable(fuelResourceSlot, new Vector2(0, 95)),
];
Logger.LogDebug($"Interactable: {rectTransform.rect}");
}

protected override void init()
{
}

private Interactable getInteractable(InventoryResourceSlotUI slot, Vector2 offset = default)
{
var rectTransform = slot.GetComponent<RectTransform>();
var rect = rectTransform.rect;

var originalParent = rectTransform.parent;
rectTransform.parent = this.rectTransform;
var relativeLocalPosition = rectTransform.localPosition;
rectTransform.parent = originalParent;

rect.x += relativeLocalPosition.x + offset.x;
rect.y += relativeLocalPosition.y + offset.y;
Logger.LogDebug($"Slot rect: {slot} {rect} {relativeLocalPosition} {rectTransform.localPosition}");

return new InteractableBuilder(this, rect, rectTransform.gameObject)
.withDrag(() => draggedResourceInfo ?? slot.resourceType,
(ui) => onDrag(slot),
(ui, source, target) => onDrop(ui, target, slot),
(ui) => onCancelDrag(slot))
.withDrop(onAcceptsDrop, (ui, source) => onReceiveDrop(source, slot))
.withHoverEnter((ui) => onHoverEnter(slot))
.withHoverExit((ui) => onHoverExit(slot))
.build();
}
}
4 changes: 2 additions & 2 deletions plugin/src/input/ui/machine/SmelterInteractableUi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ private Interactable getInteractable(InventoryResourceSlotUI slot)
var rectTransform = slot.GetComponent<RectTransform>();
var rect = rectTransform.rect;

var originalParent = this.rectTransform.parent;
var originalParent = rectTransform.parent;
rectTransform.parent = this.rectTransform;
var relativeLocalPosition = rectTransform.localPosition;
rectTransform.parent = originalParent;

rect.x += relativeLocalPosition.x;
rect.y += relativeLocalPosition.y;
Logger.LogDebug($"Output slot rect: {slot} {rect} {rectTransform.localPosition}");
Logger.LogDebug($"Slot rect: {slot} {rect} {rectTransform.localPosition}");

return new InteractableBuilder(this, rect, rectTransform.gameObject)
.withDrag(() => draggedResourceInfo ?? slot.resourceType,
Expand Down
8 changes: 8 additions & 0 deletions plugin/src/ui/patch/UiMenuPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,14 @@ private static void addInteractableUi(UIMenu instance)
menu = new UIMenuWrapper(instance)
};
}
else if (instance is DrillUI)
{
var container = GameObjectFinder.FindChildObjectByName("Container", instance.gameObject);
new DrillInteractableUi(container)
{
menu = new UIMenuWrapper(instance)
};
}
}

private static void disableButtonPrompts(UIMenu __instance)
Expand Down

0 comments on commit 9bdd6ff

Please sign in to comment.