Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix(ui): placed recipe ui in world (#6)
  • Loading branch information
Xenira committed Dec 14, 2023
1 parent 4420a46 commit e233308
Show file tree
Hide file tree
Showing 14 changed files with 165 additions and 17 deletions.
Binary file modified libs/Managed/SteamVR_Actions.dll
Binary file not shown.
7 changes: 6 additions & 1 deletion libs/StreamingAssets/SteamVR/actions.json
Expand Up @@ -169,6 +169,10 @@
"name": "/actions/default/in/UIShortcut2",
"type": "boolean"
},
{
"name": "/actions/default/in/UIShortcut1",
"type": "boolean"
},
{
"name": "/actions/default/out/Haptic",
"type": "vibration"
Expand Down Expand Up @@ -276,7 +280,8 @@
"/actions/default/in/UICancel": "UI Cancel",
"/actions/default/in/ToggleErase": "Toggle Erase",
"/actions/default/in/Use": "Use",
"/actions/default/in/UIShortcut2": "Crank"
"/actions/default/in/UIShortcut2": "<Unused>",
"/actions/default/in/UIShortcut1": "Crank"
}
]
}
11 changes: 7 additions & 4 deletions libs/StreamingAssets/SteamVR/bindings_knuckles.json
Expand Up @@ -308,15 +308,18 @@
},
{
"inputs" : {
"grab" : {
"north" : {
"output" : "/actions/default/in/uishortcut1"
},
"south" : {
"output" : "/actions/default/in/uishortcut2"
}
},
"mode" : "grab",
"mode" : "dpad",
"parameters" : {
"value_hold_threshold" : "1.1"
"sub_mode" : "click"
},
"path" : "/user/hand/right/input/grip"
"path" : "/user/hand/left/input/trackpad"
}
]
},
Expand Down
4 changes: 4 additions & 0 deletions plugin/src/input/input_patches.cs
Expand Up @@ -277,6 +277,10 @@ private static Button MapButtonState(int actionId)
return SteamVRInputMapper.UISubmit;
case RewiredConsts.Action.UI_Cancel:
return SteamVRInputMapper.UICancel;
case RewiredConsts.Action.UI_Shortcut_1:
return SteamVRInputMapper.UIShortcut1;
case RewiredConsts.Action.UI_Shortcut_2:
return SteamVRInputMapper.UIShortcut2;
case RewiredConsts.Action.Craft:
return SteamVRInputMapper.craft;
case RewiredConsts.Action.Craft_Five:
Expand Down
2 changes: 2 additions & 0 deletions plugin/src/input/steamvr_input_mapper.cs
Expand Up @@ -40,6 +40,8 @@ public static class SteamVRInputMapper
public static Button UIPageRightSecondary = new Button(SteamVR_Actions._default.UIPageRightSecondary);
public static Button UISubmit = new Button(SteamVR_Actions._default.UISubmit);
public static Button UICancel = new Button(SteamVR_Actions._default.UICancel);
public static Button UIShortcut1 = new Button(SteamVR_Actions._default.UIShortcut1);
public static Button UIShortcut2 = new Button(SteamVR_Actions._default.UIShortcut2);

public static Button cycleHotbarLeft = new Button(SteamVR_Actions._default.CycleHotbarLeft);
public static Button cycleHotbarRight = new Button(SteamVR_Actions._default.CycleHotbarRight);
Expand Down
11 changes: 11 additions & 0 deletions plugin/src/ui/behaviour_menu.cs
@@ -0,0 +1,11 @@
namespace TechtonicaVR.UI;

public class BehaviourMenu : Menu
{
public bool open { private get; set; } = false;

public bool isOpen()
{
return open;
}
}
6 changes: 6 additions & 0 deletions plugin/src/ui/menu.cs
@@ -0,0 +1,6 @@
namespace TechtonicaVR.UI;

public interface Menu
{
public bool isOpen();
}
70 changes: 69 additions & 1 deletion plugin/src/ui/patch/ui_menu_patch.cs
Expand Up @@ -10,6 +10,8 @@ namespace TechtonicaVR.UI.Patch;
public class UIMenuPatch
{
private static Dictionary<UIMenu, WorldPositionedCanvas> cache = new Dictionary<UIMenu, WorldPositionedCanvas>();
private static WorldPositionedCanvas recipePickerUi;

private static Vector3 lastCamOrigin = Vector3.zero;
private static Vector3 lastPosition = Vector3.zero;

Expand All @@ -28,7 +30,7 @@ public static void StartPostfix(UIMenu __instance)
}

var tracked_menu = tlc.AddComponent<WorldPositionedCanvas>();
tracked_menu.menu = __instance;
tracked_menu.menu = new UIMenuWrapper(__instance);
if (__instance.name == "Inventory and Crafting Menu" && ModConfig.inventoryAndCraftingMenuScaleOverride.Value != Vector3.zero)
{
tracked_menu.scale = ModConfig.inventoryAndCraftingMenuScaleOverride.Value;
Expand Down Expand Up @@ -119,6 +121,72 @@ public static void PlayerInventoryUIOpenPostfix(PlayerInventoryUI __instance, Re
worldPositionedCanvas.playerInventoryUI = __instance;
}

[HarmonyPatch(typeof(RecipePickerUI), nameof(RecipePickerUI.Start))]
[HarmonyPostfix]
public static void RecipePickerUIStartPostfix(RecipePickerUI __instance)
{
Plugin.Logger.LogDebug($"Attaching world position behaviour to: {__instance.name}");

var tlc = GameObjectFinder.FindChildObjectByName("Top Level Container", __instance.gameObject) ?? GameObjectFinder.FindParentObjectByName("Top Level Container", __instance.gameObject) ?? __instance.gameObject;
var blurs = GameObjectFinder.FindChildObjectsByName("BG Blur", __instance.transform.root.gameObject);

foreach (var blur in blurs)
{
destroyBlur(blur);
}

var tracked_menu = tlc.AddComponent<WorldPositionedCanvas>();
tracked_menu.menu = new BehaviourMenu();

if (__instance.name == "Inventory and Crafting Menu" && ModConfig.inventoryAndCraftingMenuScaleOverride.Value != Vector3.zero)
{
tracked_menu.scale = ModConfig.inventoryAndCraftingMenuScaleOverride.Value;
}
else
{
tracked_menu.scale = ModConfig.menuScale.Value;
}

recipePickerUi = tracked_menu;
}

[HarmonyPatch(typeof(RecipePickerUI), nameof(RecipePickerUI.Open))]
[HarmonyPostfix]
public static void RecipePickerUIOpenPostfix(RecipePickerUI __instance)
{
Plugin.Logger.LogInfo($"RecipePickerUI.OpenPostfix: {__instance.name}");
var worldPositionedCanvas = recipePickerUi;
if (worldPositionedCanvas == null)
{
Plugin.Logger.LogError($"RecipePickerUI.OpenPostfix: worldPositionedCanvas is null");
return;
}

var tlc = __instance.gameObject.transform.GetChild(0);
tlc.transform.localScale = worldPositionedCanvas.scale;

worldPositionedCanvas.target = lastPosition;
worldPositionedCanvas.camOrigin = lastCamOrigin;
((BehaviourMenu)recipePickerUi.menu).open = true;
}

[HarmonyPatch(typeof(RecipePickerUI), nameof(RecipePickerUI.Close))]
[HarmonyPostfix]
public static void RecipePickerUIClosePostfix(RecipePickerUI __instance)
{
Plugin.Logger.LogInfo($"RecipePickerUI.ClosePostfix: {__instance.name}");
var worldPositionedCanvas = recipePickerUi;
if (worldPositionedCanvas == null)
{
Plugin.Logger.LogError($"RecipePickerUI.ClosePostfix: worldPositionedCanvas is null");
return;
}

worldPositionedCanvas.target = Vector3.zero;
worldPositionedCanvas.playerInventoryUI = null;
((BehaviourMenu)recipePickerUi.menu).open = false;
}

private static void destroyBlur(GameObject blur)
{
if (blur == null)
Expand Down
17 changes: 17 additions & 0 deletions plugin/src/ui/ui_menu_wrapper.cs
@@ -0,0 +1,17 @@
namespace TechtonicaVR.UI;

public class UIMenuWrapper : Menu
{

private UIMenu menu;

public UIMenuWrapper(UIMenu menu)
{
this.menu = menu;
}

public bool isOpen()
{
return menu.isOpen;
}
}
7 changes: 4 additions & 3 deletions plugin/src/ui/world_positioned_canvas.cs
Expand Up @@ -6,7 +6,7 @@ namespace TechtonicaVR.UI;

public class WorldPositionedCanvas : MonoBehaviour
{
public UIMenu menu;
public Menu menu;
public PlayerInventoryUI playerInventoryUI;

public Vector3 target;
Expand All @@ -24,13 +24,14 @@ private void Start()

private void Update()
{
if (target == Vector3.zero || !menu.isOpen)
var isOpen = menu.isOpen();
if (target == Vector3.zero || !isOpen)
{
return;
}

var cam = VRCameraManager.mainCamera;
if (menu.isOpen)
if (isOpen)
{
MathyStuff.PositionCanvasInWorld(gameObject, cam, target, camOrigin);
}
Expand Down
Expand Up @@ -337,6 +337,14 @@ public virtual SteamVR_Action_Boolean UIShortcut2
}
}

public virtual SteamVR_Action_Boolean UIShortcut1
{
get
{
return SteamVR_Actions.default_UIShortcut1;
}
}

public virtual SteamVR_Action_Vibration Haptic
{
get
Expand Down
21 changes: 18 additions & 3 deletions unity/Assets/SteamVR_Input/SteamVR_Input_Actions.cs
Expand Up @@ -97,6 +97,8 @@ public partial class SteamVR_Actions

private static SteamVR_Action_Boolean p_default_UIShortcut2;

private static SteamVR_Action_Boolean p_default_UIShortcut1;

private static SteamVR_Action_Vibration p_default_Haptic;

public static SteamVR_Action_Boolean default_GrabPinch
Expand Down Expand Up @@ -419,6 +421,14 @@ public static SteamVR_Action_Boolean default_UIShortcut2
}
}

public static SteamVR_Action_Boolean default_UIShortcut1
{
get
{
return SteamVR_Actions.p_default_UIShortcut1.GetCopy<SteamVR_Action_Boolean>();
}
}

public static SteamVR_Action_Vibration default_Haptic
{
get
Expand Down Expand Up @@ -470,6 +480,7 @@ private static void InitializeActionArrays()
SteamVR_Actions.default_ToggleErase,
SteamVR_Actions.default_Use,
SteamVR_Actions.default_UIShortcut2,
SteamVR_Actions.default_UIShortcut1,
SteamVR_Actions.default_Haptic};
Valve.VR.SteamVR_Input.actionsIn = new Valve.VR.ISteamVR_Action_In[] {
SteamVR_Actions.default_GrabPinch,
Expand Down Expand Up @@ -511,7 +522,8 @@ private static void InitializeActionArrays()
SteamVR_Actions.default_UICancel,
SteamVR_Actions.default_ToggleErase,
SteamVR_Actions.default_Use,
SteamVR_Actions.default_UIShortcut2};
SteamVR_Actions.default_UIShortcut2,
SteamVR_Actions.default_UIShortcut1};
Valve.VR.SteamVR_Input.actionsOut = new Valve.VR.ISteamVR_Action_Out[] {
SteamVR_Actions.default_Haptic};
Valve.VR.SteamVR_Input.actionsVibration = new Valve.VR.SteamVR_Action_Vibration[] {
Expand Down Expand Up @@ -550,7 +562,8 @@ private static void InitializeActionArrays()
SteamVR_Actions.default_UICancel,
SteamVR_Actions.default_ToggleErase,
SteamVR_Actions.default_Use,
SteamVR_Actions.default_UIShortcut2};
SteamVR_Actions.default_UIShortcut2,
SteamVR_Actions.default_UIShortcut1};
Valve.VR.SteamVR_Input.actionsSingle = new Valve.VR.SteamVR_Action_Single[] {
SteamVR_Actions.default_Squeeze};
Valve.VR.SteamVR_Input.actionsVector2 = new Valve.VR.SteamVR_Action_Vector2[] {
Expand Down Expand Up @@ -598,7 +611,8 @@ private static void InitializeActionArrays()
SteamVR_Actions.default_UICancel,
SteamVR_Actions.default_ToggleErase,
SteamVR_Actions.default_Use,
SteamVR_Actions.default_UIShortcut2};
SteamVR_Actions.default_UIShortcut2,
SteamVR_Actions.default_UIShortcut1};
}

private static void PreInitActions()
Expand Down Expand Up @@ -643,6 +657,7 @@ private static void PreInitActions()
SteamVR_Actions.p_default_ToggleErase = ((SteamVR_Action_Boolean)(SteamVR_Action.Create<SteamVR_Action_Boolean>("/actions/default/in/ToggleErase")));
SteamVR_Actions.p_default_Use = ((SteamVR_Action_Boolean)(SteamVR_Action.Create<SteamVR_Action_Boolean>("/actions/default/in/Use")));
SteamVR_Actions.p_default_UIShortcut2 = ((SteamVR_Action_Boolean)(SteamVR_Action.Create<SteamVR_Action_Boolean>("/actions/default/in/UIShortcut2")));
SteamVR_Actions.p_default_UIShortcut1 = ((SteamVR_Action_Boolean)(SteamVR_Action.Create<SteamVR_Action_Boolean>("/actions/default/in/UIShortcut1")));
SteamVR_Actions.p_default_Haptic = ((SteamVR_Action_Vibration)(SteamVR_Action.Create<SteamVR_Action_Vibration>("/actions/default/out/Haptic")));
}
}
Expand Down
7 changes: 6 additions & 1 deletion unity/Assets/StreamingAssets/SteamVR/actions.json
Expand Up @@ -169,6 +169,10 @@
"name": "/actions/default/in/UIShortcut2",
"type": "boolean"
},
{
"name": "/actions/default/in/UIShortcut1",
"type": "boolean"
},
{
"name": "/actions/default/out/Haptic",
"type": "vibration"
Expand Down Expand Up @@ -276,7 +280,8 @@
"/actions/default/in/UICancel": "UI Cancel",
"/actions/default/in/ToggleErase": "Toggle Erase",
"/actions/default/in/Use": "Use",
"/actions/default/in/UIShortcut2": "Crank"
"/actions/default/in/UIShortcut2": "<Unused>",
"/actions/default/in/UIShortcut1": "Crank"
}
]
}
11 changes: 7 additions & 4 deletions unity/Assets/StreamingAssets/SteamVR/bindings_knuckles.json
Expand Up @@ -308,15 +308,18 @@
},
{
"inputs" : {
"grab" : {
"north" : {
"output" : "/actions/default/in/uishortcut1"
},
"south" : {
"output" : "/actions/default/in/uishortcut2"
}
},
"mode" : "grab",
"mode" : "dpad",
"parameters" : {
"value_hold_threshold" : "1.1"
"sub_mode" : "click"
},
"path" : "/user/hand/right/input/grip"
"path" : "/user/hand/left/input/trackpad"
}
]
},
Expand Down

0 comments on commit e233308

Please sign in to comment.