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); }