def init_entity(self, filter, entity): if TerrainObject in entity: path = entity[TerrainObject]._root elif Camera in entity: path = entity[Camera]._root else: path = None if filter == 'geomcollider': path.get_child(0).set_collide_mask(entity[GeomCollider].into_mask) return collider = entity[Collider] if not collider.solid: bounds = path.get_child(0).get_bounds() collider.solid = core.CollisionSphere(bounds.center, bounds.radius) collider.solid.tangible = collider.tangible cnode = core.CollisionNode(entity._uid.name) cnode.add_solid(collider.solid) cnode.set_from_collide_mask(collider.from_mask) cnode.set_into_collide_mask(collider.into_mask) cpath = path.attach_new_node(cnode) #cpath.show() collider._cpath = cpath cnode.set_python_tag('entity', entity) if collider.from_mask: if entity._uid.name == "camera": self.traverser.add_collider(cpath, self.queue) else: self.traverser.add_collider(cpath, self.handler) if collider.tangible: self.handler.add_collider(cpath, path) if TerrainObject in entity: self.player_obj = entity[TerrainObject] if collider.joint_from_mask and Character in entity: actor = entity[Character]._state_actors['fly'] self.actor = actor root = actor.expose_joint(None, "butterfly", "root") self.root = root for joint in actor.get_joints(): if joint.name.startswith("butterfly."): np = actor.expose_joint(root.attach_new_node(joint.name), "butterfly", joint.name, localTransform=True) cpath = np.attach_new_node(core.CollisionNode("butterfly")) cpath.node().set_from_collide_mask(collider.joint_from_mask) cpath.node().set_into_collide_mask(collider.into_mask) cpath.node().add_solid(core.CollisionSphere((0, 0.4, 0.3), 0.7)) cpath.node().set_tag("joint", joint.name) cpath.node().modify_solid(0).set_tangible(False) #cpath.show() self.joint_colliders.append(cpath)
# The next tests are for MAKE_SEQ_PROPERTY. def seq_property(*items): """ Returns a sequence property initialized with the given items. """ # It doesn't matter which property we use; I just happened to pick # CollisionNode.solids. cn = core.CollisionNode("") append = cn.add_solid for item in items: append(item) assert len(cn.solids) == len(items) return cn.solids # Arbitrary items we can use as items for the above seq property. item_a = core.CollisionSphere((0, 0, 0), 1) item_b = core.CollisionSphere((0, 0, 0), 2) item_c = core.CollisionSphere((0, 0, 0), 3) def test_seq_property_abc(): prop = seq_property() assert isinstance(prop, collections_abc.Container) assert isinstance(prop, collections_abc.Sized) assert isinstance(prop, collections_abc.Iterable) assert isinstance(prop, collections_abc.MutableSequence) assert isinstance(prop, collections_abc.Sequence) def test_seq_property_empty(): prop = seq_property()
def create_node(self): return core.CollisionSphere(self.center, self.radius)