Esempio n. 1
0
    bool StackGear()
    {
        GearPin closestPin = ClosestPin();

        gearFixed = false;
        if (closestPin != null)
        {
            gearPin           = closestPin;
            transform.forward = closestPin.transform.up;
            gearFixed         = true;
            return(true);
        }
        return(false);
    }
Esempio n. 2
0
    private void Awake()
    {
        foreach (Transform pinPivot in pinsPivots)
        {
            GearPin newPin = Instantiate(pinPrefab);
            newPin.transform.position = pinPivot.position;
            pins.Add(newPin);
        }

        foreach (GearStack gear in gears)
        {
            gearRotations.Add(gear.GetComponent <GearRotation>());
            gear.pins = pins;
        }
    }
Esempio n. 3
0
    GearPin ClosestPin()
    {
        float   closestDis = (pins[0].Position - transform.position).magnitude;
        GearPin closestPin = pins[0];

        for (int i = 1; i < pins.Count; i++)
        {
            float newDis = (pins[i].Position - transform.position).magnitude;

            if (!pins[i].occupied && newDis < closestDis)
            {
                closestDis = newDis;
                closestPin = pins[i];
            }
        }
        if (closestDis < snappingDis.Value)
        {
            return(closestPin);
        }
        return(null);
    }
Esempio n. 4
0
    private void Update()
    {
        if (gearHeld)
        {
            rb.useGravity        = false;
            gearRotation.enabled = false;
            if (gearPin != null)
            {
                gearPin.occupied = false;
                gearPin          = null;
            }
            gearSnapping   = StackGear();
            rb.isKinematic = true;
            mc.isTrigger   = true;
        }

        else if (gearSnapping)
        {
            rb.angularVelocity   = Vector3.zero;
            rb.velocity          = Vector3.zero;
            rb.isKinematic       = false;
            rb.useGravity        = false;
            gearRotation.enabled = true;
            transform.position   = Vector3.SmoothDamp(transform.position, gearPin.Position,
                                                      ref currentVelocity, snapTime);
            if ((transform.position - gearPin.Position).magnitude < 0.01f)
            {
                gearSnapping       = false;
                transform.position = gearPin.Position;
            }
            mc.isTrigger = true;
        }
        else if (!gearFixed)
        {
            mc.isTrigger  = false;
            rb.useGravity = true;
        }
    }