public void StopWaggle() { if (waggleState != WaggleState.stopped) { waggleState = WaggleState.stopping; } }
public void StartWaggle() { if (!isWaggling) { timeWaggleAnchor = Time.time; waggleState = WaggleState.waggling; } }
// Use this for initialization void Awake() { waggleState = WaggleState.stopped; }
// Update is called once per frame void Update() { if (flipState != FlipState.none) { float timeElapsed = Time.time - timeFlipStart; if (timeElapsed < flipDuration) { float radians = Mathf.PI * timeElapsed / flipDuration; float scaleFlip = Mathf.Cos(radians); if (scaleFlip <= 0) { scaleFlip = -scaleFlip; if (flipState != FlipState.toFlat) { flipState = FlipState.toFlat; Sprite spriteOld = spriteRendererCard.sprite; spriteRendererCard.sprite = (bShowFront) ? spriteFront : spriteBack; spriteRendererFace.enabled = spriteRendererFaceFrame.enabled = bShowFront; } } transform.localScale = new Vector3(scaleFlip, 1, 1); } else { flipState = FlipState.none; transform.localScale = new Vector3(1, 1, 1); } } if (isMoving) { float timeElapsed = Time.time - timeMoveStart; if (timeElapsed < moveDuration) { float radians = Mathf.PI * 0.5f * timeElapsed / moveDuration; float sinLerp = Mathf.Sin(radians); SetPos(posMoveStart + (posMoveEnd - posMoveStart) * sinLerp); dimCard = dimMoveStart + (dimMoveEnd - dimMoveStart) * sinLerp; UpdateSpritesScales(); } else { isMoving = false; SetPos(posMoveEnd); UpdateSpritesScales(); } } if (waggleState != WaggleState.stopped) { float timeDelta = Time.time - timeWaggleAnchor; float radians = timeDelta * (2f * Mathf.PI * 1.5f); // 1.75f); float sinWaggle = Mathf.Sin(radians); float tiltDegs = sinWaggle * 30f; // 45f; Vector3 eulers = transform.localRotation.eulerAngles; transform.localRotation = Quaternion.Euler(eulers.x, eulers.y, tiltDegs); if (waggleState == WaggleState.stopping) { if (Mathf.Sign(sinWaggle) != Mathf.Sign(sinWagglePrev)) { transform.localRotation = Quaternion.Euler(eulers.x, eulers.y, 0); waggleState = WaggleState.stopped; } } sinWagglePrev = sinWaggle; } }