Input Screen Refactoring

Cleaned up the code for the input screen and refactored to prepare for mouse binding
Consolidated wormhole and dock keys into one "Interact" key
This commit is contained in:
Reinier Vens 2021-05-06 02:34:19 +01:00
commit 296a7f2958
47 changed files with 2676 additions and 393 deletions

BIN
Asset Sources/Mouse.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse.psd (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0000_Forward-copy.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0000_Layer-5.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0001_Forward.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0001_Layer-4.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0002_Layer-3.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0002_Middle-copy.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0003_Layer-8.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0003_Middle.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0004_Layer-9.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0004_Right-copy.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0005_Layer-10-copy.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0005_Right.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0006_Layer-10.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0006_Left-copy.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Asset Sources/Mouse_0007_Left.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,10 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InputDisplayButton : MonoBehaviour
{
public Image Fill;
public Image Outline;
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9ed1d3c353acc9a489cb65f1c7726814
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -4,11 +4,9 @@ using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class InputDisplayKey : MonoBehaviour
public class InputDisplayKey : InputDisplayButton
{
public TextMeshProUGUI MainLabel;
public TextMeshProUGUI AltLabel;
public Image Fill;
public Image Outline;
public LayoutElement LayoutElement;
}

View file

@ -16,6 +16,12 @@ using static Unity.Mathematics.math;
public class InputDisplayLayout : MonoBehaviour
{
public RectTransform UnassignedBindingsGroup;
public InputDisplayButton MouseLeft;
public InputDisplayButton MouseRight;
public InputDisplayButton MouseMiddle;
public InputDisplayButton MouseForward;
public InputDisplayButton MouseBack;
public VerticalLayoutGroup RowContainer;
public TextAsset LayoutFile;
public Prototype LabelPrototype;
@ -30,41 +36,51 @@ public class InputDisplayLayout : MonoBehaviour
public float FillAlpha;
public float FillMultiplier = .25f;
public float InactiveMultiplier = .333f;
public int TestSteps = 5;
public int PlacementSearchArea = 4;
public float TestPadding = 4;
public float BoxLineExpand = -1;
public Color GlobalColor;
public float GlobalHueBuffer = .1f;
public float GlobalHue = .333f;
public float Saturation;
public float GlobalHueRange = .1f;
private Canvas _canvas;
private Color _defaultInactiveColor;
private InputLayout _inputLayout;
private Dictionary<InputLayoutBindableKey, InputDisplayKey> _displayKeys = new Dictionary<InputLayoutBindableKey, InputDisplayKey>();
private Dictionary<string, InputLayoutBindableKey> _bindKeys = new Dictionary<string, InputLayoutBindableKey>();
private Dictionary<InputDisplayKey, InputAction> _actionMap = new Dictionary<InputDisplayKey, InputAction>();
private Dictionary<InputAction, TextMeshProUGUI> _actionLabels = new Dictionary<InputAction, TextMeshProUGUI>();
private Dictionary<InputAction, Color> _actionColors = new Dictionary<InputAction, Color>();
private List<Rect> _reservedRects = new List<Rect>();
private List<LayoutGroup> _layoutGroups = new List<LayoutGroup>();
private class ButtonMapping
{
public IBindableButton Button;
public InputDisplayButton DisplayButton;
public ActionMapping ActionMapping;
public Rect ButtonRect;
public UILineRenderer LabelLine;
}
private class ActionMapping
{
public InputAction Action;
public TextMeshProUGUI Label;
public Rect LabelRect;
public float Hue;
public List<ButtonMapping> ButtonMappings = new List<ButtonMapping>();
}
private string FullKeyPath(string shortPath) => $"<Keyboard>/{shortPath}";
private string ShortKeyPath(string fullPath) => fullPath.Substring(fullPath.LastIndexOf('/') + 1);
private Dictionary<string, ButtonMapping> _bindButtons = new Dictionary<string, ButtonMapping>();
private List<ButtonMapping> _buttonMappings = new List<ButtonMapping>();
private List<ActionMapping> _actionMappings = new List<ActionMapping>();
void Start()
{
_canvas = transform.root.GetComponent<Canvas>();
_defaultInactiveColor = DefaultColor;
_defaultInactiveColor.a *= InactiveMultiplier;
var path = Path.Combine(ActionGameManager.GameDataDirectory.CreateSubdirectory("KeyboardLayouts").FullName, $"{LayoutFile.name}.msgpack");
// _inputLayout = ParseJson(LayoutFile.text);
RegisterResolver.Register();
_inputLayout = MessagePackSerializer.Deserialize<InputLayout>(File.ReadAllBytes(path));
DisplayLayout(_inputLayout);
foreach (var key in _inputLayout.GetBindableKeys())
{
var fullInputPath = FullKeyPath(key.InputSystemPath);
_bindKeys[fullInputPath] = key;
foreach (var buttonMapping in _buttonMappings) _bindButtons[buttonMapping.Button.InputSystemPath] = buttonMapping;
// foreach (var key in _inputLayout.GetBindableKeys())
// {
// var keyPress = new InputAction(binding: fullInputPath);
// keyPress.started += context =>
// {
@ -85,129 +101,161 @@ public class InputDisplayLayout : MonoBehaviour
// displayKey.Fill.color = fillColor;
// };
// keyPress.Enable();
}
var input = new AetheriaInput();
// input.Global.Dock.performed += context => Debug.Log("Docking!");
// input.Global.GalaxyMap.performed += context =>
// {
// input.Global.Dock.Disable();
// var rebindOperation = input.Global.Dock.PerformInteractiveRebinding()
// .WithControlsExcluding("Mouse")
// .WithCancelingThrough("<Keyboard>/escape")
// .OnMatchWaitForAnother(0.2f)
// .Start();
// Debug.Log("Rebinding Dock!");
// rebindOperation.OnComplete(operation =>
// {
// Debug.Log("Rebinding Complete!");
// input.Global.Dock.Enable();
// });
// };
// input.Enable();
_layoutGroups.Add(RowContainer);
// foreach (var group in _layoutGroups)
// {
// group.CalculateLayoutInputHorizontal();
// group.CalculateLayoutInputVertical();
// group.SetLayoutHorizontal();
// group.SetLayoutVertical();
// LayoutRebuilder.ForceRebuildLayoutImmediate(group.GetComponent<RectTransform>());
// }
// LayoutRebuilder.ForceRebuildLayoutImmediate(GetComponent<RectTransform>());
Canvas.ForceUpdateCanvases();
Color.RGBToHSV(GlobalColor, out var hue, out var saturation, out var value);
var actionIndex = 0;
var actionCount = (float) input.asset.Count(a=>a.actionMap.name!="UI");
foreach (var action in input.asset)
{
if(action.actionMap.name=="UI") continue;
var h = frac(hue + GlobalHueBuffer + actionIndex++ / actionCount * (1 - GlobalHueBuffer * 2));
if (action.actionMap.name == "Global")
{
h = hue;
_actionColors[action] = GlobalColor;
}
else
_actionColors[action] = Color.HSVToRGB(h, saturation, value);
foreach (var binding in action.bindings)
{
if (_bindKeys.ContainsKey(binding.path))
{
var displayKey = _displayKeys[_bindKeys[binding.path]];
displayKey.Fill.color = Color.HSVToRGB(h, saturation, FillBrightness);
displayKey.Outline.gameObject.SetActive(true);
displayKey.Outline.color = displayKey.MainLabel.color = displayKey.AltLabel.color = _actionColors[action];
_actionMap[displayKey] = action;
_reservedRects.Add(displayKey.GetComponent<RectTransform>().ScreenSpaceRect());
}
}
}
var center = _actionMap.Keys.Aggregate(Vector2.zero, (v, displayKey) => v + (Vector2) displayKey.transform.position) / _actionMap.Keys.Count;
foreach (var x in _actionMap)
{
var key = x.Key;
var action = x.Value;
if(_actionLabels.ContainsKey(action)) continue;
var label = LabelPrototype.Instantiate<TextMeshProUGUI>();
label.color = _actionColors[action];
_actionLabels[action] = label;
var labelRect = label.rectTransform;
label.text = _actionMap[key].name.Replace(' ', '\n');
LayoutRebuilder.ForceRebuildLayoutImmediate(labelRect);
var pos = (Vector2) key.transform.position;
var dir = (pos - center).normalized;
label.transform.position = FindLabelPosition(key.GetComponent<RectTransform>(), labelRect, dir);
}
foreach (var buttonMapping in _buttonMappings)
buttonMapping.ButtonRect = buttonMapping.DisplayButton.GetComponent<RectTransform>().ScreenSpaceRect();
foreach (var x in _actionMap)
{
var key = x.Key;
var action = x.Value;
var keyBounds = key.Outline.rectTransform.GetBounds(BoxLineExpand);
var labelPoint = (Vector2) _actionLabels[action].rectTransform.GetBounds().ClosestPoint(key.Outline.transform.position);
var keyPoint = (Vector2) keyBounds.ClosestPoint(labelPoint);
var input = new AetheriaInput();
ProcessActions(input.asset);
var line = LinePrototype.Instantiate<UILineRenderer>();
line.color = _actionColors[action];
line.Points = new[] { keyPoint, labelPoint };
foreach (var actionMapping in _actionMappings)
{
actionMapping.Label = CreateLabel(actionMapping);
PlaceLabel(actionMapping);
foreach(var buttonMapping in actionMapping.ButtonMappings) ConnectButtonToLabel(buttonMapping);
}
//StartCoroutine(AssociateInputKeys(_inputLayout));
}
private Vector2 FindLabelPosition(RectTransform key, RectTransform label, Vector2 dir)
private void ProcessActions(InputActionAsset input)
{
var nonUIActions = input.Where(a => a.actionMap.name != "UI").ToArray();
for (var i = 0; i < nonUIActions.Length; i++)
{
var action = nonUIActions[i];
var actionMapping = new ActionMapping
{
Action = action,
Hue = action.actionMap.name == "Global"
? GlobalHue
: frac(GlobalHue + GlobalHueRange + (float) i / (nonUIActions.Length - 1) * (1 - GlobalHueRange * 2))
};
_actionMappings.Add(actionMapping);
foreach (var binding in action.bindings)
{
if (_bindButtons.ContainsKey(binding.path))
{
var buttonMapping = _bindButtons[binding.path];
buttonMapping.ActionMapping = actionMapping;
AssignColor(buttonMapping);
actionMapping.ButtonMappings.Add(buttonMapping);
}
}
}
}
private void AssignColor(ButtonMapping buttonMapping)
{
if(buttonMapping.ActionMapping!=null)
{
var outlineColor = Color.HSVToRGB(buttonMapping.ActionMapping.Hue, Saturation, 1);
var fillColor = Color.HSVToRGB(buttonMapping.ActionMapping.Hue, 1, FillBrightness);
fillColor.a = FillAlpha;
buttonMapping.DisplayButton.Fill.color = fillColor;
buttonMapping.DisplayButton.Outline.gameObject.SetActive(true);
buttonMapping.DisplayButton.Outline.color = outlineColor;
if (buttonMapping.DisplayButton is InputDisplayKey key) key.MainLabel.color = key.AltLabel.color = outlineColor;
}
else AssignUnboundColor(buttonMapping.DisplayButton);
}
private void AssignUnboundColor(InputDisplayButton button, bool bindable = true)
{
button.Outline.gameObject.SetActive(false);
var outlineColor = DefaultColor;
outlineColor.a *= InactiveMultiplier;
var fillColor = DefaultColor * FillBrightness;
fillColor *= FillBrightness;
if(!bindable)
fillColor *= InactiveMultiplier;
fillColor.a = FillAlpha;
button.Fill.color = fillColor;
if (button is InputDisplayKey key) key.MainLabel.color = key.AltLabel.color = Color.Lerp(outlineColor, fillColor, .5f);
}
private TextMeshProUGUI CreateLabel(ActionMapping actionMapping)
{
var label = LabelPrototype.Instantiate<TextMeshProUGUI>();
label.color = Color.HSVToRGB(actionMapping.Hue, Saturation, 1);
actionMapping.Label = label;
label.text = actionMapping.Action.name.Replace(' ', '\n');
return label;
}
private void PlaceLabel(ActionMapping actionMapping)
{
if(actionMapping.ButtonMappings.Any())
{
var labelRect = actionMapping.Label.rectTransform;
LayoutRebuilder.ForceRebuildLayoutImmediate(labelRect);
var rect = FindLabelPosition(actionMapping.ButtonMappings.First().DisplayButton.GetComponent<RectTransform>(), labelRect);
actionMapping.LabelRect = rect;
actionMapping.Label.transform.position = rect.center;
}
else
{
actionMapping.Label.rectTransform.parent = UnassignedBindingsGroup;
}
}
private void ConnectButtonToLabel(ButtonMapping buttonMapping)
{
if (buttonMapping.ActionMapping != null)
{
var keyBounds = buttonMapping.DisplayButton.Outline.rectTransform.GetBounds(BoxLineExpand);
var labelPoint = (Vector2) buttonMapping.ActionMapping.Label.rectTransform.GetBounds().ClosestPoint(keyBounds.center);
var keyPoint = (Vector2) keyBounds.ClosestPoint(labelPoint);
labelPoint /= _canvas.scaleFactor;
keyPoint /= _canvas.scaleFactor;
buttonMapping.LabelLine ??= LinePrototype.Instantiate<UILineRenderer>();
buttonMapping.LabelLine.color = buttonMapping.ActionMapping.Label.color;
buttonMapping.LabelLine.Points = new[] {keyPoint, labelPoint};
}
else
{
buttonMapping.LabelLine?.GetComponent<Prototype>().ReturnToPool();
buttonMapping.LabelLine = null;
}
}
private Rect FindLabelPosition(RectTransform key, RectTransform label)
{
var keyRect = key.ScreenSpaceRect();
var labelRect = label.ScreenSpaceRect(TestPadding);
var localRects = Overlap(key.ScreenSpaceRect(TestSteps * KeySize));
var labelRect = label.ScreenSpaceRect(TestPadding*_canvas.scaleFactor);
var localRects = Overlap(key.ScreenSpaceRect(PlacementSearchArea * KeySize * _canvas.scaleFactor));
var centroid = localRects.Aggregate(Vector2.zero, (v, r) => v + r.center) / localRects.Length;
var keyCenter = keyRect.center;
for (int dist = KeySize; dist < TestSteps * KeySize; dist++)
var dir = (keyCenter - centroid).normalized;
for (int dist = KeySize; dist < PlacementSearchArea * KeySize; dist++)
{
for (float theta = 0; theta < PI * 2; theta += PI / 32)
{
for (int s = -1; s <= 1; s += 2)
{
var testPos = keyCenter + dir.Rotate(theta * s) * dist;
var testPos = keyCenter + dir.Rotate(theta * s) * dist * _canvas.scaleFactor;
var testRect = new Rect(testPos - labelRect.size / 2, labelRect.size);
if(!localRects.Any(r => r.Overlaps(testRect)))
{
_reservedRects.Add(testRect);
return testPos;
return testRect;
}
}
}
}
return Vector2.zero;
return default;
}
private Rect[] Overlap(Rect rect) => _reservedRects.Where(r => r.Overlaps(rect)).ToArray();
private Rect[] Overlap(Rect rect) => _buttonMappings
.Where(b=>b.ActionMapping!=null)
.Select(b=>b.ButtonRect)
.Concat(_actionMappings
.Where(a=>a.LabelRect.width > .1f)
.Select(a=>a.LabelRect))
.Where(r => r.Overlaps(rect)).ToArray();
public void DisplayLayout(InputLayout layout)
{
@ -216,7 +264,6 @@ public class InputDisplayLayout : MonoBehaviour
if (row is InputLayoutKeyRow keyRow)
{
var displayRow = RowPrototype.Instantiate<InputDisplayRow>();
_layoutGroups.Add(displayRow.LayoutGroup);
foreach (var column in keyRow.Columns)
{
if (column is InputLayoutColumnSpacer)
@ -230,14 +277,17 @@ public class InputDisplayLayout : MonoBehaviour
displayKey.LayoutElement.preferredWidth = KeySize * column.Width;
displayKey.Outline.gameObject.SetActive(false);
displayKey.Outline.color = DefaultColor;
var fillColor = DefaultColor;
fillColor *= FillMultiplier;
fillColor.a = FillAlpha;
displayKey.MainLabel.color = displayKey.AltLabel.color = Color.Lerp(_defaultInactiveColor, fillColor, .5f);
AssignUnboundColor(displayKey, column is InputLayoutBindableKey);
if (column is InputLayoutBindableKey key)
{
_displayKeys[key] = displayKey;
var buttonMapping = new ButtonMapping
{
Button = key,
DisplayButton = displayKey
};
_bindButtons[key.InputSystemPath] = buttonMapping;
_buttonMappings.Add(buttonMapping);
displayKey.MainLabel.text = key.MainLabel;
displayKey.AltLabel.text = key.AltLabel;
@ -251,11 +301,9 @@ public class InputDisplayLayout : MonoBehaviour
}
else
{
fillColor.a *= InactiveMultiplier;
displayKey.MainLabel.text = "";
displayKey.AltLabel.text = "";
}
displayKey.Fill.color = fillColor;
}
else
{
@ -348,51 +396,41 @@ public class InputDisplayLayout : MonoBehaviour
return new InputLayout {Rows = rows.ToArray()};
}
private IEnumerator AssociateInputKeys(InputLayout layout)
private IEnumerator AssociateInputKeys()
{
var path = "";
var keyPress = new InputAction(binding: "/<Keyboard>/<button>");
keyPress.performed += context =>
{
var keyName = ShortKeyPath(context.control.path);
if (keyName == "anyKey") return;
path = keyName;
if (context.control.path.EndsWith("anyKey")) return;
path = context.control.path;
};
keyPress.Enable();
foreach (var row in layout.Rows)
foreach (var button in _buttonMappings)
{
if (row is InputLayoutKeyRow keyRow)
{
foreach (var column in keyRow.Columns)
{
if(column is InputLayoutBindableKey bindableKey)
{
_displayKeys[bindableKey].Outline.color = HighlightColor;
var fillColor = HighlightColor;
fillColor *= FillMultiplier;
fillColor.a = FillAlpha;
_displayKeys[bindableKey].Fill.color = fillColor;
button.DisplayButton.Outline.color = HighlightColor;
var fillColor = HighlightColor;
fillColor *= FillMultiplier;
fillColor.a = FillAlpha;
button.DisplayButton.Fill.color = fillColor;
path = "";
while (string.IsNullOrEmpty(path)) yield return null;
bindableKey.InputSystemPath = path;
Debug.Log($"Bound \"{path}\" to \"{bindableKey.MainLabel}\"");
path = "";
while (string.IsNullOrEmpty(path)) yield return null;
button.Button.InputSystemPath = path;
//Debug.Log($"Bound \"{path}\" to \"{bindableKey.MainLabel}\"");
_displayKeys[bindableKey].Outline.color = DefaultColor;
fillColor = DefaultColor;
fillColor *= FillMultiplier;
fillColor.a = FillAlpha;
_displayKeys[bindableKey].Fill.color = fillColor;
}
}
}
button.DisplayButton.Outline.color = DefaultColor;
fillColor = DefaultColor;
fillColor *= FillMultiplier;
fillColor.a = FillAlpha;
button.DisplayButton.Fill.color = fillColor;
}
keyPress.Disable();
RegisterResolver.Register();
File.WriteAllBytes(
Path.Combine(ActionGameManager.GameDataDirectory.CreateSubdirectory("KeyboardLayouts").FullName, $"{LayoutFile.name}.msgpack"),
MessagePackSerializer.Serialize(layout));
MessagePackSerializer.Serialize(_inputLayout));
}
void Update()

View file

@ -62,14 +62,42 @@ public class InputLayoutColumnSpacer : InputLayoutColumn { }
public class InputLayoutKey : InputLayoutColumn { }
[MessagePackObject, JsonObject(MemberSerialization.OptIn)]
public class InputLayoutBindableKey : InputLayoutKey
public class InputLayoutBindableKey : InputLayoutKey, IBindableButton
{
[Key(1), JsonProperty("mainLabel")] public string MainLabel;
[Key(2), JsonProperty("altLabel")] public string AltLabel;
[Key(3), JsonProperty("path")] public string InputSystemPath;
[Key(3), JsonProperty("path")] public string ShortPath;
[IgnoreMember]
public string InputSystemPath
{
get
{
return $"<Keyboard>/{ShortPath}";
}
set
{
ShortPath = value.Substring(value.LastIndexOf('/') + 1);
}
}
}
public class InputLayoutMultiRowKey : InputLayoutBindableKey
{
[Key(4), JsonProperty("height")] public int Height;
}
public class InputLayoutMouseButton : IBindableButton
{
public string Path;
public string InputSystemPath
{
get => Path;
set => Path = value;
}
}
public interface IBindableButton
{
public string InputSystemPath { get; set; }
}

View file

@ -108,14 +108,6 @@
"expectedControlType": "",
"processors": "",
"interactions": ""
},
{
"name": "Enter Wormhole",
"type": "Button",
"id": "b907857f-d1d2-455d-912b-8de9a64f0f3a",
"expectedControlType": "Button",
"processors": "",
"interactions": ""
}
],
"bindings": [
@ -342,24 +334,13 @@
{
"name": "",
"id": "37683a7e-02b1-4daa-a990-a51a30e7f8e9",
"path": "<Keyboard>/f",
"path": "<Keyboard>/c",
"interactions": "",
"processors": "",
"groups": "Keyboard&Mouse",
"action": "Tractor Beam",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "85857c0e-82fa-4889-895a-1e55c6dbe206",
"path": "<Keyboard>/v",
"interactions": "",
"processors": "",
"groups": "Keyboard&Mouse",
"action": "Enter Wormhole",
"isComposite": false,
"isPartOfComposite": false
}
]
},
@ -846,17 +827,25 @@
"interactions": ""
},
{
"name": "Dock",
"name": "Main Menu",
"type": "Button",
"id": "d6e65ce8-149c-4009-ac38-66144cca311a",
"id": "0515c617-9dff-406f-ab3e-763971d532d3",
"expectedControlType": "Button",
"processors": "",
"interactions": ""
},
{
"name": "Main Menu",
"name": "Input Screen",
"type": "Button",
"id": "0515c617-9dff-406f-ab3e-763971d532d3",
"id": "e76aa7e9-e24d-47e1-865d-ffe72ba5c1c2",
"expectedControlType": "Button",
"processors": "",
"interactions": ""
},
{
"name": "Interact",
"type": "Button",
"id": "31f7b7e1-d15e-40e8-b74f-2d0dc4195d4d",
"expectedControlType": "Button",
"processors": "",
"interactions": ""
@ -885,17 +874,6 @@
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "3279cef8-8bd1-49f2-984a-637d1f8522f6",
"path": "<Keyboard>/c",
"interactions": "",
"processors": "",
"groups": "Keyboard&Mouse",
"action": "Dock",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "f90929d5-d8d1-40dc-acc7-7ae294971d12",
@ -917,6 +895,28 @@
"action": "Main Menu",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "1a786bc6-2cb5-4951-86f8-ef4e9607eab8",
"path": "<Keyboard>/f1",
"interactions": "",
"processors": "",
"groups": "Keyboard&Mouse",
"action": "Input Screen",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "a03cee94-69c9-4a26-be58-46b26351c659",
"path": "<Keyboard>/f",
"interactions": "",
"processors": "",
"groups": "Keyboard&Mouse",
"action": "Interact",
"isComposite": false,
"isPartOfComposite": false
}
]
}

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e6382d47a34e26946a4921fed3b7c7de
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: 86b171bbce0ac89479204be3f4a2acb0
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Left_fill.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: bbb9e71b792064d4d93ba0001697f8b1
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Left_outline.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: 067d6bbfe8941e441b489522ca53293d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Middle_fill.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: 1ca68652962a903469b748601a0ac3ce
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: fbb06fc1e174e3948bce31b9c030dc97
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Right_fill.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: d6513b7600d2bab458449196333a455d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Right_outline.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: 4f0f821eec274c14288ab37df3b10d48
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Side_fill.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: e4d035889707a8648bdd98b16cc90bba
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Resources/Sprites/Icons/Mouse/Mouse_Side_outline.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: 690623d97be1e694a89a6dc088559bde
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load diff

View file

@ -121,14 +121,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
""expectedControlType"": """",
""processors"": """",
""interactions"": """"
},
{
""name"": ""Enter Wormhole"",
""type"": ""Button"",
""id"": ""b907857f-d1d2-455d-912b-8de9a64f0f3a"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """"
}
],
""bindings"": [
@ -355,24 +347,13 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
{
""name"": """",
""id"": ""37683a7e-02b1-4daa-a990-a51a30e7f8e9"",
""path"": ""<Keyboard>/f"",
""path"": ""<Keyboard>/c"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Tractor Beam"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""85857c0e-82fa-4889-895a-1e55c6dbe206"",
""path"": ""<Keyboard>/v"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Enter Wormhole"",
""isComposite"": false,
""isPartOfComposite"": false
}
]
},
@ -859,17 +840,25 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
""interactions"": """"
},
{
""name"": ""Dock"",
""name"": ""Main Menu"",
""type"": ""Button"",
""id"": ""d6e65ce8-149c-4009-ac38-66144cca311a"",
""id"": ""0515c617-9dff-406f-ab3e-763971d532d3"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """"
},
{
""name"": ""Main Menu"",
""name"": ""Input Screen"",
""type"": ""Button"",
""id"": ""0515c617-9dff-406f-ab3e-763971d532d3"",
""id"": ""e76aa7e9-e24d-47e1-865d-ffe72ba5c1c2"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """"
},
{
""name"": ""Interact"",
""type"": ""Button"",
""id"": ""31f7b7e1-d15e-40e8-b74f-2d0dc4195d4d"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """"
@ -898,17 +887,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""3279cef8-8bd1-49f2-984a-637d1f8522f6"",
""path"": ""<Keyboard>/c"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Dock"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""f90929d5-d8d1-40dc-acc7-7ae294971d12"",
@ -930,6 +908,28 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
""action"": ""Main Menu"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""1a786bc6-2cb5-4951-86f8-ef4e9607eab8"",
""path"": ""<Keyboard>/f1"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Input Screen"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""a03cee94-69c9-4a26-be58-46b26351c659"",
""path"": ""<Keyboard>/f"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Interact"",
""isComposite"": false,
""isPartOfComposite"": false
}
]
}
@ -990,7 +990,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
m_Player_Ping = m_Player.FindAction("Ping", throwIfNotFound: true);
m_Player_HideUI = m_Player.FindAction("Hide UI", throwIfNotFound: true);
m_Player_TractorBeam = m_Player.FindAction("Tractor Beam", throwIfNotFound: true);
m_Player_EnterWormhole = m_Player.FindAction("Enter Wormhole", throwIfNotFound: true);
// UI
m_UI = asset.FindActionMap("UI", throwIfNotFound: true);
m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true);
@ -1007,8 +1006,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
m_Global_ZoneMap = m_Global.FindAction("Zone Map", throwIfNotFound: true);
m_Global_GalaxyMap = m_Global.FindAction("Galaxy Map", throwIfNotFound: true);
m_Global_Inventory = m_Global.FindAction("Inventory", throwIfNotFound: true);
m_Global_Dock = m_Global.FindAction("Dock", throwIfNotFound: true);
m_Global_MainMenu = m_Global.FindAction("Main Menu", throwIfNotFound: true);
m_Global_InputScreen = m_Global.FindAction("Input Screen", throwIfNotFound: true);
m_Global_Interact = m_Global.FindAction("Interact", throwIfNotFound: true);
}
public void Dispose()
@ -1071,7 +1071,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
private readonly InputAction m_Player_Ping;
private readonly InputAction m_Player_HideUI;
private readonly InputAction m_Player_TractorBeam;
private readonly InputAction m_Player_EnterWormhole;
public struct PlayerActions
{
private @AetheriaInput m_Wrapper;
@ -1089,7 +1088,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
public InputAction @Ping => m_Wrapper.m_Player_Ping;
public InputAction @HideUI => m_Wrapper.m_Player_HideUI;
public InputAction @TractorBeam => m_Wrapper.m_Player_TractorBeam;
public InputAction @EnterWormhole => m_Wrapper.m_Player_EnterWormhole;
public InputActionMap Get() { return m_Wrapper.m_Player; }
public void Enable() { Get().Enable(); }
public void Disable() { Get().Disable(); }
@ -1138,9 +1136,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
@TractorBeam.started -= m_Wrapper.m_PlayerActionsCallbackInterface.OnTractorBeam;
@TractorBeam.performed -= m_Wrapper.m_PlayerActionsCallbackInterface.OnTractorBeam;
@TractorBeam.canceled -= m_Wrapper.m_PlayerActionsCallbackInterface.OnTractorBeam;
@EnterWormhole.started -= m_Wrapper.m_PlayerActionsCallbackInterface.OnEnterWormhole;
@EnterWormhole.performed -= m_Wrapper.m_PlayerActionsCallbackInterface.OnEnterWormhole;
@EnterWormhole.canceled -= m_Wrapper.m_PlayerActionsCallbackInterface.OnEnterWormhole;
}
m_Wrapper.m_PlayerActionsCallbackInterface = instance;
if (instance != null)
@ -1184,9 +1179,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
@TractorBeam.started += instance.OnTractorBeam;
@TractorBeam.performed += instance.OnTractorBeam;
@TractorBeam.canceled += instance.OnTractorBeam;
@EnterWormhole.started += instance.OnEnterWormhole;
@EnterWormhole.performed += instance.OnEnterWormhole;
@EnterWormhole.canceled += instance.OnEnterWormhole;
}
}
}
@ -1295,8 +1287,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
private readonly InputAction m_Global_ZoneMap;
private readonly InputAction m_Global_GalaxyMap;
private readonly InputAction m_Global_Inventory;
private readonly InputAction m_Global_Dock;
private readonly InputAction m_Global_MainMenu;
private readonly InputAction m_Global_InputScreen;
private readonly InputAction m_Global_Interact;
public struct GlobalActions
{
private @AetheriaInput m_Wrapper;
@ -1304,8 +1297,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
public InputAction @ZoneMap => m_Wrapper.m_Global_ZoneMap;
public InputAction @GalaxyMap => m_Wrapper.m_Global_GalaxyMap;
public InputAction @Inventory => m_Wrapper.m_Global_Inventory;
public InputAction @Dock => m_Wrapper.m_Global_Dock;
public InputAction @MainMenu => m_Wrapper.m_Global_MainMenu;
public InputAction @InputScreen => m_Wrapper.m_Global_InputScreen;
public InputAction @Interact => m_Wrapper.m_Global_Interact;
public InputActionMap Get() { return m_Wrapper.m_Global; }
public void Enable() { Get().Enable(); }
public void Disable() { Get().Disable(); }
@ -1324,12 +1318,15 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
@Inventory.started -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInventory;
@Inventory.performed -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInventory;
@Inventory.canceled -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInventory;
@Dock.started -= m_Wrapper.m_GlobalActionsCallbackInterface.OnDock;
@Dock.performed -= m_Wrapper.m_GlobalActionsCallbackInterface.OnDock;
@Dock.canceled -= m_Wrapper.m_GlobalActionsCallbackInterface.OnDock;
@MainMenu.started -= m_Wrapper.m_GlobalActionsCallbackInterface.OnMainMenu;
@MainMenu.performed -= m_Wrapper.m_GlobalActionsCallbackInterface.OnMainMenu;
@MainMenu.canceled -= m_Wrapper.m_GlobalActionsCallbackInterface.OnMainMenu;
@InputScreen.started -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInputScreen;
@InputScreen.performed -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInputScreen;
@InputScreen.canceled -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInputScreen;
@Interact.started -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInteract;
@Interact.performed -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInteract;
@Interact.canceled -= m_Wrapper.m_GlobalActionsCallbackInterface.OnInteract;
}
m_Wrapper.m_GlobalActionsCallbackInterface = instance;
if (instance != null)
@ -1343,12 +1340,15 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
@Inventory.started += instance.OnInventory;
@Inventory.performed += instance.OnInventory;
@Inventory.canceled += instance.OnInventory;
@Dock.started += instance.OnDock;
@Dock.performed += instance.OnDock;
@Dock.canceled += instance.OnDock;
@MainMenu.started += instance.OnMainMenu;
@MainMenu.performed += instance.OnMainMenu;
@MainMenu.canceled += instance.OnMainMenu;
@InputScreen.started += instance.OnInputScreen;
@InputScreen.performed += instance.OnInputScreen;
@InputScreen.canceled += instance.OnInputScreen;
@Interact.started += instance.OnInteract;
@Interact.performed += instance.OnInteract;
@Interact.canceled += instance.OnInteract;
}
}
}
@ -1395,7 +1395,6 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
void OnPing(InputAction.CallbackContext context);
void OnHideUI(InputAction.CallbackContext context);
void OnTractorBeam(InputAction.CallbackContext context);
void OnEnterWormhole(InputAction.CallbackContext context);
}
public interface IUIActions
{
@ -1414,7 +1413,8 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
void OnZoneMap(InputAction.CallbackContext context);
void OnGalaxyMap(InputAction.CallbackContext context);
void OnInventory(InputAction.CallbackContext context);
void OnDock(InputAction.CallbackContext context);
void OnMainMenu(InputAction.CallbackContext context);
void OnInputScreen(InputAction.CallbackContext context);
void OnInteract(InputAction.CallbackContext context);
}
}

View file

@ -313,7 +313,7 @@ public class ActionGameManager : MonoBehaviour
Input.Global.GalaxyMap.performed += context => ToggleMenuTab(MenuTab.Galaxy);
Input.Global.Dock.performed += context =>
Input.Global.Interact.performed += context =>
{
if (EventSystem.current.currentSelectedGameObject != null && EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>() != null) return;
if (MainMenu.gameObject.activeSelf) return;
@ -325,21 +325,20 @@ public class ActionGameManager : MonoBehaviour
Dialog.Show();
Dialog.MoveToCursor();
}
else if (CurrentEntity.Parent == null) Dock();
else if (CurrentEntity.Parent == null)
{
foreach (var wormhole in ZoneRenderer.WormholeInstances.Keys)
{
if (!(length(wormhole.Position - CurrentEntity.Position.xz) < Settings.GameplaySettings.WormholeExitRadius)) continue;
EnterWormhole(wormhole);
}
Dock();
}
else Undock();
};
Input.Global.MainMenu.performed += context => ToggleMainMenu();
Input.Player.EnterWormhole.performed += context =>
{
foreach (var wormhole in ZoneRenderer.WormholeInstances.Keys)
{
if (!(length(wormhole.Position - CurrentEntity.Position.xz) < Settings.GameplaySettings.WormholeExitRadius)) continue;
EnterWormhole(wormhole);
}
};
Input.Player.HideUI.performed += context =>
{
_uiHidden = !_uiHidden;
@ -617,12 +616,14 @@ public class ActionGameManager : MonoBehaviour
public void EnablePlayerInput()
{
Cursor.lockState = CursorLockMode.Locked;
Input.Player.Enable();
foreach (var a in _actionBarActions) a.Enable();
}
public void DisablePlayerInput()
{
Cursor.lockState = CursorLockMode.None;
Input.Player.Disable();
foreach (var a in _actionBarActions) a.Disable();
}
@ -704,9 +705,10 @@ public class ActionGameManager : MonoBehaviour
}
else
{
GameplayUI.gameObject.SetActive(true);
EnablePlayerInput();
Cursor.lockState = CursorLockMode.Locked;
UpdatePlayerPanel();
UpdateTargetPanel(CurrentEntity.Target.Value);
GameplayUI.gameObject.SetActive(true);
}
}
else
@ -722,7 +724,6 @@ public class ActionGameManager : MonoBehaviour
else
{
GameplayUI.gameObject.SetActive(false);
Cursor.lockState = CursorLockMode.None;
DisablePlayerInput();
}
}
@ -734,20 +735,17 @@ public class ActionGameManager : MonoBehaviour
if (MainMenu.gameObject.activeSelf) return;
if (Menu.gameObject.activeSelf && Menu.CurrentTab == tab)
{
Cursor.lockState = CursorLockMode.Locked;
Menu.gameObject.SetActive(false);
if (CurrentEntity != null && CurrentEntity.Parent == null)
{
EnablePlayerInput();
UpdatePlayerPanel();
UpdateTargetPanel(CurrentEntity.Target.Value);
GameplayUI.gameObject.SetActive(true);
SchematicDisplay.ShowShip(CurrentEntity);
ShipPanel.Display(CurrentEntity, true);
}
return;
}
Cursor.lockState = CursorLockMode.None;
DisablePlayerInput();
Menu.ShowTab(tab);
GameplayUI.gameObject.SetActive(false);
@ -852,7 +850,6 @@ public class ActionGameManager : MonoBehaviour
}
}
}
AkSoundEngine.PostEvent("Dock_Fail", gameObject);
}
private void DoDock(Entity entity, EquippedDockingBay dockingBay)
@ -994,8 +991,7 @@ public class ActionGameManager : MonoBehaviour
subscription.Dispose();
_targetSubscriptions.Clear();
TargetIndicator.gameObject.SetActive(CurrentEntity.Target.Value != null);
TargetShipPanel.gameObject.SetActive(target != null);
UpdateTargetPanel(target);
if (target != null)
{
if (target.Shield != null)
@ -1010,8 +1006,6 @@ public class ActionGameManager : MonoBehaviour
TargetShieldsIcon.color = NoShieldColor;
TargetShieldsIcon.sprite = NoShieldIcon;
}
TargetShipPanel.Display(target, true);
TargetSchematicDisplay.ShowShip(target, CurrentEntity);
// Subscribe to incoming hits from the player ship to display the hit marker
_targetSubscriptions.Add(target.IncomingHit.Where(e => e == CurrentEntity).Subscribe(_ =>
@ -1050,6 +1044,23 @@ public class ActionGameManager : MonoBehaviour
}).ToArray();
}
private void UpdatePlayerPanel()
{
ShipPanel.Display(CurrentEntity, true);
SchematicDisplay.ShowShip(CurrentEntity);
}
private void UpdateTargetPanel(Entity target)
{
TargetIndicator.gameObject.SetActive(target != null);
TargetShipPanel.gameObject.SetActive(target != null);
if (target != null)
{
TargetShipPanel.Display(target, true);
TargetSchematicDisplay.ShowShip(target, CurrentEntity);
}
}
private void Die(CauseOfDeath cause)
{
var deathTime = Time.time;

View file

@ -3,19 +3,19 @@ using System.Collections.Generic;
using System.Globalization;
using MessagePack;
[MessagePackObject, Serializable]
[MessagePackObject]
public class PlayerSettings
{
[Key(0)] public string Name = "Anonymous";
[Key(1)] public SavedGame SavedRun;
[Key(2)] public TemperatureUnit TemperatureUnit = TemperatureUnit.Celsius;
[Key(3)] public int SignificantDigits = 3;
[Key(4)] public bool TutorialPassed;
[Key(5)] public Dictionary<string, string> HashedStoryFiles = new Dictionary<string, string>();
[Key(2)] public bool TutorialPassed;
[Key(3)] public Dictionary<string, string> HashedStoryFiles = new Dictionary<string, string>();
[Key(4)] public PlayerGameplaySettings GameplaySettings;
[Key(5)] public PlayerInputSettings InputSettings;
public string FormatTemperature(float t)
{
return TemperatureUnit switch
return GameplaySettings.TemperatureUnit switch
{
TemperatureUnit.Kelvin => $"{Format(t)}°K",
TemperatureUnit.Celsius => $"{Format(t - 273.15f)}°C",
@ -27,7 +27,7 @@ public class PlayerSettings
public float ParseTemperature(string s)
{
var t = float.Parse(s);
return TemperatureUnit switch
return GameplaySettings.TemperatureUnit switch
{
TemperatureUnit.Kelvin => t,
TemperatureUnit.Celsius => t + 273.15f,
@ -39,7 +39,7 @@ public class PlayerSettings
public string Format(float d)
{
var magnitude = d == 0.0f ? 0 : (int)Math.Floor(Math.Log10(Math.Abs(d))) + 1;
var digits = SignificantDigits;
var digits = GameplaySettings.SignificantDigits;
digits -= magnitude;
if (digits < 0)
digits = 0;
@ -47,4 +47,16 @@ public class PlayerSettings
var dec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
return strdec.Contains(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator) ? strdec.TrimEnd('0').TrimEnd(dec) : strdec;
}
}
public class PlayerGameplaySettings
{
[Key(0)] public TemperatureUnit TemperatureUnit = TemperatureUnit.Celsius;
[Key(1)] public int SignificantDigits = 3;
}
public class PlayerInputSettings
{
[Key(0)] public Dictionary<string, string> InputActionMap = new Dictionary<string, string>();
[Key(1)] public bool FiveButtonMouse;
}

View file

@ -221,12 +221,12 @@ public class MainMenu : MonoBehaviour
() => ActionGameManager.PlayerSettings.Name,
s => ActionGameManager.PlayerSettings.Name = s);
_nextMenu.panel.AddField("Temperature Unit",
() => (int) ActionGameManager.PlayerSettings.TemperatureUnit,
i => ActionGameManager.PlayerSettings.TemperatureUnit = (TemperatureUnit) i,
() => (int) ActionGameManager.PlayerSettings.GameplaySettings.TemperatureUnit,
i => ActionGameManager.PlayerSettings.GameplaySettings.TemperatureUnit = (TemperatureUnit) i,
Enum.GetNames(typeof(TemperatureUnit)));
_nextMenu.panel.AddField("Significant Digits",
() => ActionGameManager.PlayerSettings.SignificantDigits,
i => ActionGameManager.PlayerSettings.SignificantDigits = i);
() => ActionGameManager.PlayerSettings.GameplaySettings.SignificantDigits,
i => ActionGameManager.PlayerSettings.GameplaySettings.SignificantDigits = i);
_nextMenu.panel.AddButton("Back",
() =>
{