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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
 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]);
     }
 }
Ejemplo n.º 4
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;
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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;
            }
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
 static IEnumerable <Package.Asset> FilterAssets(Package.AssetType type) =>
 PackageManager.FilterAssets(new[] { type })
 .Where(asset => asset != null);
Ejemplo n.º 11
0
 static Package.Asset FindAssetByShortName(string name, Package.AssetType assetType) =>
 FilterAssets(assetType).FirstOrDefault(a => string.Equals(a.name, name, StringComparison.OrdinalIgnoreCase));
Ejemplo n.º 12
0
        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));
                    }
                }
            }
        }
Ejemplo n.º 13
0
 static bool Supports(Package.AssetType type) => type <= Package.UnityTypeEnd && type >= Package.UnityTypeStart;
Ejemplo n.º 14
0
 public static IEnumerable <Package.Asset> AssetsByType(Package.AssetType assetType)
 {
     return(EnabledAssetsFirst(PackageManager.FilterAssets(assetType)));
 }
Ejemplo n.º 15
0
        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;
            }
        }
Ejemplo n.º 16
0
        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);
        }