mux / demux SVG

This commit is contained in:
klemek
2020-12-23 12:10:22 +01:00
parent d09b48f933
commit 809f90f3e8
20 changed files with 780 additions and 55 deletions
+5 -4
View File
@@ -61,13 +61,13 @@ namespace CompuLogic
public static void SetSortingLayerRecursive(this UnityEngine.Component obj, string sortingLayer)
{
if(obj.TryGetComponent<SpriteRenderer>(out var renderer))
if(obj.TryGetComponent<Renderer>(out var renderer))
{
renderer.SetSortingLayerRecursive(sortingLayer);
}
else
{
foreach (var subrenderer in obj.GetComponentsInChildren<SpriteRenderer>())
foreach (var subrenderer in obj.GetComponentsInChildren<Renderer>())
{
subrenderer.SetSortingLayerRecursive(sortingLayer);
}
@@ -75,9 +75,10 @@ namespace CompuLogic
}
public static void SetSortingLayerRecursive(this SpriteRenderer renderer, string sortingLayer)
public static void SetSortingLayerRecursive(this Renderer renderer, string sortingLayer)
{
foreach (var subrenderer in renderer.GetComponentsInChildren<SpriteRenderer>())
renderer.sortingLayerName = sortingLayer;
foreach (var subrenderer in renderer.GetComponentsInChildren<Renderer>())
{
if(subrenderer != renderer)
{
+1 -1
View File
@@ -48,7 +48,7 @@ namespace CompuLogic.Workspace
{
Text.text = Name;
var rect = Text.GetComponent<RectTransform>();
var rotate = (Mathf.Abs(Orientation.y) > Mathf.Epsilon && Name.Length > 1);
var rotate = Mathf.Abs(Orientation.y) > Mathf.Epsilon && Name.Length > 1 && !Name.Contains("\x305");
rect.localRotation = rotate ? Quaternion.AngleAxis(90f, Vector3.forward) : Quaternion.identity;
rect.localPosition = new Vector3(Orientation.x, Orientation.y, 0f) * -TextSpace;
if (!rotate && Mathf.Abs(Orientation.y) > Mathf.Epsilon)
@@ -68,7 +68,7 @@ namespace CompuLogic.Workspace
gate.UIName = string.IsNullOrEmpty(item.Name) ? gate.GateType.ToString() : item.Name;
var showAnchorNames = false;
var showAnchorNames = item.ShowNames;
if (string.IsNullOrEmpty(item.Skin))
{
@@ -91,7 +91,7 @@ namespace CompuLogic.Workspace
var anchor = Instantiate(inputAnchor.Big ? _bigAnchorPrefab : _anchorPrefab);
anchor.transform.parent = prefab.transform;
inputAnchor.ConfigAnchor(anchor);
anchor.ShowName = showAnchorNames;
anchor.ShowName = showAnchorNames || inputAnchor.ShowName;
anchor.IsInput = true;
}
}
@@ -103,7 +103,7 @@ namespace CompuLogic.Workspace
var anchor = Instantiate(outputAnchor.Big ? _bigAnchorPrefab : _anchorPrefab);
anchor.transform.parent = prefab.transform;
outputAnchor.ConfigAnchor(anchor);
anchor.ShowName = showAnchorNames;
anchor.ShowName = showAnchorNames || outputAnchor.ShowName;
}
}
@@ -143,6 +143,7 @@ namespace CompuLogic.Workspace
public int Width { get; set; }
public int Height { get; set; }
public string Class { get; set; }
public bool ShowNames { get; set; }
public List<string> Input { get; set; }
public List<string> Output { get; set; }
public List<GateBookItemAnchor> InputAnchors => Input.Select(i => i.Split(new char[0])).Select(GateBookItemAnchor.Get).ToList();
@@ -157,6 +158,7 @@ namespace CompuLogic.Workspace
public float Y { get; set; }
public string Orientation { get; set; }
public bool Big { get; set; }
public bool ShowName { get; set; }
public Vector2 OrientationV => new Vector2(
Orientation == "W" ? -1 : (Orientation == "E" ? 1 : 0),
Orientation == "N" ? 1 : (Orientation == "S" ? -1 : 0)
@@ -170,7 +172,8 @@ namespace CompuLogic.Workspace
X = float.Parse(i[1], CultureInfo.InvariantCulture.NumberFormat),
Y = float.Parse(i[2], CultureInfo.InvariantCulture.NumberFormat),
Orientation = i[3],
Big = i.Length > 4 && i[4].Equals("big"),
Big = i.Contains("big"),
ShowName = i.Contains("named")
};
}
@@ -331,17 +331,17 @@ namespace CompuLogic.Workspace.Gates
internal class MuxGate : StatelessGateDefinition
{
public override string[] Inputs { get; } = new string[] { "E", "S", "D0", "D1" };
public override string[] Inputs { get; } = new string[] { "E̅", "S", "D0", "D1" };
public override string[] Outputs { get; } = new string[] { "Y" };
internal override Func<InputState, OutputState> Function => (input) =>
{
var e = input[0];
var ne = input[0];
var s = input[1];
var d0 = input[2];
var d1 = input[3];
var y = e && (!s && d0 || s && d1);
var y = !ne && (!s && d0 || s && d1);
return new OutputState(y);
};
@@ -349,17 +349,17 @@ namespace CompuLogic.Workspace.Gates
internal class DemuxGate : StatelessGateDefinition
{
public override string[] Inputs { get; } = new string[] { "E", "S", "D" };
public override string[] Inputs { get; } = new string[] { "E̅", "S", "D" };
public override string[] Outputs { get; } = new string[] { "Y0", "Y1" };
internal override Func<InputState, OutputState> Function => (input) =>
{
var e = input[0];
var ne = input[0];
var s = input[1];
var d = input[2];
var y0 = e && !s && d;
var y1 = e && s && d;
var y0 = !ne && !s && d;
var y1 = !ne && s && d;
return new OutputState(y0, y1);
};
@@ -367,12 +367,12 @@ namespace CompuLogic.Workspace.Gates
internal class Mux2bGate : StatelessGateDefinition
{
public override string[] Inputs { get; } = new string[] { "E", "S0", "S1", "D0", "D1", "D2", "D3" };
public override string[] Inputs { get; } = new string[] { "E̅", "S0", "S1", "D0", "D1", "D2", "D3" };
public override string[] Outputs { get; } = new string[] { "Y" };
internal override Func<InputState, OutputState> Function => (input) =>
{
var e = input[0];
var ne = input[0];
var s0 = input[1];
var s1 = input[2];
var d0 = input[3];
@@ -380,7 +380,7 @@ namespace CompuLogic.Workspace.Gates
var d2 = input[5];
var d3 = input[6];
var y = e && (
var y = ne && (
!s0 && !s1 && d0 ||
s0 && !s1 && d1 ||
!s0 && s1 && d2 ||
@@ -393,20 +393,20 @@ namespace CompuLogic.Workspace.Gates
internal class Demux2bGate : StatelessGateDefinition
{
public override string[] Inputs { get; } = new string[] { "E", "S0", "S1", "D" };
public override string[] Inputs { get; } = new string[] { "E̅", "S0", "S1", "D" };
public override string[] Outputs { get; } = new string[] { "Y0", "Y1", "Y2", "Y3" };
internal override Func<InputState, OutputState> Function => (input) =>
{
var e = input[0];
var ne = input[0];
var s0 = input[1];
var s1 = input[2];
var d = input[3];
var y0 = e && !s0 && !s1 && d;
var y1 = e && s0 && !s1 && d;
var y2 = e && !s0 && s1 && d;
var y3 = e && s0 && s1 && d;
var y0 = !ne && !s0 && !s1 && d;
var y1 = !ne && s0 && !s1 && d;
var y2 = !ne && !s0 && s1 && d;
var y3 = !ne && s0 && s1 && d;
return new OutputState(y0, y1, y2, y3);
};