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."); } } } }
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()); }
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); }
void CopyAction() { Debug.Log("Copy"); if (gameObject.activeSelf) { CopyData = GetUnitsStorage(); } }
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."); } }
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)); }