Ejemplo n.º 1
0
        private void TouchEffect_TouchAction(object sender, TouchTracking.TouchActionEventArgs args)
        {
            print("TOUCH ACCTION0");

            bool lockActionOnly = false;

            void CheckLock()
            {
                if (Player == null)
                {
                    lockActionOnly = true; return;
                }
                else if (Player.State == VLCState.Error)
                {
                    lockActionOnly = true; return;
                }
                else if (Player.State == VLCState.Opening)
                {
                    lockActionOnly = true; return;
                }
                else if (Player.Length == -1)
                {
                    lockActionOnly = true; return;
                }
                else if (!Player.IsSeekable)
                {
                    lockActionOnly = true; return;
                }
            }

            try {
                CheckLock();
            }
            catch (Exception _ex) {
                print("ERRORIN TOUCH: " + _ex);
                lockActionOnly = true;
            }



            if (args.Type == TouchTracking.TouchActionType.Pressed || args.Type == TouchTracking.TouchActionType.Moved || args.Type == TouchTracking.TouchActionType.Entered)
            {
                CurrentTap++;
            }
            else if (args.Type == TouchTracking.TouchActionType.Cancelled || args.Type == TouchTracking.TouchActionType.Exited || args.Type == TouchTracking.TouchActionType.Released)
            {
                StartFade();
            }


            // ========================================== LOCKED LOGIC ==========================================
            if (isLocked || lockActionOnly)
            {
                if (args.Type == TouchTracking.TouchActionType.Pressed)
                {
                    startPressTime = System.DateTime.Now;
                }

                if (args.Type == TouchTracking.TouchActionType.Released && System.DateTime.Now.Subtract(startPressTime).TotalSeconds < 0.4)
                {
                    if (TotalOpasity == 1)
                    {
                        FadeEverything(true);
                    }
                    else
                    {
                        FadeEverything(false);
                    }
                }
                return;
            }
            ;

            if (lockActionOnly)
            {
                return;
            }

            // ========================================== NORMAL LOGIC ==========================================
            if (args.Type == TouchTracking.TouchActionType.Pressed)
            {
                if (DateTime.Now.Subtract(lastClick).TotalSeconds < 0.25)   // Doubble click
                {
                    lastRelease = DateTime.Now;

                    bool forward = (TapRec.Width / 2.0 < args.Location.X);
                    SeekMedia(SKIPTIME * (forward ? 1 : -1));
                    if (forward)
                    {
                        SkipFor();
                    }
                    else
                    {
                        SkipBac();
                    }
                }
                lastClick = DateTime.Now;
                FadeEverything(false);

                startCursorPosition  = args.Location;
                isMovingFromLeftSide = (TapRec.Width / 2.0 > args.Location.X);
                isMovingStartTime    = Player.Time;
                isMovingSkipTime     = 0;
                isMovingCursor       = false;
                cursorPosition       = args.Location;

                maxVol = Volyme >= 100 ? 200 : 100;
            }



            else if (args.Type == TouchTracking.TouchActionType.Moved)
            {
                print(startCursorPosition.X - args.Location.X);
                if ((minimumDistance < Math.Abs(startCursorPosition.X - args.Location.X) || minimumDistance < Math.Abs(startCursorPosition.X - args.Location.X)) && !isMovingCursor)
                {
                    // STARTED FIRST TIME
                    isMovingHorozontal = Math.Abs(startCursorPosition.X - args.Location.X) > Math.Abs(startCursorPosition.Y - args.Location.Y);
                    isMovingCursor     = true;
                }
                else if (isMovingCursor)   // DRAGINS SKIPING TIME
                {
                    if (isMovingHorozontal)
                    {
                        double diffX = (args.Location.X - startCursorPosition.X) * 2.0 / TapRec.Width;
                        isMovingSkipTime = (long)((Player.Length * (diffX * diffX) / 10) * (diffX < 0 ? -1 : 1)); // EXPONENTIAL SKIP LIKE VLC

                        if (isMovingSkipTime + isMovingStartTime > Player.Length)                                 // SKIP TO END
                        {
                            isMovingSkipTime = Player.Length - isMovingStartTime;
                        }
                        else if (isMovingSkipTime + isMovingStartTime < 0)   // SKIP TO FRONT
                        {
                            isMovingSkipTime = -isMovingStartTime;
                        }
                        SkiptimeLabel.Text = $"{CloudStreamCore.ConvertTimeToString((isMovingStartTime + isMovingSkipTime) / 1000)} [{ (Math.Abs(isMovingSkipTime) < 1000 ? "" : (isMovingSkipTime > 0 ? "+" : "-"))}{CloudStreamCore.ConvertTimeToString(Math.Abs(isMovingSkipTime / 1000))}]";
                    }
                    else
                    {
                        if (isMovingFromLeftSide)
                        {
                            if (canChangeBrightness)
                            {
                                BrightnessProcentage -= (args.Location.Y - cursorPosition.Y) / 2.0;
                                BrightnessProcentage  = Math.Max(Math.Min(BrightnessProcentage, 100), 0); // CLAM
                                SkiptimeLabel.Text    = $"Brightness {(int)BrightnessProcentage}%";
                            }
                        }
                        else
                        {
                            Volyme            -= (args.Location.Y - cursorPosition.Y) / 2.0;
                            Volyme             = Math.Max(Math.Min(Volyme, maxVol), 0); // CLAM
                            SkiptimeLabel.Text = $"Volyme {(int)Volyme}%";
                        }
                    }

                    cursorPosition = args.Location;
                }
            }
            else if (args.Type == TouchTracking.TouchActionType.Released)
            {
                if (isMovingCursor && isMovingHorozontal && Math.Abs(isMovingSkipTime) > 1000)   // SKIP TIME
                {
                    FadeEverything(true);
                    SeekMedia(isMovingSkipTime - Player.Time + isMovingStartTime);
                }
                else
                {
                    SkiptimeLabel.Text = "";
                    isMovingCursor     = false;
                    if ((DateTime.Now.Subtract(lastClick).TotalSeconds < 0.25) && TotalOpasity == 1 && DateTime.Now.Subtract(lastRelease).TotalSeconds > 0.25)   // FADE WHEN REALEASED
                    {
                        FadeEverything(true);
                    }
                }
            }
            print("LEFT TIGHT " + (TapRec.Width / 2.0 < args.Location.X) + TapRec.Width + "|" + TapRec.X);
            print("TOUCHED::D:A::A" + args.Location.X + "|" + args.Type.ToString());
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 0-1
 /// </summary>
 /// <param name="time"></param>
 public void ChangeTime(double time)
 {
     StartTxt.Text = CloudStreamCore.ConvertTimeToString((Player.Length / 1000) * time);
     EndTxt.Text   = CloudStreamCore.ConvertTimeToString(((Player.Length) / 1000) - (Player.Length / 1000) * time);
 }