コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
 public void AddToPool(MarkerObject objectToDestroy)
 {
     objectToDestroy.gameObject.SetActive(false);
     objectToDestroy.transform.localScale = Vector3.one;
     pool.Enqueue(objectToDestroy);
 }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 public static void AddMarkerObject(MarkerObject obj)
 {
     _objects[(int)LAYER_ORDER.OTHERS].Add(obj);
 }
コード例 #6
0
 public static void RemoveMarkerObject(MarkerObject obj)
 {
     _objects[(int)LAYER_ORDER.OTHERS].Remove(obj);
 }