Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
            }
Beispiel #4
0
        public static void OnPreSaveAsset(string assetName)
        {
            var prefab = ToolsModifierControl.toolController.m_editPrefabInfo;

            m_Data = StripCustomAI(prefab);
        }