예제 #1
0
파일: ph.py 프로젝트: UPIMAN73/RTGM-machine
class PlayerHandler:
    def __init__(self, pl=Player(), mh=MapHandler()):
        self.pl = pl
        plinfo = self.pl.info
        self.mh = mh
        self.psave = {
            'player': plinfo,
            'map': {
                "name": "",
                "location": ""
            },
            'xp': []
        }
        if pl != None:
            fname = pl.get("name").lower()
            if " " in fname:
                fname = fname.split(" ")
                res = ""
                for i in range(0, len(fname) - 1):
                    res += fname[i] + "_"
                res += fname[len(fname) - 1]
                fname = res
                res = None
                print(res)
                print(fname)
            self.ps = Save(str(fname) + ".json")
            fname = None
        else:
            self.ps = Save()

    def __del__(self):
        self.mh = None
        self.pl = None
        self.psave = None
        self.ps = None

    # set the map json setup to the save location
    def setMap(self, mname="", location=""):
        self.psave['map'] = {"name": mname, "location": location}

    # Load Player object
    def loadPl(self):
        loadDict = None
        if (self.pl != None and self.ps != None):
            loadDict = self.ps.loadFile()
            self.pl.info = loadDict["player"]
            self.mh.loadMap(loadDict["map"]["name"])
            self.mh.loadLocation(loadDict["map"]["location"])
            self.pl.toObject()
        loadDict = None

    # Save the player info
    def savePl(self):
        if (self.psave != None and self.ps != None):
            self.pl.info = self.pl.toJson()
            self.psave["player"] = self.pl.info
            self.ps.saveFile(self.psave)

    # If the player ris dead
    def isDead(self):
        return self.pl.info["hp"] <= 0

    # If an item exists.
    def exists(self, array=[], item=None):
        res = False
        try:
            if len(array) > 0:
                for i in array:
                    if (item == i):
                        res = True
                        break
        finally:
            return res

    # Add xp to the player
    def addXp(self, amount=0):
        if (amount > 0):
            xp = self.pl.get("xp")
            self.pl.setV("xp", xp + amount)

    # add an amount to the max hp
    def upgradeHp(self, amount=0):
        mhp = self.pl.get("mhp")
        if amount > 0:
            self.pl.setV("mhp", mhp + amount)
        mhp = None

    # add or subtract the hp amount
    def setHp(self, amount=None):
        hp = self.pl.get("hp")
        if amount != None:
            if ((hp + amount) > self.pl.info["mhp"]):
                self.pl.setV("hp", self.pl.info["mhp"])
            elif (hp + amount < 0):
                self.pl.setV("hp", 0)
            else:
                self.pl.setV("hp", hp + amount)
        hp = None

    # add or subtract the mp amount
    def setMp(self, amount=0):
        mp = self.pl.get("mp")
        if amount >= 0:
            if (mp + amount > self.pl.info["mmp"]):
                self.pl.setV("mp", self.pl.info["mmp"])
            elif (mp + amount < 0):
                self.pl.setV("mp", 0)
            else:
                self.pl.setV("mp", mp + amount)
        mp = None

    # add more mp to the max mp
    def upgradeMp(self, amount=0):
        mmp = self.pl.get("mmp")
        if amount > 0:
            self.pl.setV("mmp", mmp + amount)
        mmp = None

    # equip a weapon
    def equipWeapon(self, weapon):
        if self.exists(list(self.pl.get("inventory")["weapons"]), weapon):
            self.pl.info["equipped"][0] = weapon
        else:
            print("Does not exist.")

    # equip armor
    def equipArmor(self, armor):
        if armor == None:
            print(
                "Your item does note exist because you did not ask for an item."
            )
        elif self.exists(list(self.pl.get("inventory")["armors"]), armor):
            self.pl.info["equipped"][1] = armor
        else:
            print("Does not exist.")

    # equip an item
    def equipItem(self, item, place=""):
        if item == None:
            print(
                "Your item does note exist because you did not ask for an item."
            )
        elif self.exists(list(self.pl.get("inventory")["items"]), item):
            if place in self.pl.get("equipped").keys():
                self.pl.info["equipped"][place] = item
            else:
                print("That is not a part of the equipped section")
        else:
            print("Does not exist.")

    # ONLY Used for battle
    def getMean(self):
        if (self.pl != None):
            return (self.pl.get("atk") + self.pl.get("def") +
                    self.pl.get("spd") + self.pl.get("level")) / 4
        else:
            return 0

    # checks to see if an item is in your inventory by name
    def inInventory(self, name=""):
        res = False
        for x in self.pl.get("inventory").keys():
            for i in self.pl.get("inventory")[x]:
                if i.get("name") == name:
                    res = True
                    break
        return res

    # get an item based on the name and place
    def getItem(self, name="", place=""):
        if self.inInventory(name):
            for x in self.pl.get("inventory").keys():
                for i in self.pl.get("inventory")[x]:
                    if i.get("name") == name:
                        return i
        else:
            print("Does not exist")
            return -1

    # Get the item's id within a specific place
    def getItemId(self, name="", place=""):
        if self.inInventory(name) and (place
                                       in self.pl.get("inventory").keys()):
            return self.pl.get("inventory")[place].index(self.getItem(name))
        else:
            return -1

    # gain money to your wallet
    def gainMoney(self, amt=0):
        total = (self.pl.get("money") + amt) % 999999
        if total < 0:
            total = 0
        self.pl.setV("money", total)

    # Change player abilities
    def affectPl(self, name="", amt=0):
        if name in self.pl.info:
            self.pl.setV(name, self.pl.get(name) + amt)
예제 #2
0
class LevelTwo(object):
    def __init__(self, m):
        """
        :param m: Menu
        """
        self.levelName = "levelTwo"
        self.gameState = ''
        m.game = self
        self.menu = m
        self.setLight()
        self.loadScene()
        if self.menu.tempPlayer is None:
            self.initCollision()
            self.initPlayer()
        else:
            print 'temp not none'
            self.node = self.menu.tempPlayer
            self.node.node.setPos(-250, 265, 20)
            self.node.game = self
            self.node.initMission()
            self.node.mission.memoryNum = self.menu.tempPlayer.mission.memoryNum
            self.enemy = Enemylevel2(self.node)
        # self.node.node.setPos(-800, 0, 20)
        # self.node.node.setPos(-370, 2800, 25)
        self.node.node.setPos(-700, 0, 25)
        self.node.node.setHpr(-90, 0, 0)
        base.accept("escape", self.pauseGame)
        base.disableMouse()
        props = WindowProperties()
        props.setCursorHidden(True)
        base.win.requestProperties(props)

        self.mutableMap = {}
        self.glowFilter()
        self.initMania()
        self.finalcard.reparentTo(hidden)
        self.initBag()
        # self.menu.loadState = True
        self.menu.passFrame.show()
        self.node.erosionFrame.show()
        self.node.currentItemFrame.show()
        if not self.menu.skipUseless:
            self.menu.loadState = True
            taskMgr.add(self.waitOne, "waitOne")
        else:
            self.save = Save(self)
            if self.menu.selectedSave == 2:
                self.save.loadFile('gameinfo_2.save')
            elif self.menu.selectedSave == 3:
                self.save.loadFile('gameinfo_3.save')
            self.node.changeCamera()
            self.menu.loadState = True
            self.menu.passFrame.hide()
        self.setupskillpattern()

    def waitOne(self, task):
        if task.time < 1:
            self.menu.passFrame['frameColor'] = (0, 0, 0, 1 - task.time)
            return task.cont
        self.menu.passFrame['frameColor'] = (0, 0, 0, 0)
        self.menu.passFrame.hide()
        self.beginPlot()
        return task.done

    def beginPlot(self):
        self.menu.ocanioDialog.show()
        props = WindowProperties()
        props.setCursorHidden(False)
        base.win.requestProperties(props)
        self.node.endTask()
        self.nextPlot()

    def nextPlot(self):
        self.menu.ocanioButton['text'] = '刚一踏出房间,房间的门就被重重的锁上了。无论我怎么叫喊,\n' \
                                       '里面都没有回应。我尽可能不去想最糟糕的情况,大概kura不会有什么问题的吧。'
        self.menu.ocanioButton['command'] = self.node.mission.hideOcanio
        self.menu.ocanioButton['extraArgs'] = []

    def initBag(self):
        self.bagState = True
        self.bagText = ""
        if self.menu.tempPlayer is not None:
            self.node.bag = self.menu.tempPlayer.bag
        else:
            self.node.bag = Bag(self.node)
        base.accept("b", self.openBag)

    def openBag(self):
        # print 'b'
        if self.bagState:
            self.node.bag.bagframe.show()
            self.node.bag.showdisplay.setActive(True)
            self.node.bag.textObject.setText(self.bagText)
            self.bagState = not self.bagState
            props = WindowProperties()
            props.setCursorHidden(False)
            base.win.requestProperties(props)
            self.menu.selectDialog.hide()
            self.gameState = 'pause'
            self.node.state = 'pause'
            self.node.endTask()
            base.accept('escape', self.openBag)
        else:
            self.node.bag.bagframe.hide()
            self.node.bag.showdisplay.setActive(False)
            self.bagText = self.node.bag.textObject.getText()
            self.node.bag.textObject.setText("")
            self.node.bag.textObject.setWordwrap(0)
            self.bagState = not self.bagState
            props = WindowProperties()
            props.setCursorHidden(True)
            base.win.requestProperties(props)
            self.gameState = ''
            self.node.state = ''
            self.node.initTask()
            base.accept('escape', self.pauseGame)

    def initCollision(self):
        """ create the collision system """
        base.cTrav = CollisionTraverser()
        base.pusher = CollisionHandlerPusher()
        base.cTrav.setRespectPrevTransform(True)

    def loadScene(self):
        """ load the self.sceneModel
            must have
            <Group> *something* {
              <Collide> { Polyset keep descend }
            in the egg file
        """
        self.goodmanager = GoodsManager()
        # AddGoods(self,Node,CollisionName,Name,Interactive)
        self.goodmanager.AddGoods(loader.loadModel('res/models/Scene2/Scene2Cat/Scene2_light.egg'),
                                  ["light"], "light", False)
        self.goodmanager.AddGoods(loader.loadModel('res/models/Scene2/Scene2Cat/Scene2_Ver7.0_wall.egg'),
                                  ["Wall", "floor"], "wall", False)
        self.goodmanager.AddGoods(loader.loadModel('res/models/Scene2/Scene2Cat/Elevator/dianti.egg'),
                                  ["dianti"], "dianti_box", True)
        self.goodmanager.AddGoods(loader.loadModel('res/models/Scene2/Scene2Cat/Elevator/broken_dianti.egg'),
                                  ["broken_dianti"], "broken_dianti_box", True)
        self.goodmanager.GoodsIta['broken_dianti_box'].Node.hide()

        '''
        corridor
        '''
        prefix = 'res/models/Scene2/Scene2Cat/Corridor/Scene2_Ver5.0_'
        self.loadIn(prefix + 'clock_2.egg', "clock_box", True)
        # self.loadIn(prefix + 'Outdoor.egg', "outdoor_box", True)
        self.loadIn(prefix + 'ElectricBox_2.egg', "ElectricBox", True)
        self.loadIn(prefix + 'entrance.egg', "entrance_box", True)
        self.loadIn(prefix + 'picture1.egg', "painting_1", True)
        self.loadIn(prefix + 'picture2.egg', "painting_2", True)
        self.loadIn(prefix + 'picture3.egg', "painting_3", True)
        self.loadIn(prefix + 'picture4.egg', "painting_4", True)
        self.loadIn(prefix + 'picture5.egg', "painting_5", True)
        self.loadIn(prefix + 'picture6.egg', "painting_6", True)
        self.loadIn(prefix + 'picture7.egg', "painting_7", True)
        self.loadIn(prefix + 'picture8.egg', "painting_8", True)
        self.loadIn(prefix + 'picture9.egg', "painting_9", True)
        self.loadIn(prefix + 'picture8_cut.egg', "painting_cut", True)
        self.goodmanager.GoodsIta["painting_cut"].Node.hide()
        self.goodmanager.GoodsIta["outdoor_box"] = Door(Vec3(374.1351, 1973.22, 105.000), "outdoor_box",
                                                           prefix + 'Outdoor.egg', 90, Door.Out)

        '''
        hall
        '''
        prefix = 'res/models/Scene2/Scene2Cat/Hall/Scene2_Ver5.0_'
        self.loadIn(prefix + 'food.egg', 'food_box', True)
        self.loadIn(prefix + 'cake.egg', 'cake_box', True)
        self.loadIn(prefix + 'diary.egg', 'diary_box', True)
        self.loadIn(prefix + 'safe_2.egg', 'safe_box', True)
        self.loadIn(prefix + 'carrot.egg', 'carrot_box', True)
        self.loadIn(prefix + 'window.egg', 'window_box', True)
        self.loadIn(prefix + 'window_broken.egg', 'window_broken_box', True)
        self.goodmanager.GoodsIta['window_broken_box'].Node.hide()
        self.loadIn(prefix + 'biaoyu.egg', 'biaoyu_box', True)
        # self.loadIn(prefix + 'Backdoor.egg', 'backdoor', True)
        # self.loadIn(prefix + 'Frontdoor.egg', 'frontdoor', True)
        self.loadIn(prefix + 'hammer_2.egg', 'hammer_box', True)
        self.loadIn(prefix + 'zhalan_2.egg', 'rabbit_cage', True)
        self.loadIn(prefix + 'vaccine.egg', 'hallvaccine_box', True)
        self.loadIn(prefix + 'refrigerator_2.egg', 'fridge_box', True)

        self.loadIn(prefix + 'rabbit.egg', 'rabbit_box', False)
        self.loadIn(prefix + 'yuanzhuo.egg', 'yuanzhuo_box', False)
        self.loadIn(prefix + 'changzhuo_2.egg', 'changzhuo_box', False)
        self.goodmanager.GoodsIta["Frontdoor"] = Door(Vec3(342.9760, 357.22, 105.000), "Frontdoor",
                                                         prefix + 'Frontdoor.egg', 90, Door.Out)
        self.goodmanager.GoodsIta["Backdoor"] = Door(Vec3(342.9760, 1571.22, 105.000), "Backdoor",
                                                        prefix + 'Backdoor.egg', 90, Door.Out)

        '''
        Outroom
        '''
        prefix = 'res/models/Scene2/Scene2Cat/Outroom/Scene2_Ver5.0_'
        self.loadIn(prefix + 'vase_2.egg', 'vase_box', True)
        self.loadIn(prefix + 'knife.egg', 'knife_box', True)
        self.loadIn(prefix + 'jiazi_2.egg', 'jiazi_box', False)
        self.loadIn(prefix + 'rongqi.egg', 'rongqi_box', False)
        self.loadIn(prefix + 'vaccine.egg', 'vaccine_box', True)
        self.loadIn(prefix + 'lavabo_2.egg', 'lavabo_box', True)
        self.loadIn(prefix + 'mirror.egg', 'mirror_box', True)
        self.loadIn(prefix + 'furnace_2.egg', 'furnace_box', True)
        self.loadIn(prefix + 'bookshelf.egg', 'bookshelf_box', True)
        self.loadIn(prefix + 'xiaozhuozi_2.egg', 'xiaozhuozi_box', False)
        self.goodmanager.staticGoods["infireish"] = GoodsParticle("fireish", (-370, 3183, 25), 16, render,31)
        self.goodmanager.staticGoods["insteam"] = GoodsParticle("steam", (-370, 3183, 50), 5, render,30)
        self.goodmanager.GoodsIta['Scene2_book-beijuji'] = Book(prefix+'beijuji.egg','beijuji',(-350, 3183, 50))
        self.goodmanager.GoodsIta['Scene2_book-beijuji'].Node.setHpr(30, 30, 30)
        for i in range(8):
            name = "outflowers" + str(i+1)
            self.goodmanager.AddGoods(loader.loadModel(prefix + name + '.egg'),
                                      [name], name, False)
            self.goodmanager.staticGoods[name].Node.setTwoSided(True)
        self.goodmanager.staticGoods['outflowers7'].Node.hide()
        self.goodmanager.staticGoods['outflowers8'].Node.hide()
        self.mirrorShader = loader.loadShader("shaders/mirrorShader.sha")
        self.goodmanager.GoodsIta['mirror_box'].Node.setShader(self.mirrorShader)
        # self.goodmanager.GoodsIta['mirror_box'].Node.setTwoSided(True)
        self.mirror(self.goodmanager.GoodsIta['mirror_box'].Node)

        '''
        Inroom
        '''
        prefix = 'res/models/Scene2/Scene2Cat/Inroom/Scene2_Ver5.0_'
        self.loadIn(prefix + 'invase.egg', 'invase_box', True)
        self.loadIn(prefix + 'inknife.egg', 'inknife_box', True)
        self.loadIn(prefix + 'injiazi.egg', 'injiazi_box', False)
        self.loadIn(prefix + 'inlavabo.egg', 'inlavabo_box', True)
        self.loadIn(prefix + 'inrongqi.egg', 'inrongqi_box', False)
        self.loadIn(prefix + 'infurnace.egg', 'infurnace_box', True)
        self.loadIn(prefix + 'inbookshelf.egg', 'inbookshelf_box', True)
        self.loadIn(prefix + 'inxiaozhuozi.egg', 'inxiaozhuozi_box', False)
        self.goodmanager.staticGoods["fireish"] = GoodsParticle("fireish", (-370, 2870, 25), 16, render, 31)
        self.goodmanager.staticGoods["steam"] = GoodsParticle("steam", (-370, 2870, 50), 5, render, 30)
        self.goodmanager.GoodsIta['Scene2_book-xijuji'] = Book(prefix + 'inxijuji.egg', 'inxijuji', (-350, 2870, 50))
        self.goodmanager.GoodsIta['Scene2_book-xijuji'].Node.setHpr(30, 30, 30)
        for i in range(8):
            name = "inflowers" + str(i+1)
            self.goodmanager.AddGoods(loader.loadModel(prefix + name + '.egg'),
                                      [name], name, False)
            self.goodmanager.staticGoods[name].Node.hide()
            self.goodmanager.staticGoods[name].Node.setTwoSided(True)
        self.goodmanager.staticGoods['inflowers1'].Node.show()

        self.h2so4_1 = GoodsParticle("H2SO4", (-380, 2270, 136), 6, render, 32)
        self.h2so4_2 = GoodsParticle("smo", (-380, 2270, 110), 5, render, 33)
        self.h2so4_3 = GoodsParticle("surface-1",  (-365, 2270, 100), 10, render, 34)
        self.h2so4_3.particle.setScale(10, 20, 10)

        self.h2so4_4 = GoodsParticle("H2SO4", (-380, 3895.5, 136), 6, render, 32)
        self.h2so4_5 = GoodsParticle("smo", (-380, 3890, 110), 5, render, 33)
        self.h2so4_6 = GoodsParticle("surface-1", (-363, 3890, 100), 10, render, 34)
        self.h2so4_6.particle.setScale(10, 20, 10)

    def loadIn(self, path, name, b):
        self.goodmanager.AddGoods(loader.loadModel(path), [name], name, b)

    def itemCollision(self, model, name, radius):
        nodePath = NodePath(name)
        node = CollisionNode(name)
        node.addSolid(CollisionSphere(20, 0, radius, radius))
        solid = model.attachNewNode(node)
        nodePath.reparentTo(model)
        solid.show()
        base.cTrav.addCollider(solid, base.pusher)
        base.pusher.addCollider(solid, nodePath, base.drive.node())

    def initPlayer(self):
        """ loads the player and creates all the controls for him"""
        self.node = Player(self.goodmanager, self.menu, self)
        # self.enemy = Enemy(self.node)
        self.enemy = Enemylevel2(self.node)
        # self.goodmanager.GoodsIta["enemy"] = Enemy(self.node)
        # self.goodmanager.GoodsIta["enemy"].state = 1

    def pauseGame(self):
        props = WindowProperties()
        props.setCursorHidden(False)
        base.win.requestProperties(props)
        self.menu.selectDialog.hide()
        self.gameState = 'pause'
        self.node.state = 'pause'
        self.node.endTask()
        self.node.erosionFrame.hide()
        self.node.currentItemFrame.hide()
        base.accept('escape', self.escapeEvent)
        base.accept('b', self.menu.nothing)
        self.menu.pauseFrame.show()

    def escapeEvent(self):
        self.menu.pauseFrame.hide()
        self.node.state = ''
        self.node.initTask()
        self.node.erosionFrame.show()
        self.node.currentItemFrame.show()
        base.accept('escape', self.pauseGame)
        base.accept('b', self.openBag)
        props = WindowProperties()
        props.setCursorHidden(True)
        base.win.requestProperties(props)

    def mirror(self,tex):
        self.mirrorBuffer = base.win.makeTextureBuffer("mirror", 512, 512)
        print 'mirrorBuffer',self.mirrorBuffer
        self.mirrorBuffer.setSort(-3)
        self.mirrorBuffer.setClearColor(LVector4(0, 0, 0, 1))
        print base.cam.node().getLens()
        self.mirrorCamera = base.makeCamera(self.mirrorBuffer)
        self.mirrorCamera.reparentTo(render)
        self.mirrorCamera.setPos((424,3080,104. ))
        self.mirrorCamera.setH(180)
        pl = self.mirrorCamera.node().getLens()
        pl.setFov(90)
        pl.setNear(100)
        self.mirrorCamera.node().setLens(pl)

        self.finalcard = self.mirrorBuffer.getTexture()
        tex.setTexture(self.finalcard,1)
        # self.UnLoadmirror()

    def UnLoadmirror(self):
        self.mirrorBuffer.getEngine().removeWindow(self.mirrorBuffer)
        self.mirrorBuffer = None
        self.mirrorCamera = None

    def makeFilterBuffer(self, srcbuffer, name, sort, prog):
        blurBuffer = base.win.makeTextureBuffer(name, 512, 512)
        blurBuffer.setSort(sort)
        blurBuffer.setClearColor(LVector4(1, 0, 0, 1))
        blurCamera = base.makeCamera2d(blurBuffer)
        blurScene = NodePath("new Scene")
        blurCamera.node().setScene(blurScene)
        shader = loader.loadShader(prog)
        card = srcbuffer.getTextureCard()
        card.reparentTo(blurScene)
        card.setShader(shader)
        return blurBuffer

    def glowFilter(self):
        glowShader = loader.loadShader("shaders/glowShader.sha")
        # dlight = DirectionalLight('dlight')
        # alight = AmbientLight('alight')
        # dlnp = render.attachNewNode(dlight)
        # alnp = render.attachNewNode(alight)
        # dlight.setColor(LVector4(0.3, 0.3, 0.3, 1))
        # alight.setColor(LVector4(0.8, 0.8, 0.8, 1))
        # dlnp.setHpr(0, -60, 0)
        # render.setLight(dlnp)
        # render.setLight(alnp)

        # create the glow buffer. This buffer renders like a normal scene,
        # except that only the glowing materials should show up nonblack.
        glowBuffer = base.win.makeTextureBuffer("Glow scene", 1024, 768)
        glowBuffer.setSort(-3)
        glowBuffer.setClearColor(LVector4(0, 0, 0, 1))

        # We have to attach a camera to the glow buffer. The glow camera
        # must have the same frustum as the main camera. As long as the aspect
        # ratios match, the rest will take care of itself.
        self.glowCamera = base.makeCamera(
            glowBuffer, lens=base.cam.node().getLens())

        # Tell the glow camera to use the glow shader
        tempnode = NodePath(PandaNode("temp node"))
        tempnode.setShader(glowShader)
        self.glowCamera.node().setInitialState(tempnode.getState())

        self.glowCamera.node().setCameraMask(BitMask32.bit(0))

        # set up the pipeline: from glow scene to blur x to blur y to main
        # window.
        blurXBuffer = self.makeFilterBuffer(
            glowBuffer, "Blur X", -2, "shaders/XBlurShader.sha")
        blurYBuffer = self.makeFilterBuffer(
            blurXBuffer, "Blur Y", -1, "shaders/YBlurShader.sha")
        self.finalcard = blurYBuffer.getTextureCard()
        self.finalcard.reparentTo(render2d)

        Attrib = ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.O_incoming_alpha,
                                       ColorBlendAttrib.O_incoming_alpha)
        self.finalcard.setAttrib(Attrib)

        base.bufferViewer.setPosition("llcorner")
        base.bufferViewer.setLayout("hline")
        base.bufferViewer.setCardSize(0.652, 0)

        base.accept("tab", self.toggleGlow)
        self.glowOn = False

    def limitGlow(self, task):
        if task.time < 5:
            return task.cont
        else:
            self.glowOn = False
            self.finalcard.reparentTo(hidden)
            # self.goodmanager.GoodsIta["box"].CloseHighLight()
        return task.done

    def toggleGlow(self):
        self.showskillpattern("eyepattern")
        if self.glowOn:
            return
        self.glowOn = True
        taskMgr.add(self.limitGlow, "limitGlow")
        if self.node.EROSION + 10 > 100:
            self.node.EROSION = 100
        else:
            self.node.EROSION += 10
        self.finalcard.reparentTo(render2d)
        # self.goodmanager.GoodsIta["box"].OpenHighLight()

    def initMania(self):
        base.accept("space", self.mania)
        self.maniaState = False

    def mania(self):
        self.showskillpattern("maniapattern")
        if not self.maniaState:
            self.node.speed *= 1.4
            self.maniaState = True
        if self.node.EROSION + 10 > 100:
            self.node.EROSION = 100
        else:
            self.node.EROSION += 10
        taskMgr.remove("fadeSpeed")
        taskMgr.add(self.fadeSpeed, "fadeSpeed")

    def fadeSpeed(self, task):
        if task.time < 10:
            return task.cont
        else:
            self.node.speed /= 1.4
            self.maniaState = False
        return task.done

    def setupskillpattern(self):
        self.eyepattern = OnscreenImage(image="res/skill_icon/eye-white.png", pos=(-1.2, 1, -0.8))
        self.eyepattern.setTransparency(TransparencyAttrib.MAlpha)
        self.eyepattern.setScale(0.1)
        self.eyepattern.setSa(0.8)
        self.eyepattern.hide()
        self.maniapattern = OnscreenImage(image="res/skill_icon/mania-white.png", pos=(-1.2 + 0.3, 1, -0.8))
        self.maniapattern.setTransparency(TransparencyAttrib.MAlpha)
        self.maniapattern.setScale(0.1)
        self.maniapattern.setSa(0.8)
        self.maniapattern.hide()
        self.screen_patternArray = {}
        self.screen_patternArray["eyepattern"] = [self.eyepattern, False, 5.0, 5.0]
        self.screen_patternArray["maniapattern"] = [self.maniapattern, False, 10.0, 10.]
        self.patterntask = False
        self.patterntaskpretime = 0
        # self.mouseIconNormal.setSa(0.5)

    def showskillpattern(self, patternname):
        self.screen_patternArray[patternname][2] = self.screen_patternArray[patternname][3]
        self.screen_patternArray[patternname][1] = True
        self.screen_patternArray[patternname][0].show()
        if self.patterntask == False:
            taskMgr.add(self.showskillpatterntask, "showskillpatterntask")
            self.patterntask = True

    def showskillpatterntask(self, task):
        num = 0
        for key in self.screen_patternArray:
            if self.screen_patternArray[key][1] == True:
                self.screen_patternArray[key][2] -= globalClock.getDt()
                if self.screen_patternArray[key][2] < 5.:
                    if sin(self.screen_patternArray[key][2] * pi * 5) > 0:
                        self.screen_patternArray[key][0].setSa(0)
                    else:
                        self.screen_patternArray[key][0].setSa(0.8)

                self.screen_patternArray[key][0].setPos(-1.2 + num * 0.3, 1, -0.8)
                if self.screen_patternArray[key][2] < 0:
                    self.screen_patternArray[key][1] = False
                    self.screen_patternArray[key][0].hide()
                    self.screen_patternArray[key][0].setSa(0.8)
                num += 1
        if num > 0:
            return task.cont
        self.patterntask = False
        return

    def setLight(self):
        render.setLightOff()
        alight=AmbientLight('alight')
        alnp=render.attachNewNode(alight)
        alight.setColor(VBase4(0.3,0.3,0.3,1))
        render.setLight(alnp)

        # myFog = Fog("Fog Name")
        # myFog.setColor(0.2,0.5, 0.1)
        # myFog.setExpDensity(0.5)
        # render.setFog(myFog)

        self.lightpivot1 = render.attachNewNode("lightpivot1")
        self.lightpivot1.setPos(-124, 947, 50)
        self.plight1=PointLight('plight1')
        self.plight1.setColor(VBase4(1, 0.5, 0, 1))
        self.temp=LVector3(0.6, 0.08, 0)
        self.plight1.setAttenuation(self.temp)
        plnp1=self.lightpivot1.attachNewNode(self.plight1)
        plnp1.setPos(0,0,50)
        render.setLight(plnp1)

        self.lightpivot2 = render.attachNewNode("lightpivot2")
        self.lightpivot2.setPos(0, 0, 50)
        self.plight2 = PointLight('plight2')
        self.plight2.setColor(VBase4(1, 0.5, 0, 1))
        self.temp = LVector3(0.6, 0.08, 0)
        self.plight2.setAttenuation(self.temp)
        plnp2 = self.lightpivot2.attachNewNode(self.plight2)
        plnp2.setPos(-200, 0, 50)
        render.setLight(plnp2)

        self.lightpivot3 = render.attachNewNode("lightpivot3")
        self.lightpivot3.setPos(52, 2491, 50)
        self.plight3 = PointLight('plight3')
        self.plight3.setColor(VBase4(1, 0.5, 0, 1))
        self.temp = LVector3(0.6, 0.08, 0)
        self.plight3.setAttenuation(self.temp)
        plnp3 = self.lightpivot3.attachNewNode(self.plight3)
        plnp3.setPos(-200, 0, 50)
        render.setLight(plnp3)

        slight = Spotlight('slight')
        slight.setColor(VBase4(0.1, 0.5, 0.1, 1))
        #slight.setAttenuation(LVector3(0.5,0.08,0))
        lens = PerspectiveLens()
        lens.setFov(10)
        slight.setLens(lens)
        slnp = render.attachNewNode(slight)
        slnp.setPos(-811, 3, 0)
        slnp.lookAt(415,10,0)
        # slnp.setPos(0,0,0)
        # slnp.lookAt(0,0,50)
        render.setLight(slnp)
예제 #3
0
파일: mh.py 프로젝트: UPIMAN73/RTGM-machine
class MapHandler:
    def __init__(self, mp=Map()):
        self.map = mp
        self.current_location = Level()
        self.msave = {}
        if mp != None:
            self.msave = mp.info
            self.ms = Save(str(mp.get("name")) + ".json")
        else:
            self.ms = Save("")
        
    def __del__(self):
        self.map = None
        self.current_location = None
        self.msave = None
        self.ms = None
    
    def exists(self, name=""):
        return self.ms.exists(name)
    
    def welcomeScreen(self):
        print(self.map.get("msg"))

    def printMsg(self):
        print(self.current_location.get("msg"))

    def lexists(self, location=""):
        res = False
        for i in self.map.get("levels"):
            if i.get("name") == location:
                res = True
                break
        return res
    
    def goto(self, location):
        if self.lexists(location):
            self.current_location = location
        else:
            print(location + " does not exist.")
    
    def saveMap(self):
        if (self.ms.fn == ".json"):
            self.ms = Save(str(self.map.get("name")) + ".json")
        if (self.msave != self.map.info):
            self.msave = self.map.info
        self.ms.saveFile(self.msave)
    
    def loadMapFile(self):
        self.map.info = self.ms.loadFile()
        print(self.map.info)
    
    def loadMap(self, name=""):
        if self.ms.exists(name):
            self.ms.fn = name
            self.loadMapFile()
    
    def loadLocation(self, name=""):
        if self.map.levelExists(name):
            if (self.map.getLevel(name) != None):
                self.current_location = self.map.getLevel(name)
            else:
                print("Location does not exist in the game or on the map.")
    
    def locationType(self):
        for i in self.current_location.info.keys():
            if (self.current_location[i] == True):
                return i
        return ""