Example #1
0
 private void UpdateCircuit(bool should_update_anim = true)
 {
     if ((UnityEngine.Object)attachedWire != (UnityEngine.Object)null)
     {
         if (switchedOn)
         {
             attachedWire.Connect();
         }
         else
         {
             attachedWire.Disconnect();
         }
     }
     if (should_update_anim && wasOn != switchedOn)
     {
         KBatchedAnimController component = GetComponent <KBatchedAnimController>();
         component.Play((!switchedOn) ? "on_pst" : "on_pre", KAnim.PlayMode.Once, 1f, 0f);
         component.Queue((!switchedOn) ? "off" : "on", KAnim.PlayMode.Once, 1f, 0f);
         Game.Instance.userMenu.Refresh(base.gameObject);
     }
     wasOn = switchedOn;
 }
Example #2
0
    void CheckWire(bool rightArm, float triggerValue, HingeJoint2D connector, CircleCollider2D col)
    {
        if (triggerValue > .5f && !connector.enabled)   // if trigger down
        // find all nearby things on connect layer
        {
            int count = Physics2D.OverlapCircleNonAlloc(col.transform.position, col.radius * col.transform.localScale.x, overlapArr, 1 << 8);

            // find closest object
            Collider2D closestOverlap = null;
            float      distance       = float.PositiveInfinity;
            for (int i = 0; i < count; i++)
            {
                if (overlapArr[i] == rightCol || overlapArr[i] == leftCol)
                {
                    continue;
                }
                float sqr = Vector2.SqrMagnitude(overlapArr[i].transform.position - col.transform.position);
                if (sqr < distance)
                {
                    distance       = sqr;
                    closestOverlap = overlapArr[i];
                }
            }

            // if found any object
            if (closestOverlap)
            {
                connector.enabled = true;
                Rigidbody2D closestRb = closestOverlap.GetComponent <Rigidbody2D>();

                wire.Connect(rightArm, closestOverlap);
                if (rightArm)
                {
                    rightMotorTime = 0.3f;
                }
                else
                {
                    leftMotorTime = 0.3f;
                }

                if (closestRb)
                {
                    connector.connectedBody = closestRb;
                }
                else
                {
                    connector.connectedAnchor = closestOverlap.transform.position;
                }
            }
        }
        else if (triggerValue <= .5f && connector.enabled)       // else disconnect if trigger isnt down
        {
            connector.connectedBody = null;
            connector.enabled       = false;

            // lock it but dont pop it (to combat electricity)
            // this doesnt do shit because arms are all rigidbodies too so f this (saving for later) love john, godbless
            //if (wire.powered) {
            //    Debug.Log("depower");
            //    float mag = rb2d.velocity.magnitude;
            //    mag = Mathf.Min(mag, 1.0f);
            //    rb2d.velocity = rb2d.velocity.normalized * mag;
            //}

            wire.Disconnect(rightArm);
        }
    }