Beispiel #1
0
 public override void Process()
 {
     base.Process();
     if (latched)
     {
         return;
     }
     output.SetValue(input.value);
     if (showDebug)
     {
         Debug.Log(base.name + " Latch Setting " + input.value);
     }
     if (latch.value > 0.5f)
     {
         if (showDebug)
         {
             Debug.Log(base.name + " Latch True ");
         }
         latched = true;
     }
 }
Beispiel #2
0
        private void FixedUpdate()
        {
            float xAngle = joint.GetXAngle(invInitialLocalRotation);
            float num;

            for (num = xAngle - currentAngle; num < -180f; num += 360f)
            {
            }
            while (num > 180f)
            {
                num -= 360f;
            }
            currentAngle += num;
            if (num == 0f)
            {
                return;
            }
            if (currentAngle < fromAngle + 60f)
            {
                if (limitJoint == null)
                {
                    limitJoint = CreateLimitJoint(fromAngle - currentAngle, Mathf.Min(fromAngle - currentAngle + 120f, toAngle - currentAngle));
                }
            }
            else if (currentAngle > toAngle - 60f)
            {
                if (limitJoint == null)
                {
                    limitJoint = CreateLimitJoint(Mathf.Max(toAngle - currentAngle - 120f, fromAngle - currentAngle), toAngle - currentAngle);
                }
            }
            else if (limitJoint != null && currentAngle > fromAngle + 90f && currentAngle < toAngle - 90f)
            {
                Object.Destroy(limitJoint);
            }
            currentAngle = Mathf.Clamp(currentAngle, fromAngle, toAngle);
            currentValue = Mathf.InverseLerp(fromAngle, toAngle, currentAngle);
            output.SetValue((!signedOutput) ? currentValue : Mathf.Lerp(-1f, 1f, currentValue));
        }
Beispiel #3
0
 public override void Process()
 {
     output.SetValue(in1.value * in2.value);
 }
 private void RightJointSignal()
 {
     rightJointBroken.SetValue(1f);
 }
 private void LeftJointSignal()
 {
     leftJointBroken.SetValue(1f);
 }
 public override void Process()
 {
     output.SetValue(Mathf.Clamp(input.value, min, max));
 }
        private void Update()
        {
            for (int i = 0; i < 10; i++)
            {
                if (!bowlingPins[i].IsInPlace())
                {
                    pinsDownOutputs[i].SetValue(1f);
                }
                else
                {
                    pinsDownOutputs[i].SetValue(0f);
                }
            }
            switch (currentState)
            {
            case BowlingState.BowlingState_Complete:
                break;

            case BowlingState.BowlingState_InitialSetup:
                initialSetupTimer += Time.deltaTime;
                if (initialSetupTimer >= 3f)
                {
                    for (int n = 0; n < 10; n++)
                    {
                        bowlingPins[n].Show();
                    }
                    inSpareMode = false;
                    spareMode.SetValue(0f);
                    currentState = BowlingState.BowlingState_Ready;
                }
                break;

            case BowlingState.BowlingState_Ready:
                if (ballInPinsArea.value > 0.5f)
                {
                    currentState       = BowlingState.BowlingState_BallInPins;
                    pinsKnockDownTimer = 0f;
                }
                break;

            case BowlingState.BowlingState_BallInPins:
            {
                pinsKnockDownTimer += Time.deltaTime;
                pinsDown            = 0;
                for (int l = 0; l < 10; l++)
                {
                    if (!bowlingPins[l].IsInPlace())
                    {
                        pinsDown++;
                    }
                }
                if (pinsDown == 10)
                {
                    for (int m = 0; m < 10; m++)
                    {
                        bowlingPins[m].Hide();
                    }
                    bowlingComplete.SetValue(1f);
                    currentState = BowlingState.BowlingState_Complete;
                }
                else if (pinsKnockDownTimer >= 10f)
                {
                    currentState = BowlingState.BowlingState_TidyingPins;
                }
                break;
            }

            case BowlingState.BowlingState_TidyingPins:
                if (inSpareMode)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        bowlingPins[j].Show();
                    }
                    inSpareMode = false;
                    spareMode.SetValue(0f);
                }
                else
                {
                    for (int k = 0; k < 10; k++)
                    {
                        if (!bowlingPins[k].IsInPlace())
                        {
                            bowlingPins[k].Hide();
                        }
                    }
                    if (pinsDown != 0)
                    {
                        inSpareMode = true;
                        spareMode.SetValue(1f);
                    }
                }
                currentState = BowlingState.BowlingState_Ready;
                break;
            }
        }
Beispiel #8
0
        private void FixedUpdate()
        {
            if (identity != null && (ReplayRecorder.isPlaying || NetGame.isClient))
            {
                return;
            }
            disableMotorTime -= Time.fixedDeltaTime;
            float num  = position;
            float num2 = direction;
            float num3 = power.value / neededVoltage;

            if (Mathf.Abs(num3) < 0.9f)
            {
                num3 = 0f;
            }
            if (joint != null)
            {
                if (unpoweredWithoutVoltage)
                {
                    joint.maxForce = ((!(num3 > 0f)) ? 0f : maxForce);
                }
                if (mode == ServoMode.Position)
                {
                    float num4 = Mathf.Lerp(joint.minValue, joint.maxValue, (!signedInput) ? input.value : ((input.value + 1f) / 2f));
                    float num5 = num4 - num;
                    float num6 = (num5 > 0f) ? 1 : ((num5 < 0f) ? (-1) : 0);
                    speed     = Mathf.MoveTowards(speed, num6 * joint.maxSpeed, joint.maxAcceleration * Time.fixedDeltaTime);
                    position += speed * num3 * Time.fixedDeltaTime;
                    if (speed < 0f && position < num4 && num > num4)
                    {
                        position = num4;
                        speed    = 0f;
                    }
                    if (speed > 0f && position > num4 && num < num4)
                    {
                        position = num4;
                        speed    = 0f;
                    }
                    direction = Mathf.Sign(position - num);
                    if (direction * num2 < 0f)
                    {
                        disableMotorTime = reverseDelay;
                    }
                    motor.SetValue((num3 > 0f && disableMotorTime <= 0f && Mathf.Abs(num - num4) >= joint.tensionDist) ? 1 : 0);
                }
                else
                {
                    if (joint != null)
                    {
                        if (speed * input.value < 0f)
                        {
                            speed = 0f;
                        }
                        speed     = Mathf.MoveTowards(speed, input.value * joint.maxSpeed, joint.maxAcceleration * Time.fixedDeltaTime);
                        position += speed * num3 * Time.fixedDeltaTime;
                        direction = Mathf.Sign(position - num);
                        if (direction * num2 < 0f)
                        {
                            disableMotorTime = reverseDelay;
                        }
                        if (mode == ServoMode.Speed)
                        {
                            if (reachedEnd == -1f && input.value * num3 > 0f)
                            {
                                reachedEnd = 0f;
                            }
                            else if (reachedEnd == 1f && input.value * num3 < 0f)
                            {
                                reachedEnd = 0f;
                            }
                            else if (position < joint.minValue + joint.tensionDist && input.value * num3 <= 0f)
                            {
                                reachedEnd = -1f;
                            }
                            else if (position > joint.maxValue - joint.tensionDist && input.value * num3 >= 0f)
                            {
                                reachedEnd = 1f;
                            }
                        }
                    }
                    motor.SetValue((Mathf.Abs(num3) > 0f && disableMotorTime <= 0f && reachedEnd == 0f && input.value != 0f) ? 1 : 0);
                }
            }
            else if (showDebug)
            {
                Debug.Log(base.name + " There is nothing set within the joint var ");
            }
            if (num != position || oldpower != num3)
            {
                if (joint != null)
                {
                    velocity.SetValue(Mathf.Clamp01(Mathf.Abs(position - num) / Time.fixedDeltaTime / joint.maxSpeed));
                    if (joint.isKinematic || !joint.useSpring)
                    {
                        if (mode == ServoMode.Speed)
                        {
                            position = Mathf.Clamp(position, joint.minValue, joint.maxValue);
                        }
                        SetPosition(position);
                    }
                    else
                    {
                        actualPosition = GetActualPosition();
                        position       = Mathf.Clamp(position, actualPosition - joint.tensionDist, actualPosition + joint.tensionDist);
                        float spring = joint.maxForce / joint.tensionDist * Mathf.Abs(num3);
                        float damper = joint.maxForce / joint.maxSpeed * Mathf.Abs(num3);
                        SetJoint(position, spring, damper);
                    }
                }
                else if (showDebug)
                {
                    Debug.Log(base.name + " There is nothing set within the joint var ");
                }
            }
            else
            {
                velocity.SetValue(0f);
            }
            oldpower = num3;
        }
Beispiel #9
0
 private void SafeSetValue(NodeOutput output, float value)
 {
     output?.SetValue(value);
 }
 private void Update()
 {
     distance.SetValue((transform1.position - transform2.position).magnitude);
 }
 public override void Process()
 {
     output.SetValue(0f - input.value);
 }
Beispiel #12
0
        private void FixedUpdate()
        {
            if (ReplayRecorder.isPlaying || NetGame.isClient)
            {
                return;
            }
            disableMotorTime -= Time.fixedDeltaTime;
            float num  = position;
            float num2 = direction;

            if (mode == ServoMode.Position)
            {
                float num3 = Mathf.Lerp(minValue, maxValue, (!signedInput) ? input.value : ((input.value + 1f) / 2f));
                speed     = Mathf.MoveTowards(speed, Mathf.Sign(num3 - num) * maxSpeed, maxAcceleration * Time.fixedDeltaTime);
                position += speed * power.value * Time.fixedDeltaTime;
                if (speed < 0f && position < num3 && num >= num3)
                {
                    position = num3;
                }
                if (speed > 0f && position > num3 && num <= num3)
                {
                    position = num3;
                }
                direction = Mathf.Sign(position - num);
                if (direction * num2 < 0f)
                {
                    disableMotorTime = reverseDelay;
                }
                motor.SetValue((power.value > 0f && disableMotorTime <= 0f && Mathf.Abs(num - num3) >= tensionDist) ? 1 : 0);
            }
            else
            {
                if (speed * input.value < 0f)
                {
                    speed = 0f;
                }
                speed     = Mathf.MoveTowards(speed, input.value * maxSpeed, maxAcceleration * Time.fixedDeltaTime);
                position += speed * power.value * Time.fixedDeltaTime;
                direction = Mathf.Sign(position - num);
                if (direction * num2 < 0f)
                {
                    disableMotorTime = reverseDelay;
                }
                if (mode == ServoMode.Speed)
                {
                    if (reachedEnd == -1f && input.value > 0f)
                    {
                        reachedEnd = 0f;
                    }
                    else if (reachedEnd == 1f && input.value < 0f)
                    {
                        reachedEnd = 0f;
                    }
                    else if (position < minValue + tensionDist && input.value < 0f)
                    {
                        reachedEnd = -1f;
                    }
                    else if (position > maxValue - tensionDist && input.value > 0f)
                    {
                        reachedEnd = 1f;
                    }
                }
                motor.SetValue((power.value > 0f && disableMotorTime <= 0f && reachedEnd == 0f && input.value != 0f) ? 1 : 0);
            }
            if (num != position)
            {
                velocity.SetValue(Mathf.Clamp01(Mathf.Abs(position - num) / Time.fixedDeltaTime / maxSpeed));
                if (isKinematic)
                {
                    if (mode != ServoMode.SpeedIgnoreLimit)
                    {
                        position = Mathf.Clamp(position, minValue, maxValue);
                    }
                    SetStatic(position);
                }
                else
                {
                    actualPosition = GetActualPosition();
                    position       = Mathf.Clamp(position, actualPosition - tensionDist, actualPosition + tensionDist);
                    float spring = maxForce / tensionDist * power.value;
                    float damper = maxForce / maxSpeed * power.value;
                    SetJoint(position, spring, damper);
                }
            }
            else
            {
                velocity.SetValue(0f);
            }
        }
 private void OnCollisionEnter(Collision collision)
 {
     output.SetValue(1f);
 }
        public override void Process()
        {
            float num = 0f;

            switch (operation)
            {
            case SignalBoolOperation.And:
            {
                num = 1f;
                for (int n = 0; n < inputs.Length; n++)
                {
                    if (Mathf.Abs(inputs[n].value) < 0.5f)
                    {
                        num = 0f;
                    }
                }
                break;
            }

            case SignalBoolOperation.Or:
            {
                num = 0f;
                for (int j = 0; j < inputs.Length; j++)
                {
                    if (Mathf.Abs(inputs[j].value) >= 0.5f)
                    {
                        num = 1f;
                    }
                }
                break;
            }

            case SignalBoolOperation.Xor:
            {
                num = 0f;
                for (int l = 0; l < inputs.Length; l++)
                {
                    if (Mathf.Abs(inputs[l].value) >= 0.5f)
                    {
                        num = 1f - num;
                    }
                }
                break;
            }

            case SignalBoolOperation.Sum:
            {
                num = 0f;
                for (int num2 = 0; num2 < inputs.Length; num2++)
                {
                    num += inputs[num2].value;
                }
                break;
            }

            case SignalBoolOperation.Mul:
            {
                num = 1f;
                for (int m = 0; m < inputs.Length; m++)
                {
                    num *= inputs[m].value;
                }
                break;
            }

            case SignalBoolOperation.Max:
            {
                num = float.NegativeInfinity;
                for (int k = 0; k < inputs.Length; k++)
                {
                    num = Mathf.Max(num, inputs[k].value);
                }
                break;
            }

            case SignalBoolOperation.Min:
            {
                num = float.PositiveInfinity;
                for (int i = 0; i < inputs.Length; i++)
                {
                    num = Mathf.Min(num, inputs[i].value);
                }
                break;
            }
            }
            if (invert)
            {
                output.SetValue(1f - num);
            }
            else
            {
                output.SetValue(num);
            }
        }
Beispiel #15
0
        private void FixedUpdate()
        {
            if (joint == null)
            {
                return;
            }
            float jointAngle = GetJointAngle();
            bool  flag       = GrabManager.IsGrabbedAny(joint.gameObject);

            if (!grabbed && flag)
            {
                grabbedInGear = gear;
            }
            grabbed = flag;
            if (grabbed)
            {
                if (jointAngle <= (reverseAngle + neutralAngle) / 2f)
                {
                    gear = -1;
                }
                else if (jointAngle <= (neutralAngle + firstAngle) / 2f)
                {
                    gear = 0;
                }
                else if (jointAngle <= (firstAngle + secondAngle) / 2f)
                {
                    gear = 1;
                }
                else
                {
                    gear = 2;
                }
                JointLimits limits = joint.limits;
                limits.min = reverseAngle;
                if (grabbedInGear < 1)
                {
                    if (gear == 2)
                    {
                        gear = 1;
                    }
                    limits.max = firstAngle;
                }
                else
                {
                    limits.max = secondAngle;
                }
                joint.SetLimits(limits);
                if (steeringWheel != null)
                {
                    JointSpring spring = steeringWheel.spring;
                    spring.spring        = ((gear != 2) ? centeringSpring1st : centeringSpring2st);
                    steeringWheel.spring = spring;
                }
            }
            float       value   = 0f;
            JointSpring spring2 = joint.spring;

            switch (gear)
            {
            case -1:
                spring2.targetPosition = reverseAngle;
                value = reverseValue;
                break;

            case 0:
                spring2.targetPosition = neutralAngle;
                value = 0f;
                break;

            case 1:
                spring2.targetPosition = firstAngle;
                value = firstValue;
                break;

            case 2:
                spring2.targetPosition = secondAngle;
                value = secondValue;
                break;
            }
            joint.SetSpring(spring2);
            output.SetValue(value);
        }