Ejemplo n.º 1
0
        private IEnumerable <object> marbleReset(MarbleTumbleModule m)
        {
            var orig1rot     = m.MarbleLayer1.transform.localRotation;
            var orig2x       = m.MarbleLayer2.transform.localPosition.x;
            var orig2rot     = m.MarbleLayer2.transform.localRotation;
            var orig3rot     = m.MarbleLayer3.transform.localRotation;
            var newRandomRot = Quaternion.Euler(Rnd.Range(0, 360), Rnd.Range(0, 360), Rnd.Range(0, 360));

            float duration = 1f;
            float elapsed  = 0;

            while (elapsed < duration)
            {
                elapsed += Time.deltaTime;
                var t = Mathf.Min(duration, elapsed) / duration;

                m.MarbleLayer1.transform.localRotation = Quaternion.Slerp(orig1rot, Quaternion.identity, t);
                m.SetMarblePos(Easing.OutSine(t, orig2x, -.062f, 1), t * (1 - t) * .1f);
                m.MarbleLayer2.transform.localRotation = Quaternion.Slerp(orig2rot, Quaternion.identity, t);
                m.MarbleLayer3.transform.localRotation = Quaternion.Slerp(orig3rot, newRandomRot, t);
                yield return(null);
            }

            duration = .1f;
            elapsed  = 0;
            while (elapsed < duration)
            {
                elapsed += Time.deltaTime;
                m.SetMarblePos(Easing.InQuad(Mathf.Min(duration, elapsed), -.062f, -.058f, duration));
                yield return(null);
            }
        }
Ejemplo n.º 2
0
        public override IEnumerable <object> RunAnimation(MarbleTumbleModule m)
        {
            var coroutines = Rotations.Select(rot => animate(rot.CylinderIndex, Marble, rot.RotateFrom, rot.RotateTo, m).GetEnumerator()).ToArray();
            var any        = true;

            while (any)
            {
                yield return(null);

                any = false;
                for (int i = 0; i < coroutines.Length; i++)
                {
                    any |= coroutines[i].MoveNext();
                }
            }
        }
Ejemplo n.º 3
0
        public override IEnumerable <object> RunAnimation(MarbleTumbleModule m)
        {
            m.Audio.PlaySoundAtTransform("Marble" + (2 * (FromIndex - IntoIndex)), m.transform);
            var elapsed  = 0f;
            var duration = .2f * (FromIndex - IntoIndex);
            var origRoll = m.MarbleLayer2.transform.localEulerAngles.z;
            var fromX    = m.MarbleLayer2.transform.localPosition.x;
            var toX      = IsGap ? (IntoIndex == 0 ? .002f : -.01f * (IntoIndex + .5f) - .003f) : -.01f * (IntoIndex + 1) - .0004f;

            while (elapsed < duration)
            {
                elapsed += Time.deltaTime;
                var movement = Easing.InQuad(Mathf.Min(duration, elapsed), 0, toX - fromX, duration);
                m.SetMarblePos(movement + fromX);
                m.MarbleLayer2.transform.localEulerAngles = new Vector3(0, 0, origRoll - movement / .003f / Mathf.PI * 180);
                yield return(null);
            }
            if (IntoIndex == 0 && IsGap)
            {
                m.Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.CorrectChime, m.transform);
                m.Module.HandlePass();
                m._isSolved = true;
            }
            else if (!IsGap)
            {
                m.Module.HandleStrike();

                var coroutines = (Rotation4 != null ? new[] { animate(4, -1, Rotation4.RotateFrom, Rotation4.RotateTo, m, .8f), marbleReset(m) } : new[] { marbleReset(m) }).Select(e => e.GetEnumerator()).ToArray();
                var any        = true;
                while (any)
                {
                    yield return(null);

                    any = false;
                    for (int i = 0; i < coroutines.Length; i++)
                    {
                        any |= coroutines[i].MoveNext();
                    }
                }
                m._ignoreClicks = false;
            }
        }
Ejemplo n.º 4
0
        protected IEnumerable <object> animate(int cylinder, int marble, int from, int to, MarbleTumbleModule m, float delay = 0)
        {
            while (delay > 0)
            {
                yield return(null);

                delay -= Time.deltaTime;
            }

            const float duration  = .1f;
            var         elapsed   = 0f;
            var         fromAngle = (360 / _numNotches) * from;
            var         toAngle   = (360 / _numNotches) * to;

            while (elapsed < duration)
            {
                elapsed += Time.deltaTime;
                var ang = Quaternion.Euler(0, Easing.OutSine(Mathf.Min(duration, elapsed), fromAngle, toAngle, duration), 0);
                m.Cylinders[cylinder].transform.localRotation = ang;
                if (cylinder == marble)
                {
                    m.MarbleLayer1.transform.localRotation = ang;
                }
                yield return(null);
            }
        }
Ejemplo n.º 5
0
 public abstract IEnumerable <object> RunAnimation(MarbleTumbleModule m);
Ejemplo n.º 6
0
 public override IEnumerable <object> RunAnimation(MarbleTumbleModule m)
 {
     m._queue = null;
     yield break;
 }