Ejemplo n.º 1
0
    private IEnumerator OnPressInvoke()
    {
        while (_IsPress)
        {
            yield return(new WaitForSeconds(_PressInterval));

            if (_PressAction != null)
            {
                _PressAction.Invoke(true);
            }
        }
    }
        void Update()
        {
            move         = Vector3.zero;
            freelook     = Vector2.zero;
            menu_move    = Vector2.zero;
            ui_move      = Vector2.zero;
            rotate_cam   = 0f;
            press_action = false;
            press_attack = false;
            press_jump   = false;
            press_craft  = false;

            press_accept    = false;
            press_cancel    = false;
            press_pause     = false;
            press_ui_select = false;
            press_ui_use    = false;
            press_ui_cancel = false;

            Vector2 wasd = Vector2.zero;

            if (Input.GetKey(KeyCode.A))
            {
                wasd += Vector2.left;
            }
            if (Input.GetKey(KeyCode.D))
            {
                wasd += Vector2.right;
            }
            if (Input.GetKey(KeyCode.W))
            {
                wasd += Vector2.up;
            }
            if (Input.GetKey(KeyCode.S))
            {
                wasd += Vector2.down;
            }

            Vector2 arrows = Vector2.zero;

            if (Input.GetKey(KeyCode.LeftArrow))
            {
                arrows += Vector2.left;
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                arrows += Vector2.right;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                arrows += Vector2.up;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                arrows += Vector2.down;
            }

            if (Input.GetKey(cam_rotate_left))
            {
                rotate_cam += -1f;
            }
            if (Input.GetKey(cam_rotate_right))
            {
                rotate_cam += 1f;
            }

            if (Input.GetKeyDown(action_key))
            {
                press_action = true;
            }
            if (Input.GetKeyDown(attack_key))
            {
                press_attack = true;
            }
            if (Input.GetKeyDown(jump_key))
            {
                press_jump = true;
            }
            if (Input.GetKeyDown(craft_key))
            {
                press_craft = true;
            }

            if (Input.GetKeyDown(menu_accept))
            {
                press_accept = true;
            }
            if (Input.GetKeyDown(menu_cancel))
            {
                press_cancel = true;
            }
            if (Input.GetKeyDown(menu_pause))
            {
                press_pause = true;
            }

            if (Input.GetKeyDown(ui_select))
            {
                press_ui_select = true;
            }
            if (Input.GetKeyDown(ui_use))
            {
                press_ui_use = true;
            }
            if (Input.GetKeyDown(ui_cancel))
            {
                press_ui_cancel = true;
            }

            Vector2 both = (arrows + wasd);

            move = gamepad_controls ? new Vector3(wasd.x, 0f, wasd.y) : new Vector3(wasd.x, 0f, wasd.y);
            if (gamepad_controls)
            {
                freelook = arrows;
            }

            //Menu / UI
            if (!menu_moved && both.magnitude > 0.5f)
            {
                menu_move  = both;
                menu_moved = true;
            }

            if (both.magnitude < 0.5f)
            {
                menu_moved = false;
            }

            if (!ui_moved && arrows.magnitude > 0.5f)
            {
                ui_move  = arrows;
                ui_moved = true;
            }

            if (arrows.magnitude < 0.5f)
            {
                ui_moved = false;
            }

            //Gamepad
            if (gamepad_linked && gamepad_controls)
            {
                Vector2 gmove = gamepad_move.Invoke();
                move       += new Vector3(gmove.x, 0f, gmove.y);
                freelook   += gamepad_freelook.Invoke();
                rotate_cam += gamepad_camera.Invoke().x;
                ui_move    += gamepad_dpad.Invoke();
                menu_move  += gamepad_menu.Invoke();
                menu_move  += gamepad_dpad.Invoke();

                press_action = press_action || gamepad_action.Invoke();
                press_attack = press_attack || gamepad_attack.Invoke();
                press_jump   = press_jump || gamepad_jump.Invoke();

                press_craft     = press_craft || gamepad_craft.Invoke();
                press_accept    = press_accept || gamepad_accept.Invoke();
                press_cancel    = press_cancel || gamepad_cancel.Invoke();
                press_pause     = press_pause || gamepad_pause.Invoke();
                press_ui_select = press_ui_select || gamepad_accept.Invoke();
                press_ui_use    = press_ui_use || gamepad_use.Invoke();
                press_ui_cancel = press_ui_cancel || gamepad_cancel.Invoke();
            }

            move     = move.normalized * Mathf.Min(move.magnitude, 1f);
            freelook = freelook.normalized * Mathf.Min(freelook.magnitude, 1f);
        }