mux / demux SVG
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user