示例#1
0
        public static void PlaceIntersection(BuildingInfo buildingInfo, FastList <ushort> segments, FastList <ushort> nodes)
        {
            if (!AssetDataExtension.TryGetValue(buildingInfo, out AssetMarking assetMarking))
            {
                return;
            }

            FromXml(assetMarking.Config, assetMarking.GetMap(segments.m_buffer, nodes.m_buffer), false);
        }
示例#2
0
 static void Prefix(string saveName, ref string assetName)
 {
     AssetDataExtension.BeforeSave();
     if (ToolsModifierControl.toolController.m_editPrefabInfo is NetInfo netInfo)
     {
         Assertion.Assert(netInfo is not null);
         Assertion.Assert(netInfo.name is not null);
         Log.Debug("SaveAssetPatch.Prefix: netInfo.name= " + netInfo.name.ToSTR());
         assetName = PackageHelper.StripName(netInfo.name);
         assetName = assetName.Remove("_Data");
     }
 }
示例#3
0
        /// <summary>
        /// when loading asset from a file, IAssetData.OnAssetLoaded() is called for all assets but the one that is loaded from the file.
        /// this postfix calls IAssetData.OnAssetLoaded() for asset loaded from file.
        /// </summary>
        public static void Postfix(LoadAssetPanel __instance, UIListBox ___m_SaveList)
        {
            // Taken from LoadAssetPanel.OnLoad
            var selectedIndex            = ___m_SaveList.selectedIndex;
            var getListingMetaDataMethod = typeof(LoadSavePanelBase <CustomAssetMetaData>).GetMethod(
                "GetListingMetaData", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            var listingMetaData = (CustomAssetMetaData)getListingMetaDataMethod.Invoke(__instance, new object[] { selectedIndex });

            // Taken from LoadingManager.LoadCustomContent
            if (listingMetaData.userDataRef != null)
            {
                AssetDataWrapper.UserAssetData userAssetData = listingMetaData.userDataRef.Instantiate() as AssetDataWrapper.UserAssetData;
                if (userAssetData == null)
                {
                    userAssetData = new AssetDataWrapper.UserAssetData();
                }
                AssetDataExtension.OnAssetLoadedImpl(listingMetaData.name, ToolsModifierControl.toolController.m_editPrefabInfo, userAssetData.Data);
            }
        }
示例#4
0
        /// <summary>
        /// when loading asset from a file, IAssetData.OnAssetLoaded() is called for all assets but the one that is loaded from the file.
        /// this postfix calls IAssetData.OnAssetLoaded() for asset loaded from file.
        /// Note: even if new road intanciated based on an AR Road, we still need to do this because
        ///       NetInfo metadata is stored in external array
        ///       also we cannot be sure that it is always instancitated properly.
        /// </summary>
        public static void Postfix(LoadAssetPanel __instance, UIListBox ___m_SaveList)
        {
            try {
                // Taken from LoadAssetPanel.OnLoad
                var selectedIndex   = ___m_SaveList.selectedIndex;
                var listingMetaData = (CustomAssetMetaData)mListingMetaData
                                      .Invoke(__instance, new object[] { selectedIndex });

                // Taken from LoadingManager.LoadCustomContent
                if (listingMetaData.userDataRef != null)
                {
                    AssetDataWrapper.UserAssetData userAssetData =
                        listingMetaData.userDataRef.Instantiate() as AssetDataWrapper.UserAssetData;
                    if (userAssetData == null)
                    {
                        userAssetData = new AssetDataWrapper.UserAssetData();
                    }
                    Log.Debug($"LoadAssetPanel.OnLoad().Postfix(): Loading asset from load asset panel");
                    AssetDataExtension.OnAssetLoadedImpl(
                        listingMetaData.name,
                        ToolsModifierControl.toolController.m_editPrefabInfo,
                        userAssetData.Data);

                    var originalInfo = GetOriginalNetInfo(listingMetaData);
                    if (originalInfo)
                    {
                        // OnLoad() calls IntializePrefab() which reverses metadata
                        // and can't be patched because its generic.
                        // so we restore asset metadata here
                        Log.Debug($" restoring original metadata.");
                        AssetDataExtension.OnAssetLoadedImpl(
                            listingMetaData.name,
                            originalInfo,
                            userAssetData.Data);
                    }
                }
                NetInfoExtionsion.Ensure_EditedNetInfos();
                Log.Debug($"LoadAssetPanel.OnLoad().Postfix() succeeded!");
            } catch (Exception ex) {
                Log.Exception(ex);
            }
        }
示例#5
0
 public static void Postfix() => AssetDataExtension.AfterSave();