public bool savePlaylist(LevelPlaylist selectedPlaylist, string name) { // playlists are attached to game objects // when a new level loads, all existing game objects are destroyed so we cannot properly save them // instead, we make a new one and copy the old playlist into the new object. LevelPlaylist list = LevelPlaylist.Create(true); list.CopyFrom(selectedPlaylist); list.IsCustom_ = true; selectedPlaylist = list; switch (name) { case "current": { if (canUseCurrentPlaylist) { G.Sys.GameManager_.LevelPlaylist_.CopyFrom(selectedPlaylist); G.Sys.GameManager_.LevelPlaylist_.SetIndex(0); GeneralUtilities.updateGameManagerCurrentLevel(); StaticTargetedEvent <Events.ServerToClient.SetLevelName.Data> .Broadcast(RPCMode.All, G.Sys.GameManager_.CreateSetLevelNameEventData()); return(true); } else { return(false); } } case "upcoming": { if (canUseCurrentPlaylist) { var currentPlaylist = G.Sys.GameManager_.LevelPlaylist_; if (currentPlaylist.Count_ > currentPlaylist.Index_ + 1) { currentPlaylist.Playlist_.RemoveRange(currentPlaylist.Index_ + 1, currentPlaylist.Count_ - currentPlaylist.Index_ - 1); } foreach (LevelPlaylist.ModeAndLevelInfo level in selectedPlaylist.Playlist_) { currentPlaylist.Add(level); } currentPlaylist.IsCustom_ = true; GeneralUtilities.updateGameManagerCurrentLevel(); StaticTargetedEvent <Events.ServerToClient.SetLevelName.Data> .Broadcast(RPCMode.All, G.Sys.GameManager_.CreateSetLevelNameEventData()); return(true); } else { return(false); } } case "active": { return(true); } default: { selectedPlaylist.Name_ = name; selectedPlaylist.Save(); return(true); } } }