Exemple #1
0
        public void AdjustXLocation(Box2 location, Vector2 displacement, List <Collision> collisions)
        {
            var xstart = (int)(location.MinX / CELL_SIZE);
            var xstop  = (int)(location.MaxX / CELL_SIZE);
            var ystart = (int)(location.MinY / CELL_SIZE);
            var ystop  = (int)(location.MaxY / CELL_SIZE);

            for (int y = ystart; y <= ystop; y++)
            {
                for (int x = xstart; x <= xstop; x++)
                {
                    var cell = GetCellAtIndex(x, y);

                    if (cell != null)
                    {
                        if (displacement.X > 0)
                        {
                            if (cell.LeftEdge.NX == 1 &&
                                cell.LeftEdge.Y0 < location.MaxY &&
                                cell.LeftEdge.Y1 > location.MinY &&
                                cell.LeftEdge.X > location.MinX &&
                                cell.LeftEdge.X < location.MaxX)
                            {
                                var d = new Vector2(cell.LeftEdge.X - location.MaxX, 0);
                                collisions.Add(new Collision()
                                {
                                    Displacement    = d,
                                    Material        = cell.Material,
                                    Normal          = new Vector2(1, 0),
                                    AjustedLocation = location.Translate(d)
                                });
                            }
                        }
                        else if (displacement.X < 0)
                        {
                            if (cell.RightEdge.NX == -1 &&
                                cell.RightEdge.Y0 < location.MaxY &&
                                cell.RightEdge.Y1 > location.MinY &&
                                cell.RightEdge.X > location.MinX &&
                                cell.RightEdge.X < location.MaxX)
                            {
                                var d = new Vector2(cell.RightEdge.X - location.MinX, 0);
                                collisions.Add(new Collision()
                                {
                                    Displacement    = d,
                                    Material        = cell.Material,
                                    Normal          = new Vector2(-1, 0),
                                    AjustedLocation = location.Translate(d)
                                });
                            }
                        }
                    }
                }
            }
        }
Exemple #2
0
        private void AdjustYLocation(Box2 location, Vector2 displacement, List <Collision> collisions)
        {
            var xstart = (int)(location.MinX / CELL_SIZE);
            var xstop  = (int)(location.MaxX / CELL_SIZE);
            var ystart = (int)(location.MinY / CELL_SIZE);
            var ystop  = (int)(location.MaxY / CELL_SIZE);

            for (int y = ystart; y <= ystop; y++)
            {
                for (int x = xstart; x <= xstop; x++)
                {
                    var cell = GetCellAtIndex(x, y);

                    if (cell != null)
                    {
                        if (displacement.Y > 0)
                        {
                            if (cell.BottomEdge.NY == -1 &&
                                cell.BottomEdge.X0 < location.MaxX &&
                                cell.BottomEdge.X1 > location.MinX &&
                                cell.BottomEdge.Y > location.MinY &&
                                cell.BottomEdge.Y < location.MaxY)
                            {
                                var d = new Vector2(0, cell.BottomEdge.Y - location.MaxY);
                                collisions.Add(new Collision()
                                {
                                    Displacement    = d,
                                    Material        = cell.Material,
                                    Normal          = new Vector2(0, -1),
                                    AjustedLocation = location.Translate(d)
                                });
                            }
                        }
                        else if (displacement.Y < 0)
                        {
                            if (cell.TopEdge.NY == 1 &&
                                cell.TopEdge.X0 < location.MaxX &&
                                cell.TopEdge.X1 > location.MinX &&
                                cell.TopEdge.Y > location.MinY &&
                                cell.TopEdge.Y < location.MaxY)
                            {
                                var d = new Vector2(0, cell.TopEdge.Y - location.MinY);
                                collisions.Add(new Collision()
                                {
                                    Displacement    = d,
                                    Material        = cell.Material,
                                    Normal          = new Vector2(0, 1),
                                    AjustedLocation = location.Translate(d)
                                });
                            }
                        }
                    }
                }
            }
        }