-
-
Notifications
You must be signed in to change notification settings - Fork 23
/
ReplayerLauncher.cs
48 lines (39 loc) · 1.76 KB
/
ReplayerLauncher.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using BeatLeader.Models;
using System;
using BeatLeader.Utils;
using JetBrains.Annotations;
using UnityEngine;
using Zenject;
namespace BeatLeader.Replayer {
[PublicAPI]
public class ReplayerLauncher : MonoBehaviour {
[Inject] private readonly GameScenesManager _gameScenesManager = null!;
[Inject] private readonly PlayerDataModel _playerDataModel = null!;
public static ReplayLaunchData? LaunchData { get; private set; }
public static bool IsStartedAsReplay { get; private set; }
public static event Action<ReplayLaunchData>? ReplayWasStartedEvent;
public static event Action<ReplayLaunchData>? ReplayWasFinishedEvent;
public bool StartReplay(ReplayLaunchData data, Action? afterTransitionCallback = null) {
if (data.Replays.Count == 0) return false;
Plugin.Log.Notice("[Launcher] Loading replay data...");
var transitionData = data.CreateTransitionData(_playerDataModel);
transitionData.didFinishEvent += HandleLevelFinish;
IsStartedAsReplay = true;
LaunchData = data;
Plugin.Log.Notice("[Launcher] Starting replay...");
_gameScenesManager.PushScenes(transitionData, 0.7f, afterTransitionCallback);
ReplayWasStartedEvent?.Invoke(data);
return true;
}
private static void HandleLevelFinish(
StandardLevelScenesTransitionSetupDataSO transitionData,
LevelCompletionResults completionResults
) {
transitionData.didFinishEvent -= HandleLevelFinish;
LaunchData!.FinishReplay(transitionData);
ReplayWasFinishedEvent?.Invoke(LaunchData);
LaunchData = null;
IsStartedAsReplay = false;
}
}
}