Beispiel #1
0
            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);
        }
Beispiel #3
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;
            }
        }
Beispiel #9
0
 public void SetPercent(float percent)
 {
     _positionUnits       = SplineBase.PositionUnits.Normalized;
     _pathPosition        = percent;
     _clampedPathPosition = _pathPosition;
 }
Beispiel #10
0
            public float GetPathPosition(SplineBase.PositionUnits unitOfController)
            {
                float convertedUnit = _pointsListerReference.SplineBase.ConvertPathUnit(PathPosition, _pointsListerReference.PositionUnits, unitOfController);

                return(convertedUnit);
            }
Beispiel #11
0
 public Quaternion GetRotationFromPoint(float pathPosition, SplineBase.PositionUnits unit)
 {
     return(_spline.EvaluateOrientationAtUnit(pathPosition, unit));
 }
Beispiel #12
0
 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);
        }
Beispiel #14
0
        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;
        }