Beispiel #1
0
class ActorControl(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)

        self.actorModelPath = "/e/models/ralph"
        self.actorAnimaPath = {
            "run": "/e/models/ralph-run",
            "walk": "/e/models/ralph-walk",
            "jump": "/e/models/ralph-jump"
        }

        self.actor = Actor(self.actorModelPath,
                           self.actorAnimaPath)
        self.actor.reparentTo(self.render)
        self.actor.setPos(0, 0, 0)
        self.actor.setScale(0.75)

        print self.actor.getAnimNames()

        self.actorAnimaKeymap = {
            "run_forward": False,
            "run_backward": False,
            "run_left": False,
            "run_right": False,
            "jump": False
        }

        self.jumpItval = ActorInterval(
            actor=self.actor,
            animName="jump",
            #constrainedLoop=0,
            #startFrame=0,
            #endFrame=self.actor.getNumFrames("jump")
        )
        print self.jumpItval.getName()
        self.isMoving = False
        self.isJumping = False

        self.actorCurrH = 0

        self.disableMouse()
        self.camera.setPos(0, 15, self.actor.getZ() + 15)
        self.camera.lookAt(0, 0, self.actor.getZ())
        camVec = self.camera.getPos() - self.actor.getPos()
        print "camVec Length : ", camVec.length()
        print "Z : ", self.actor.getZ()

        self.actor.accept("w", self.set_keymap, ["run_forward", True])
        self.actor.accept("w-up", self.set_keymap, ["run_forward", False])
        self.actor.accept("s", self.set_keymap, ["run_backward", True])
        self.actor.accept("s-up", self.set_keymap, ["run_backward", False])
        self.actor.accept("a", self.set_keymap, ["run_left", True])
        self.actor.accept("a-up", self.set_keymap, ["run_left", False])
        self.actor.accept("d", self.set_keymap, ["run_right", True])
        self.actor.accept("d-up", self.set_keymap, ["run_right", False])
        self.actor.accept("space", self.jump_up)
        # self.actor.accept("space-up", self.jump_up, [False])
        # self.actor.accept("space-up", self.jump_up, ["jump", False])

        self.accept("wheel_up", self.camera_move, ["wheel_up"])
        self.accept("wheel_down", self.camera_move, ["wheel_down"])
        self.accept("arrow_left", self.camera_move, ["arrow_left"])
        self.accept("arrow_right", self.camera_move, ["arrow_right"])

        self.taskMgr.add(self.actor_animate, "actor_animate")
        # self.taskMgr.add(self.debug_check_actor_pos, "debug_check_actor_pos")

        self.isFullscreen = False
        self.accept("f", self.set_fullscreen)

    def set_fullscreen(self):
        winProps = WindowProperties()
        self.isFullscreen = not self.isFullscreen
        winProps.setFullscreen(self.isFullscreen)
        self.win.requestProperties(winProps)

    def set_keymap(self, key, value):
        self.actorAnimaKeymap[key] = value
        # print key, " : ", value

    def jump_up(self):
        self.jumpItval.loop()

    def actor_animate(self, task):

        dt = globalClock.getDt()

        actorRunSpeed = 5

        actorCurrH = self.actor.getH()
        if self.actorAnimaKeymap["run_forward"]:
            self.actorCurrH = 0
            if self.actorAnimaKeymap["run_left"]:
                self.actorCurrH = 45
            if self.actorAnimaKeymap["run_right"]:
                self.actorCurrH = 315
            self.actor.setH(self.actorCurrH)
            self.actor.setY(self.actor.getY() - actorRunSpeed * dt)
        if self.actorAnimaKeymap["run_backward"]:
            self.actorCurrH = 180
            if self.actorAnimaKeymap["run_left"]:
                self.actorCurrH = 135
            if self.actorAnimaKeymap["run_right"]:
                self.actorCurrH = 225
            self.actor.setH(self.actorCurrH)
            self.actor.setY(self.actor.getY() + actorRunSpeed * dt)
        if self.actorAnimaKeymap["run_left"]:
            self.actorCurrH = 90
            if self.actorAnimaKeymap["run_forward"]:
                self.actorCurrH = 45
            if self.actorAnimaKeymap["run_backward"]:
                self.actorCurrH = 135
            self.actor.setH(self.actorCurrH)
            self.actor.setX(self.actor.getX() + actorRunSpeed * dt)
        if self.actorAnimaKeymap["run_right"]:
            self.actorCurrH = 270
            if self.actorAnimaKeymap["run_forward"]:
                self.actorCurrH = 315
            if self.actorAnimaKeymap["run_backward"]:
                self.actorCurrH = 225
            self.actor.setH(self.actorCurrH)
            self.actor.setX(self.actor.getX() - actorRunSpeed * dt)

        if self.actorAnimaKeymap["run_forward"] or \
                self.actorAnimaKeymap["run_backward"] or \
                self.actorAnimaKeymap["run_left"] or \
                self.actorAnimaKeymap["run_right"]:
            if self.isMoving is False:
                self.actor.loop("run")
                self.isMoving = True

        else:
            if self.isMoving:
                self.actor.stop()
                self.actor.play("walk")
                self.actor.pose("walk", 4)
                self.isMoving = False

        # camVec = self.actor.getPos() - self.camera.getPos()
        # camVec.setZ(0)
        # camDist = camVec.length()
        # camVec.normalize()
        # if camDist > 10.0:
        #     self.camera.setPos(self.camera.getPos() + camVec * (camDist - 10))
        #     camDist = 10.0
        # if camDist < 5.0:
        #     self.camera.setPos(self.camera.getPos() - camVec * (5 - camDist))
        #     camDist = 5.0

        return task.cont

    def camera_move(self, mouseEvent):

        mouseCurrY = self.camera.getY()
        mouseMoveOffset = 2

        if mouseEvent == "wheel_up":
            self.camera.setY(mouseCurrY + mouseMoveOffset)

        if mouseEvent == "wheel_down":
            self.camera.setY(mouseCurrY - mouseMoveOffset)

        print "Camera Pos : ", self.camera.getPos()

    def debug_check_actor_pos(self, task):
        # sleep(1)
        print "actor pos : ", self.actor.getPos()
        return task.cont
Beispiel #2
0
class Demo(ShowBase):

    def __init__(self):

        ShowBase.__init__(self)

        actorPath = "/e/Material/finalHunter"

        modelPath = "/e/Material/finalHunter"

        actionsPath = {"walk":"/e/Material/hunter_WALK123"}

        self.actor = Actor(actorPath, actionsPath)

        self.actor.setPos(0, 0, 0)
        self.actor.reparentTo(self.render)

        self.model = self.loader.loadModel(modelPath)
        self.model.setPos(10, 10, 0)
        self.model.reparentTo(self.render)
        self.actor.accept("w", self.print_w)

        self.cam.setPos(0, 100, 50)
        self.cam.lookAt(0, 0, 0)

        self.accept("w", self.model_move)
        self.accept("s", self.model_move2)
        self.accept("a", self.model_move3)
        self.accept("d", self.model_move4)

        self.demo = LoadPlot()
        self.demo.init_dialogue(1)

        self.flag = False

        self.taskMgr.add(self.show_dialog, "show_dialog")

        print self.actor.getPos()
        print self.actor.getHpr()
        print self.actor.getScale()

    def show_dialog(self, task):

        vector = self.model.getPos() - self.actor.getPos()
        #print vector.length()
        if vector.length() < 10:
            if self.flag == False:
               self.demo.init_dialogue(1)
               self.demo.dialogue_next()
               self.flag = True
        else:
            self.demo.destroy_dialogue()
            self.flag = False

        return task.cont

    def model_move(self):
        dt = globalClock.getDt() * 100
        self.model.setY(self.model.getY() - dt)

    def model_move2(self):
        dt = globalClock.getDt() * 100
        self.model.setY(self.model.getY() + dt)

    def model_move3(self):
        dt = globalClock.getDt() * 100
        self.model.setX(self.model.getX() + dt)

    def model_move4(self):
        dt = globalClock.getDt() * 100
        self.model.setX(self.model.getX() - dt)

    def print_w(self):

        print "w"