コード例 #1
0
    public static ComplexButtonState NextState(this ComplexButtonState state, bool pressed)
    {
        switch (state)
        {
        case ComplexButtonState.Up:
            return(pressed ? ComplexButtonState.Pressed : ComplexButtonState.Up);

        case ComplexButtonState.Pressed:
            return(pressed ? ComplexButtonState.Down : ComplexButtonState.Released);

        case ComplexButtonState.Released:
            return(pressed ? ComplexButtonState.Pressed : ComplexButtonState.Up);

        default:
            //case ButtonState.Down:
            return(pressed ? ComplexButtonState.Down : ComplexButtonState.Released);
        }
    }
コード例 #2
0
 TimedAnalogButtonState(float value, ComplexButtonState state, float timePressed)
 {
     Value       = value;
     State       = state;
     TimePressed = timePressed;
 }
コード例 #3
0
    void FixedUpdate()
    {
        var vertical = Input.GetAxis("Vertical" + PlayerIndex);
        var horizontal = Input.GetAxis("Horizontal" + PlayerIndex);

        // Base rotation
        var angle = -transform.localRotation.eulerAngles.z;

        // Death
        if (AttachmentPoints.Count == 0)
        {
            DeadBubble.transform.rotation = Quaternion.Euler(90, 0, 0);
            DeadBubble.transform.position = transform.position + new Vector3(PlayerIndex == 1 ? -1 : 1, 1.5f, 0);
            if (PlayerIndex == 2)
                DeadBubble.transform.localScale = new Vector3(1, -1, 1);
            else
                DeadBubble.transform.localScale = new Vector3(-1, 1, 1);

            DeathTimer -= Time.deltaTime;
            var cheapo = DeathTimer * 1.5f;
            DeadBubble.renderer.enabled = (cheapo - Math.Floor(cheapo)) > 0.5f;

            if (DeathTimer <= 0)
            {
                enabled = false;
                DeadBubble.renderer.enabled = false;

                const float SlideDuration = 0.75f;

                Wait.Until(elapsed =>
                {
                    var step = Easing.EaseIn(Mathf.Clamp01(elapsed / SlideDuration), EasingType.Quadratic);
                    InnerLeft.transform.localPosition = OuterLeft.transform.localPosition = 
                        Vector3.Lerp(new Vector3(-6, 0, 0), new Vector3(0, 0, 0), step);
                    OuterRight.transform.localPosition = InnerRight.transform.localPosition =
                        Vector3.Lerp(new Vector3(25f, 0, 0), new Vector3(18.5f, 0, 0), step);
                    return step >= 1;
                }, () =>
                    Wait.Until(elapsed =>
                    {
                        var step = Easing.EaseIn(Mathf.Clamp01(elapsed / SlideDuration), EasingType.Quadratic);
                        InnerLeft.transform.localPosition = Vector3.Lerp(new Vector3(0, 0, 0.125f), new Vector3(6.17f, 0, 0.125f), step);
                        InnerRight.transform.localPosition = Vector3.Lerp(new Vector3(18.5f, 0, 0.125f), new Vector3(12.34f, 0, 0.125f), step);
                        Logo.renderer.material.color = new Color(1, 1, 1, step);
                        return step >= 1;
                    }, () =>
                        Wait.Until(e =>
                        {
                            foreach (var r in StrayObjects.GetComponentsInChildren<Renderer>())
                                r.material.color = new Color(1, 1, 1, 1 - e);
                            return e >= 1;
                        }, () => Application.LoadLevel(0)))
                );

                return;
            }
        }

        // Stunning!
        if (StunCooldown > 0)
        {
            StunCooldown = Mathf.Max(0, StunCooldown - Time.deltaTime);
            HurtBubble.transform.rotation = Quaternion.Euler(90, 0, 0);
            HurtBubble.transform.position = transform.position + new Vector3(PlayerIndex == 1 ? -1 : 1, 1.5f, 0);
            if (PlayerIndex == 2)
                HurtBubble.transform.localScale = new Vector3(1, -1, 1);
            else
                HurtBubble.transform.localScale = new Vector3(-1, 1, 1);

            if (StunCooldown == 0)
            {
                renderer.material = AttachmentPoints.Count > 0 ? IdleMaterial : DizzyMaterial;
                HurtBubble.renderer.enabled = false;
            }
            return;
        }
        StunHits = 0;

        //var one = Input.GetButtonDown("1-" + PlayerIndex);
        //var two = Input.GetButtonDown("2-" + PlayerIndex);
        //var three = Input.GetButtonDown("3-" + PlayerIndex);
        //var four = Input.GetButtonDown("4-" + PlayerIndex);

        //if (one) Debug.Log("1-" + PlayerIndex + " ~ " + Input.GetJoystickNames()[PlayerIndex - 1]);
        //if (two) Debug.Log("2-" + PlayerIndex + " ~ " + Input.GetJoystickNames()[PlayerIndex - 1]);
        //if (three) Debug.Log("3-" + PlayerIndex + " ~ " + Input.GetJoystickNames()[PlayerIndex - 1]);
        //if (four) Debug.Log("4-" + PlayerIndex + " ~ " + Input.GetJoystickNames()[PlayerIndex - 1]);

        if (ControllerMap == null) return;

        if (vertical > 0.5f && UpState == ComplexButtonState.Up) { UpState = ComplexButtonState.Down; DoAppropriateAttack(angle + 180); }
        if (UpState == ComplexButtonState.Down && vertical < 0.5f) UpState = ComplexButtonState.Up;
        foreach (var button in ControllerMap[Direction.Down])
            if (DownButtons.Contains(button + PlayerIndex)) DoAppropriateAttack(angle + 180);
        //if (Keyboard.GetKeyState(HitDownKey).State == ComplexButtonState.Pressed)

        if (vertical < -0.5f && DownState == ComplexButtonState.Up) { DownState = ComplexButtonState.Down; DoAppropriateAttack(angle); }
        if (DownState == ComplexButtonState.Down && vertical > -0.5f) DownState = ComplexButtonState.Up;
        foreach (var button in ControllerMap[Direction.Up])
            if (DownButtons.Contains(button + PlayerIndex)) DoAppropriateAttack(angle);
        //if (Keyboard.GetKeyState(HitUpKey).State == ComplexButtonState.Pressed)

        if (horizontal < -0.5f && LeftState == ComplexButtonState.Up) { LeftState = ComplexButtonState.Down; DoAppropriateAttack(angle - 90); }
        if (LeftState == ComplexButtonState.Down && horizontal > -0.5f) LeftState = ComplexButtonState.Up;
        foreach (var button in ControllerMap[Direction.Left])
            if (DownButtons.Contains(button + PlayerIndex)) DoAppropriateAttack(angle - 90);
        //if (Keyboard.GetKeyState(HitLeftKey).State == ComplexButtonState.Pressed)

        if (horizontal > 0.5f && RightState == ComplexButtonState.Up) { RightState = ComplexButtonState.Down; DoAppropriateAttack(angle + 90); }
        if (RightState == ComplexButtonState.Down && horizontal < 0.5f) RightState = ComplexButtonState.Up;
        foreach (var button in ControllerMap[Direction.Right])
            if (DownButtons.Contains(button + PlayerIndex)) DoAppropriateAttack(angle + 90);
        //if (Keyboard.GetKeyState(HitRightKey).State == ComplexButtonState.Pressed)

        // Try to keep upright
        var currentUp = new Vector2(Mathf.Cos(Mathf.Deg2Rad * angle), Mathf.Sin(Mathf.Deg2Rad * angle));
        var targetUp = new Vector2(1, 0) * (AttachmentPoints.Count > 0 ? 1 : -1);
        var autoBalancing = Easing.EaseIn((2 - (Vector2.Dot(targetUp, currentUp) + 1)) / 2, EasingType.Sine);
        var sign = Mathf.Sign(targetUp.y - currentUp.y) * (AttachmentPoints.Count > 0 ? 1 : -1);
        if (sign == 0) sign = 1;
        rigidbody.AddTorque(Vector3.forward * autoBalancing * sign * AutoBalancingFactor, ForceMode.Force);

        DownButtons.Clear();
    }
コード例 #4
0
ファイル: TimedButtonState.cs プロジェクト: karlnp/picoBattle
 TimedButtonState(ComplexButtonState state, float timePressed)
 {
     State       = state;
     TimePressed = timePressed;
 }
コード例 #5
0
 public static bool IsDown(this ComplexButtonState state)
 {
     return(state == ComplexButtonState.Pressed || state == ComplexButtonState.Down);
 }