Esempio n. 1
0
        public override void Update()
        {
            if (HitObjectManager != null)
            {
                HitObject nextObject          = HitObjectManager.NextObject;
                HitObject nextObjectConnected = nextObject?.connectedObject;

                bool objectHasFinger          = false;
                bool connectedObjectHasFinger = false;

                foreach (pDrawable finger in fingers)
                {
                    if (finger.Tag is HitObject obj)
                    {
                        if (obj == nextObject)
                        {
                            objectHasFinger = true;
                        }
                        if (obj == nextObjectConnected)
                        {
                            connectedObjectHasFinger = true;
                        }

                        if (obj.ClockingNow >= obj.EndTime)
                        {
                            finger.Tag = null;
                            finger.FadeOut(800, 0.3f);
                            finger.Transform(new TransformationV(finger.Position, finger == leftFinger ? idleLeft : idleRight, Clock.ModeTime + 300, Clock.ModeTime + 1100, EasingTypes.InOut));
                        }
                        else if (obj.IsActive)
                        {
                            finger.Position = obj is Spinner?spinningPositionFor(obj.ClockingNow) : obj.TrackingPosition;

                            if (Player.Autoplay && TouchBurster != null && AudioEngine.Music != null && AudioEngine.Music.IsElapsing)
                            {
                                TouchBurster.Burst(GameBase.GamefieldToStandard(finger.Position + finger.Offset), 40, 0.5f, 1);
                            }
                        }
                        else if (obj.IsVisible)
                        {
                            int timeUntilObject = obj.StartTime - obj.ClockingNow;

                            //if (timeUntilObject < 500)
                            {
                                Vector2 src  = finger.Position;
                                Vector2 dest = obj is Spinner?spinningPositionFor(obj.StartTime) : obj.TrackingPosition;

                                lastFinger = finger;

                                finger.Position = src + (dest - src) * 0.015f * MovementSpeed * (float)Clock.ElapsedMilliseconds;

                                if (!(obj is Spinner))
                                {
                                    float vOffset = 0;
                                    if (timeUntilObject > 100)
                                    {
                                        vOffset = (1 - pMathHelper.ClampToOne((timeUntilObject - 100) / 300f));
                                    }
                                    else
                                    {
                                        vOffset = pMathHelper.ClampToOne(timeUntilObject / 100f);
                                    }

                                    finger.Offset.Y    = vOffset * -55;
                                    finger.ScaleScalar = 1 + 0.6f * vOffset;
                                }

                                if (Player.Autoplay && TouchBurster != null && AudioEngine.Music != null && AudioEngine.Music.IsElapsing)
                                {
                                    TouchBurster.Burst(GameBase.GamefieldToStandard(finger.Position + finger.Offset), 40, 0.5f, 1);
                                }
                            }
                        }
                    }
                }

                {
                    int timeUntilObject = nextObject == null ? int.MaxValue : nextObject.StartTime - nextObject.ClockingNow;

                    if (timeUntilObject < 450)
                    {
                        if (!objectHasFinger)
                        {
                            checkObject(nextObject);
                        }
                        if (nextObjectConnected != null && !connectedObjectHasFinger)
                        {
                            checkObject(nextObjectConnected);
                        }
                    }
                }
            }

            leftFinger.Update();
            rightFinger.Update();

            leftFinger2.Position    = leftFinger.Position;
            leftFinger2.Offset      = leftFinger.Offset;
            leftFinger2.ScaleScalar = leftFinger.ScaleScalar;
            leftFinger2.Alpha       = leftFinger.Alpha;

            rightFinger2.Position    = rightFinger.Position;
            rightFinger2.Offset      = rightFinger.Offset;
            rightFinger2.ScaleScalar = rightFinger.ScaleScalar;
            rightFinger2.Alpha       = rightFinger.Alpha;

            base.Update();
        }