示例#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
        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);
        }
示例#11
0
 protected abstract void CommitInternal(WorldStampData data, WorldStamp stamp);