public static bool CanSee(float x1, float z1, float x2, float z2, float visionRange) { Point2D p1 = instance.data.ClampToPoint(x1, z1); Point2D p2 = instance.data.ClampToPoint(x2, z2); if (!instance.data.ValidPoint(p1)) { bool found = instance.data.FindValidPoint(x1, z1, out p1); if (!found) { return(false); } } if (!instance.data.ValidPoint(p2)) { bool found = instance.data.FindValidPoint(x2, z2, out p2); if (!found) { return(false); } } IFOWNode node = instance.data.GetNode(p1); return(node.CanSee(p2, visionRange)); }
private void Run() { while (running) { while (!dirty) { Thread.Sleep(5); } foreach (IFOWAgent agent in agentViews.Keys) { AgentInfo info = agentViews[agent]; if (info.lastData == null) { continue; } SetAlphaForNodes(info.lastData, info.lastLength, 1f); } foreach (IFOWAgent agent in agentViews.Keys) { AgentInfo info = agentViews[agent]; Point2D last = info.lastPoint; IFOWNode node = data.GetNode(last); if (node == null) { continue; } int length = node.GetVisibleLength(agent.VisionRange); info.lastLength = length; if (length == 0) { continue; } ReadOnlyCollection <Point2D> points = node.Points; SetAlphaForNodes(points, length, 0f); info.lastData = points; } result = colors; Locked = false; dirty = false; } }