def testWaypointing(self): p = LinearParticle(10, 5, 0) p.speed = 5 p.turningspeed = math.pi / 2 waypoints = (Vec2d(15, 5), Vec2d(10, 5), Vec2d(10, 10)) for t in waypoints: p.waypoint_push(t) self.assert_(p.position == Vec2d(10, 5)) self.assert_(p.angle == 0) self.assert_(p.waypoint_len() == 3) for i in xrange(3): self.assert_(p.waypoint(i).position == waypoints[i]) p.update(1) self.assert_(p.waypoint_len() == 2) self.assert_(p.position == Vec2d(15, 5)) self.assert_(p.angle == 0) p.update(1) self.assert_(abs(abs(p.angle) - abs(math.pi / 2)) < 0.001) self.assert_(p.position == Vec2d(15, 5)) p.update(1) self.assert_(p.position == Vec2d(15, 5)) self.assert_(abs(abs(p.angle) - abs(math.pi)) < 0.001) p.update(2) self.assert_(p.position == Vec2d(10, 5)) self.assert_(abs(p.angle - math.pi / 2) < 0.001) self.assert_(p.waypoint_len() == 1) p.update(100) self.assert_(p.waypoint_len() == 0) self.assert_(p.position == Vec2d(10, 10)) self.assert_(abs(p.angle - math.pi / 2) < 0.001)
def test_update(self): p = LinearParticle(1, 5, 0) p.speed = 1 p.turningspeed = 3 * math.pi / 4 goal = Vec2d(0, 4) p.waypoint_push(goal) p.update(1) self.assertAlmostEqual(p.position.x, 1) self.assertAlmostEqual(p.position.y, 5) self.assertAlmostEqual(p.angle, -3 * math.pi / 4) p.update(math.sqrt(2) * 0.99) self.assertAlmostEqual(p.position.x, 0.01, 6) self.assertAlmostEqual(p.position.y, 4.01, 6) p.update(10) self.assertEqual(p.position, goal)