public bool IsControllerInsideChunk(ControllerStickBase controller, PointsOnSplineExtension points) { if (SamePosition()) { return(true); } //current data SplineBase.PositionUnits unitPointsOnSpline = points.PositionUnits; SplineBase.PositionUnits unitController = controller.PositionUnits; float currentPosition = controller.PathPosition; //3 points with same units (units of the chunks points, default by Distance) currentPosition = controller.SplineBase.ConvertPathUnit(currentPosition, unitController, unitPointsOnSpline); float a = PositionA(points); float b = PositionB(points); //return true if we are inside a chunk if (b < a) { return(currentPosition <= b || currentPosition >= a); } else { return(currentPosition >= a && currentPosition <= b); } }
public bool UpdateAllWayPointCrossed(float previous, float current, SplineBase.PositionUnits positionUnits) { _toTrigger.Clear(); for (int i = 0; i < ListToCheck.Length; i++) { if (ListToCheck[i] == null) { continue; } if (!ListToCheck[i].gameObject.activeInHierarchy) { continue; } int startIndex = _indexChecked[i] + 1; for (int k = startIndex; k < ListToCheck[i].WaypointsCount; k++) { float wayPoint = ListToCheck[i].GetWayPoint(k).GetPathPosition(positionUnits); if (wayPoint > previous && wayPoint <= current && Mathf.Abs(wayPoint - current) < _maxDistanceToActive) { _toTrigger.Add(ListToCheck[i].GetWayPoint(k)); _indexChecked[i] = k; } else if (wayPoint > current) { break; } } } return(_toTrigger.Count > 0); }
public void ChangeUnit(SplineBase.PositionUnits newUnit) { _positionUnits = newUnit; float closestPositionOnSpline = _spline.FindClosestPoint(transform.position, 0, -1, 10); _pathPosition = _spline.FromPathNativeUnits(closestPositionOnSpline, PositionUnits); _clampedPathPosition = _pathPosition; }
public void Construct(SplineBase splineA, SplineBase splineB, float from, float to, SplineBase.PositionUnits positionUnits) { _splineA = splineA; _splineB = splineB; _pathPositionA = from; _pathPositionB = to; _positionUnits = positionUnits; ConstructSpline(); }
protected virtual void OnEnable() { _waypointList = null; this.UpdateEditor(); ExtSerializedProperties.SetObjectReferenceValueIfEmpty <SplineBase>(this.GetPropertie("_spline"), _target.transform); this.ApplyModification(); _previousPositionUnit = _target.PositionUnits; if (_target.GetComponent <SplineBase>() == null) { Tools.hidden = true; } }
protected virtual void OnEnable() { if (target is ControllerStick) { _splineController = (ControllerStick)target; this.UpdateEditor(); ExtSerializedProperties.SetObjectReferenceValueIfEmpty <SplineBase>(this.GetPropertie("_spline"), _splineController.transform); ExtSerializedProperties.SetObjectReferenceValueIfEmpty <Transform>(this.GetPropertie("_toMove"), _splineController.transform); this.ApplyModification(); } if (_splineController) { _positionUnits = _splineController.PositionUnits; } }
private void UpdatePathUnits() { if (_previousPositionUnit != _target.PositionUnits) { SplineBase spline = _target.SplineBase; for (int i = 0; i < _target.WaypointsCount; ++i) { SerializedProperty element = _waypointList.serializedProperty.GetArrayElementAtIndex(i); SerializedProperty pathPosition = element.GetPropertie(nameof(PointsOnSplineExtension.Waypoint.PathPosition)); float currentPathPosition = pathPosition.floatValue; float newPos = spline.ConvertPathUnit(currentPathPosition, _previousPositionUnit, _target.PositionUnits); pathPosition.floatValue = newPos; } this.ApplyModification(); } _previousPositionUnit = _target.PositionUnits; }
public override void OnInspectorGUI() { GUI.enabled = false; EditorGUILayout.ObjectField("Script", MonoScript.FromMonoBehaviour((ControllerStick)target), typeof(ControllerStick), false); GUI.enabled = true; EditorGUI.BeginChangeCheck(); base.OnInspectorGUI(); if (EditorGUI.EndChangeCheck()) { if (_positionUnits != _splineController.PositionUnits) { ChangePosition(_target.transform.position); } _positionUnits = _splineController.PositionUnits; } }
public void SetPercent(float percent) { _positionUnits = SplineBase.PositionUnits.Normalized; _pathPosition = percent; _clampedPathPosition = _pathPosition; }
public float GetPathPosition(SplineBase.PositionUnits unitOfController) { float convertedUnit = _pointsListerReference.SplineBase.ConvertPathUnit(PathPosition, _pointsListerReference.PositionUnits, unitOfController); return(convertedUnit); }
public Quaternion GetRotationFromPoint(float pathPosition, SplineBase.PositionUnits unit) { return(_spline.EvaluateOrientationAtUnit(pathPosition, unit)); }
public Vector3 GetPositionFromPoint(float pathPosition, SplineBase.PositionUnits unit) { return(_spline.EvaluatePositionAtUnit(pathPosition, unit)); }
public static SplineBase GenerateBranch(SplineBase splineA, SplineBase splineB, float from, float to, SplineBase.PositionUnits positionUnits) { BranchBetweenSplines branch = GameObject.Instantiate(Resources.Load <BranchBetweenSplines>("BRANCH_SPLINE")); branch.Construct(splineA, splineB, from, to, positionUnits); return(branch.SplineBase); }
public static void DrawPathGizmo(SplineBase path, Color pathColor, float start, float end, SplineBase.PositionUnits units, float offset, bool canDrawMin = true, bool canDrawMax = true) { // Draw the path Color colorOld = Gizmos.color; Gizmos.color = pathColor; float step = 1f / path.Resolution; Vector3 lastPos = path.EvaluatePositionAtUnit(start, units); Vector3 lastW = (path.EvaluateOrientationAtUnit(start, units) * Vector3.right) * path.Appearances.Width * offset; Vector3 p0 = lastPos; Vector3 p1 = lastW; int currentStep = 0; for (float t = start + step; t <= end + step / 2; t += step) { Vector3 p = path.EvaluatePositionAtUnit(t, units); Quaternion q = path.EvaluateOrientationAtUnit(t, units); Vector3 w = (q * Vector3.right) * path.Appearances.Width * offset; p0 = p - w; p1 = p + w; if (currentStep == 0 && canDrawMin) { Gizmos.DrawLine(p0, p1); } Gizmos.DrawLine(lastPos - lastW, p - w); Gizmos.DrawLine(lastPos + lastW, p + w); #if false // Show the normals, for debugging Gizmos.color = Color.red; Vector3 y = (q * Vector3.up) * path.Appearances.Width / 4; Gizmos.DrawLine(p, p + y); Gizmos.color = pathColor; #endif lastPos = p; lastW = w; currentStep++; } if (canDrawMax) { Gizmos.DrawLine(p0, p1); } Gizmos.color = colorOld; }