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); } }
TimedAnalogButtonState(float value, ComplexButtonState state, float timePressed) { Value = value; State = state; TimePressed = timePressed; }
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(); }
TimedButtonState(ComplexButtonState state, float timePressed) { State = state; TimePressed = timePressed; }
public static bool IsDown(this ComplexButtonState state) { return(state == ComplexButtonState.Pressed || state == ComplexButtonState.Down); }