static Package.Asset[] FilterAssets(Package.AssetType assetType) { List <Package.Asset> enabled = new List <Package.Asset>(64), notEnabled = new List <Package.Asset>(64); foreach (Package.Asset asset in PackageManager.FilterAssets(assetType)) { if (asset != null) { if (asset.isEnabled) { enabled.Add(asset); } else { notEnabled.Add(asset); } } } // Why enabled assets first? Because in duplicate name situations, I want the enabled one to get through. Package.Asset[] ret = new Package.Asset[enabled.Count + notEnabled.Count]; enabled.CopyTo(ret); notEnabled.CopyTo(ret, enabled.Count); enabled.Clear(); notEnabled.Clear(); return(ret); }
private void Update() { if (m_mapID != 0) { float subscribedItemProgress = Steam.workshop.GetSubscribedItemProgress(new PublishedFileId(m_mapID)); if (subscribedItemProgress > 0) { m_downloadingMap = true; this.m_errorLabel.text = string.Format(DOWNLOADING_STRING, subscribedItemProgress * 100); } else if (m_downloadingMap) { Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; var package = PackageManager.FilterAssets(assetTypes).FirstOrDefault(x => x.package.GetPublishedFileID().AsUInt64 == m_mapID); if (package != null) { m_downloadingMap = false; StartGame(package); } this.m_errorLabel.text = FINSISH_DOWNLOAD_STRING; } } HandleIncomingNetworkMessages(); }
public static string[] Tags(this Package.AssetType assetType) { if (assetType != null && Type2Category.TryGetValue(assetType, out string cat2)) { return new string[] { cat2 } } ; else { return(new string[0]); } }
protected void Refresh() { ClearListing(); Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; IEnumerator <Package.Asset> enumerator = PackageManager.FilterAssets(assetTypes).GetEnumerator(); try { while (enumerator.MoveNext()) { Package.Asset current = enumerator.Current; if ((current != null) && current.isEnabled && current.package.GetPublishedFileID() != PublishedFileId.invalid) { SaveGameMetaData mmd = current.Instantiate <SaveGameMetaData>(); AddToListing(current.name + " - " + mmd.timeStamp, current, mmd); } } } finally { if (enumerator == null) { } enumerator.Dispose(); } foreach (Package.Asset asset2 in SaveHelper.GetSavesOnDisk()) { SaveGameMetaData data2 = new SaveGameMetaData { assetRef = asset2 }; AddToListing("<color red>" + asset2.name + "</color>", asset2, data2); } this.m_SaveList.items = base.GetListingItems(); if (this.m_SaveList.items.Length > 0) { int num = FindIndexOf(m_LastSaveName); m_SaveList.selectedIndex = (num == -1) ? 0 : num; this.m_LoadButton.isEnabled = true; } else { this.m_LoadButton.isEnabled = false; Invoke("ShowNeedToRestartGamePanel", 0.1f); } }
protected new void RebuildThemeDictionary() { if (this.m_Themes == null) { return; } using (Dictionary <string, List <MapThemeMetaData> > .KeyCollection.Enumerator enumerator = this.m_Themes.Keys.GetEnumerator()) { while (enumerator.MoveNext()) { this.m_Themes[enumerator.Current].Clear(); } } List <MapThemeMetaData> themes = new List <MapThemeMetaData>(); Package.AssetType[] assetTypeArray = new Package.AssetType[1] { UserAssetType.MapThemeMetaData }; foreach (Package.Asset filterAsset in PackageManager.FilterAssets(assetTypeArray)) { if (filterAsset != (Package.Asset)null && filterAsset.isEnabled) { MapThemeMetaData mapThemeMetaData = filterAsset.Instantiate <MapThemeMetaData>(); mapThemeMetaData.SetSelfRef(filterAsset); if (!this.m_Themes.ContainsKey(mapThemeMetaData.environment)) { List <MapThemeMetaData> mapThemeMetaDataList = new List <MapThemeMetaData>(); this.m_Themes[mapThemeMetaData.environment] = mapThemeMetaDataList; } //begin mod themes.Add(mapThemeMetaData); //end mod } } //begin mod this.m_Themes["Tropical"] = themes; this.m_Themes["Sunny"] = themes; this.m_Themes["Winter"] = themes; this.m_Themes["North"] = themes; this.m_Themes["Europe"] = themes; //end mod this.RefreshOverrideThemes(); }
public void LoadSaveInformation() { GamesList.Clear(); Package.AssetType[] assetTypeArray = new Package.AssetType[1]; int index = 0; Package.AssetType assetType = UserAssetType.SaveGameMetaData; assetTypeArray[index] = assetType; foreach (Package.Asset asset in PackageManager.FilterAssets(assetTypeArray)) { if (asset != (Package.Asset)null && asset.isEnabled) { SaveGameMetaData mmd = asset.Instantiate <SaveGameMetaData>(); GamesList.Add(new SaveGameRowStruct(asset, mmd)); } } using (List <Package.Asset> .Enumerator enumerator = SaveHelper.GetSavesOnDisk().GetEnumerator()) { while (enumerator.MoveNext()) { Package.Asset current = enumerator.Current; SaveGameMetaData saveGameMetaData = new SaveGameMetaData(); saveGameMetaData.assetRef = current; SaveGameMetaData mmd = saveGameMetaData; GamesList.Add(new SaveGameRowStruct(current, mmd)); } } //this.m_SaveList.items = this.GetListingItems(); //if (this.m_SaveList.items.Length > 0) //{ // int indexOf = this.FindIndexOf(LoadPanel.m_LastSaveName); // this.m_SaveList.selectedIndex = indexOf == -1 ? 0 : indexOf; // this.m_LoadButton.isEnabled = true; //} //else // this.m_LoadButton.isEnabled = false; }
private void ConnectToServer(ulong mapId) { m_connecting = false; Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; var package = PackageManager.FilterAssets(assetTypes).FirstOrDefault(x => x.package.GetPublishedFileID().AsUInt64 == mapId); if (package != null) { StartGame(package); } else { //TODO Also show a popup here as backup if the steamoverlay dosen't work PlatformService.ActivateGameOverlayToWebPage("http://steamcommunity.com/sharedfiles/filedetails/?id=" + mapId + "/"); Debug.Log("Please Download mapid " + mapId); m_connectionInfoLabel.text = DOWNLOAD_MAP_STRING; } UIView.library.Hide(base.GetType().Name, 1); }
private void Update() { if (m_mapID != 0) { float subscribedItemProgress = PlatformService.workshop.GetSubscribedItemProgress(new PublishedFileId(m_mapID)); if (subscribedItemProgress > 0) { m_downloadingMap = true; this.m_connectionInfoLabel.text = string.Format(DOWNLOADING_STRING, subscribedItemProgress * 100); } else if (m_downloadingMap) { Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; var package = PackageManager.FilterAssets(assetTypes).FirstOrDefault(x => x.package.GetPublishedFileID().AsUInt64 == m_mapID); if (package != null) { m_downloadingMap = false; StartGame(package); } this.m_connectionInfoLabel.text = FINSISH_DOWNLOAD_STRING; } } HandleIncomingNetworkMessages(); if (m_connectingTimeOutTimer < 0 && m_connecting) { m_connectionInfoLabel.text = COULD_NOT_CONNECT_STRING; m_connecting = false; } else { m_connectingTimeOutTimer -= Time.deltaTime; } }
public void OnStartNewGame() { if (m_selectedIndex < 0 || m_serverList.Count == 0) { return; } var mapId = ulong.Parse(m_serverList[m_selectedIndex]["mapId"]); if (mapId == 0) { Debug.Log("Mapid = 0"); return; } if (!m_gotResponseFromServer) { Debug.Log("No response from server " + m_gotResponseFromServer.ToString() + " " + m_pingTimeStamp); return; } Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; var package = PackageManager.FilterAssets(assetTypes).FirstOrDefault(x => x.package.GetPublishedFileID().AsUInt64 == mapId); if (package != null) { StartGame(package); } else { //TODO Also show a popup here as backup if the steamoverlay dosen't work m_errorLabel.text = DOWNLOAD_MAP_STRING; Steam.ActivateGameOverlayToWebPage("http://steamcommunity.com/sharedfiles/filedetails/?id=" + mapId + "/"); Debug.Log("Please Download mapid " + mapId); } UIView.library.Hide(base.GetType().Name, 1); }
static IEnumerable <Package.Asset> FilterAssets(Package.AssetType type) => PackageManager.FilterAssets(new[] { type }) .Where(asset => asset != null);
static Package.Asset FindAssetByShortName(string name, Package.AssetType assetType) => FilterAssets(assetType).FirstOrDefault(a => string.Equals(a.name, name, StringComparison.OrdinalIgnoreCase));
void LoadPackage(Package package, int index) { lock (mutex) { int total = data.Count, matCount = 0; int materialLimit = Mathf.Min(materialMax, dataMax - total - 20); foreach (Package.Asset asset in package) { string name = asset.name, checksum = asset.checksum; Package.AssetType type = asset.type; if (!Supports(type) || name.EndsWith("_SteamPreview") || name.EndsWith("_Snapshot") || name == "UserAssetData") { continue; } // Some workshop assets contain hundreds of materials. Probably by mistake. if (type == Package.AssetType.Texture && (texturesMain.ContainsKey(checksum) || texturesLod.ContainsKey(checksum)) || type == Package.AssetType.StaticMesh && meshes.ContainsKey(checksum) || type == Package.AssetType.Material && (materialsMain.ContainsKey(checksum) || materialsLod.ContainsKey(checksum) || ++matCount > materialLimit)) { continue; } if (data.ContainsKey(checksum)) { data.Reinsert(checksum); } else if (total < dataMax) { loadList.Add(asset); total++; } } } loadList.Sort((a, b) => (int)(a.offset - b.offset)); using (FileStream fs = File.OpenRead(package.packagePath)) for (int i = 0; i < loadList.Count; i++) { Package.Asset asset = loadList[i]; byte[] bytes = LoadAsset(fs, asset); loadMap[asset.checksum] = bytes; if (asset.type == Package.AssetType.Texture || asset.type == Package.AssetType.StaticMesh) { mtQueue.Enqueue(new KeyValuePair <Package.Asset, byte[]>(asset, bytes)); } } lock (mutex) { foreach (var kvp in loadMap) { if (!data.ContainsKey(kvp.Key)) // this check is necessary { data.Add(kvp.Key, new KeyValuePair <int, object>(index, kvp.Value)); } } } }
static bool Supports(Package.AssetType type) => type <= Package.UnityTypeEnd && type >= Package.UnityTypeStart;
public static IEnumerable <Package.Asset> AssetsByType(Package.AssetType assetType) { return(EnabledAssetsFirst(PackageManager.FilterAssets(assetType))); }
private void Update() { if (m_mapID != 0) { float subscribedItemProgress = Steam.workshop.GetSubscribedItemProgress(new PublishedFileId(m_mapID)); if (subscribedItemProgress > 0) { m_downloadingMap = true; this.m_connectionInfoLabel.text = string.Format(DOWNLOADING_STRING, subscribedItemProgress * 100); } else if (m_downloadingMap) { Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; var package = PackageManager.FilterAssets(assetTypes).FirstOrDefault(x => x.package.GetPublishedFileID().AsUInt64 == m_mapID); if (package != null) { m_downloadingMap = false; StartGame(package); } this.m_connectionInfoLabel.text = FINSISH_DOWNLOAD_STRING; } } HandleIncomingNetworkMessages(); if(m_connectingTimeOutTimer < 0 && m_connecting) { m_connectionInfoLabel.text = COULD_NOT_CONNECT_STRING; m_connecting = false; } else { m_connectingTimeOutTimer -= Time.deltaTime; } }
private void ConnectToServer(ulong mapId) { m_connecting = false; Package.AssetType[] assetTypes = new Package.AssetType[] { UserAssetType.SaveGameMetaData }; var package = PackageManager.FilterAssets(assetTypes).FirstOrDefault(x => x.package.GetPublishedFileID().AsUInt64 == mapId); if (package != null) { StartGame(package); } else { //TODO Also show a popup here as backup if the steamoverlay dosen't work Steam.ActivateGameOverlayToWebPage("http://steamcommunity.com/sharedfiles/filedetails/?id=" + mapId + "/"); Debug.Log("Please Download mapid " + mapId); m_connectionInfoLabel.text = DOWNLOAD_MAP_STRING; } UIView.library.Hide(base.GetType().Name, 1); }