コード例 #1
0
        void DuplicateAction()
        {
            if (gameObject.activeSelf)
            {
                DuplicateData = GetUnitsStorage();

                if (DuplicateData != null && DuplicateData.Units.Length > 0)
                {
                    if (FirstSelected == null)
                    {
                        ShowGroupError();
                        return;
                    }
                    Undo.RegisterUndo(new UndoHistory.HistoryUnitsRemove(), new UndoHistory.HistoryUnitsRemove.UnitsRemoveParam(new SaveLua.Army.UnitsGroup[] { FirstSelected.Source }));

                    GameObject[] CreatedUnits = ReadUnitsStorage(DuplicateData);

                    if (CreatedUnits.Length > 0)
                    {
                        FirstSelected.Refresh();
                        GoToSelection();
                        SelectionManager.Current.SelectObjects(CreatedUnits);
                        GenericInfoPopup.ShowInfo("Pasted " + CreatedUnits.Length + " units.");
                    }
                }
            }
        }
コード例 #2
0
        GameObject[] ReadUnitsStorage(UnitsStorage Data)
        {
            List <GameObject> CreatedUnits = new List <GameObject>();

            if (Data != null && Data.Units != null)
            {
                for (int i = 0; i < Data.Units.Length; i++)
                {
                    SaveLua.Army.Unit NewUnit = new SaveLua.Army.Unit();
                    NewUnit.Name    = SaveLua.Army.Unit.GetFreeName("UNIT_");
                    NewUnit.type    = Data.Units[i].ID;
                    NewUnit.orders  = Data.Units[i].orders;
                    NewUnit.platoon = Data.Units[i].platoon;

                    if (!ScmapEditor.Current.Teren.terrainData.bounds.Contains(ScmapEditor.Current.Teren.transform.InverseTransformPoint(Data.Units[i].pos)))
                    {
                        Vector3 Offset = ScmapEditor.Current.Teren.transform.TransformPoint(ScmapEditor.Current.Teren.terrainData.bounds.center) - Data.Center;
                        Offset.y           = 0;
                        Data.Units[i].pos += Offset;
                    }

                    NewUnit.Position    = ScmapEditor.WorldPosToScmap(Data.Units[i].pos);
                    NewUnit.Orientation = UnitInstance.ScmapRotationFromRotation(Data.Units[i].rot);

                    FirstSelected.Source.AddUnit(NewUnit);
                    NewUnit.Instantiate();

                    SnapAction(NewUnit.Instance.transform, NewUnit.Instance.gameObject);
                    CreatedUnits.Add(NewUnit.Instance.gameObject);
                }
            }

            return(CreatedUnits.ToArray());
        }
コード例 #3
0
        static UnitsStorage GetUnitsStorage()
        {
            GameObject[] Objs = SelectionManager.Current.GetAllSelectedObjects(false);

            UnitsStorage Data = new UnitsStorage();

            Data.Units = new UnitsStorage.Unit[Objs.Length];

            for (int i = 0; i < Objs.Length; i++)
            {
                UnitInstance UnitI = Objs[i].GetComponent <UnitInstance>();

                UnitsStorage.Unit UnitToSave = new UnitsStorage.Unit();
                UnitToSave.ID      = UnitI.Owner.type;
                UnitToSave.pos     = UnitI.transform.position;
                UnitToSave.rot     = UnitI.transform.rotation;
                UnitToSave.orders  = UnitI.Owner.orders;
                UnitToSave.platoon = UnitI.Owner.platoon;
                Data.Units[i]      = UnitToSave;
                Data.Center       += UnitToSave.pos;
            }

            Data.Center /= Data.Units.Length;
            return(Data);
        }
コード例 #4
0
 void CopyAction()
 {
     Debug.Log("Copy");
     if (gameObject.activeSelf)
     {
         CopyData = GetUnitsStorage();
     }
 }
コード例 #5
0
        public void ImportUnits()
        {
            if (FirstSelected == null)
            {
                ShowGroupError();
                return;
            }

            var paths = StandaloneFileBrowser.OpenFilePanel("Import Units", DefaultPath, extensions, false);


            if (paths.Length == 0 || string.IsNullOrEmpty(paths[0]))
            {
                return;
            }

            string       data = File.ReadAllText(paths[0]);
            UnitsStorage Data = JsonUtility.FromJson <UnitsStorage>(data);

            if (Data == null || Data.Units == null || Data.Units.Length == 0)
            {
                return;
            }

            Undo.RegisterUndo(new UndoHistory.HistoryUnitsRemove(), new UndoHistory.HistoryUnitsRemove.UnitsRemoveParam(new SaveLua.Army.UnitsGroup[] { FirstSelected.Source }));

            GameObject[] CreatedUnits = ReadUnitsStorage(Data);

            if (CreatedUnits.Length > 0)
            {
                FirstSelected.Refresh();

                GoToSelection();

                SelectionManager.Current.SelectObjects(CreatedUnits);

                GenericInfoPopup.ShowInfo("Imported " + CreatedUnits.Length + " units.");
            }
        }
コード例 #6
0
        public void ExportUnits()
        {
            GameObject[] Objs = SelectionManager.Current.GetAllSelectedObjects(false);

            if (SelectionManager.Current.Selection.Ids.Count <= 0)
            {
                GenericInfoPopup.ShowInfo("No units selected");
                return;
            }

            var path = StandaloneFileBrowser.SaveFilePanel("Export Units", DefaultPath, "", extensions);

            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            UnitsStorage Data = GetUnitsStorage();

            string DataString = JsonUtility.ToJson(Data, true);

            File.WriteAllText(path, DataString);
            EnvPaths.SetLastPath(ExportPathKey, Path.GetDirectoryName(path));
        }