private static void LevelOnBegin(On.Celeste.Level.orig_Begin orig, Level level) { orig(level); if (!IsLoadStart) { return; } var loadedDict = level.FindAllToDict <Entity>(); var notLoadedEntities = SavedEntitiesDict.Where(pair => !loadedDict.ContainsKey(pair.Key)) .ToDictionary(p => p.Key, p => p.Value); if (notLoadedEntities.Count > 0) { RestoreAction.EntitiesSavedButNotLoaded(level, notLoadedEntities); } }
public static void AfterEntityAwake(Level level) { var loadedEntitiesDict = level.FindAllToDict <Entity>(); var notSavedEntities = loadedEntitiesDict.Where(pair => !SavedEntitiesDict.ContainsKey(pair.Key)) .ToDictionary(p => p.Key, p => p.Value); RestoreAction.EntitiesLoadedButNotSaved(notSavedEntities); foreach (var pair in loadedEntitiesDict.Where(loaded => SavedEntitiesDict.ContainsKey(loaded.Key))) { RestoreAction.All.ForEach(restoreAction => { if (pair.Value.GetType().IsSameOrSubclassOf(restoreAction.EntityType)) { restoreAction.AfterEntityAwake(pair.Value, SavedEntitiesDict[pair.Key], SavedDuplicateIdList); } }); } }