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; } }
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); } }); }