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; }
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(); }
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);