Пример #1
0
    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)
Пример #2
0
# 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()
Пример #3
0
 def create_node(self):
     return core.CollisionSphere(self.center, self.radius)