예제 #1
0
    public void HandleEvent(GameEvent ge)
    {
        if (Pause.paused)
        {
            return;
        }
        Vector3 mousepos = InputWatcher.GetCanvasInputPosition((RectTransform)canvas.transform);

        if (ge.type.Equals("mouse_click"))
        {
            if (spinning)
            {
                return;
            }

            spinning         = true;
            startingDialRot  = transform.eulerAngles.z * Mathf.Deg2Rad;
            startingMouseRot = Mathf.Atan2(mousepos.y - anchorY, mousepos.x - anchorX);
        }
        else if (ge.type.Equals("mouse_release"))
        {
            if (!spinning)
            {
                return;
            }
            spinning = false;
            float mouseAngle  = Mathf.Atan2((mousepos.y - anchorY) - transform.position.y, (mousepos.x - anchorX) - transform.position.x);
            float angleChange = mouseAngle - startingMouseRot;
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, (startingDialRot + angleChange) * Mathf.Rad2Deg);
            float rotation = transform.eulerAngles.z;
            float lockRot  = Mathf.Round(rotation / 60) * 60;
            UpdateSelection(lockRot);
            transform.rotation = Quaternion.Euler(0, 0, lockRot);
        }
    }
예제 #2
0
    public void HandleEvent(GameEvent ge)
    {
        //if(Pause.paused)
        //	return;
        Vector3 mousepos = InputWatcher.GetCanvasInputPosition((RectTransform)canvas.transform);

        if (ge.type.Equals("mouse_click"))
        {
            if (spinning)
            {
                return;
            }
            spinning         = true;
            startingDialRot  = transform.eulerAngles.z * Mathf.Deg2Rad;
            startingMouseRot = Mathf.Atan2(mousepos.y - anchorY, mousepos.x - anchorX);
        }
        else if (ge.type.Equals("mouse_release"))
        {
            if (!spinning)
            {
                return;
            }
            spinning = false;
            float mouseAngle  = Mathf.Atan2((mousepos.y - anchorY) - transform.position.y, (mousepos.x - anchorX) - transform.position.x);
            float angleChange = mouseAngle - startingMouseRot;
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, (startingDialRot + angleChange) * Mathf.Rad2Deg);
            float rotation = transform.eulerAngles.z;
            float lockRot  = LockDegrees(rotation);            //lock to the right angle based on how many options there are
            transform.rotation = Quaternion.Euler(0, 0, lockRot);
            RefreshSelectedOption();
        }
    }
예제 #3
0
 public bool TouchIsOnGunButtons()
 {
     foreach (GunButton gb in gunButtons)
     {
         if (gb.TouchIsOnMe(InputWatcher.GetCanvasInputPosition((RectTransform)canvas.transform)))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #4
0
    public void Update()
    {
        //if(Pause.paused)
        //	return;
        if (!spinning)
        {
            return;
        }
        Vector3 mousepos    = InputWatcher.GetCanvasInputPosition((RectTransform)canvas.transform);
        float   mouseAngle  = Mathf.Atan2((mousepos.y - anchorY) - transform.position.y, (mousepos.x - anchorX) - transform.position.x);
        float   angleChange = mouseAngle - startingMouseRot;

        transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, (startingDialRot + angleChange) * Mathf.Rad2Deg);
    }
예제 #5
0
    public void Update()
    {
        if (Pause.paused)
        {
            return;
        }
        if (!spinning)
        {
            return;
        }
        Vector3 mousepos    = InputWatcher.GetCanvasInputPosition((RectTransform)canvas.transform);
        float   mouseAngle  = Mathf.Atan2((mousepos.y - anchorY) - transform.position.y, (mousepos.x - anchorX) - transform.position.x);
        float   angleChange = (mouseAngle - startingMouseRot) * directionMult;

        //Debug.Log("rotlockisLocked is " + rotLockIsLocked);
        //Debug.Log("anglechange is " + angleChange);
        if (rotLockIsOn)
        {
            if (rotLockIsLocked)
            {
                angleChange = 0f;
            }
            else
            {
                //cap anglechange to 2 lanes either direction
                if (angleChange > (2 * Mathf.PI / 3))
                {
                    angleChange = 2 * Mathf.PI / 3;
                }
                else if (angleChange < -(2 * Mathf.PI / 3))
                {
                    angleChange = -2 * Mathf.PI / 3;
                }
                if (Mathf.Abs(angleChange - oldAngleChange) > angleChangeThreshold)
                {
                    angleChange = oldAngleChange;
                    mouseAngle  = oldMouseAngle;
                }
            }
        }
        transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, (startingDialRot + angleChange) * Mathf.Rad2Deg);
        oldAngleChange        = angleChange;
        oldMouseAngle         = mouseAngle;
    }
예제 #6
0
    public void HandleEvent(GameEvent ge)
    {
        if (Pause.paused)
        {
            return;
        }
        Vector3 mousepos = InputWatcher.GetCanvasInputPosition((RectTransform)canvas.transform);

        if (ge.type.Equals("mouse_click"))
        {
            if (spinning)
            {
                return;
            }
            if (TouchIsOnGunButtons())
            {
                return;
            }
            else if (mousepos.magnitude < Dial.DIAL_RADIUS - 28f)
            {
                return;
            }
            else
            {
                spinning         = true;
                startingDialRot  = transform.eulerAngles.z * Mathf.Deg2Rad;
                startingMouseRot = Mathf.Atan2(mousepos.y - anchorY, mousepos.x - anchorX);
            }
        }
        else if (ge.type.Equals("mouse_release"))
        {
            if (!spinning)
            {
                return;
            }
            spinning = false;
            float mouseAngle  = Mathf.Atan2((mousepos.y - anchorY) - transform.position.y, (mousepos.x - anchorX) - transform.position.x);
            float angleChange = (mouseAngle - startingMouseRot) * directionMult;
            if (rotLockIsOn)
            {
                if (rotLockIsLocked)
                {
                    angleChange = 0f;
                }
                else
                {
                    //cap anglechange to 2 lanes either direction
                    if (angleChange > (2 * Mathf.PI / 3))
                    {
                        angleChange = 2 * Mathf.PI / 3;
                    }
                    else if (angleChange < -(2 * Mathf.PI / 3))
                    {
                        angleChange = -2 * Mathf.PI / 3;
                    }
                }
            }
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, (startingDialRot + angleChange) * Mathf.Rad2Deg);
            float rotation = transform.eulerAngles.z;
            float lockRot  = Mathf.Round(rotation / 60) * 60;
            transform.rotation = Quaternion.Euler(0, 0, lockRot);
            GameEvent lockEvent = new GameEvent("dial_locked");
            lockEvent.addArgument(lockRot);
            EventManager.Instance().RaiseEvent(lockEvent);
            Debug.Log("lockRot: " + lockRot);
            if (rotLockIsOn)
            {
                rotLockIsLocked = true;
            }
        }
    }