public Ecco2Tool(CustomMainForm f, GameRegion r) : base(f, r)
        {
            _top  = _bottom = 112;
            _left = _right = 160;
            ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom);
            switch (r)
            {
            case GameRegion.J:
                _3DTypeProvider = new J3DProvider();
                _2DTypeProvider = new J2DProvider();
                break;

            case GameRegion.U:
                _3DTypeProvider = new U3DProvider();
                _2DTypeProvider = new U2DProvider();
                break;

            case GameRegion.E:
                _3DTypeProvider = new E3DProvider();
                _2DTypeProvider = new E2DProvider();
                break;

            default:
                break;
            }
        }
Beispiel #2
0
        public async Task LoadLibraryAsync(string fileName, bool precache = false)
        {
            try
            {
                LoadProgress?.Invoke(this, new TransitionLibraryProgressEventArgs(0, 1, "loading transitions settings"));
                var transitions = await ConfigParser.ParseAsync(fileName);

                foreach (var transition in transitions)
                {
                    TransitionData?transitionData = null;
                    switch (transition[0])
                    {
                    case "SoundAndGif":
                        float.TryParse(transition[3], out var duration);
                        transitionData = new SoundAndGifTransitionData(transition[1], transition[2], duration);

                        break;
                    }
                    if (transitionData != null)
                    {
                        if (TransitionCache.ContainsKey(transitionData.Hash))
                        {
                            TransitionCache[transitionData.Hash].Count++;
                        }
                        else
                        {
                            TransitionCache.Add(transitionData.Hash, transitionData);
                        }
                    }
                }
                ListReady?.Invoke(this, null);
                if (precache)
                {
                    int current = 0;
                    int total   = TransitionCache.Count();
                    while (current < TransitionCache.Count())
                    {
                        var    toCache = TransitionCache.Skip(current).Take(2).ToList();
                        Task[] tasks   = toCache.Select(tc => tc.Value.PreloadAsync()).ToArray();
                        await Task.WhenAll(tasks);

                        current += toCache.Count();
                        LoadProgress?.Invoke(this, new TransitionLibraryProgressEventArgs(current, total, "Preloading"));
                    }
                }
            }
            catch (Exception ex)
            {
                CustomMainForm.Log($"{ex.StackTrace}");
                CustomMainForm.Log($"{ex.Message}");
            }
            finally
            {
                LoadComplete?.Invoke(this, null);
            }
        }
 public EccoToolBase(CustomMainForm f, GameRegion r)
 {
     _form = f;
 }
        public void PlayAsync()
        {
            ClientApi.Pause();
            ClientApi.SetSoundOn(false);
            Task.Run(async() =>
            {
                try
                {
                    IsPlaying        = true;
                    int waitAttempts = 10;
                    while (gui == null)                     //waiting for GUI
                    {
                        await Task.Delay(33);
                        waitAttempts--;
                        if (waitAttempts <= 0)
                        {
                            throw new Exception("No GUI Supplied");
                        }
                    }

                    DrawBackground(gui);
                    if (!transition.IsLoadCompleted)
                    {
                        CustomMainForm.Log("Transition isn't ready, preloading");
                        await transition.PreloadAsync();
                    }
                    waitAttempts = 10;
                    while (!IsROMReady && IsPlaying)
                    {
                        await Task.Delay(33);
                        waitAttempts--;
                        if (waitAttempts <= 0)
                        {
                            throw new Exception("ROM took too long to load");
                        }
                    }
                    await Task.Delay(33);
                    double deltaTime = 0;
                    DateTime n       = DateTime.Now;
                    InvokeOnMainThread?.Invoke(this, () =>
                    {
                        transition.Play();
                    });
                    for (double t = 0; t <= transition.Duration; t += deltaTime)
                    {
                        if (!IsPlaying)
                        {
                            return;
                        }
                        InvokeOnMainThread?.Invoke(this, () =>
                        {
                            ClearBackground(gui);
                            transition.DrawStart(gui);
                            try
                            {
                                transition.Draw(gui, t);
                            }
                            catch (Exception ex)
                            {
                                CustomMainForm.Log(ex.StackTrace);
                                CustomMainForm.Log(ex.Message);
                                CustomMainForm.Log("Draw Failed");
                            }
                            finally
                            {
                                transition.DrawEnd(gui);
                            }
                        });
                        await Task.Delay(33);
                        deltaTime = (DateTime.Now - n).TotalSeconds;
                        n         = DateTime.Now;
                    }
                }
                catch (Exception ex)
                {
                    CustomMainForm.Log(ex.StackTrace);
                    CustomMainForm.Log(ex.Message);
                }
                finally
                {
                    CustomMainForm.Log("Transition Complete");
                    ClientApi.Unpause();
                    ClientApi.SetSoundOn(true);
                    InvokeOnMainThread?.Invoke(this, () =>
                    {
                        transition.DrawClear(gui);
                        transition.Stop();
                        ClearBackground(gui);
                        ClearForeground(gui);
                    });
                    IsPlaying = false;
                    TransitionCompleted?.Invoke(this, null);
                }
            });
        }