public LightSaber_Arc DetachRay(bool newshape = false)
 {
     LightSaber_Arc tempArc = currentArc;
     currentArc = null;
     if (newshape)
         Initialize();
     return tempArc;
 }
        // Update is called once per frame
        void LateUpdate()
        {
            if (Vector3.SqrMagnitude(transform.position - segments[segments.Count - 1].pos) > precision * precision)
            {
                segments.Add(new SegmentInfo(transform.position, Time.time));
            }

            if (truncateByLifetime && segments.Count > 1)
            {
                if (Time.time - segments[segments.Count - 1].birthtime > lifetimeThreshold)
                {
                    Initialize();
                }
                else
                {
                    for (int i = 0; i < segments.Count - 1; i++)
                    {
                        if (Time.time - segments[segments.Count - 1 - i].birthtime > lifetimeThreshold)
                        {
                            segments.RemoveRange(0, segments.Count - 2 - i);
                            break;
                        }
                    }
                }
            }

            if (truncateByDistance && segments.Count > 1)
            {
                float distance = Vector3.Distance(transform.position, segments[segments.Count - 1].pos);
                if (distance > distanceThreshold)
                {
                    Initialize();
                }
                else
                {
                    for (int i = 0; i < segments.Count - 1; i++)
                    {
                        distance += Vector3.Distance(segments[segments.Count - 1 - i].pos, segments[segments.Count - 2 - i].pos);
                        if (distance > distanceThreshold)
                        {
                            segments.RemoveRange(0, segments.Count - 2 - i);
                            break;
                        }
                    }
                }
            }


            if (currentArc == null && segments.Count > 1)
            {
                GameObject obj = arcPrefab.InstantiateFromPool();
                currentArc = obj.GetComponent<LightSaber_Arc>();
                if (globalSpaceTransform != null)
                    obj.transform.parent = globalSpaceTransform;
            }

            if (currentArc != null)
            {
                if (currentArc.shapePoints.Length != segments.Count)
                {
                    Array.Resize(ref currentArc.shapePoints, Mathf.Max(segments.Count, 2));
                }

                currentArc.shapePoints[0] = transform.position;
                for (int x = 0; x < segments.Count - 1; x++)
                {
                    currentArc.shapePoints[segments.Count - x - 1] = segments[x].pos;
                }
            }

        }
 public void DeleteArcSystem(LightSaber_Arc arcSystem)
 {
     //arcSystems.Remove(arcSystem);
     arcSystemsForDeletion.Add(arcSystem);
 }
 public void AddArcSystem(LightSaber_Arc arcSystem)
 {
     arcSystems.Add(arcSystem);
     arcSystem.SetPerformancePriority(priority);
 }