-
Notifications
You must be signed in to change notification settings - Fork 0
/
Handedness.cs
88 lines (74 loc) · 2.31 KB
/
Handedness.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//
// Cuboid (http://github.com/arjonagelhout/cuboid)
// Copyright (c) 2023 Arjo Nagelhout
//
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Cuboid
{
/// <summary>
/// Contains whether the user is left or right handed and contains
/// convenience methods for setting the dominant hand.
/// </summary>
public class Handedness
{
private const string k_DominantHandPreferencesString = "dominant-hand";
public enum Hand
{
RightHand = 0,
LeftHand,
}
public StoredBinding<Hand> DominantHand;
/// <summary>
/// Please instantiate in Awake method, not in constructor
/// </summary>
public Handedness()
{
DominantHand = new("Handedness_DominantHand", Hand.RightHand);
}
private bool _bothHandsEnabled = false;
/// <summary>
/// Whether or not both hands are enabled.
/// </summary>
public bool BothHandsEnabled
{
get => _bothHandsEnabled;
set
{
_bothHandsEnabled = value;
DominantHand.ValueChanged();
}
}
public bool HandEnabled(Hand hand)
{
return BothHandsEnabled || DominantHand.Value == hand;
}
public bool IsDominantHand(Hand hand)
{
return DominantHand.Value == hand;
}
public bool IsLeftHandEnabled => HandEnabled(Hand.LeftHand);
public bool IsRightHandEnabled => HandEnabled(Hand.RightHand);
public bool IsRightHanded => DominantHand.Value == Hand.RightHand;
public bool IsLeftHanded => DominantHand.Value == Hand.LeftHand;
public Hand NonDominantHand => DominantHand.Value switch
{
Hand.LeftHand => Hand.RightHand,
Hand.RightHand => Hand.LeftHand,
_ => Hand.LeftHand
};
public void SwitchDominantHand()
{
DominantHand.Value = NonDominantHand;
}
}
public static class HandExtensions
{
public static Handedness.Hand GetOtherHand(this Handedness.Hand hand)
{
return hand == Handedness.Hand.LeftHand ? Handedness.Hand.RightHand : Handedness.Hand.LeftHand;
}
}
}