public override void ComputeOutput() { Defs.Connection outputState = Defs.Connection.HighImpedance; foreach (var pin in PinsList) { if (pin.Type == Defs.Pin.In) { if (pin.ParentConnection.State != Defs.Connection.HighImpedance) { if (outputState == Defs.Connection.HighImpedance) { outputState = pin.ParentConnection.State; } else { outputState ^= pin.ParentConnection.State; } } else { outputState = Defs.Connection.HighImpedance; } } } SetOutput(outputState); }
/// <summary> /// Negates output Signal /// </summary> /// <param name="outputState">Signal to negate</param> protected Defs.Connection NegateOutput(Defs.Connection outputState) { if (outputState == Defs.Connection.High) { return(outputState = Defs.Connection.Low); } else if (outputState == Defs.Connection.Low) { return(outputState = Defs.Connection.High); } return(Defs.Connection.HighImpedance); }
/// <summary> /// Sets computed output Signal /// </summary> /// <param name="outputState">Singal to set</param> protected void SetOutput(Defs.Connection outputState) { foreach (var pin in PinsList) { if (pin.Type == Defs.Pin.Out) { pin.ParentConnection.State = outputState; foreach (var wire in pin.ParentConnection.WiresList) { wire.CurrentTexture = (int)wire.Type + (2 * ((int)pin.ParentConnection.State + 1)); Engine.Harness.RefreshOutput(); } } } }