Beispiel #1
0
 private void AutoSaveModification(Scene arg0, LoadSceneMode arg1)
 {
     if (SceneItemData.TryGetValue(arg0.name, out var setting))
     {
         setting.AutoSave();
     }
 }
Beispiel #2
0
 static void Postfix(SceneItemData data)
 {
     Dbgl("SIMB InitFromData zyx");
     foreach (BoardItemSeat bis in ((SceneItemMissionBoardData)data).allBoardItemSeat)
     {
         Dbgl(bis.modelPath + " " + bis.pos.x + " " + bis.pos.y + " " + bis.pos.z + " " + bis.missionId);
     }
 }
Beispiel #3
0
 private void SaveJson()
 {
     ItemData.mod_version = Version;
     SerializeHelper.SaveGlobalSettings(ItemData);
     if (GM != null)
     {
         if (SceneItemData.TryGetValue(GM.sceneName, out var currentSetting))
         {
             currentSetting.AutoSave();
         }
     }
     Logger.LogDebug("Save Json");
 }
    private void OnSaveButton()
    {
        Debug.Log("Save Scene Data");
        var fileName = CheckFileName(saveInput.text);

        if (!string.IsNullOrEmpty(fileName))
        {
            // Hack:由于复制构造不经过ScenePlayer,因此数据也不从ScenePlayer获得
            var data         = new SceneData();
            var items        = FindObjectsOfType <MapItem>();
            var cubes        = FindObjectsOfType <TerrainCube>();
            var itemDataList = new List <SceneItemData>();
            var cubeDatalist = new List <TerrainCubeData>();
            for (int i = 0; i < items.Length; i++)
            {
                // Hack:复制构造没有typeData
                var sceneItemData = new SceneItemData();
                sceneItemData.mapItemId = 1;
                sceneItemData.position  = items[i].transform.position.ToSerilizable();
                sceneItemData.rotation  = items[i].transform.rotation.ToSerilizable();
                itemDataList.Add(sceneItemData);
            }
            for (int i = 0; i < cubes.Length; i++)
            {
                var cubeItemData = new TerrainCubeData();
                cubeItemData.terrainId = 1;
                var bounds = cubes[i].GetComponent <BoxCollider>().bounds;
                cubeItemData.minValue = bounds.min.ToSerilizable();
                cubeItemData.maxValue = bounds.max.ToSerilizable();
                cubeDatalist.Add(cubeItemData);
            }
            data.itemData    = itemDataList;
            data.terrainData = cubeDatalist;

            using (var fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
            {
                var serializer = new XmlSerializer(typeof(SceneData));
                serializer.Serialize(fs, data);
            }
        }
    }
Beispiel #5
0
        public void OnObjectDropped(ReorderableList.ReorderableListEventStruct e)
        {
            RectTransform droppedTransform = e.DroppedObject.transform as RectTransform;
            Canvas        parentCanvas     = (e.DroppedObject.transform as RectTransform).GetParentCanvas();
            Camera        parentCamera     = parentCanvas.worldCamera;
            Vector2       canvasSize       = parentCanvas.pixelRect.size * parentCanvas.scaleFactor;
            Vector2       pivot            = droppedTransform.anchorMin * droppedTransform.anchorMax;
            Vector2       screenOffset     = pivot * canvasSize;
            Vector3       screenPosition   = screenOffset + droppedTransform.anchoredPosition * parentCanvas.scaleFactor;

            screenPosition.z = 1;
            Ray   ray   = new Ray(parentCamera.ScreenToWorldPoint(screenPosition), parentCamera.transform.forward);
            Plane plane = new Plane(-parentCamera.transform.forward, Vector3.zero);

            plane.Raycast(ray, out float d);
            Vector3 worldPos = ray.GetPoint(d);

            SceneItemElementViewController controller = e.DroppedObject.GetComponent <SceneItemElementViewController>();

            if ((e.FromList.transform as RectTransform).rect.Contains(e.DroppedObject.transform.position))
            {
                Destroy(e.DroppedObject);
                return;
            }

            // create scene item
            SceneItemData data = SceneItemData.Empty;

            data.position    = worldPos;
            data.payloadType = controller.sceneItemTemplateData.payloadType;
            data.payload     = data.payloadType == PayloadType.Primitive
                ? controller.sceneItemTemplateData.itemName
                : controller.payload;

            ISceneItem item = m_SceneItemFactory.Create(data);

            e.DroppedObject.transform.parent = null;
            Destroy(e.DroppedObject);
        }
Beispiel #6
0
        // Spawn Object from Json files
        private void SpawnFromSettings(Scene arg0, LoadSceneMode arg1)
        {
            //Logger.LogDebug($"Item Count:{ItemData.items.Count}");
            if (arg0.name.Contains("Menu_Title"))
            {
                return;
            }

            IEnumerator SpawnGlobal(Scene arg0)
            {
                int count = 0;

                Logger.LogDebug("Try to spawn setting");
                string sceneName = arg0.name;

                yield return(new WaitUntil(() => (arg0.isLoaded)));

                var spawnlist = ItemData.items.Where(x => x.sceneName == sceneName).ToArray();

                foreach (var r in spawnlist)
                {
                    try
                    {
                        if (ObjectLoader.CloneDecoration(r.pname, r) != null)
                        {
                            count++;
                        }
                    }
                    catch
                    {
                        Logger.LogError($"Spawn Failed When Try to Spawn {r?.pname}");
                    }
                }
                Modding.Logger.LogDebug($"All Fine,Spawn {count} in {sceneName}");
                yield break;
            }

            IEnumerator SpawnLocal(Scene arg0, ItemSettings setting)
            {
                int count = 0;

                Logger.LogDebug("Try to spawn setting");
                string sceneName = arg0.name;

                yield return(new WaitUntil(() => (arg0.isLoaded)));

                var spawnlist = setting.items;

                foreach (var r in spawnlist)
                {
                    try
                    {
                        if (ObjectLoader.CloneDecoration(r.pname, r) != null)
                        {
                            count++;
                        }
                    }
                    catch
                    {
                        Logger.LogError($"Spawn Failed When Try to Spawn {r?.pname}");
                    }
                }
                Modding.Logger.LogDebug($"All Fine,Spawn {count} in {sceneName}");
                yield break;
            }

            if (ItemData.items.Count > 0)
            {
                GameManager.instance.StartCoroutine(SpawnGlobal(arg0));
            }
            if (SceneItemData.TryGetValue(arg0.name, out var sceneSetting))
            {
                GameManager.instance.StartCoroutine(SpawnLocal(arg0, sceneSetting));
            }
            else
            {
                var _scene_setting = SerializeHelper.LoadSceneSettings <ItemSettings>(arg0.name);
                if (_scene_setting != null)
                {
                    SceneItemData.Add(arg0.name, _scene_setting);
                    GameManager.instance.StartCoroutine(SpawnLocal(arg0, _scene_setting));
                }
            }
        }
Beispiel #7
0
 static void Prefix(ref SceneItemData data)
 {
 }
        public void DuplicateTarget()
        {
            SceneItemData data = m_DataFactory.Create(m_ParentHandle.target);

            m_ItemFactory.Create(data);
        }