Пример #1
0
        /// <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);
        }
Пример #2
0
 /// <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);
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
 /// <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;
            }
        }
Пример #6
0
        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;
            }
        }
Пример #7
0
 /// <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);
 }