/// <summary> /// Bind the behavior. /// </summary> /// <param name="simulation">The simulation.</param> /// <param name="context">The context.</param> public override void Bind(Simulation simulation, BindingContext context) { base.Bind(simulation, context); var solver = State.Solver; BranchPtr = solver.GetRhsElement(BranchEq); Signal = new DelayedSignal(1, BaseParameters.Delay); }
/// <summary> /// Initializes a new instance of the <see cref="Time"/> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Time(IComponentBindingContext context) : base(context) { _time = context.GetState <ITimeSimulationState>(); _biasing = context.GetState <IBiasingSimulationState>(); _contPosNode = _biasing.Map[_biasing.GetSharedVariable(context.Nodes[2])]; _contNegNode = _biasing.Map[_biasing.GetSharedVariable(context.Nodes[3])]; _branchEq = _biasing.Map[Branch]; _elements = new ElementSet <double>(_biasing.Solver, null, new[] { _branchEq }); Signal = new DelayedSignal(1, Parameters.Delay); }
/// <summary> /// Bind the behavior. /// </summary> /// <param name="simulation">The simulation.</param> /// <param name="context">The context.</param> public override void Bind(Simulation simulation, BindingContext context) { base.Bind(simulation, context); var solver = ((BaseSimulation)simulation).RealState.Solver; Ibr1Ptr = solver.GetRhsElement(BranchEq1); Ibr2Ptr = solver.GetRhsElement(BranchEq2); Signals = new DelayedSignal(2, BaseParameters.Delay); }
/// <summary> /// Initializes a new instance of the <see cref="Time" /> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Time(IComponentBindingContext context) : base(context) { _time = context.GetState <ITimeSimulationState>(); _pos1 = BiasingState.Map[BiasingState.GetSharedVariable(context.Nodes[0])]; _neg1 = BiasingState.Map[BiasingState.GetSharedVariable(context.Nodes[1])]; _pos2 = BiasingState.Map[BiasingState.GetSharedVariable(context.Nodes[2])]; _neg2 = BiasingState.Map[BiasingState.GetSharedVariable(context.Nodes[3])]; _br1 = BiasingState.Map[Branch1]; _br2 = BiasingState.Map[Branch2]; _elements = new ElementSet <double>(BiasingState.Solver, null, new[] { _br1, _br2 }); Signals = new DelayedSignal(2, Parameters.Delay); }
public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f, float signalStrength = 1.0f) { switch (connection.Name) { case "signal_in": if (signalQueue.Count >= signalQueueSize) { return; } if (ResetWhenSignalReceived) { prevQueuedSignal = null; signalQueue.Clear(); } if (ResetWhenDifferentSignalReceived && signalQueue.Count > 0 && signalQueue.Peek().Signal != signal) { prevQueuedSignal = null; signalQueue.Clear(); } if (prevQueuedSignal != null && prevQueuedSignal.Signal == signal && MathUtils.NearlyEqual(prevQueuedSignal.SignalStrength, signalStrength) && ((prevQueuedSignal.SendTimer + prevQueuedSignal.SendDuration == delayTicks) || (prevQueuedSignal.SendTimer <= 0 && prevQueuedSignal.SendDuration > 0))) { prevQueuedSignal.SendDuration += 1; return; } prevQueuedSignal = new DelayedSignal(signal, signalStrength, delayTicks) { SendDuration = 1 }; signalQueue.Enqueue(prevQueuedSignal); break; } }
public override void ReceiveSignal(Signal signal, Connection connection) { switch (connection.Name) { case "signal_in": if (signalQueue.Count >= signalQueueSize) { return; } if (ResetWhenSignalReceived) { prevQueuedSignal = null; signalQueue.Clear(); } if (ResetWhenDifferentSignalReceived && signalQueue.Count > 0 && signalQueue.Peek().Signal.value != signal.value) { prevQueuedSignal = null; signalQueue.Clear(); } if (prevQueuedSignal != null && prevQueuedSignal.Signal.value == signal.value && MathUtils.NearlyEqual(prevQueuedSignal.Signal.strength, signal.strength) && ((prevQueuedSignal.SendTimer + prevQueuedSignal.SendDuration == delayTicks) || (prevQueuedSignal.SendTimer <= 0 && prevQueuedSignal.SendDuration > 0))) { prevQueuedSignal.SendDuration += 1; return; } prevQueuedSignal = new DelayedSignal(signal, delayTicks) { SendDuration = 1 }; signalQueue.Enqueue(prevQueuedSignal); break; } }
/// <summary> /// Creates all necessary states for the transient behavior. /// </summary> /// <param name="method">The integration method.</param> public void CreateStates(IntegrationMethod method) { Signal = new DelayedSignal(1, BaseParameters.Delay); }