protected void SubmitLastPoint(bool preview, object owner) { if (owner != null) { var link = default(Link); if (TryGetLink(owner, ref link) == true) { if (link.Preview == preview && preview == false) { if (hitSpacing > 0.0f) { var currentPosition = link.Position; var distance = Vector3.Distance(link.Position, link.LastPosition); var steps = Mathf.FloorToInt(distance / hitSpacing); if (steps > hitLimit) { steps = hitLimit; } for (var i = 0; i < steps; i++) { currentPosition = Vector3.MoveTowards(currentPosition, link.LastPosition, hitSpacing); if (connectHits == true) { hitCache.InvokeLine(gameObject, preview, link.LastPriority, link.LastPressure, link.Position, currentPosition, link.LastRotation); } else { hitCache.InvokePoint(gameObject, preview, link.LastPriority, link.LastPressure, currentPosition, link.LastRotation); } link.Position = currentPosition; } } } } } }
public void SubmitLine(GameObject gameObject, bool preview, int priority, Vector3 position, Vector3 endPosition, Quaternion rotation, float pressure, object owner) { if (owner != null) { var link = default(Link); if (TryGetLink(owner, ref link) == true) { if (link.Preview == preview) { if (hitSpacing > 0.0f) { var currentPositionA = link.Position; var currentPositionB = link.EndPosition; var distanceA = Vector3.Distance(link.Position, position); var distanceB = Vector3.Distance(link.EndPosition, endPosition); var stepsA = Mathf.FloorToInt(distanceA / hitSpacing); var stepsB = Mathf.FloorToInt(distanceB / hitSpacing); if (stepsA > 0 || stepsB > 0) { var steps = Mathf.Max(stepsA, stepsB); var hitSpacingA = hitSpacing; var hitSpacingB = hitSpacing; if (steps > hitLimit) { steps = hitLimit; } if (stepsA > stepsB) { hitSpacingB = (distanceB * (distanceA / (stepsA * hitSpacingA))) / stepsA; } else { hitSpacingA = (distanceA * (distanceB / (stepsB * hitSpacingB))) / stepsB; } for (var i = 0; i < steps; i++) { currentPositionA = Vector3.MoveTowards(currentPositionA, position, hitSpacingA); currentPositionB = Vector3.MoveTowards(currentPositionB, endPosition, hitSpacingB); if (connectHits == true) { hitCache.InvokeQuad(gameObject, preview, priority, pressure, link.Position, link.EndPosition, currentPositionA, currentPositionB, rotation); } else { hitCache.InvokeLine(gameObject, preview, priority, pressure, currentPositionA, currentPositionB, rotation); } link.Position = currentPositionA; link.EndPosition = currentPositionB; } } return; } else if (connectHits == true) { hitCache.InvokeQuad(gameObject, preview, priority, pressure, link.Position, link.EndPosition, position, endPosition, rotation); } else { hitCache.InvokeLine(gameObject, preview, priority, pressure, position, endPosition, rotation); } } else { hitCache.InvokeLine(gameObject, preview, priority, pressure, position, endPosition, rotation); } } else { link = linkPool.Count > 0 ? linkPool.Pop() : new Link(); link.Owner = owner; links.Add(link); hitCache.InvokeLine(gameObject, preview, priority, pressure, position, endPosition, rotation); } link.Position = position; link.EndPosition = endPosition; link.Preview = preview; } else { hitCache.InvokeLine(gameObject, preview, priority, pressure, position, endPosition, rotation); } }