Ejemplo n.º 1
0
 private void GenerateObstacleVOs(Agent.VOBuffer vos)
 {
     for (int i = 0; i < this.simulator.obstacles.Count; i++)
     {
         ObstacleVertex obstacleVertex  = this.simulator.obstacles[i];
         ObstacleVertex obstacleVertex2 = obstacleVertex;
         do
         {
             if (obstacleVertex2.ignore || (obstacleVertex2.layer & this.collidesWith) == (RVOLayer)0)
             {
                 obstacleVertex2 = obstacleVertex2.next;
             }
             else
             {
                 Vector2 vector  = Agent.To2D(obstacleVertex2.position);
                 Vector2 vector2 = Agent.To2D(obstacleVertex2.next.position);
                 float   num     = Agent.VO.SignedDistanceFromLine(vector, obstacleVertex2.dir, this.position);
                 if (num >= -0.01f && num < this.neighbourDist)
                 {
                     float t            = Vector2.Dot(this.position - vector, vector2 - vector) / (vector2 - vector).sqrMagnitude;
                     float num2         = Mathf.Lerp(obstacleVertex2.position.y, obstacleVertex2.next.position.y, t);
                     float sqrMagnitude = (Vector2.Lerp(vector, vector2, t) - this.position).sqrMagnitude;
                     if (sqrMagnitude < this.neighbourDist * this.neighbourDist && this.elevationCoordinate <= num2 + obstacleVertex2.height && this.elevationCoordinate + this.height >= num2)
                     {
                         vos.Add(Agent.VO.SegmentObstacle(vector2 - this.position, vector - this.position, Vector2.zero, this.radius * 0.01f, 1f / this.ObstacleTimeHorizon, 1f / this.simulator.DeltaTime));
                     }
                 }
                 obstacleVertex2 = obstacleVertex2.next;
             }
         }while (obstacleVertex2 != obstacleVertex && obstacleVertex2 != null && obstacleVertex2.next != null);
     }
 }
Ejemplo n.º 2
0
        private void GenerateNeighbourAgentVOs(Agent.VOBuffer vos)
        {
            float   num = 1f / this.agentTimeHorizon;
            Vector2 a   = this.currentVelocity;

            for (int i = 0; i < this.neighbours.Count; i++)
            {
                Agent agent = this.neighbours[i];
                if (agent != this)
                {
                    float num2 = Math.Min(this.elevationCoordinate + this.height, agent.elevationCoordinate + agent.height);
                    float num3 = Math.Max(this.elevationCoordinate, agent.elevationCoordinate);
                    if (num2 - num3 >= 0f)
                    {
                        float   num4   = this.radius + agent.radius;
                        Vector2 vector = agent.position - this.position;
                        float   num5;
                        if (agent.locked || agent.manuallyControlled)
                        {
                            num5 = 1f;
                        }
                        else if (agent.Priority > 1E-05f || this.Priority > 1E-05f)
                        {
                            num5 = agent.Priority / (this.Priority + agent.Priority);
                        }
                        else
                        {
                            num5 = 0.5f;
                        }
                        Vector2 b       = Vector2.Lerp(agent.currentVelocity, agent.desiredVelocity, 2f * num5 - 1f);
                        Vector2 vector2 = Vector2.Lerp(a, b, num5);
                        vos.Add(new Agent.VO(vector, vector2, num4, num, 1f / this.simulator.DeltaTime));
                        if (this.DebugDraw)
                        {
                            Agent.DrawVO(this.position + vector * num + vector2, num4 * num, this.position + vector2);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void GenerateObstacleVOs(Agent.VOBuffer vos)
        {
            float num = this.maxSpeed * this.obstacleTimeHorizon;

            for (int i = 0; i < this.simulator.obstacles.Count; i++)
            {
                ObstacleVertex obstacleVertex  = this.simulator.obstacles[i];
                ObstacleVertex obstacleVertex2 = obstacleVertex;
                do
                {
                    if (obstacleVertex2.ignore || (obstacleVertex2.layer & this.collidesWith) == (RVOLayer)0)
                    {
                        obstacleVertex2 = obstacleVertex2.next;
                    }
                    else
                    {
                        float   a;
                        Vector2 vector = this.To2D(obstacleVertex2.position, out a);
                        float   b;
                        Vector2 vector2    = this.To2D(obstacleVertex2.next.position, out b);
                        Vector2 normalized = (vector2 - vector).normalized;
                        float   num2       = Agent.VO.SignedDistanceFromLine(vector, normalized, this.position);
                        if (num2 >= -0.01f && num2 < num)
                        {
                            float t            = Vector2.Dot(this.position - vector, vector2 - vector) / (vector2 - vector).sqrMagnitude;
                            float num3         = Mathf.Lerp(a, b, t);
                            float sqrMagnitude = (Vector2.Lerp(vector, vector2, t) - this.position).sqrMagnitude;
                            if (sqrMagnitude < num * num && this.elevationCoordinate <= num3 + obstacleVertex2.height && this.elevationCoordinate + this.height >= num3)
                            {
                                vos.Add(Agent.VO.SegmentObstacle(vector2 - this.position, vector - this.position, Vector2.zero, this.radius * 0.01f, 1f / this.ObstacleTimeHorizon, 1f / this.simulator.DeltaTime));
                            }
                        }
                        obstacleVertex2 = obstacleVertex2.next;
                    }
                }while (obstacleVertex2 != obstacleVertex && obstacleVertex2 != null && obstacleVertex2.next != null);
            }
        }