예제 #1
0
        public void ObjectResponse(HitObject nextObject, float speed)
        {
            float beatLength = _timingManager.BeatLength();

            if (HitObjectUtils.Length(nextObject) >= beatLength / 2 - 0.002f)
            {
                FloorUtils.SmartPattern(this, nextObject, beatLength);
            }
            else if (_hitObjectManager.NextGap() >= beatLength * 3 - 0.002f)
            {
                FloorUtils.PlayPattern(this, Patterns.Droplet, 15, beatLength / 500f, 0,
                                       a =>
                {
                    foreach (int t in a)
                    {
                        _squares[t].SetSat(0);
                        _squares[t].ValMode = true;
                    }
                });
            }
            else
            {
                int   ct      = (int)Mathf.Clamp(speed * 25, 10, 100);
                int[] changes = Patterns.SmartRandom(ct, _squares);
                ChangeFloor(changes);
            }
        }
예제 #2
0
        public static void SmartPattern(DanceFloor floor, HitObject obj, float beatLength)
        {
            if (HitObjectUtils.Length(obj) >= beatLength * 1.5f - 0.002f)
            {
                _prevPattern ^= 2;

                float beats = HitObjectUtils.Length(obj) / beatLength;
                float ms    = Mathf.Ceil(beats) * beatLength;
                float len   = ms / 1000f;
                //float patternLen = beatLength / (beats % 2 == 0 ? 500f : 1000f);
                float patternLen = beatLength / 500f;
                for (float f = 0; f < len - 0.002f; f += patternLen)
                {
                    FullPattern(floor, patternLen, f, ReversePattern);
                }
            }
            else if (HitObjectUtils.Length(obj) >= beatLength - 0.002f)
            {
                float len = HitObjectUtils.Length(obj) / 1000f;
                FullPattern(floor, len);
            }
            else if (HitObjectUtils.Length(obj) >= beatLength / 2 - 0.002f)
            {
                float len = HitObjectUtils.Length(obj) / 1000f;
                HalfPattern(floor, len);
            }
        }