class Ramp(PhysicalObject): """ A ramp. """ def __init__(self, base, top, width, thickness, color, mass, hpr, name=None): super(Ramp, self).__init__(name) self.base = Point3(*base) self.top = Point3(*top) self.width = width self.thickness = thickness self.color = color self.mass = mass self.hpr = hpr self.midpoint = Point3((self.base + self.top) / 2.0) def create_node(self): rel_base = Point3(self.base - (self.midpoint - Point3(0, 0, 0))) rel_top = Point3(self.top - (self.midpoint - Point3(0, 0, 0))) self.geom = GeomBuilder().add_ramp(self.color, rel_base, rel_top, self.width, self.thickness).get_geom_node() return NodePath(self.geom) def create_solid(self): node = BulletRigidBodyNode(self.name) mesh = BulletConvexHullShape() mesh.add_geom(self.geom.get_geom(0)) node.add_shape(mesh) return node def add_solid(self, node): mesh = BulletConvexHullShape() mesh.add_geom(GeomBuilder().add_ramp(self.color, self.base, self.top, self.width, self.thickness, LRotationf(*self.hpr)).get_geom()) node.add_shape(mesh) return node def add_to(self, geom_builder): geom_builder.add_ramp(self.color, self.base, self.top, self.width, self.thickness, LRotationf(*self.hpr)) def attached(self): self.move(self.midpoint) self.rotate(*self.hpr)
class Dome(PhysicalObject): """ A dome. """ def __init__(self, radius, samples, planes, color, mass, center, hpr, name=None): super(Dome, self).__init__(name) self.radius = radius self.samples = samples self.planes = planes self.color = color self.mass = mass self.center = center self.hpr = hpr def create_node(self): self.geom = GeomBuilder().add_dome(self.color, (0, 0, 0), self.radius, self.samples, self.planes).get_geom_node() return NodePath(self.geom) def create_solid(self): node = BulletRigidBodyNode(self.name) mesh = BulletConvexHullShape() mesh.add_geom(self.geom.get_geom(0)) node.add_shape(mesh) return node def add_solid(self, node): mesh = BulletConvexHullShape() mesh.add_geom(GeomBuilder().add_dome(self.color, self.center, self.radius, self.samples, self.planes, LRotationf(*self.hpr)).get_geom()) node.add_shape(mesh) return node def add_to(self, geom_builder): rot = LRotationf(*self.hpr) geom_builder.add_dome(self.color, self.center, self.radius, self.samples, self.planes, rot) def attached(self): self.move(self.center) self.rotate_by(*self.hpr)
class Ramp(PhysicalObject): """ A ramp. """ def __init__(self, base, top, width, thickness, color, mass, hpr, name=None): super(Ramp, self).__init__(name) self.base = Point3(*base) self.top = Point3(*top) self.width = width self.thickness = thickness self.color = color self.mass = mass self.hpr = hpr self.midpoint = Point3((self.base + self.top) / 2.0) def create_node(self): rel_base = Point3(self.base - (self.midpoint - Point3(0, 0, 0))) rel_top = Point3(self.top - (self.midpoint - Point3(0, 0, 0))) self.geom = GeomBuilder().add_ramp(self.color, rel_base, rel_top, self.width, self.thickness).get_geom_node() return NodePath(self.geom) def create_solid(self): node = BulletRigidBodyNode(self.name) mesh = BulletConvexHullShape() mesh.add_geom(self.geom.get_geom(0)) node.add_shape(mesh) return node def add_solid(self, node): mesh = BulletConvexHullShape() mesh.add_geom( GeomBuilder() .add_ramp(self.color, self.base, self.top, self.width, self.thickness, LRotationf(*self.hpr)) .get_geom() ) node.add_shape(mesh) return node def add_to(self, geom_builder): geom_builder.add_ramp(self.color, self.base, self.top, self.width, self.thickness, LRotationf(*self.hpr)) def attached(self): self.move(self.midpoint) self.rotate(*self.hpr)
class Dome (PhysicalObject): """ A dome. """ def __init__(self, radius, samples, planes, color, mass, center, hpr, name=None): super(Dome, self).__init__(name) self.radius = radius self.samples = samples self.planes = planes self.color = color self.mass = mass self.center = center self.hpr = hpr def create_node(self): self.geom = GeomBuilder().add_dome(self.color, (0, 0, 0), self.radius, self.samples, self.planes).get_geom_node() return NodePath(self.geom) def create_solid(self): node = BulletRigidBodyNode(self.name) mesh = BulletConvexHullShape() mesh.add_geom(self.geom.get_geom(0)) node.add_shape(mesh) return node def add_solid(self, node): mesh = BulletConvexHullShape() mesh.add_geom(GeomBuilder().add_dome(self.color, self.center, self.radius, self.samples, self.planes, LRotationf(*self.hpr)).get_geom()) node.add_shape(mesh) return node def add_to(self, geom_builder): rot = LRotationf(*self.hpr) geom_builder.add_dome(self.color, self.center, self.radius, self.samples, self.planes, rot) def attached(self): self.move(self.center) self.rotate_by(*self.hpr)