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; } }
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); } } }
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; }