Ejemplo n.º 1
0
        public List <Collision> ProcessSlice(SlitherFrame slitherFrame, double angleStart, double angleEnd, int distanceStep)
        {
            var collision  = new List <Collision>();
            var selfRadius = GetSnakeRadius(slitherFrame.Snake);

            foreach (var snake in slitherFrame.Snakes)
            {
                if (snake.DeadAmt == 0)
                {
                    var snakeRadius = GetSnakeRadius(snake);
                    var radius      = selfRadius + snakeRadius;
                    var distance    = _collisionService.GetDistance(snake.Xx, snake.Yy, radius, angleStart, angleEnd, distanceStep);
                    if (distance != null)
                    {
                        collision.Add(new SnakeHead {
                            Distance = distance.Value, RelativeAngle = snake.Ang, Size = snake.Pts.Count
                        });
                    }

                    var points = snake.Pts.Where(p => p.Dying == false);
                    for (int index = 0; index < points.Count(); index++)
                    {
                        distance = _collisionService.GetDistance(snake.Pts[index].Xx, snake.Pts[index].Yy, radius, angleStart, angleEnd, distanceStep);
                        if (distance != null)
                        {
                            collision.Add(new SnakeBody {
                                Distance = distance.Value, Size = snakeRadius, StartIndex = index, EndIndex = points.Count() - index
                            });
                        }
                    }
                }
            }

            collision.Add(new Boundry {
                Distance = GetBoundryDistance(slitherFrame.WorldCenter, selfRadius, angleStart, angleEnd, distanceStep)
            });

            return(collision.OrderBy(c => c.Distance).ToList());
        }
        public List<Collision> ProcessSlice(SlitherFrame slitherFrame, double angleStart, double angleEnd, int distanceStep)
        {
            var collision = new List<Collision>();

            var points = slitherFrame.Snake.Pts.Where(p => p.Dying == false);
            for (int index = 0; index < points.Count(); index++)
            {
                var distance = _collisionService.GetDistance(slitherFrame.Snake.Pts[index].Xx, slitherFrame.Snake.Pts[index].Yy, 0, angleStart, angleEnd, distanceStep);
                if (distance != null)
                {
                    collision.Add(new SnakeBody { Distance = distance.Value, Size = slitherFrame.Snake.Sc * 14.5, StartIndex = index, EndIndex = points.Count() - index });
                }
            }

            return collision.OrderBy(c => c.Distance).ToList();
        }
        public List <FoodCollision> ProcessSlice(SlitherFrame slitherFrame, double angleStart, double angleEnd, int distanceStep)
        {
            var foods = new List <FoodCollision>();

            foreach (var food in slitherFrame.Foods)
            {
                if (food != null)
                {
                    var distance = _collisionService.GetDistance(food.Xx, food.Yy, 1, angleStart, angleEnd, distanceStep);
                    if (distance != null)
                    {
                        foods.Add(new FoodCollision {
                            Distance = distance.Value, Size = 1
                        });
                    }
                }
            }

            return(foods.OrderBy(c => c.Distance).ToList());
        }