private static void FollowSpline() { PFollowSplineConfig config = PFollowSplineConfig.Instance; if (config.Spline == null || config.Water == null) { return; } GSplineCreator spline = config.Spline; PWater water = config.Water; List <GSplineAnchor> anchors = spline.Spline.Anchors; Vector3 sumPosition = Vector3.zero; for (int i = 0; i < anchors.Count; ++i) { sumPosition += anchors[i].Position; } Vector3 avgPos = sumPosition / anchors.Count; water.transform.position = new Vector3(avgPos.x, config.WaterLevel, avgPos.z); List <PIndex2D> indices = new List <PIndex2D>(); List <Vector4> verts = spline.GenerateVerticesWithFalloff(); for (int i = 0; i < verts.Count; ++i) { PIndex2D index = water.WorldPointToTileIndex(verts[i]); indices.AddIfNotContains(index); } water.TileIndices = indices; water.ReCalculateBounds(); }
public static void OnGUI() { PFollowSplineConfig config = PFollowSplineConfig.Instance; config.Spline = EditorGUILayout.ObjectField("Spline", config.Spline, typeof(GSplineCreator), true) as GSplineCreator; config.Water = EditorGUILayout.ObjectField("Water", config.Water, typeof(PWater), true) as PWater; config.WaterLevel = EditorGUILayout.FloatField("Water Level", config.WaterLevel); EditorUtility.SetDirty(config); GUI.enabled = config.Spline != null && config.Water != null; if (GUILayout.Button("Follow Spline")) { GAnalytics.Record(GX_POSEIDON_FOLLOW_SPLINE); FollowSpline(); } GUI.enabled = true; }