Exemple #1
0
        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));
        }
Exemple #2
0
        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;
            }
        }