Aetheria/Assets/InputDisplayLayout.cs
Reinier Vens 2c4520000b Demo Hotfixes
Replaced Unity TAA with PlayDead TAA
Custom keyboard layout test scene
Adjusted Aetheric Drive VFX to be more subtle
Reworked stardust VFX to reduce flickering artifacts
Added Action Bar & weapon groups saving/loading
Implemented security levels and faction safe zone visualization
Improved station placement (now include defensive turrets)
2021-05-02 20:59:45 +01:00

111 lines
4.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using UnityEngine;
using UnityEngine.UI;
public class InputDisplayLayout : MonoBehaviour
{
public TextAsset LayoutFile;
public Prototype RowPrototype;
public Prototype RowSpacerPrototype;
public int KeySize = 64;
void Start()
{
var nextWidth = 1f;
var nextHeight = 1f;
var reader = new JsonTextReader(new StringReader(LayoutFile.text));
reader.Read();
if (reader.TokenType != JsonToken.StartArray)
{
Debug.Log($"Unexpected JSON format in line {reader.LineNumber}:{reader.LinePosition}");
return;
}
while(reader.Read() && reader.TokenType != JsonToken.EndArray)
{
if (reader.TokenType != JsonToken.StartArray)
{
Debug.Log($"Unexpected JSON format in line {reader.LineNumber}:{reader.LinePosition}");
return;
}
var row = RowPrototype.Instantiate<InputDisplayRow>();
while (reader.Read() && reader.TokenType != JsonToken.EndArray)
{
switch (reader.TokenType)
{
case JsonToken.StartObject:
while(reader.Read() && reader.TokenType != JsonToken.EndObject)
{
switch (reader.Value.ToString())
{
case "a": break;
case "w":
nextWidth = (float) (reader.ReadAsDouble() ?? 1.0);
break;
case "h":
nextHeight = (float) (reader.ReadAsDouble() ?? 1.0);
break;
case "y":
RowSpacerPrototype.Instantiate<LayoutElement>().preferredHeight = KeySize * (float) (reader.ReadAsDouble() ?? 0.0);
row.transform.SetAsLastSibling();
break;
case "x":
row.KeySpacerPrototype.Instantiate<LayoutElement>().preferredWidth = KeySize * (float) (reader.ReadAsDouble() ?? 0.0);
break;
}
}
break;
case JsonToken.String:
var key = row.KeyPrototype.Instantiate<InputDisplayKey>();
var v = reader.Value.ToString().Trim();
if (!string.IsNullOrEmpty(v))
{
var labels = v.Split('\n');
if (labels.Length == 2)
{
key.First.text = labels[1];
key.Second.text = labels[0];
}
else
{
key.First.text = v;
key.Second.text = "";
}
}
else
{
key.First.text = "";
key.Second.text = "";
}
key.LayoutElement.preferredHeight = KeySize;
key.LayoutElement.preferredWidth = KeySize * nextWidth;
nextWidth = 1f;
if (Math.Abs(nextHeight - 1f) > .01f)
{
key.Outline.rectTransform.anchorMin =
key.First.rectTransform.anchorMin =
key.Second.rectTransform.anchorMin =
key.Fill.rectTransform.anchorMin = Vector2.down * (nextHeight-1);
}
nextHeight = 1f;
break;
default:
Debug.Log($"Unexpected JSON format in line {reader.LineNumber}:{reader.LinePosition}");
return;
}
}
}
}
void Update()
{
}
}