public SplinatedMeshMaker AddSplinatedObject(){ if (SplinatedObjects == null) { SplinatedObjects = new List<SplinatedMeshMaker>(); } SplinatedMeshMaker SMM = new SplinatedMeshMaker(); SMM.Init(GSDSpline,this,transform); SplinatedObjects.Add(SMM); SMM.SetDefaultTimes(bIsEndPoint,tTime,NextTime,idOnSpline,GSDSpline.distance); SMM.StartPos = GSDSpline.GetSplineValue(SMM.StartTime); SMM.EndPos = GSDSpline.GetSplineValue(SMM.EndTime); return SMM; }
public void CopySplinatedObject(ref SplinatedMeshMaker tSMM){ SplinatedMeshMaker SMM = tSMM.Copy(); SplinatedObjects.Add(SMM); SetupSplinatedMeshes(); }
public void DoSplineObjects(){ if(!tNode.CanSplinate()){ return; } if(tNode.SplinatedObjects == null){ tNode.SplinatedObjects = new List<GSD.Roads.Splination.SplinatedMeshMaker>(); } eCount = tNode.SplinatedObjects.Count; SMM = null; eCount = tNode.SplinatedObjects.Count; if(eCount == 0){ } for(int i=0;i<tNode.SplinatedObjects.Count;i++){ currentCount +=1; SMM = tNode.SplinatedObjects[i]; if(SMM.EM == null){ SMM.EM = new GSD.Roads.Splination.SplinatedMeshMaker.SplinatedMeshEditorMaker(); } SMM.EM.Setup(SMM); //GSD.Roads.Splination.AxisTypeEnum tAxisTypeSpline = GSD.Roads.Splination.AxisTypeEnum.Z; EditorGUILayout.BeginVertical("TextArea"); if(SMM.bNeedsUpdate){ SMM.Setup(true); } EditorGUILayout.BeginHorizontal(); SMM.bToggle = EditorGUILayout.Foldout(SMM.bToggle,"#"+ currentCount.ToString() + ": " + SMM.tName); if(GUILayout.Button(btnExtrudeText,GSDImageButton,GUILayout.Width(32f))){ } if(GUILayout.Button(btnRefreshText,GSDImageButton,GUILayout.Width(16f))){ SMM.Setup(); } if(GUILayout.Button(btnSaveText,GSDImageButton,GUILayout.Width(16f))){ GSDSaveWindow tSave = EditorWindow.GetWindow<GSDSaveWindow>(); tSave.Initialize(ref tSceneRect,GSDSaveWindow.WindowTypeEnum.Extrusion,tNode,SMM); } if(GUILayout.Button(btnCopyText,GSDImageButton,GUILayout.Width(16f))){ Undo.RecordObject(tNode,"Copy"); tNode.CopySplinatedObject(ref SMM); EditorUtility.SetDirty(tNode); } if(GUILayout.Button(btnDeleteText,GSDImageButton,GUILayout.Width(16f))){ Undo.RecordObject(tNode,"Delete"); tNode.RemoveSplinatedObject(i); EditorUtility.SetDirty(tNode); } EditorGUILayout.EndHorizontal(); if(!SMM.bToggle){ EditorGUILayout.EndVertical(); continue; } GUILayout.Space(8f); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("General options:"); if(GUILayout.Button("Online manual",EditorStyles.miniButton,GUILayout.Width(120f))){ Application.OpenURL("http://microgsd.com/Support/RoadArchitectManual.aspx"); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical("box"); //Name: SMM.EM.tName = EditorGUILayout.TextField("Name:",SMM.tName); //Game object (prefab): SMM.EM.CurrentSplination = (GameObject)EditorGUILayout.ObjectField("Prefab:",SMM.CurrentSplination,typeof(GameObject), false); //Game object (prefab start cap): SMM.EM.CurrentSplinationCap1 = (GameObject)EditorGUILayout.ObjectField("Prefab start cap:",SMM.CurrentSplinationCap1,typeof(GameObject), false); //Prefab start cap height offset: if(SMM.CurrentSplinationCap1 != null){ SMM.EM.CapHeightOffset1 = EditorGUILayout.FloatField(" Height offset:",SMM.CapHeightOffset1); } //Game object (prefab end cap): SMM.EM.CurrentSplinationCap2 = (GameObject)EditorGUILayout.ObjectField("Prefab end cap:",SMM.CurrentSplinationCap2,typeof(GameObject), false); //Prefab end cap height offset: if(SMM.CurrentSplinationCap2 != null){ SMM.EM.CapHeightOffset2 = EditorGUILayout.FloatField(" Height offset:",SMM.CapHeightOffset2); } //Material overrides: SMM.EM.bMaterialOverride = EditorGUILayout.Toggle("Material override: ",SMM.bMaterialOverride); if(SMM.bMaterialOverride){ SMM.EM.SplinatedMaterial1 = (Material)EditorGUILayout.ObjectField("Override mat #1: ",SMM.SplinatedMaterial1,typeof(Material), false); SMM.EM.SplinatedMaterial2 = (Material)EditorGUILayout.ObjectField("Override mat #2: ",SMM.SplinatedMaterial2,typeof(Material), false); } //Axis: SMM.EM.Axis = (GSD.Roads.Splination.AxisTypeEnum)EditorGUILayout.Popup("Extrusion axis: ",(int)SMM.Axis,TheAxisDescriptions_Spline,GUILayout.Width(250f)); //Start time: if(SMM.StartTime < tNode.MinSplination){ SMM.StartTime = tNode.MinSplination; } if(SMM.EndTime > tNode.MaxSplination){ SMM.EndTime = tNode.MaxSplination; } EditorGUILayout.BeginHorizontal(); SMM.EM.StartTime = EditorGUILayout.Slider("Start param: ",SMM.StartTime,tNode.MinSplination,tNode.MaxSplination-0.01f); if(GUILayout.Button("match node",EditorStyles.miniButton, GUILayout.Width(80f))){ SMM.EM.StartTime = tNode.tTime; } if(SMM.EM.StartTime >= SMM.EM.EndTime){ SMM.EM.EndTime = (SMM.EM.StartTime + 0.01f); } EditorGUILayout.EndHorizontal(); //End time: EditorGUILayout.BeginHorizontal(); SMM.EM.EndTime = EditorGUILayout.Slider("End param: ",SMM.EndTime,SMM.StartTime,tNode.MaxSplination); if(GUILayout.Button("match next",EditorStyles.miniButton, GUILayout.Width(80f))){ SMM.EM.EndTime = tNode.NextTime; } if(SMM.EM.StartTime >= SMM.EM.EndTime){ SMM.EM.EndTime = (SMM.EM.StartTime + 0.01f); } EditorGUILayout.EndHorizontal(); //Straight line options: if(tNode.IsStraight()){ if(!SMM.bIsStretch){ SMM.EM.bIsStretch = EditorGUILayout.Toggle("Straight line stretch:",SMM.bIsStretch); }else{ EditorGUILayout.BeginVertical("box"); SMM.EM.bIsStretch = EditorGUILayout.Toggle("Straight line stretch:",SMM.bIsStretch); //Stretch_UVThreshold: SMM.EM.Stretch_UVThreshold = EditorGUILayout.Slider("UV stretch threshold:",SMM.Stretch_UVThreshold,0.01f,0.5f); //UV repeats: SMM.EM.RepeatUVType = (GSD.Roads.Splination.RepeatUVTypeEnum)EditorGUILayout.Popup("UV stretch axis: ",(int)SMM.RepeatUVType,RepeatUVTypeDescriptions_Spline,GUILayout.Width(250f)); EditorGUILayout.EndVertical(); } }else{ SMM.EM.bIsStretch = false; } SMM.EM.bTrimStart = EditorGUILayout.Toggle("Trim start:",SMM.bTrimStart); SMM.EM.bTrimEnd = EditorGUILayout.Toggle("Trim end:",SMM.bTrimEnd); //Static option: SMM.EM.bStatic = EditorGUILayout.Toggle("Static: ",SMM.bStatic); //Splination method // SMM.EM.bMatchRoadIncrements = EditorGUILayout.Toggle("Match road increments: ",SMM.bMatchRoadIncrements); SMM.EM.bMatchTerrain = EditorGUILayout.Toggle("Match ground: ",SMM.bMatchTerrain); //Vector min/max threshold: EditorGUILayout.BeginHorizontal(); SMM.EM.MinMaxMod = EditorGUILayout.Slider("Vertex min/max threshold: ",SMM.MinMaxMod,0.01f,0.2f); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.MinMaxMod = 0.05f; } EditorGUILayout.EndHorizontal(); //Vertex matching precision: EditorGUILayout.BeginHorizontal(); SMM.EM.VertexMatchingPrecision = EditorGUILayout.Slider("Vertex matching precision: ",SMM.VertexMatchingPrecision,0f,0.01f); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.VertexMatchingPrecision = 0.005f; } EditorGUILayout.EndHorizontal(); //UV repeats: if(!SMM.bIsStretch){ SMM.EM.RepeatUVType = (GSD.Roads.Splination.RepeatUVTypeEnum)EditorGUILayout.Popup("UV repeat axis: ",(int)SMM.RepeatUVType,RepeatUVTypeDescriptions_Spline,GUILayout.Width(250f)); } if(SMM.bMatchRoadDefinition){ EditorGUILayout.BeginVertical("TextArea"); EditorGUILayout.BeginHorizontal(); SMM.EM.bMatchRoadDefinition = EditorGUILayout.Toggle("Match road definition: ",SMM.bMatchRoadDefinition); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.bMatchRoadDefinition = false; } EditorGUILayout.EndHorizontal(); if(SMM.bMatchRoadDefinition){ EditorGUILayout.LabelField(" Only use this option if object length doesn't match the road definition.", EditorStyles.miniLabel); EditorGUILayout.LabelField(" Matching road definition requires a UV repeat type.", EditorStyles.miniLabel); EditorGUILayout.LabelField(" If the material fails to scale properly, try flipping the Y rotation.", EditorStyles.miniLabel); } //Flip rotation option: SMM.EM.bFlipRotation = EditorGUILayout.Toggle(" Flip Y rotation: ",SMM.bFlipRotation); EditorGUILayout.EndVertical(); }else{ EditorGUILayout.BeginHorizontal(); SMM.EM.bMatchRoadDefinition = EditorGUILayout.Toggle("Match road definition: ",SMM.bMatchRoadDefinition); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.bMatchRoadDefinition = false; } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); //Vertical offset: EditorGUILayout.LabelField("Vertical options:"); EditorGUILayout.BeginVertical("box"); EditorGUILayout.BeginHorizontal(); SMM.EM.VerticalRaise = EditorGUILayout.Slider("Vertical raise magnitude:",SMM.VerticalRaise,-512f,512f); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.VerticalRaise = 0f; } EditorGUILayout.EndHorizontal(); //Vertical curve: if(SMM.VerticalCurve == null || SMM.VerticalCurve.keys.Length < 2){ EnforceCurve(ref SMM.VerticalCurve); } EditorGUILayout.BeginHorizontal(); SMM.EM.VerticalCurve = EditorGUILayout.CurveField("Curve: ",SMM.VerticalCurve); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ ResetCurve(ref SMM.EM.VerticalCurve); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); //Horizontal offsets: SMM.EM.HorizontalSep = SMM.HorizontalSep; EditorGUILayout.LabelField("Horizontal offset options:"); EditorGUILayout.BeginVertical("box"); tHorizMatching = HorizMatchingDefaultsEnum.None; tHorizMatching = (HorizMatchingDefaultsEnum)EditorGUILayout.Popup((int)tHorizMatching,HorizMatchSubTypeDescriptions, GUILayout.Width(100f)); if(tHorizMatching != HorizMatchingDefaultsEnum.None){ if(tHorizMatching == HorizMatchingDefaultsEnum.MatchCenter){ SMM.EM.HorizontalSep = 0f; }else if(tHorizMatching == HorizMatchingDefaultsEnum.MatchRoadLeft){ SMM.EM.HorizontalSep = (tNode.GSDSpline.tRoad.RoadWidth()/2)*-1; }else if(tHorizMatching == HorizMatchingDefaultsEnum.MatchShoulderLeft){ SMM.EM.HorizontalSep = ((tNode.GSDSpline.tRoad.RoadWidth()/2) + tNode.GSDSpline.tRoad.opt_ShoulderWidth)*-1; }else if(tHorizMatching == HorizMatchingDefaultsEnum.MatchRoadRight){ SMM.EM.HorizontalSep = (tNode.GSDSpline.tRoad.RoadWidth()/2); }else if(tHorizMatching == HorizMatchingDefaultsEnum.MatchShoulderRight){ SMM.EM.HorizontalSep = (tNode.GSDSpline.tRoad.RoadWidth()/2) + tNode.GSDSpline.tRoad.opt_ShoulderWidth; } tHorizMatching = HorizMatchingDefaultsEnum.None; } EditorGUILayout.BeginHorizontal(); SMM.EM.HorizontalSep = EditorGUILayout.Slider("Horiz offset magnitude:",SMM.HorizontalSep,(-1f*HorizRoadMax),HorizRoadMax); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.HorizontalSep = 0f; } EditorGUILayout.EndHorizontal(); //Horizontal curve: if(SMM.HorizontalCurve == null || SMM.HorizontalCurve.keys.Length < 2){ EnforceCurve(ref SMM.HorizontalCurve); } EditorGUILayout.BeginHorizontal(); SMM.EM.HorizontalCurve = EditorGUILayout.CurveField("Curve: ",SMM.HorizontalCurve); if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ ResetCurve(ref SMM.EM.HorizontalCurve); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); //Vertical cutoff: EditorGUILayout.LabelField("Vertical cutoff:"); EditorGUILayout.BeginVertical("box"); SMM.EM.bVerticalCutoff = EditorGUILayout.Toggle("Height cutoff enabled:",SMM.bVerticalCutoff); if(SMM.bVerticalCutoff){ SMM.EM.bVerticalCutoff_MatchZero = EditorGUILayout.Toggle("Match spline height:",SMM.bVerticalCutoff_MatchZero); SMM.EM.bVerticalCutoffDownwards = EditorGUILayout.Toggle("Cut direction toggle:",SMM.bVerticalCutoffDownwards); SMM.EM.VerticalCutoff = EditorGUILayout.Slider("Height cut offset: ",SMM.VerticalCutoff,-50f,50f); SMM.EM.bVerticalMeshCutoff_OppositeDir = EditorGUILayout.Toggle("Opposite dir mesh cut:",SMM.bVerticalMeshCutoff_OppositeDir); SMM.EM.VerticalMeshCutoffOffset = EditorGUILayout.Slider("Mesh cut offset: ",SMM.VerticalMeshCutoffOffset,-5f,5f); } EditorGUILayout.EndVertical(); //End type: EditorGUILayout.LabelField("Extrusion ending options:"); EditorGUILayout.BeginVertical("box"); SMM.EM.bEndDown = EditorGUILayout.Toggle("Push endings down:",SMM.bEndDown); if(SMM.bEndDown){ SMM.EM.bEndTypeDownOverride = EditorGUILayout.Toggle("Override down value: ",SMM.bEndTypeDownOverride); if(SMM.bEndTypeDownOverride){ SMM.EM.EndTypeDownOverride = EditorGUILayout.Slider("Downward movement: ",SMM.EndTypeDownOverride,-10f,10f); } } EditorGUILayout.EndVertical(); //Start and end objects: EditorGUILayout.LabelField("Start & end objects:"); EditorGUILayout.BeginVertical("box"); //End cap custom match start: SMM.EM.bEndCapCustomMatchStart = EditorGUILayout.Toggle("Match objects to ends:",SMM.bEndCapCustomMatchStart); //End objects match ground: SMM.EM.bEndObjectsMatchGround = EditorGUILayout.Toggle("Force origins to ground:",SMM.bEndObjectsMatchGround); //Start cap: EditorGUILayout.BeginVertical("box"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Start object:"); tEndObjectAdd = (EndObjectsDefaultsEnum)EditorGUILayout.Popup((int)tEndObjectAdd,EndObjectsDefaultsEnumDesc); if(tEndObjectAdd != EndObjectsDefaultsEnum.None){ SMM.EM.EndCapStart = GetEndObjectQuickAdd(); tEndObjectAdd = EndObjectsDefaultsEnum.None; } EditorGUILayout.EndHorizontal(); SMM.EM.EndCapStart = (GameObject)EditorGUILayout.ObjectField("Prefab:",SMM.EndCapStart,typeof(GameObject), false); if(SMM.EndCapStart != null){ SMM.EM.EndCapCustomOffsetStart = EditorGUILayout.Vector3Field("Position offset:",SMM.EndCapCustomOffsetStart); SMM.EM.EndCapCustomRotOffsetStart = EditorGUILayout.Vector3Field("Rotation offset:",SMM.EndCapCustomRotOffsetStart); } EditorGUILayout.EndVertical(); //End cap: EditorGUILayout.BeginVertical("box"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("End object:"); tEndObjectAdd = (EndObjectsDefaultsEnum)EditorGUILayout.Popup((int)tEndObjectAdd,EndObjectsDefaultsEnumDesc); if(tEndObjectAdd != EndObjectsDefaultsEnum.None){ SMM.EM.EndCapEnd = GetEndObjectQuickAdd(); SMM.EM.EndCapCustomRotOffsetEnd = new Vector3(0f,180f,0f); tEndObjectAdd = EndObjectsDefaultsEnum.None; } EditorGUILayout.EndHorizontal(); SMM.EM.EndCapEnd = (GameObject)EditorGUILayout.ObjectField("Prefab:",SMM.EndCapEnd,typeof(GameObject), false); if(SMM.EndCapEnd != null){ SMM.EM.EndCapCustomOffsetEnd = EditorGUILayout.Vector3Field("Position offset:",SMM.EndCapCustomOffsetEnd); SMM.EM.EndCapCustomRotOffsetEnd = EditorGUILayout.Vector3Field("Rotation offset:",SMM.EndCapCustomRotOffsetEnd); } EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); //Collision: EditorGUILayout.LabelField("Collision options:"); EditorGUILayout.BeginVertical("box"); SMM.EM.CollisionType = (GSD.Roads.Splination.CollisionTypeEnum)EditorGUILayout.Popup("Collision type: ",(int)SMM.CollisionType,TheCollisionTypeEnumDescSpline,GUILayout.Width(320f)); //Mesh collison convex option if(SMM.CollisionType != GSD.Roads.Splination.CollisionTypeEnum.None && SMM.CollisionType != GSD.Roads.Splination.CollisionTypeEnum.BoxCollision){ SMM.EM.bCollisionConvex = EditorGUILayout.Toggle(" Convex: ",SMM.bCollisionConvex); SMM.EM.bCollisionTrigger = EditorGUILayout.Toggle(" Trigger: ",SMM.bCollisionTrigger); } if(SMM.CollisionType == GSD.Roads.Splination.CollisionTypeEnum.SimpleMeshTriangle || SMM.CollisionType == GSD.Roads.Splination.CollisionTypeEnum.SimpleMeshTrapezoid){ SMM.EM.bSimpleCollisionAutomatic = EditorGUILayout.Toggle(" Automatic simple collision: ", SMM.bSimpleCollisionAutomatic); } //If not automatic simple collisions: if(!SMM.bSimpleCollisionAutomatic){ if(SMM.CollisionType == GSD.Roads.Splination.CollisionTypeEnum.SimpleMeshTriangle){ SMM.EM.CollisionTriBL = SMM.CollisionTriBL; SMM.EM.CollisionTriBR = SMM.CollisionTriBR; SMM.EM.CollisionTriT = SMM.CollisionTriT; EditorGUILayout.LabelField("Bottom left:"); SMM.EM.CollisionTriBL.x = EditorGUILayout.Slider(" x-axis: ",SMM.CollisionTriBL.x,SMM.mMinX-5f,SMM.mMaxX+5f); SMM.EM.CollisionTriBL.y = EditorGUILayout.Slider(" y-axis: ",SMM.CollisionTriBL.y,SMM.mMinY-5f,SMM.mMaxY+5f); SMM.EM.CollisionTriBL.z = EditorGUILayout.Slider(" z-axis: ",SMM.CollisionTriBL.z,SMM.mMinZ-5f,SMM.mMaxZ+5f); EditorGUILayout.LabelField("Bottom right:"); SMM.EM.CollisionTriBR.x = EditorGUILayout.Slider(" x-axis: ",SMM.CollisionTriBR.x,SMM.mMinX-5f,SMM.mMaxX+5f); SMM.EM.CollisionTriBR.y = EditorGUILayout.Slider(" y-axis: ",SMM.CollisionTriBR.y,SMM.mMinY-5f,SMM.mMaxY+5f); SMM.EM.CollisionTriBR.z = EditorGUILayout.Slider(" z-axis: ",SMM.CollisionTriBR.z,SMM.mMinZ-5f,SMM.mMaxZ+5f); EditorGUILayout.LabelField("Top:"); SMM.EM.CollisionTriT.x = EditorGUILayout.Slider(" x-axis: ",SMM.CollisionTriT.x,SMM.mMinX-5f,SMM.mMaxX+5f); SMM.EM.CollisionTriT.y = EditorGUILayout.Slider(" y-axis: ",SMM.CollisionTriT.y,SMM.mMinY-5f,SMM.mMaxY+5f); SMM.EM.CollisionTriT.z = EditorGUILayout.Slider(" z-axis: ",SMM.CollisionTriT.z,SMM.mMinZ-5f,SMM.mMaxZ+5f); }else if(SMM.CollisionType == GSD.Roads.Splination.CollisionTypeEnum.SimpleMeshTrapezoid){ SMM.EM.CollisionBoxBL = EditorGUILayout.Vector3Field(" Bottom left:",SMM.CollisionBoxBL); SMM.EM.CollisionBoxBR = EditorGUILayout.Vector3Field(" Bottom right:",SMM.CollisionBoxBR); SMM.EM.CollisionBoxTL = EditorGUILayout.Vector3Field(" Top left:",SMM.CollisionBoxTL); SMM.EM.CollisionBoxTR = EditorGUILayout.Vector3Field(" Top right:",SMM.CollisionBoxTR); } } if(SMM.CollisionType == GSD.Roads.Splination.CollisionTypeEnum.BoxCollision){ SMM.EM.StretchBC_LocOffset = EditorGUILayout.Vector3Field("Box collider center offset:",SMM.StretchBC_LocOffset); SMM.EM.bBCFlipX = EditorGUILayout.Toggle("Flip center X:", SMM.bBCFlipX); SMM.EM.bBCFlipZ = EditorGUILayout.Toggle("Flip center Z:", SMM.bBCFlipZ); SMM.EM.bStretchSize = EditorGUILayout.Toggle("Box collider size edit:",SMM.bStretchSize); if(SMM.bStretchSize){ SMM.EM.StretchBC_Size = EditorGUILayout.Vector3Field("Size:",SMM.StretchBC_Size); }else{ EditorGUILayout.LabelField("Size:",SMM.StretchBC_Size.ToString()); } } EditorGUILayout.EndVertical(); EditorGUILayout.LabelField("Rotation options:"); EditorGUILayout.BeginVertical("box"); //Custom rotation: SMM.EM.CustomRotation = SMM.CustomRotation; //EOM.CustomRotation = EditorGUILayout.Vector3Field("Custom rotation: ",EOM.CustomRotation); EditorGUILayout.BeginHorizontal(); //Flip rotation option: if(SMM.EM.bFlipRotation != SMM.bFlipRotation){ SMM.EM.bFlipRotation = EditorGUILayout.Toggle("Flip Y rotation: ",SMM.EM.bFlipRotation); }else{ SMM.EM.bFlipRotation = EditorGUILayout.Toggle("Flip Y rotation: ",SMM.bFlipRotation); } // if(GUILayout.Button("Reset custom rotation",EditorStyles.miniButton,GUILayout.Width(160f))){ // SMM.CustomRotation = new Vector3(0f,0f,0f); // } if(GUILayout.Button(btnDefaultText,GSDImageButton,GUILayout.Width(16f))){ SMM.EM.CustomRotation = new Vector3(0f,0f,0f); } EditorGUILayout.EndHorizontal(); // SMM.EM.CustomRotation = EditorGUILayout.Vector3Field("",SMM.CustomRotation); // SMM.EM.CustomRotation.x = EditorGUILayout.Slider("x-axis: ",SMM.CustomRotation.x,-360f,360f); // SMM.EM.CustomRotation.y = EditorGUILayout.Slider("y-axis: ",SMM.CustomRotation.y,-360f,360f); // SMM.EM.CustomRotation.z = EditorGUILayout.Slider("z-axis: ",SMM.CustomRotation.z,-360f,360f); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.LabelField("Deprecated options:"); EditorGUILayout.BeginVertical("box"); SMM.EM.bExactSplination = EditorGUILayout.Toggle("Directional extrusion: ",SMM.bExactSplination); EditorGUILayout.EndVertical(); BigLine(); BigLine(); } }
private void DoGUI() { if (bNoGUI) { return; } if (oList == null) { Close(); return; } GUILayout.Space(4f); EditorGUILayout.BeginHorizontal(); if (tNode.bIsBridgeStart) { xWindowType = (WindowTypeEnum)EditorGUILayout.Popup("Category: ", (int)tWindowType, WindowTypeDescBridge, GUILayout.Width(312f)); } else { if (xWindowType == WindowTypeEnum.Edge) { SxWindowType = WindowTypeEnumShort.Edge; } else if (xWindowType == WindowTypeEnum.Extrusion) { SxWindowType = WindowTypeEnumShort.Extrusion; } else { SxWindowType = WindowTypeEnumShort.Groups; } SxWindowType = (WindowTypeEnumShort)EditorGUILayout.Popup("Category: ", (int)StWindowType, WindowTypeDesc, GUILayout.Width(312f)); if (SxWindowType == WindowTypeEnumShort.Extrusion) { xWindowType = WindowTypeEnum.Extrusion; } else if (SxWindowType == WindowTypeEnumShort.Edge) { xWindowType = WindowTypeEnum.Edge; } else { xWindowType = WindowTypeEnum.Groups; } StWindowType = SxWindowType; } if (xWindowType != tWindowType) { Initialize(xWindowType, tNode); EditorGUILayout.EndHorizontal(); return; } EditorGUILayout.LabelField(""); EditorGUILayout.LabelField("Single-click items to load", EditorStyles.boldLabel, GUILayout.Width(200f)); EditorGUILayout.EndHorizontal(); if (oList.Count == 0) { return; } int oCount = oList.Count; int WidthSpacing = 160; int HeightSpacing = 200; int HeightOffset = 30; int ScrollHeightOffset = 25; int xCount = 0; int yCount = 0; int yMod = Mathf.FloorToInt((float)position.width / 142f) - 1; int yMax = 0; if (yMod == 0) { yMax = 1; } else { yMax = Mathf.CeilToInt((float)oCount / (float)yMod); } bool bScrolling = false; if ((((yMax) * HeightSpacing) + 25) > position.height) { scrollPos = GUI.BeginScrollView(new Rect(0, 25, position.width - 10, position.height - 30), scrollPos, new Rect(0, 0, (yMod * WidthSpacing) + 25, (((yMax) * HeightSpacing) + 50))); bScrolling = true; HeightOffset = ScrollHeightOffset; } EditorGUILayout.BeginHorizontal(); bool bClicked = false; for (int i = 0; i < oCount; i++) { if (i > 0) { if (yMod == 0) { EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); yCount += 1; xCount = 0; } else { if (i % yMod == 0) { EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); yCount += 1; xCount = 0; } } } if (xCount == 0) { bClicked = DoItem((xCount * WidthSpacing) + 5, (yCount * HeightSpacing) + HeightOffset, i); } else { bClicked = DoItem(xCount * WidthSpacing, (yCount * HeightSpacing) + HeightOffset, i); } if (bClicked) { if (tWindowType == WindowTypeEnum.Extrusion) { GSD.Roads.Splination.SplinatedMeshMaker SMM = tNode.AddSplinatedObject(); SMM.SetDefaultTimes(tNode.bIsEndPoint, tNode.tTime, tNode.NextTime, tNode.idOnSpline, tNode.GSDSpline.distance); SMM.LoadFromLibrary(oList[i].FileName, oList[i].bIsDefault); SMM.bIsGSD = oList[i].bIsDefault; SMM.Setup(true); } else if (tWindowType == WindowTypeEnum.Edge) { GSD.Roads.EdgeObjects.EdgeObjectMaker EOM = tNode.AddEdgeObject(); EOM.SetDefaultTimes(tNode.bIsEndPoint, tNode.tTime, tNode.NextTime, tNode.idOnSpline, tNode.GSDSpline.distance); EOM.LoadFromLibrary(oList[i].FileName, oList[i].bIsDefault); EOM.bIsGSD = oList[i].bIsDefault; EOM.Setup(); } else if (tWindowType == WindowTypeEnum.Groups) { tNode.LoadWizardObjectsFromLibrary(oList[i].FileName, oList[i].bIsDefault, oList[i].bIsBridge); } else if (tWindowType == WindowTypeEnum.BridgeComplete) { tNode.LoadWizardObjectsFromLibrary(oList[i].FileName, oList[i].bIsDefault, oList[i].bIsBridge); } tNode.bQuitGUI = true; oList.Clear(); oList = null; EditorGUILayout.EndHorizontal(); if (bScrolling) { GUI.EndScrollView(); } bNoGUI = true; Close(); return; } xCount += 1; } EditorGUILayout.EndHorizontal(); if (bScrolling) { GUI.EndScrollView(); } }
private void BridgeAdd_BottomBase(float tHorizSep = 0f, float tVertRaise = -1.01f, string tMat = "Assets/RoadArchitect/Materials/GSDConcrete2.mat", bool bOverridePrefab = false, string OverridePrefab = ""){ SMM = tNode.AddSplinatedObject(); string tBridgeBottomBaseToAdd = ""; string tName = ""; if(tNode.GSDSpline.tRoad.opt_Lanes == 2){ if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase2){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase2-18w-5l-3d.fbx"; tName = "BridgeBase2"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase3){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase3-18w-5l-5d.fbx"; tName = "BridgeBase3"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase4){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase4-18w-5l-5d.fbx"; tName = "BridgeBase4"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase5){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase5-18w-5l-5d.fbx"; tName = "BridgeBase5"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase6){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase6-2L.fbx"; tName = "BridgeArchBeam80"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase7){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase7-2L.fbx"; tName = "BridgeArchSolid80"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase8){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase8-2L.fbx"; tName = "BridgeArchSolid180"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBaseGrid){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBaseGrid-18w-5l-5d.fbx"; tName = "BridgeGrid"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeSteel){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBaseSteelBeam-18w-20l-3d.fbx"; tName = "BridgeSteelBeams"; } }else if(tNode.GSDSpline.tRoad.opt_Lanes == 4){ if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase2){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase2-28w-5l-3d.fbx"; tName = "BridgeBase2"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase3){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase3-28w-5l-5d.fbx"; tName = "BridgeBase3"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase4){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase4-28w-5l-5d.fbx"; tName = "BridgeBase4"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase5){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase5-28w-5l-5d.fbx"; tName = "BridgeBase5"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase6){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase6-4L.fbx"; tName = "BridgeArchBeam80"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase7){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase7-4L.fbx"; tName = "BridgeArchSolid80"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase8){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase8-4L.fbx"; tName = "BridgeArchSolid180"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBaseGrid){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBaseGrid-28w-5l-5d.fbx"; tName = "BridgeGrid"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeSteel){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBaseSteelBeam-28w-20l-3d.fbx"; tName = "BridgeSteelBeams"; } }else{ if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase2){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase2-38w-5l-3d.fbx"; tName = "BridgeBase2"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase3){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase3-38w-5l-5d.fbx"; tName = "BridgeBase3"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase4){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase4-38w-5l-5d.fbx"; tName = "BridgeBase4"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase5){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase5-38w-5l-5d.fbx"; tName = "BridgeBase5"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase6){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase6-6L.fbx"; tName = "BridgeArchBeam80"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase7){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase7-6L.fbx"; tName = "BridgeArchSolid80"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase8){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase8-6L.fbx"; tName = "BridgeArchSolid180"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBaseGrid){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBaseGrid-38w-5l-5d.fbx"; tName = "BridgeGrid"; }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeSteel){ tBridgeBottomBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBaseSteelBeam-38w-20l-3d.fbx"; tName = "BridgeBeams"; } } if(bOverridePrefab){ tBridgeBottomBaseToAdd = OverridePrefab; } SMM.CurrentSplination = (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath(tBridgeBottomBaseToAdd, typeof(GameObject)); SMM.HorizontalSep = tHorizSep; SMM.VerticalRaise = tVertRaise; SMM.bMaterialOverride = true; SMM.tName = tName; if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase2){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase3){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase4){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase5){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase6){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase7){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBase8){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeBaseGrid){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial("Assets/RoadArchitect/Materials/GSDSteel7.mat"); }else if(tBridgeBottomBaseQuickAdd == BridgeBottomBaseDefaultsEnum.BridgeSteel){ SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial("Assets/RoadArchitect/Materials/GSDSteel7.mat"); } SMM.Axis = GSD.Roads.Splination.AxisTypeEnum.Z; tBridgeTopBaseQuickAdd = BridgeTopBaseDefaultsEnum.None; if(SMM.StartTime < tNode.MinSplination){ SMM.StartTime = tNode.MinSplination; } if(SMM.EndTime > tNode.MaxSplination){ SMM.EndTime = tNode.MaxSplination; } }
private void ExtrudeHelper(string tPath, string tName, float DefaultHoriz, GSD.Roads.Splination.AxisTypeEnum tAxis = GSD.Roads.Splination.AxisTypeEnum.Z, bool bHorizOverride = false, float tHorizSep = 0f, bool bVertOverride = false, float tVertRaise = 0f, bool bFlipRot = false){ SMM = tNode.AddSplinatedObject(); SMM.CurrentSplination = (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath(tPath, typeof(GameObject)); if(bHorizOverride){ SMM.HorizontalSep = tHorizSep; }else{ SMM.HorizontalSep = ((tNode.GSDSpline.tRoad.RoadWidth()/2) + tNode.GSDSpline.tRoad.opt_ShoulderWidth)*-1f; } if(bVertOverride){ SMM.VerticalRaise = tVertRaise; }else{ if(tNode.bIsBridgeStart){ SMM.VerticalRaise = -0.01f; } } SMM.bFlipRotation = bFlipRot; SMM.Axis = tAxis; if(SMM.StartTime < tNode.MinSplination){ SMM.StartTime = tNode.MinSplination; } if(SMM.EndTime > tNode.MaxSplination){ SMM.EndTime = tNode.MaxSplination; } SMM.tName = tName; }
public void UpdateSplineObjects_OnUndo(){ if(!tNode.CanSplinate()){ return; } if(tNode.SplinatedObjects == null){ tNode.SplinatedObjects = new List<GSD.Roads.Splination.SplinatedMeshMaker>(); } //Destroy all children: for(int i=tNode.transform.childCount-1;i>=0;i--){ Object.DestroyImmediate(tNode.transform.GetChild(i).gameObject); } //Re-setup the SMM: eCount = tNode.SplinatedObjects.Count; for(int i=0;i<eCount;i++){ SMM = tNode.SplinatedObjects[i]; SMM.UpdatePositions(); //if(SMM.bIsStretch != SMM.bIsStretch){ if(SMM.bIsStretch){ SMM.CollisionType = GSD.Roads.Splination.CollisionTypeEnum.BoxCollision; SMM.bMatchRoadDefinition = false; SMM.bMatchTerrain = false; SMM.bCollisionConvex = false; SMM.bEndDown = false; SMM.bVerticalCutoff = false; SMM.bExactSplination = false; SMM.bEndTypeDownOverride = false; } //} SMM.Setup(true); } UpdateEdgeObjects_OnUndo(); }
private void BridgeAdd_TopBase(float tHorizSep = 0f, float tVertRaise = -0.01f, string tMat = "Assets/RoadArchitect/Materials/GSDConcrete2.mat", bool bOverridePrefab = false, string OverridePrefab = ""){ SMM = tNode.AddSplinatedObject(); string tBridgeTopBaseToAdd = ""; string tName = ""; if(tNode.GSDSpline.tRoad.opt_Lanes == 2){ if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base1MOver){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-19w-5l-1d.fbx"; tName = "BridgeTop1M-1M"; }else if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base2MOver){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-20w-5l-1d.fbx"; tName = "BridgeTop2M-1M"; }else if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base3MDeep){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-18w-5l-3d.fbx"; tName = "BridgeTop0M-3M"; }else{ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-18w-5l-1d.fbx"; tName = "BridgeTop0M-1M"; } }else if(tNode.GSDSpline.tRoad.opt_Lanes == 4){ if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base1MOver){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-29w-5l-1d.fbx"; tName = "BridgeTop1M-1M"; }else if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base2MOver){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-30w-5l-1d.fbx"; tName = "BridgeTop2M-1M"; }else if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base3MDeep){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-28w-5l-3d.fbx"; tName = "BridgeTop0M-3M"; }else{ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-28w-5l-1d.fbx"; tName = "BridgeTop0M-1M"; } }else{ if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base1MOver){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-39w-5l-1d.fbx"; tName = "BridgeTop1M-1M"; }else if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base2MOver){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-40w-5l-1d.fbx"; tName = "BridgeTop2M-1M"; }else if(tBridgeTopBaseQuickAdd == BridgeTopBaseDefaultsEnum.Base3MDeep){ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-38w-5l-3d.fbx"; tName = "BridgeTop0M-3M"; }else{ tBridgeTopBaseToAdd = "Assets/RoadArchitect/Mesh/RoadObj/Bridges/BridgeBase-38w-5l-1d.fbx"; tName = "BridgeTop0M-1M"; } } if(bOverridePrefab){ tBridgeTopBaseToAdd = OverridePrefab; } SMM.tName = tName; SMM.CurrentSplination = (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath(tBridgeTopBaseToAdd, typeof(GameObject)); SMM.HorizontalSep = tHorizSep; SMM.VerticalRaise = tVertRaise; SMM.bMaterialOverride = true; SMM.SplinatedMaterial1 = GSD.Roads.GSDRoadUtilityEditor.GiveMaterial(tMat); SMM.Axis = GSD.Roads.Splination.AxisTypeEnum.Z; tBridgeTopBaseQuickAdd = BridgeTopBaseDefaultsEnum.None; if(SMM.StartTime < tNode.MinSplination){ SMM.StartTime = tNode.MinSplination; } if(SMM.EndTime > tNode.MaxSplination){ SMM.EndTime = tNode.MaxSplination; } }
public void UpdateSplineObjects(){ if(!tNode.CanSplinate()){ return; } if(tNode.SplinatedObjects == null){ tNode.SplinatedObjects = new List<GSD.Roads.Splination.SplinatedMeshMaker>(); } eCount = tNode.SplinatedObjects.Count; for(int i=0;i<eCount;i++){ SMM = tNode.SplinatedObjects[i]; if(SMM.EM != null){ if(!SMM.EM.IsEqualToSMM(SMM)){ SMM.EM.LoadToSMM(SMM); SMM.UpdatePositions(); if(SMM.EM.bIsStretch != SMM.bIsStretch){ if(SMM.bIsStretch){ SMM.CollisionType = GSD.Roads.Splination.CollisionTypeEnum.BoxCollision; SMM.bMatchRoadDefinition = false; SMM.bMatchTerrain = false; SMM.bCollisionConvex = false; SMM.bEndDown = false; SMM.bVerticalCutoff = false; SMM.bExactSplination = false; SMM.bEndTypeDownOverride = false; } } SMM.Setup(true); // Debug.Log ("Setup SMM"); } } } }
public void LoadToSMM(SplinatedMeshMaker SMM){ #if UNITY_EDITOR SMM.CurrentSplination = CurrentSplination; // (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath(CurrentSplinationString,typeof(GameObject)); SMM.CurrentSplinationCap1 = CurrentSplinationCap1;// (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath(CurrentSplinationCap1String,typeof(GameObject)); SMM.CurrentSplinationCap2 = CurrentSplinationCap2;// (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath(CurrentSplinationCap2String,typeof(GameObject)); SMM.CapHeightOffset1 = CapHeightOffset1; SMM.CapHeightOffset2 = CapHeightOffset2; SMM.bMaterialOverride = bMaterialOverride; SMM.SplinatedMaterial1 = SplinatedMaterial1; SMM.SplinatedMaterial2 = SplinatedMaterial2; SMM.bExactSplination = bExactSplination; SMM.bMatchRoadDefinition = bMatchRoadDefinition; SMM.bMatchRoadIncrements = bMatchRoadIncrements; SMM.bTrimStart = bTrimStart; SMM.bTrimEnd = bTrimEnd; SMM.bMatchTerrain = bMatchTerrain; SMM.MinMaxMod = MinMaxMod; SMM.bIsBridge = bIsBridge; SMM.VertexMatchingPrecision = VertexMatchingPrecision; SMM.bIsStretch = bIsStretch; SMM.bStretchLocOffset = bStretchLocOffset; SMM.bStretchSize = bStretchSize; SMM.StretchBC_LocOffset = StretchBC_LocOffset; SMM.StretchBC_Size = StretchBC_Size; SMM.Stretch_UVThreshold = Stretch_UVThreshold; SMM.bStraightLineMatchStartEnd = bStraightLineMatchStartEnd; SMM.bBCFlipX = bBCFlipX; SMM.bBCFlipZ = bBCFlipZ; //Horizontal offsets: SMM.HorizontalSep = HorizontalSep; SMM.HorizontalCurve = HorizontalCurve; //Vertical offset: SMM.VerticalRaise = VerticalRaise; SMM.VerticalCurve = VerticalCurve; //Vertical cutoff: SMM.VerticalCutoff = VerticalCutoff; SMM.bVerticalCutoff = bVerticalCutoff; SMM.bVerticalCutoffDownwards = bVerticalCutoffDownwards; SMM.bVerticalMeshCutoff_OppositeDir = bVerticalMeshCutoff_OppositeDir; SMM.VerticalMeshCutoffOffset = VerticalMeshCutoffOffset; SMM.bVerticalCutoff_MatchZero = bVerticalCutoff_MatchZero; SMM.RoadRaise = RoadRaise; SMM.CustomRotation = CustomRotation; SMM.bFlipRotation = bFlipRotation; SMM.bStatic = bStatic; SMM.StartTime = StartTime; SMM.EndTime = EndTime; SMM.Axis = Axis; SMM.RepeatUVType = RepeatUVType; //Ending objects: SMM.EndCapStart = EndCapStart; SMM.EndCapEnd = EndCapEnd; SMM.bEndCapCustomMatchStart = bEndCapCustomMatchStart; SMM.EndCapCustomOffsetStart = EndCapCustomOffsetStart; SMM.EndCapCustomOffsetEnd = EndCapCustomOffsetEnd; SMM.EndCapCustomRotOffsetStart = EndCapCustomRotOffsetStart; SMM.EndCapCustomRotOffsetEnd = EndCapCustomRotOffsetEnd; SMM.bEndObjectsMatchGround = bEndObjectsMatchGround; //Endings down: SMM.bEndDown = bEndDown; SMM.bEndTypeDownOverride = bEndTypeDownOverride; SMM.EndTypeDownOverride = EndTypeDownOverride; //Collision: SMM.CollisionType = CollisionType; SMM.bCollisionConvex = bCollisionConvex; SMM.bSimpleCollisionAutomatic = bSimpleCollisionAutomatic; SMM.bCollisionTrigger = bCollisionTrigger; SMM.CollisionBoxBL = CollisionBoxBL; SMM.CollisionBoxBR = CollisionBoxBR; SMM.CollisionBoxTL = CollisionBoxTL; SMM.CollisionBoxTR = CollisionBoxTR; SMM.CollisionTriBL = CollisionTriBL; SMM.CollisionTriBR = CollisionTriBR; SMM.CollisionTriT = CollisionTriT; SMM.tName = tName; #endif }
public void Setup(SplinatedMeshMaker SMM){ CurrentSplination = SMM.CurrentSplination; CurrentSplinationCap1 = SMM.CurrentSplinationCap1; CurrentSplinationCap2 = SMM.CurrentSplinationCap2; CapHeightOffset1 = SMM.CapHeightOffset1; CapHeightOffset2 = SMM.CapHeightOffset2; bMaterialOverride = SMM.bMaterialOverride; SplinatedMaterial1 = SMM.SplinatedMaterial1; SplinatedMaterial2 = SMM.SplinatedMaterial2; bExactSplination = SMM.bExactSplination; bMatchRoadDefinition = SMM.bMatchRoadDefinition; bMatchRoadIncrements = SMM.bMatchRoadIncrements; bTrimStart = SMM.bTrimStart; bTrimEnd = SMM.bTrimEnd; bMatchTerrain = SMM.bMatchTerrain; MinMaxMod = SMM.MinMaxMod; bIsBridge = SMM.bIsBridge; VertexMatchingPrecision = SMM.VertexMatchingPrecision; bIsStretch = SMM.bIsStretch; bStretchLocOffset = SMM.bStretchLocOffset; bStretchSize = SMM.bStretchSize; StretchBC_LocOffset = SMM.StretchBC_LocOffset; StretchBC_Size = SMM.StretchBC_Size; Stretch_UVThreshold = SMM.Stretch_UVThreshold; bStraightLineMatchStartEnd = SMM.bStraightLineMatchStartEnd; bBCFlipX = SMM.bBCFlipX; bBCFlipZ = SMM.bBCFlipZ; //Horizontal offsets: HorizontalSep = SMM.HorizontalSep; HorizontalCurve = SMM.HorizontalCurve; //Vertical offset: VerticalRaise = SMM.VerticalRaise; VerticalCurve = SMM.VerticalCurve; //Vertical cutoff VerticalCutoff = SMM.VerticalCutoff; bVerticalCutoff = SMM.bVerticalCutoff; bVerticalCutoffDownwards = SMM.bVerticalCutoffDownwards; bVerticalMeshCutoff_OppositeDir = SMM.bVerticalMeshCutoff_OppositeDir; VerticalMeshCutoffOffset = SMM.VerticalMeshCutoffOffset; bVerticalCutoff_MatchZero = SMM.bVerticalCutoff_MatchZero; RoadRaise = SMM.RoadRaise; CustomRotation = SMM.CustomRotation; bFlipRotation = SMM.bFlipRotation; bStatic = SMM.bStatic; StartTime = SMM.StartTime; EndTime = SMM.EndTime; Axis = SMM.Axis; RepeatUVType = SMM.RepeatUVType; //End objects: EndCapStart = SMM.EndCapStart; EndCapEnd = SMM.EndCapEnd; bEndCapCustomMatchStart = SMM.bEndCapCustomMatchStart; EndCapCustomOffsetStart = SMM.EndCapCustomOffsetStart; EndCapCustomOffsetEnd = SMM.EndCapCustomOffsetEnd; EndCapCustomRotOffsetStart = SMM.EndCapCustomRotOffsetStart; EndCapCustomRotOffsetEnd = SMM.EndCapCustomRotOffsetEnd; bEndObjectsMatchGround = SMM.bEndObjectsMatchGround; //Endings down: bEndDown = SMM.bEndDown; bEndTypeDownOverride = SMM.bEndTypeDownOverride; EndTypeDownOverride = SMM.EndTypeDownOverride; //Collision: CollisionType = SMM.CollisionType; bCollisionConvex = SMM.bCollisionConvex; bSimpleCollisionAutomatic = SMM.bSimpleCollisionAutomatic; bCollisionTrigger = SMM.bCollisionTrigger; CollisionBoxBL = SMM.CollisionBoxBL; CollisionBoxBR = SMM.CollisionBoxBR; CollisionBoxTL = SMM.CollisionBoxTL; CollisionBoxTR = SMM.CollisionBoxTR; CollisionTriBL = SMM.CollisionTriBL; CollisionTriBR = SMM.CollisionTriBR; CollisionTriT = SMM.CollisionTriT; tName = SMM.tName; }
public SplinatedMeshMaker Copy(){ SplinatedMeshMaker SMM = new SplinatedMeshMaker(); SMM.Init(tSpline,tNode,MasterObjTrans); SMM.MasterObjTrans = MasterObjTrans; SMM.bIsGSD = bIsGSD; SMM.CurrentSplination = CurrentSplination; SMM.CurrentSplinationString = CurrentSplinationString; SMM.CurrentSplinationCap1 = CurrentSplinationCap1; SMM.CurrentSplinationCap1String = CurrentSplinationCap1String; SMM.CurrentSplinationCap2 = CurrentSplinationCap2; SMM.CurrentSplinationCap2String = CurrentSplinationCap2String; SMM.CapHeightOffset1 = CapHeightOffset1; SMM.CapHeightOffset1 = CapHeightOffset2; SMM.Output = Output; SMM.tMesh = tMesh; SMM.bMaterialOverride = bMaterialOverride; SMM.SplinatedMaterial1 = SplinatedMaterial1; SMM.SplinatedMaterial2 = SplinatedMaterial2; SMM.SplinatedMaterial1String = SplinatedMaterial1String; SMM.SplinatedMaterial2String = SplinatedMaterial2String; SMM.bExactSplination = bExactSplination; SMM.bMatchRoadDefinition = bMatchRoadDefinition; SMM.bMatchRoadIncrements = bMatchRoadIncrements; SMM.bTrimStart = bTrimStart; SMM.bTrimEnd = bTrimEnd; SMM.bMatchTerrain = bMatchTerrain; SMM.MinMaxMod = MinMaxMod; SMM.VertexMatchingPrecision = VertexMatchingPrecision; SMM.bIsStretch = bIsStretch; SMM.bStretchLocOffset = bStretchLocOffset; SMM.bStretchSize = bStretchSize; SMM.StretchBC_LocOffset = StretchBC_LocOffset; SMM.StretchBC_Size = StretchBC_Size; SMM.Stretch_UVThreshold = Stretch_UVThreshold; SMM.bStraightLineMatchStartEnd = bStraightLineMatchStartEnd; SMM.bBCFlipX = bBCFlipX; SMM.bBCFlipZ = bBCFlipZ; //Horizontal offsets: SMM.HorizontalSep = HorizontalSep; SMM.HorizontalCurve = new AnimationCurve(); if(HorizontalCurve != null && HorizontalCurve.keys.Length > 0){ for(int i=0;i<HorizontalCurve.keys.Length;i++){ SMM.HorizontalCurve.AddKey(HorizontalCurve.keys[i]); } } //Vertical offset: SMM.VerticalRaise = VerticalRaise; SMM.VerticalCurve = new AnimationCurve(); if(VerticalCurve != null && VerticalCurve.keys.Length > 0){ for(int i=0;i<VerticalCurve.keys.Length;i++){ SMM.VerticalCurve.AddKey(VerticalCurve.keys[i]); } } //Vertical cutoff: SMM.bVerticalCutoff = bVerticalCutoff; SMM.VerticalCutoff = VerticalCutoff; SMM.bVerticalCutoffDownwards = bVerticalCutoffDownwards; SMM.bVerticalMeshCutoff_OppositeDir = bVerticalMeshCutoff_OppositeDir; SMM.VerticalMeshCutoffOffset = VerticalMeshCutoffOffset; SMM.bVerticalCutoff_MatchZero = bVerticalCutoff_MatchZero; SMM.RoadRaise = RoadRaise; SMM.CustomRotation = CustomRotation; SMM.bFlipRotation = bFlipRotation; SMM.bStatic = bStatic; SMM.StartTime = StartTime; SMM.EndTime = EndTime; SMM.StartPos = StartPos; SMM.EndPos = EndPos; SMM.Axis = Axis; SMM.RepeatUVType = RepeatUVType; SMM.mMaxX = mMaxX; SMM.mMinX = mMinX; SMM.mMaxY = mMaxY; SMM.mMinY = mMinY; SMM.mMaxZ = mMaxZ; SMM.mMinZ = mMinZ; //End objects: SMM.EndCapStart = EndCapStart; SMM.EndCapStartString = EndCapStartString; SMM.EndCapEnd = EndCapEnd; SMM.EndCapEndString = EndCapEndString; SMM.bEndCapCustomMatchStart = bEndCapCustomMatchStart; SMM.EndCapCustomOffsetStart = EndCapCustomOffsetStart; SMM.EndCapCustomOffsetEnd = EndCapCustomOffsetEnd; SMM.EndCapCustomRotOffsetStart = EndCapCustomRotOffsetStart; SMM.EndCapCustomRotOffsetEnd = EndCapCustomRotOffsetEnd; SMM.bEndObjectsMatchGround = bEndObjectsMatchGround; SMM.bIsBridge = bIsBridge; //End down: SMM.bEndDown = bEndDown; SMM.bEndTypeDownOverride = bEndTypeDownOverride; SMM.EndTypeDownOverride = EndTypeDownOverride; //Collision: SMM.CollisionType = CollisionType; SMM.bCollisionConvex = bCollisionConvex; SMM.bSimpleCollisionAutomatic = bSimpleCollisionAutomatic; SMM.bCollisionTrigger = bCollisionTrigger; SMM.CollisionBoxBL = CollisionBoxBL; SMM.CollisionBoxBR = CollisionBoxBR; SMM.CollisionBoxTL = CollisionBoxTL; SMM.CollisionBoxTR = CollisionBoxTR; SMM.CollisionTriBL = CollisionTriBL; SMM.CollisionTriBR = CollisionTriBR; SMM.CollisionTriT = CollisionTriT; SMM.tName = tName; SMM.ThumbString = ThumbString; SMM.Desc = Desc; SMM.DisplayName = DisplayName; SMM.SetupUniqueIdentifier(); return SMM; }
public bool IsEqualToSMM(SplinatedMeshMaker SMM){ if(SMM.CurrentSplination != CurrentSplination){ return false; } if(SMM.CurrentSplinationCap1 != CurrentSplinationCap1){ return false; } if(SMM.CurrentSplinationCap2 != CurrentSplinationCap2){ return false; } if(!GSDRootUtil.IsApproximately(SMM.CapHeightOffset1,CapHeightOffset1,0.0001f)){ return false; } if(!GSDRootUtil.IsApproximately(SMM.CapHeightOffset2,CapHeightOffset2,0.0001f)){ return false; } if(SMM.bMaterialOverride != bMaterialOverride){ return false; } if(SMM.SplinatedMaterial1 != SplinatedMaterial1){ return false; } if(SMM.SplinatedMaterial2 != SplinatedMaterial2){ return false; } if(SMM.bExactSplination != bExactSplination){ return false; } if(SMM.bMatchRoadDefinition != bMatchRoadDefinition){ return false; } if(SMM.bMatchRoadIncrements != bMatchRoadIncrements){ return false; } if(SMM.bTrimStart != bTrimStart){ return false; } if(SMM.bTrimEnd != bTrimEnd){ return false; } if(SMM.bMatchTerrain != bMatchTerrain){ return false; } if(!GSDRootUtil.IsApproximately(SMM.MinMaxMod,MinMaxMod,0.0001f)){ return false; } if(SMM.bIsBridge != bIsBridge){ return false; } if(!GSDRootUtil.IsApproximately(SMM.VertexMatchingPrecision,VertexMatchingPrecision,0.0001f)){ return false; } if(SMM.bIsStretch != bIsStretch){ return false; } if(SMM.bStretchLocOffset != bStretchLocOffset){ return false; } if(SMM.bStretchSize != bStretchSize){ return false; } if(SMM.StretchBC_LocOffset != StretchBC_LocOffset){ return false; } if(SMM.StretchBC_Size != StretchBC_Size){ return false; } if(!GSDRootUtil.IsApproximately(SMM.Stretch_UVThreshold,Stretch_UVThreshold,0.0001f)){ return false; } if(SMM.bStraightLineMatchStartEnd != bStraightLineMatchStartEnd){ return false; } if(SMM.bBCFlipX != bBCFlipX){ return false; } if(SMM.bBCFlipZ != bBCFlipZ){ return false; } //Horizontal offsets: if(!GSDRootUtil.IsApproximately(SMM.HorizontalSep,HorizontalSep,0.0001f)){ return false; } if(SMM.HorizontalCurve != HorizontalCurve){ return false; } //Vertical offset: if(!GSDRootUtil.IsApproximately(SMM.VerticalRaise,VerticalRaise,0.0001f)){ return false; } if(SMM.VerticalCurve != VerticalCurve){ return false; } //Vertical cutoff: if(!GSDRootUtil.IsApproximately(SMM.VerticalCutoff,VerticalCutoff,0.0001f)){ return false; } if(SMM.bVerticalCutoff != bVerticalCutoff){ return false; } if(SMM.bVerticalCutoffDownwards != bVerticalCutoffDownwards){ return false; } if(SMM.bVerticalMeshCutoff_OppositeDir != bVerticalMeshCutoff_OppositeDir){ return false; } if(!GSDRootUtil.IsApproximately(SMM.VerticalMeshCutoffOffset,VerticalMeshCutoffOffset,0.0001f)){ return false; } if(SMM.bVerticalCutoff_MatchZero != bVerticalCutoff_MatchZero){ return false; } if(!GSDRootUtil.IsApproximately(SMM.RoadRaise,RoadRaise,0.0001f)){ return false; } if(SMM.CustomRotation != CustomRotation){ return false; } if(SMM.bFlipRotation != bFlipRotation){ return false; } if(SMM.bStatic != bStatic){ return false; } if(!GSDRootUtil.IsApproximately(SMM.StartTime,StartTime,0.0001f)){ return false; } if(!GSDRootUtil.IsApproximately(SMM.EndTime,EndTime,0.0001f)){ return false; } if(SMM.Axis != Axis){ return false; } if(SMM.RepeatUVType != RepeatUVType){ return false; } //Ending objects: if(SMM.EndCapStart != EndCapStart){ return false; } if(SMM.EndCapEnd != EndCapEnd){ return false; } if(SMM.bEndCapCustomMatchStart != bEndCapCustomMatchStart){ return false; } if(SMM.EndCapCustomOffsetStart != EndCapCustomOffsetStart){ return false; } if(SMM.EndCapCustomOffsetEnd != EndCapCustomOffsetEnd){ return false; } if(SMM.EndCapCustomRotOffsetStart != EndCapCustomRotOffsetStart){ return false; } if(SMM.EndCapCustomRotOffsetEnd != EndCapCustomRotOffsetEnd){ return false; } if(SMM.bEndObjectsMatchGround != bEndObjectsMatchGround){ return false; } //Endings down: if(SMM.bEndDown != bEndDown){ return false; } if(SMM.bEndTypeDownOverride != bEndTypeDownOverride){ return false; } if(!GSDRootUtil.IsApproximately(SMM.EndTypeDownOverride,EndTypeDownOverride,0.0001f)){ return false; } //Collision: if(SMM.CollisionType != CollisionType){ return false; } if(SMM.bCollisionConvex != bCollisionConvex){ return false; } if(SMM.bSimpleCollisionAutomatic != bSimpleCollisionAutomatic){ return false; } if(SMM.bCollisionTrigger != bCollisionTrigger){ return false; } if(SMM.CollisionBoxBL != CollisionBoxBL){ return false; } if(SMM.CollisionBoxBR != CollisionBoxBR){ return false; } if(SMM.CollisionBoxTL != CollisionBoxTL){ return false; } if(SMM.CollisionBoxTR != CollisionBoxTR){ return false; } if(SMM.CollisionTriBL != CollisionTriBL){ return false; } if(SMM.CollisionTriBR != CollisionTriBR){ return false; } if(SMM.CollisionTriT != CollisionTriT){ return false; } if(string.CompareOrdinal(SMM.tName,tName) != 0){ return false; } return true; }