示例#1
0
 public void Commit(WorldStampData data, WorldStamp stamp)
 {
     if (!Enabled)
     {
         return;
     }
     CommitInternal(data, stamp);
 }
示例#2
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     data.Objects.Clear();
     foreach (var prefabObjectData in Objects)
     {
         data.Objects.Add(prefabObjectData.JSONClone());
     }
     stamp.RemoveObjects          = data.Objects.Count > 0;
     stamp.RelativeMode           = RelativeMode;
     stamp.NeedsRelativeModeCheck = false;
 }
示例#3
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     data.SplatData.Clear();
     for (int i = 0; i < SplatData.Count; i++)
     {
         var compressedSplatData = SplatData[i];
         if (IgnoredSplats.Contains(compressedSplatData.Wrapper))
         {
             continue;
         }
         data.SplatData.Add(compressedSplatData.JSONClone());
     }
 }
示例#4
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     data.DetailData.Clear();
     for (int i = 0; i < DetailData.Count; i++)
     {
         var compressedDetailData = DetailData[i];
         if (IgnoredDetails.Contains(compressedDetailData.Wrapper))
         {
             continue;
         }
         data.DetailData.Add(compressedDetailData.JSONClone());
     }
     stamp.RemoveExistingDetails = data.DetailData.Count > 0;
 }
示例#5
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     data.Trees.Clear();
     for (int i = 0; i < Trees.Count; i++)
     {
         var treeInstance = Trees[i];
         if (IgnoredTrees.Contains(treeInstance.Prototype))
         {
             continue;
         }
         data.Trees.Add(treeInstance.Clone());
     }
     stamp.RemoveTrees = data.Trees.Count > 0;
 }
示例#6
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     data.VSData.Clear();
     for (int i = 0; i < VSData.Count; i++)
     {
         var instance = VSData[i];
         if (IgnoredPrototypes.Contains(instance.VSID))
         {
             continue;
         }
         data.VSData.Add(instance.Clone());
     }
     stamp.RemoveExistingVSData = data.VSData.Count > 0;
     stamp.IgnoredVSPrototypes  = IgnoredPrototypes.JSONClone();
 }
示例#7
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     StampExitNode.IsCommiting = true;
     for (int k = RoadNetworks.Count - 1; k >= 0; k--)
     {
         var roadNetwork = RoadNetworks[k];
         if (!roadNetwork)
         {
             RoadNetworks.RemoveAt(k);
             continue;
         }
         roadNetwork.ForceThink();
         var rn = UnityEngine.Object.Instantiate(roadNetwork);
         rn.transform.SetParent(stamp.transform);
         var go = rn.gameObject;
         for (int i = 0; i < rn.Nodes.Count; i++)
         {
             var node = rn.Nodes[i];
             for (int j = 0; j < node.OutConnections.Count; j++)
             {
                 var nodeConnection = node.OutConnections[j];
                 if (!StripNetwork && DeleteDataContainers)
                 {
                     nodeConnection.DestroyAllDataContainers();
                 }
             }
         }
         if (StripNetwork)
         {
             rn.Strip();
         }
         else
         {
             Common.GameObjectExtensions.DestroyEmptyObjectsInHierarchy(rn.transform);
         }
         if (CreateLightNetwork)
         {
             if (rn)
             {
                 UnityEngine.Object.Destroy(rn);
             }
             go.gameObject.AddComponent <RoadNetworkProxy>();
         }
     }
     StampExitNode.IsCommiting = false;
 }
示例#8
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     Mask.OnBeforeSerialize();
     data.Mask     = Mask.JSONClone();
     data.GridSize = GridSize;
 }
示例#9
0
 protected override void CommitInternal(WorldStampData data, WorldStamp stamp)
 {
     data.Heights   = Heights.JSONClone();
     data.ZeroLevel = ZeroLevel;
 }
示例#10
0
        protected void OnGUI()
        {
            EditorGUILayout.BeginHorizontal();
            Template.Terrain = (Terrain)EditorGUILayout.ObjectField("Target Terrain", Template.Terrain, typeof(Terrain), true);
            EditorExtensions.HelpButton("http://lrtw.net/madmaps/index.php?title=World_Stamp_Creator");
            EditorGUILayout.EndHorizontal();
            if (Template.Terrain == null)
            {
                EditorGUILayout.HelpBox("Please Select a Target Terrain", MessageType.Info);
                return;
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Capture Area:", Template.Bounds.size.xz().ToString());
            if (GUILayout.Button(new GUIContent(BoundsLocked ? GUIResources.LockedIcon : GUIResources.UnlockedIcon, "Lock Bounds"), EditorStyles.label,
                                 GUILayout.Width(24), GUILayout.Height(24)))
            {
                BoundsLocked = !BoundsLocked;
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Layers", EditorStyles.boldLabel);
            var recaptureContent = new GUIContent("Capture");

            recaptureContent.tooltip = "Recapture this data.";
            GUI.color = Template.Creators.Any(layer => layer.NeedsRecapture && layer.Enabled) ? Color.Lerp(Color.red, Color.white, .5f) : Color.white;
            if (GUILayout.Button(recaptureContent, EditorStyles.miniButton, GUILayout.Height(16)))
            {
                for (int i = 0; i < Template.Creators.Count; i++)
                {
                    var worldStampCreatorLayer = Template.Creators[i];
                    worldStampCreatorLayer.Capture(Template.Terrain, Template.Bounds);
                }
                GUIUtility.ExitGUI();
                return;
            }
            GUI.color = Color.white;
            EditorGUILayout.EndHorizontal();

            for (int i = 0; i < Template.Creators.Count; i++)
            {
                Template.Creators[i].DrawGUI(this);
            }

            EditorGUILayout.LabelField("", GUILayout.ExpandHeight(true));
            EditorExtensions.Seperator();

            if (GUILayout.Button("Create Stamp Template"))
            {
                CreateTemplate();
                GUIUtility.ExitGUI();
                return;
            }

            GUILayout.BeginHorizontal();
            TargetInjectionTemplate = (WorldStampTemplate)EditorGUILayout.ObjectField(TargetInjectionTemplate,
                                                                                      typeof(WorldStampTemplate), true);
            GUI.enabled = TargetInjectionTemplate;
            if (GUILayout.Button("Replace Existing Stamp Template", GUILayout.Width(220)))
            {
                CreateTemplate(TargetInjectionTemplate);
                GUIUtility.ExitGUI();
                return;
            }

            GUI.enabled = true;
            GUILayout.EndHorizontal();

            EditorExtensions.Seperator();

            Template.Layer = EditorGUILayout.LayerField("Create Stamp On Layer:", Template.Layer);
            if (GUILayout.Button("Create New Stamp"))
            {
                CreateStamp();
                GUIUtility.ExitGUI();
                return;
            }
            EditorGUILayout.BeginHorizontal();
            TargetInjectionStamp = (WorldStamp)EditorGUILayout.ObjectField(TargetInjectionStamp, typeof(WorldStamp), true);
            GUI.enabled          = TargetInjectionStamp;
            if (GUILayout.Button("Replace Existing Stamp", GUILayout.Width(220)))
            {
                CreateStamp(TargetInjectionStamp);
                GUIUtility.ExitGUI();
                return;
            }
            GUI.enabled = true;
            EditorGUILayout.EndHorizontal();
        }
示例#11
0
        public WorldStamp CreateStamp(WorldStamp stampToReplace = null)
        {
            if (Template.Creators.Any(layer => layer.Enabled && layer.NeedsRecapture) && EditorUtility.DisplayDialog("Layer {0} Needs Recapture",
                                                                                                                     string.Format("We need to recapture the terrain. Do this now?"), "Yes", "No"))
            {
                for (int i = 0; i < Template.Creators.Count; i++)
                {
                    var layer = Template.Creators[i];
                    if (layer.Enabled && layer.NeedsRecapture)
                    {
                        layer.Capture(Template.Terrain, Template.Bounds);
                    }
                }
            }

            bool       isWritingToPrefab = false;
            GameObject go = null;

            if (stampToReplace != null)
            {
                var prefabType = PrefabUtility.GetPrefabType(stampToReplace);
                if (prefabType == PrefabType.Prefab)
                {
                    go = (GameObject)PrefabUtility.InstantiatePrefab(stampToReplace.gameObject);
                    go.DestroyChildren();
                }
                else
                {
                    go = stampToReplace.gameObject;
                }
                isWritingToPrefab = true;
            }
            else
            {
                go = new GameObject("New WorldStamp");
            }

            go.transform.position = Template.Bounds.center.xz().x0z(Template.Bounds.min.y) + Vector3.up * GetCreator <HeightmapDataCreator>().ZeroLevel *Template.Terrain.terrainData.size.y;
            var stamp = go.GetOrAddComponent <WorldStamp>();
            var data  = new WorldStampData();

            foreach (var layer in Template.Creators)
            {
                if (layer.Enabled)
                {
                    layer.Commit(data, stamp);
                }
            }
            data.Size = Template.Bounds.size;

            stamp.SetData(data);
            stamp.HaveHeightsBeenFlipped = true;
            //go.transform.SetLayerRecursive(Template.Layer);

            if (isWritingToPrefab)
            {
                stamp = PrefabUtility.ReplacePrefab(stamp.gameObject, stampToReplace.gameObject).GetComponent <WorldStamp>();
                DestroyImmediate(go);
            }

            EditorGUIUtility.PingObject(stamp);
            EditorUtility.SetDirty(stamp);
            return(stamp);
        }
示例#12
0
 protected abstract void CommitInternal(WorldStampData data, WorldStamp stamp);