void UpdateArmyToggles() { for (int t = 0; t < ArmyToogles.Length; t++) { ArmyToogles[t].ResetTesting(); } int Count = SelectionManager.Current.Selection.Ids.Count; for (int i = 0; i < Count; i++) { GameObject CurrentObj = SelectionManager.Current.AffectedGameObjects[SelectionManager.Current.Selection.Ids[i]]; MarkerObject Mo = CurrentObj.GetComponent <MarkerObject>(); if (Mo == null) { continue; } SaveLua.Marker Current = CurrentObj.GetComponent <MarkerObject>().Owner; if (Current.MarkerType == SaveLua.Marker.MarkerTypes.Mass || Current.MarkerType == SaveLua.Marker.MarkerTypes.Hydrocarbon) { for (int t = 0; t < ArmyToogles.Length; t++) { if (Current.SpawnWithArmy.Contains(t)) { ArmyToogles[t].HasOnValue = true; } else { ArmyToogles[t].HasOffValue = true; } } } } for (int t = 0; t < ArmyToogles.Length; t++) { ArmyToogles[t].ApplyTesting(); } }
public void Place(Vector3[] Positions, Quaternion[] Rotations, Vector3[] Scales) { //List<MapLua.SaveLua.Marker> NewMarkers = new List<MapLua.SaveLua.Marker>(); int mc = 0; // MasterChainID LastAddedMarkers = new List <int>(); int TotalMarkersCount = MapLuaParser.Current.SaveLuaFile.Data.MasterChains[mc].Markers.Count; bool AnyCreated = false; if (CreationId == CREATE_PRESET) { Vector3 NewPos; MarkerPreset Mpreset = MarkerPresets[SpawnPressetDropdown.value].GetComponent <MarkerPreset>(); for (int i = 0; i < Positions.Length; i++) { for (int m = 0; m < Mpreset.Markers.Length; m++) { if (!AnyCreated) { Undo.RegisterUndo(new UndoHistory.HistoryMarkersRemove()); } AnyCreated = true; //Debug.Log(Mpreset.Markers[m].Tr.localPosition); NewPos = Positions[i] + Rotations[i] * Mpreset.Markers[m].Tr.localPosition; if (SelectionManager.Current.SnapToGrid) { NewPos = ScmapEditor.SnapToGridCenter(NewPos, true, SelectionManager.Current.SnapToWater); } //NewPos.y = ScmapEditor.Current.Teren.SampleHeight(NewPos); MapLua.SaveLua.Marker NewMarker = new MapLua.SaveLua.Marker(Mpreset.Markers[m].MarkerType); NewMarker.position = ScmapEditor.WorldPosToScmap(NewPos); //NewMarker.orientation = MarkersControler.CreateMarker(NewMarker, mc); ChainsList.AddToCurrentChain(NewMarker); LastAddedMarkers.Add(TotalMarkersCount); TotalMarkersCount++; MapLuaParser.Current.SaveLuaFile.Data.MasterChains[mc].Markers.Add(NewMarker); } } } else { for (int i = 0; i < Positions.Length; i++) { if (!AnyCreated) { Undo.RegisterUndo(new UndoHistory.HistoryMarkersRemove()); } AnyCreated = true; MapLua.SaveLua.Marker NewMarker = new MapLua.SaveLua.Marker(LastCreationType); bool snapToWater = SelectionManager.Current.SnapToWater; if (LastCreationType == MapLua.SaveLua.Marker.MarkerTypes.Mass || LastCreationType == MapLua.SaveLua.Marker.MarkerTypes.Hydrocarbon) { snapToWater = false; } if (SelectionManager.Current.SnapToGrid) { Positions[i] = ScmapEditor.SnapToGridCenter(Positions[i], true, snapToWater); } //Positions[i].y = ScmapEditor.Current.Teren.SampleHeight(Positions[i]); ChainsList.AddToCurrentChain(NewMarker); NewMarker.position = ScmapEditor.WorldPosToScmap(Positions[i]); if (CreationId == CREATE_CAM) { NewMarker.orientation = MarkerObject.MarkerRotToScmapRot(Rotations[i], MapLua.SaveLua.Marker.MarkerTypes.CameraInfo); } else { NewMarker.orientation = Vector3.zero; } MarkersControler.CreateMarker(NewMarker, mc); LastAddedMarkers.Add(TotalMarkersCount); TotalMarkersCount++; MapLuaParser.Current.SaveLuaFile.Data.MasterChains[mc].Markers.Add(NewMarker); } } if (AnyCreated) { //MapLuaParser.Current.SaveLuaFile.Data.MasterChains[mc].Markers = MapLuaParser.Current.SaveLuaFile.Data.MasterChains[mc].Markers.Concat<MapLua.SaveLua.Marker>(NewMarkers.ToArray()); MarkerSelectionOptions.UpdateOptions(); MarkersControler.UpdateBlankMarkersGraphics(); RenderMarkersWarnings.Generate(); } }
public void AddToPool(MarkerObject objectToDestroy) { objectToDestroy.gameObject.SetActive(false); objectToDestroy.transform.localScale = Vector3.one; pool.Enqueue(objectToDestroy); }
private void ProcessMarkesWithSameId(MarkerObject markerObject, List <MarkerOnScene> gameObjects, List <int> foundedMarkers) { int index = 0; index = gameObjects.Count - 1; while (index >= 0) { MarkerOnScene markerOnScene = gameObjects[index]; markerOnScene.bestMatchIndex = -1; if (markerOnScene.destroyAt > 0 && markerOnScene.destroyAt < Time.fixedTime) { Destroy(markerOnScene.gameObject); gameObjects.RemoveAt(index); } --index; } index = foundedMarkers.Count - 1; // Match markers with existing gameObjects while (index >= 0) { int markerIndex = foundedMarkers[index]; Matrix4x4 transforMatrix = markerDetector.TransfromMatrixForIndex(markerIndex); Vector3 position = MatrixHelper.GetPosition(transforMatrix); float minDistance = float.MaxValue; int bestMatch = -1; for (int i = 0; i < gameObjects.Count; i++) { MarkerOnScene markerOnScene = gameObjects [i]; if (markerOnScene.bestMatchIndex >= 0) { continue; } float distance = Vector3.Distance(markerOnScene.gameObject.transform.position, position); if (distance < minDistance) { bestMatch = i; } } if (bestMatch >= 0) { gameObjects[bestMatch].bestMatchIndex = markerIndex; foundedMarkers.RemoveAt(index); } --index; } //Destroy excessive objects index = gameObjects.Count - 1; while (index >= 0) { MarkerOnScene markerOnScene = gameObjects[index]; if (markerOnScene.bestMatchIndex < 0) { if (markerOnScene.destroyAt < 0) { markerOnScene.destroyAt = Time.fixedTime + 0.2f; } } else { markerOnScene.destroyAt = -1f; int markerIndex = markerOnScene.bestMatchIndex; Matrix4x4 transforMatrix = markerDetector.TransfromMatrixForIndex(markerIndex); PositionObject(markerOnScene.gameObject, transforMatrix); } index--; } //Create objects for markers not matched with any game object foreach (int markerIndex in foundedMarkers) { GameObject gameObject = Instantiate(markerObject.markerPrefab); MarkerOnScene markerOnScene = new MarkerOnScene() { gameObject = gameObject }; gameObjects.Add(markerOnScene); Matrix4x4 transforMatrix = markerDetector.TransfromMatrixForIndex(markerIndex); PositionObject(markerOnScene.gameObject, transforMatrix); } }
public static void AddMarkerObject(MarkerObject obj) { _objects[(int)LAYER_ORDER.OTHERS].Add(obj); }
public static void RemoveMarkerObject(MarkerObject obj) { _objects[(int)LAYER_ORDER.OTHERS].Remove(obj); }