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)
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)