public void Check_StopsObject_EvenIfItIsMovingLessThanOnePixel() { var map = CollisionMap.Empty; map.TileSize = 16; map.MapData.Width = 4; // create a fake map // 0, 0, 0, 0, // 0, -1, -1, 0, // 0, -1, -1, 0, // 0, 0, 0, 0 map.MapData[0] = 0; map.MapData[1] = 0; map.MapData[2] = 0; map.MapData[3] = 0; map.MapData[4] = 0; map.MapData[5] = -1; map.MapData[6] = -1; map.MapData[7] = 0; map.MapData[8] = 0; map.MapData[9] = -1; map.MapData[10] = -1; map.MapData[11] = 0; map.MapData[12] = 0; map.MapData[13] = 0; map.MapData[14] = 0; map.MapData[15] = 0; var detector = new CollisionDetector(map); // now, simulate a collision where the entity wants to travel 0.32000000023f on X and 4.8f on Y var result = detector.Check(new Vector2(16, 16), new Vector2(-0.3200000023f, 4.8f), new Vector2(64, 64)); // X position should be pushed back (entity was in a bad spot before) Assert.Equal(16f, result.Position.X); // Y should increase as expected Assert.Equal(20.8f, result.Position.Y); }
public void Check_DecrementsYaxis_IfNoCollisions() { var detector = new CollisionDetector(CollisionMap.Empty); var result = detector.Check(_startPosition, new Vector2(0, -2), _size); Assert.Equal(100f, result.Position.X); Assert.Equal(98f, result.Position.Y); }
public void Check_IncrementsYaxis_IfNoCollisions() { var detector = new CollisionDetector(CollisionMap.Empty); var result = detector.Check(_startPosition, _smallVelocity, _size); Assert.Equal(105f, result.Position.X); Assert.Equal(105f, result.Position.Y); }
public void Check_StopsObject_AtCollisionPoint() { // fake a collision along our path var map = CollisionMap.Empty; map.TileSize = 16; map.MapData[1] = 1; var detector = new CollisionDetector(map); var result = detector.Check(Vector2.Zero, new Vector2(32, 0), new Vector2(8, 8)); Assert.Equal(8, result.Position.X); Assert.Equal(0, result.Position.Y); }
public void Test_Collision_Edge_Cases() { //{X:0 Y:78.4279} //{X:-20 Y:88.2359} //False //{X:-0.32 Y:1.411775} //{X:64 Y:252.6814} var map = CollisionMap.Empty; map.TileSize = 16; map.MapData.Width = 4; // create a fake map // 0, 0, 0, 0, // 0, -1, -1, 0, // 0, -1, -1, 0, // 0, 0, 0, 0 map.MapData[0] = 0; map.MapData[1] = 0; map.MapData[2] = 0; map.MapData[3] = 0; map.MapData[4] = 0; map.MapData[5] = -1; map.MapData[6] = -1; map.MapData[7] = 0; map.MapData[8] = 0; map.MapData[9] = -1; map.MapData[10] = -1; map.MapData[11] = 0; map.MapData[12] = 0; map.MapData[13] = -1; map.MapData[14] = -1; map.MapData[15] = 0; map.MapData[16] = 0; map.MapData[17] = -1; map.MapData[18] = -1; map.MapData[19] = 0; map.MapData[20] = 0; map.MapData[21] = -1; map.MapData[22] = -1; map.MapData[23] = 0; map.MapData[24] = 0; map.MapData[25] = -1; map.MapData[26] = -1; map.MapData[27] = 0; map.MapData[28] = 0; map.MapData[29] = -1; map.MapData[30] = -1; map.MapData[31] = 0; map.MapData[32] = 0; map.MapData[33] = 0; map.MapData[34] = 0; map.MapData[35] = 0; var detector = new CollisionDetector(map); // now, simulate a collision where the entity wants to travel 0.32000000023f on X and 4.8f on Y var result = detector.Check(new Vector2(16, 16), new Vector2(-0.3200000023f, 1.411775f), new Vector2(16, 16)); result.XAxis.ShouldBeTrue("No XAxis Collision Reported"); result.Position.X.ShouldEqual(16f); // no movement on X }