コード例 #1
0
ファイル: HGameObject.py プロジェクト: PlumpMath/HPanda
class HNewGameObject(NodePath):
    def __init__(self, name, scene, visualMesh, physicsMesh=None, physicsType="character", shapeMargin=0.02, stepHeight=0.5, x=0, y=0, z=0, mass=0, convex=True,
                 directRender=True, parent=None):
        global physicsTypes
        self.name = name
        self.scene = scene
        NodePath.__init__(self, self.scene.loadEgg(visualMesh))
        if physicsMesh != None:
            if physicsType == "rigid":
                self.body = BulletRigidBodyNode(self.name + "_RigidBody")
                self.attachNewNode(self.body)
                m = self.scene.Base.loader.loadModel(physicsMesh)
                if convex:
                    sTuple = modelToConvex(m)
                else:
                    sTuple = modelToShape(m)
                sTuple[0].setMargin(shapeMargin)
                self.body.addShape(sTuple[0], sTuple[1])
                self.body.setMass(mass)
                self.body.setPythonTag("name", self.name + "_RigidBody")
                self.scene.world.attachRigidBody(self.body)
            elif physicsType=="character":
                m = self.scene.Base.loader.loadModel(physicsMesh)
                sTuple = modelToConvex(m)
                sTuple[0].setMargin(shapeMargin)
                self.body = BulletCharacterControllerNode(sTuple[0], stepHeight, self.name + "_Character")
                self.attachNewNode(self.body)
                self.body.setPythonTag("name", self.name + "_Character")
                self.scene.world.attachCharacter(self.body)

        self.setPos(x, y, z)
        if directRender:
            self.reparentTo(self.scene.Base.render)
        elif parent != None:
            self.reparentTo(parent)
コード例 #2
0
ファイル: HPlayer.py プロジェクト: PlumpMath/HPanda
class HPlayer(NodePath):  # ##Implementarlo como Nodepath y el actor como hijo
    def __init__(self,
                 name,
                 scene,
                 visualMesh,
                 collisionMesh,
                 animations,
                 step=0.2,
                 margin=0.01):
        """
        :type collisionMesh: String
        :type visualMesh: String
        :type name: String
        :type margin: Float
        :param name: Name
        :param scene: Scene
        :param visualMesh: Egg to use as visual mesh
        :param collisionMesh: Egg to use as convex shape for physics
        :param animations: Animation dict
        :param step: Character step height
        :param margin: Physics shape margin
        """
        self.name = name
        self.scene = scene
        m = self.scene.Base.loader.loadModel(collisionMesh)
        sTuple = modelToConvex(m)
        sTuple[0].setMargin(margin)
        self.body = Character(sTuple[0], step, self.name + "_Character")
        #self.attachNewNode(self.body)
        self.body.setPythonTag("name", self.name + "_Character")
        self.scene.world.attachCharacter(self.body)

        NodePath.__init__(self, self.body)
        self.actor = Actor(self.scene.loadEgg(visualMesh), animations)
        self.actor.reparentTo(self)
        #self.setPhysics(collisionMesh, step, margin)

    def setPhysics(self, collisionMesh, step, margin):
        m = self.scene.Base.loader.loadModel(collisionMesh)
        sTuple = modelToConvex(m)
        sTuple[0].setMargin(margin)
        self.body = Character(sTuple[0], step, self.name + "_Character")
        self.attachNewNode(self.body)
        self.body.setPythonTag("name", self.name + "_Character")
        self.scene.world.attachCharacter(self.body)
        self.actor.reparentTo(self)