예제 #1
0
    // Start is called before the first frame update
    void Start()
    {
        DontDestroyOnLoad(this);

        controls     = new ControlsPacket(0, new Vector2(), new Vector2(), 0f, 0f);
        prevControls = controls;

        bufferedControls = 0;
    }
예제 #2
0
    private void DoControls()
    {
        Controls controlsRaw = 0;
        Vector2  lstick;
        Vector2  rstick;
        float    l2;
        float    r2;

        foreach (Controls control in System.Enum.GetValues(typeof(Controls)))
        {
            controlsRaw |= Input.GetKey(controlMap[control.ToString()]) ? control : 0;
        }

        if (controlMap.OnKeyboard)
        {
            float lsh = 0;
            if ((controlsRaw & Controls.Right) == Controls.Right)
            {
                lsh++;
            }
            if ((controlsRaw & Controls.Left) == Controls.Left)
            {
                lsh--;
            }

            float lsv = 0;
            if ((controlsRaw & Controls.Up) == Controls.Up)
            {
                lsv++;
            }
            if ((controlsRaw & Controls.Down) == Controls.Down)
            {
                lsv--;
            }

            lstick = new Vector2(lsh, lsv);

            float rsh = 0;
            if ((controlsRaw & Controls.CRight) == Controls.CRight)
            {
                rsh++;
            }
            if ((controlsRaw & Controls.CLeft) == Controls.CLeft)
            {
                rsh--;
            }

            float rsv = 0;
            if ((controlsRaw & Controls.CUp) == Controls.CUp)
            {
                rsv++;
            }
            if ((controlsRaw & Controls.CDown) == Controls.CDown)
            {
                rsv--;
            }

            rstick = new Vector2(rsh, rsv);

            l2 = (controlsRaw & Controls.Shield) == Controls.Shield ? 1f : 0f;
            r2 = (controlsRaw & Controls.Shield) == Controls.Shield ? 1f : 0f;
        }
        else
        {
            lstick = new Vector2(Input.GetAxis("P" + playerID + " LSH"), Input.GetAxis("P" + playerID + " LSV"));
            rstick = new Vector2(Input.GetAxis("P" + playerID + " RSH"), Input.GetAxis("P" + playerID + " RSV"));
            l2     = Input.GetAxis("P" + playerID + " L2");
            r2     = Input.GetAxis("P" + playerID + " R2");

            double langle = Utils.Force360(Utils.ToDeg(Utils.VectorAngle(lstick)));
            if (langle <= controlMap.BaseHorizontalAngle || langle >= 360d - controlMap.BaseHorizontalAngle)
            {
                controlsRaw |= Controls.Right;
            }
            else if (langle >= 180d - controlMap.BaseHorizontalAngle && langle <= 180d + controlMap.BaseHorizontalAngle)
            {
                controlsRaw |= Controls.Left;
            }
            else if (langle < 180d)
            {
                controlsRaw |= Controls.Up;
            }
            else if (langle > 180d)
            {
                controlsRaw |= Controls.Down;
            }

            double rangle = Utils.Force360(Utils.ToDeg(Utils.VectorAngle(rstick)));
            if (rangle <= controlMap.BaseHorizontalAngleC || rangle >= 360d - controlMap.BaseHorizontalAngleC)
            {
                controlsRaw |= Controls.CRight;
            }
            else if (rangle >= 180d - controlMap.BaseHorizontalAngleC && rangle <= 180d + controlMap.BaseHorizontalAngleC)
            {
                controlsRaw |= Controls.CLeft;
            }
            else if (rangle < 180d)
            {
                controlsRaw |= Controls.CUp;
            }
            else if (rangle > 180d)
            {
                controlsRaw |= Controls.CDown;
            }

            if (l2 > 0 || r2 > 0)
            {
                controlsRaw |= Controls.Shield;
            }
        }

        controls = new ControlsPacket(controlsRaw, lstick, rstick, l2, r2);
    }
예제 #3
0
    // Update is called once per frame
    void Update()
    {
        prevControls = controls;

        DoControls();
    }