using Fusion; using UnityEngine; using System.Collections.Generic; using BNG; public class MarkerEraser : NetworkBehaviour { public float EraseRadius = 0.1f; // شعاع پاک کردن خطوط public Transform EraserTransform; // ترانسفورم تخته پاک کن public List allLines = new List(); public static MarkerEraser instance; private void Update() { isDrawing = GetComponent().grabed; if(isDrawing) { EraseNearbyLines(); } } public void Awake() { instance = this; EraserTransform = transform; } public bool isDrawing = false; public void StartDrawing() { isDrawing = true; } public void StopDrawing() { isDrawing = false; } private void EraseNearbyLines() { for (int lineIndex = allLines.Count - 1; lineIndex >= 0; lineIndex--) { LineRenderer line = allLines[lineIndex]; if (line == null) continue; List newPositions = new List(); List segment = new List(); List> segments = new List>(); bool isErasing = false; for (int i = 0; i < line.positionCount; i++) { Vector3 point = line.GetPosition(i); if (Vector3.Distance(EraserTransform.position, point) > EraseRadius) { if (isErasing) { if (segment.Count > 0) { segments.Add(new List(segment)); segment.Clear(); } isErasing = false; } segment.Add(point); } else { isErasing = true; if (segment.Count > 0) { segments.Add(new List(segment)); segment.Clear(); } } } if (segment.Count > 0) segments.Add(segment); allLines.RemoveAt(lineIndex); Destroy(line.gameObject); foreach (var seg in segments) { if (seg.Count > 1) { CreateNewLine(seg,line); } } } } private void CreateNewLine(List points,LineRenderer line) { GameObject newLineObj = new GameObject("SplitLine"); LineRenderer newLine = newLineObj.AddComponent(); newLine.positionCount = points.Count; newLine.material=line.material; newLine.startColor=line.startColor; newLine.endColor=line.endColor; newLine.SetPositions(points.ToArray()); newLine.startWidth = 0.02f; newLine.endWidth = 0.02f; allLines.Add(newLine); } public void RegisterLine(LineRenderer line) { if (!allLines.Contains(line)) { allLines.Add(line); } } }