private static void RenderShapes(ShapesIterator shapes, Vector cameraPosition)
 {
     for (var i = 0; i < shapes.Length; i++)
     {
         RenderMachine.RenderShapeOnCamera(shapes[i], cameraPosition);
     }
 }
        public static List <CollisionInfo> ResolveCollisions(ShapesIterator sceneObjects)
        {
            ClearColliding(sceneObjects);
            var collisions = new List <CollisionInfo>();

            for (var i = 0; i < sceneObjects.Length; i++)
            {
                for (var k = i + 1; k < sceneObjects.Length; k++)
                {
                    if (sceneObjects[i].IsStatic && sceneObjects[k].IsStatic ||
                        !(sceneObjects[i].CanCollide && sceneObjects[k].CanCollide))
                    {
                        continue;
                    }

                    var collisionInfo = CollisionDetector.GetCollisionInfo(sceneObjects[i], sceneObjects[k]);
                    if (collisionInfo == null)
                    {
                        continue;
                    }

                    sceneObjects[i].IsCollided = sceneObjects[k].IsCollided = true;
                    ResolveCollisionStatically(collisionInfo, sceneObjects[i], sceneObjects[k]);
                    collisions.Add(collisionInfo);
                }
            }

            return(collisions);
        }
 private static void ClearColliding(ShapesIterator sceneObjects)
 {
     for (var i = 0; i < sceneObjects.Length; i++)
     {
         sceneObjects[i].IsCollided = false;
     }
 }
示例#4
0
 private void AvoidCollision(ShapesIterator shapes)
 {
     for (var i = 0; i < shapes.Length; i++)
     {
         if (shapes[i] is RigidCircle)
         {
             var circle = (RigidCircle)shapes[i];
             if (circle.Center == Position)
             {
                 continue;
             }
             TryAvoidCircle(circle);
         }
     }
 }
示例#5
0
        public void Update(
            Vector playerPosition, Vector playerVelocity, List <Bullet> sceneBullets,
            List <AbstractParticleUnit> particles, ShapesIterator shapes, List <List <Vector> > botPaths, List <Edge> walls)
        {
            currentWeapon.IncrementTick();
            AvoidCollision(shapes);
            if (IsInView(playerPosition, walls))
            {
                currentPath = null;
                Fire(playerPosition + playerVelocity, sceneBullets, particles);
                var v      = playerPosition - Position;
                var radius = CollisionShape.Diameter * 4;
                if (Vector.ScalarProduct(v, v) < radius * radius)
                {
                    MoveCirclesAround(playerPosition, 2);
                }
                else
                {
                    ChasePrey(playerPosition);
                }
            }
            else
            {
                if (currentPath == null || currentPathPointIndex == currentPath.Count || currentPath.Count == 0)
                {
                    currentPath           = AStarSearch.SearchPath(Position, playerPosition);
                    currentPathPointIndex = 0;
                }
                ChasePrey(currentPath[currentPathPointIndex]);
                var distVector = currentPath[currentPathPointIndex] - Position;
                if (Vector.ScalarProduct(distVector, distVector) < 32 * 32)
                {
                    currentPathPointIndex++;
                }
            }

            if (currentPath != null && currentPath.Count != 0)
            {
                botPaths.Add(currentPath);
            }
            Velocity = sight * speed;
        }