public void Commit(WorldStampData data, WorldStamp stamp) { if (!Enabled) { return; } CommitInternal(data, stamp); }
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; }
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()); } }
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; }
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; }
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(); }
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; }
protected override void CommitInternal(WorldStampData data, WorldStamp stamp) { Mask.OnBeforeSerialize(); data.Mask = Mask.JSONClone(); data.GridSize = GridSize; }
protected override void CommitInternal(WorldStampData data, WorldStamp stamp) { data.Heights = Heights.JSONClone(); data.ZeroLevel = ZeroLevel; }
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); }
protected abstract void CommitInternal(WorldStampData data, WorldStamp stamp);