public override void OnAssetSaved(string name, object asset, out Dictionary <string, byte[]> userData) { if (m_Data == null) { userData = null; return; } Debug.Log($"Saving MovableBridgeAIData for {name}"); using (var stream = new MemoryStream()) { using (var writer = new PackageWriter(stream)) { writer.Write(kVersion); m_Data.Write(writer); } userData = new Dictionary <string, byte[]> { { kDataKey, stream.ToArray() } }; } var prefab = ToolsModifierControl.toolController.m_editPrefabInfo; ApplyCustomAI(prefab, m_Data); m_Data = null; }
public static void OnAssetLoadedImpl(string name, PrefabInfo prefab, Dictionary <string, byte[]> userData) { if (!userData.TryGetValue(kDataKey, out var bytes)) { return; } Debug.Log($"Found MovableBridgeAIData for {name}"); MovableBridgeAIData data; using (var stream = new MemoryStream(bytes)) { using (var reader = new PackageReader(stream)) { reader.ReadInt32(); // version data = new MovableBridgeAIData(); data.Read(reader); } } ApplyCustomAI(prefab, data); }
private static MovableBridgeAIData StripCustomAI(PrefabInfo prefab) { if (prefab is BuildingInfo buildingInfo && buildingInfo.m_buildingAI is MovableBridgeAI customAI) { if (prefab.editorCategory != "MovableBridge") { throw new Exception("Missing 'MovableBridge' editorCategory!"); } PlayerBuildingAI vanillaAI = buildingInfo.gameObject.AddComponent <PlayerBuildingAI>(); vanillaAI.CopyFrom(customAI); var data = new MovableBridgeAIData(); data.CopyFrom(customAI); UnityEngine.Object.DestroyImmediate(customAI); buildingInfo.m_buildingAI = vanillaAI; vanillaAI.m_info = buildingInfo; UnityEngine.Debug.Log("Stripped " + data.ToString()); return(data); }
public static void OnPreSaveAsset(string assetName) { var prefab = ToolsModifierControl.toolController.m_editPrefabInfo; m_Data = StripCustomAI(prefab); }