Archived
Private
Public Access
1
0

Initial commit

This commit is contained in:
2022-09-04 12:45:01 +02:00
commit f4a01d6a69
11601 changed files with 4206660 additions and 0 deletions

74
C#/DigiSim/Logic/Wire.cs Normal file
View File

@@ -0,0 +1,74 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace DigiSim.Logic {
public class Wire {
public Gate Site1 { get; set; }
public Gate Site2 { get; set; }
public int OutputIndex { get; set; }
public int InputIndex { get; set; }
public bool IsPowered { get; set; }
public Line Connection { get; }
public Wire() {
Connection = new Line();
Window.Board.Children.Add(Connection);
}
public void Update() {
if (Site1 == null || Site2 == null) return;
Shape site1 = Site1.OutputShapes[OutputIndex];
Shape site2 = Site2.InputShapes[InputIndex];
Point p1 = new Point(Canvas.GetLeft(site1) + site1.Width / 2,
Canvas.GetTop(site1) + site1.Height / 2);
Point p2 = new Point(Canvas.GetLeft(site2) + site2.Width / 2,
Canvas.GetTop(site2) + site2.Height / 2);
Connection.Stroke = IsPowered ? Gate.FromHex(Window.PoweredColor) : Gate.FromHex(Window.FillColor);
Connection.StrokeThickness = 1;
Connection.X1 = p1.X;
Connection.X2 = p2.X;
Connection.Y1 = p1.Y;
Connection.Y2 = p2.Y;
}
public void ConnectShapeToPoint(Shape shape, Point point) {
Point p1 = new Point(Canvas.GetLeft(shape) + shape.Width / 2,
Canvas.GetTop(shape) + shape.Height / 2);
Connection.Stroke = Gate.FromHex(Window.FillColor);
Connection.StrokeThickness = 1;
Connection.X1 = p1.X;
Connection.X2 = point.X;
Connection.Y1 = p1.Y;
Connection.Y2 = point.Y;
}
public void Delete() {
Window.Board.Children.Remove(Connection);
if (Site1 != null) {
if (!Site1.IsDeleted) {
Site1.ConnectedOutputs[OutputIndex] = new Wire();
Site1.Update(Site1);
}
}
if (Site2 != null) {
if (!Site2.IsDeleted) {
Site2.ConnectedInputs[InputIndex] = new Wire();
Site2.Update(Site2);
}
}
}
}
}