예제 #1
0
 def announceGenerate(self):
     # TODO - for some reason this is getting called hundreds of times when there are multiple districts
     DistributedObject.DistributedObject.announceGenerate(self)
     self.sendUpdate("enteredParty", [])
     globalClock.syncFrameTime()
     self.startPartyClock()
     base.localAvatar.chatMgr.chatInputSpeedChat.addInsidePartiesMenu()
     self.spawnTitleText()
     messenger.send(self.generatedEvent)
     if config.GetBool("show-debug-party-grid", 0):
         self.testGrid = NodePath("test_grid")
         self.testGrid.reparentTo(base.cr.playGame.hood.loader.geom)
         for i in xrange(len(self.grid)):
             for j in xrange(len(self.grid[i])):
                 cm = CardMaker("gridsquare")
                 np = NodePath(cm.generate())
                 np.setScale(12)
                 np.setP(-90.0)
                 np.setPos(
                     PartyUtils.convertDistanceFromPartyGrid(j, 0) - 6.0,
                     PartyUtils.convertDistanceFromPartyGrid(i, 1) - 6.0,
                     0.1,
                 )
                 np.reparentTo(self.testGrid)
                 if self.grid[i][j]:
                     np.setColorScale(0.0, 1.0, 0.0, 1.0)
                 else:
                     np.setColorScale(1.0, 0.0, 0.0, 1.0)
예제 #2
0
 def announceGenerate(self):
     #TODO - for some reason this is getting called hundreds of times when there are multiple districts
     DistributedObject.DistributedObject.announceGenerate(self)
     self.sendUpdate('enteredParty', [])
     globalClock.syncFrameTime()
     self.startPartyClock()
     base.localAvatar.chatMgr.chatInputSpeedChat.addInsidePartiesMenu()
     self.spawnTitleText()
     messenger.send(self.generatedEvent)
     if config.GetBool('show-debug-party-grid', 0):
         self.testGrid = NodePath('test_grid')
         self.testGrid.reparentTo(base.cr.playGame.hood.loader.geom)
         for i in range(len(self.grid)):
             for j in range(len(self.grid[i])):
                 cm = CardMaker('gridsquare')
                 np = NodePath(cm.generate())
                 np.setScale(12)
                 np.setP(-90.0)
                 np.setPos(
                     PartyUtils.convertDistanceFromPartyGrid(j, 0) - 6.0,
                     PartyUtils.convertDistanceFromPartyGrid(i, 1) - 6.0,
                     0.1)
                 np.reparentTo(self.testGrid)
                 if self.grid[i][j]:
                     np.setColorScale(0.0, 1.0, 0.0, 1.0)
                 else:
                     np.setColorScale(1.0, 0.0, 0.0, 1.0)
예제 #3
0
 def announceGenerate(self):
     assert(self.notify.debug("announceGenerate()"))
     DistributedObject.DistributedObject.announceGenerate(self)
     self.sendUpdate("avIdEnteredParty", [base.localAvatar.doId])
     # we probably just spent a lot of time loading, so
     # tell globalClock to update the frame timestamp
     globalClock.syncFrameTime()
     self.startPartyClock()
     base.localAvatar.chatMgr.chatInputSpeedChat.addInsidePartiesMenu()
     self.spawnTitleText()
     if config.GetBool('show-debug-party-grid', 0):
         # Debug grid
         self.testGrid = NodePath("test_grid")
         self.testGrid.reparentTo(base.cr.playGame.hood.loader.geom)
         for i in range(len(self.grid)):
             for j in range(len(self.grid[i])):
                 cm = CardMaker("gridsquare")
                 np = NodePath(cm.generate())
                 np.setScale(12)
                 np.setP(-90.0)
                 np.setPos(PartyUtils.convertDistanceFromPartyGrid(j,0)-6.0, PartyUtils.convertDistanceFromPartyGrid(i,1)-6.0, 0.1)
                 np.reparentTo(self.testGrid)
                 if self.grid[i][j]:
                     np.setColorScale(0.0, 1.0, 0.0, 1.0)
                 else:
                     np.setColorScale(1.0, 0.0, 0.0, 1.0)
 def announceGenerate(self):
     DistributedObject.DistributedObject.announceGenerate(self)
     self.sendUpdate('enteredParty', [])
     globalClock.syncFrameTime()
     self.startPartyClock()
     base.localAvatar.chatMgr.chatInputSpeedChat.addInsidePartiesMenu()
     self.spawnTitleText()
     messenger.send(self.generatedEvent)
     if config.GetBool('show-debug-party-grid', 0):
         self.testGrid = NodePath('test_grid')
         self.testGrid.reparentTo(base.cr.playGame.hood.loader.geom)
         for i in range(len(self.grid)):
             for j in range(len(self.grid[i])):
                 cm = CardMaker('gridsquare')
                 np = NodePath(cm.generate())
                 np.setScale(12)
                 np.setP(-90.0)
                 np.setPos(PartyUtils.convertDistanceFromPartyGrid(j, 0) - 6.0, PartyUtils.convertDistanceFromPartyGrid(i, 1) - 6.0, 0.1)
                 np.reparentTo(self.testGrid)
                 if self.grid[i][j]:
                     np.setColorScale(0.0, 1.0, 0.0, 1.0)
                 else:
                     np.setColorScale(1.0, 0.0, 0.0, 1.0)
예제 #5
0
class AreaMap(Map):
    def __init__(self, area):
        Map.__init__(self, "map-" + area.getName())
        self.capturePoints = {}
        mapNode = area.getMapNode()
        if mapNode and not mapNode.isEmpty():
            geom = mapNode.getChild(0)
            geom.setScale(mapNode.getScale())
            geom.flattenStrong()
            mapNode.setScale(1)
            self.worldNode = mapNode
            self.map = self.worldNode.copyTo(NodePath())
            (a, b) = self.map.getTightBounds()
            diff = b - a
            h = diff[1]
            w = diff[0]
        else:
            self.worldNode = area
            self.map = NodePath("no map found")
            (a, b) = self.worldNode.geom.getTightBounds()
            diff = b - a
            h = diff[1]
            w = diff[0]
        ratio = h / w
        if ratio < 0.98999999999999999:
            normalScale = 2 / w
            screenScale = 1
        else:
            normalScale = 2 / h
            screenScale = 0.75
        self.map.clearTransform()
        self.map.show()
        self.screenNode = NodePath("Minimap-screenNode")
        self.screenNode.setP(90)
        self.screenNode.setScale(screenScale * normalScale)
        self.screenNode.hide()
        self.map.reparentTo(self.screenNode)
        self.mapOverlay = self.map.attachNewNode("mapOverlay")
        self.mapOverlay.wrtReparentTo(self.screenNode)
        self.radarTransformNode = NodePath("radarTransform")
        self.radarTransformNode.setScale(self.worldNode.getScale()[0])
        self.map.instanceTo(self.radarTransformNode)
        localAvatar.guiMgr.addMinimap(self)
        if self.allowOnScreen():
            self.addObject(MinimapFootprint(area))

        if self.allowOnScreen():
            if area.getUniqueId() not in [LocationIds.RAVENS_COVE_ISLAND]:
                for shop in area.getShopNodes():
                    uid = shop.getTag("Uid")
                    shopType = shop.getTag("ShopType")
                    self.addObject(MinimapShop(uid, shop, shopType))

            self.map.findAllMatches("**/=Holiday").stash()
            if base.cr.newsManager:
                for holiday in base.cr.newsManager.getHolidayList():
                    self.handleHolidayStarted(area, HolidayGlobals.getHolidayName(holiday))

        self.zoomLevels = area.getZoomLevels()
        self.accept("landMapRadarAxisChanged", self.setRadarAxis)

    def destroy(self):
        self.ignore("landMapRadarAxisChanged")
        if hasattr(base, "localAvatar"):
            localAvatar.guiMgr.removeMinimap(self)

        for holiday in self.capturePoints.keys():
            zones = self.capturePoints.pop(holiday, {})
            for object in zones.itervalues():
                self.removeObject(object)

        Map.destroy(self)

    def allowOnScreen(self):
        return self.map.find("minimap-card").isEmpty()

    def getZoomLevels(self):
        return self.zoomLevels

    def getWorldNode(self):
        return self.worldNode

    def getScreenNode(self):
        return self.screenNode

    def getOverlayNode(self):
        return self.mapOverlay

    def getCapturePoint(self, holidayId, zone):
        if self.capturePoints.has_key(holidayId):
            return self.capturePoints[holidayId][zone]

    def updateTask(self, task):
        self.update()
        return task.cont

    def update(self):
        for obj in self.objects:
            obj.updateOnMap(self)

    def addObject(self, object):
        Map.addObject(self, object)
        mapNode = object.getMapNode()
        mapNode.reparentTo(self.map, sort=object.SORT)
        object.getOverlayNode().reparentTo(self.mapOverlay, sort=object.SORT)
        object.addedToMap(self)

    def removeObject(self, object):
        Map.removeObject(self, object)
        object.getMapNode().detachNode()
        object.getOverlayNode().detachNode()
        object.removedFromMap(self)

    def updateRadarTransform(self, av):
        if self.radarAxis == Options.RadarAxisMap:
            self.radarTransformNode.setPosHprScale(-av.getPos(self.worldNode), VBase3(0), VBase3(1))
        else:
            holdHpr = av.getHpr()
            av.setH(camera.getH(render) - self.worldNode.getH(render))
            self.radarTransformNode.setTransform(self.worldNode.getTransform(av))
            av.setHpr(holdHpr)
        localAvatar.guiMgr.radarGui.updateDial(self)

    def getRadarNode(self):
        return self.radarTransformNode

    def handleHolidayStarted(self, area, holiday):
        self.map.findAllMatches("**/=Holiday=%s;+s" % (holiday,)).unstash()
        for node in area.getCapturePointNodes(holiday):
            zones = self.capturePoints.setdefault(holiday, {})
            zone = int(node.getTag("Zone"))
            if zone not in zones:
                object = MinimapCapturePoint(node, holiday, zone)
                zones[zone] = object
                self.addObject(object)
                continue

    handleHolidayStarted = report(types=["frameCount", "args"], dConfigParam="minimap")(handleHolidayStarted)

    def handleHolidayEnded(self, area, holiday, override=False):
        if holiday in InvasionGlobals.INVASION_IDS and not override:
            taskMgr.doMethodLater(10, self.handleInvasionEnded, "handleInvasionEnded", extraArgs=[area, holiday])
        else:
            self.map.findAllMatches("**/=Holiday=%s;+s" % (holiday,)).stash()
            for object in self.capturePoints.pop(holiday, {}).itervalues():
                self.removeObject(object)

    handleHolidayEnded = report(types=["frameCount", "args"], dConfigParam="minimap")(handleHolidayEnded)

    def handleInvasionEnded(self, area, holiday):
        if not localAvatar.guiMgr.invasionScoreboard:
            self.map.findAllMatches("**/=Holiday=%s;+s" % (holiday,)).stash()
            for object in self.capturePoints.pop(holiday, {}).itervalues():
                self.removeObject(object)
예제 #6
0
파일: Minimap.py 프로젝트: Kealigal/POS2013
class AreaMap(Map):
    
    def __init__(self, area):
        Map.__init__(self, 'map-' + area.getName())
        self.capturePoints = { }
        mapNode = area.getMapNode()
        if mapNode and not mapNode.isEmpty():
            geom = mapNode.getChild(0)
            geom.setScale(mapNode.getScale())
            geom.flattenStrong()
            mapNode.setScale(1)
            self.worldNode = mapNode
            self.map = self.worldNode.copyTo(NodePath())
            (a, b) = self.map.getTightBounds()
            diff = b - a
            h = diff[1]
            w = diff[0]
        else:
            self.worldNode = area
            self.map = NodePath('no map found')
            (a, b) = self.worldNode.geom.getTightBounds()
            diff = b - a
            h = diff[1]
            w = diff[0]
        ratio = h / w
        if ratio < 0.98999999999999999:
            normalScale = 2 / w
            screenScale = 1
        else:
            normalScale = 2 / h
            screenScale = 0.75
        self.map.clearTransform()
        self.map.show()
        self.screenNode = NodePath('Minimap-screenNode')
        self.screenNode.setP(90)
        self.screenNode.setScale(screenScale * normalScale)
        self.screenNode.hide()
        self.map.reparentTo(self.screenNode)
        self.mapOverlay = self.map.attachNewNode('mapOverlay')
        self.mapOverlay.wrtReparentTo(self.screenNode)
        self.radarTransformNode = NodePath('radarTransform')
        self.radarTransformNode.setScale(self.worldNode.getScale()[0])
        self.map.instanceTo(self.radarTransformNode)
        localAvatar.guiMgr.addMinimap(self)
        if self.allowOnScreen():
            self.addObject(MinimapFootprint(area))
        
        self.shops = set()
        if self.allowOnScreen():
            if area.getUniqueId() not in [
                LocationIds.RAVENS_COVE_ISLAND]:
                for shop in area.getShopNodes():
                    uid = shop.getTag('Uid')
                    shopType = shop.getTag('ShopType')
                    self.addObject(MinimapShop(uid, shop, shopType))
                
            
            self.map.findAllMatches('**/=Holiday').stash()
            if base.cr.newsManager:
                for holiday in base.cr.newsManager.getHolidayList():
                    self.handleHolidayStarted(area, HolidayGlobals.getHolidayName(holiday))
                
            
        
        self.zoomLevels = area.getZoomLevels()
        self.accept('landMapRadarAxisChanged', self.setRadarAxis)

    
    def destroy(self):
        self.ignore('landMapRadarAxisChanged')
        if hasattr(base, 'localAvatar'):
            localAvatar.guiMgr.removeMinimap(self)
        
        for shop in self.shops:
            self.removeObject(shop)
        
        self.shops = set()
        for holiday in self.capturePoints.keys():
            zones = self.capturePoints.pop(holiday, { })
            for object in zones.itervalues():
                self.removeObject(object)
            
        
        Map.destroy(self)

    
    def allowOnScreen(self):
        return self.map.find('minimap-card').isEmpty()

    
    def getZoomLevels(self):
        return self.zoomLevels

    
    def getWorldNode(self):
        return self.worldNode

    
    def getScreenNode(self):
        return self.screenNode

    
    def getOverlayNode(self):
        return self.mapOverlay

    
    def getCapturePoint(self, holidayId, zone):
        if self.capturePoints.has_key(holidayId):
            return self.capturePoints[holidayId][zone]
        

    
    def updateTask(self, task):
        self.update()
        return task.cont

    
    def update(self):
        for obj in self.objects:
            obj.updateOnMap(self)
        

    
    def addObject(self, object):
        Map.addObject(self, object)
        mapNode = object.getMapNode()
        mapNode.reparentTo(self.map, sort = object.SORT)
        object.getOverlayNode().reparentTo(self.mapOverlay, sort = object.SORT)
        object.addedToMap(self)

    
    def removeObject(self, object):
        Map.removeObject(self, object)
        object.getMapNode().detachNode()
        object.getOverlayNode().detachNode()
        object.removedFromMap(self)

    
    def updateRadarTransform(self, av):
        if self.radarAxis == Options.RadarAxisMap:
            self.radarTransformNode.setPosHprScale(-av.getPos(self.worldNode), VBase3(0), VBase3(1))
        else:
            holdHpr = av.getHpr()
            av.setH(camera.getH(render) - self.worldNode.getH(render))
            self.radarTransformNode.setTransform(self.worldNode.getTransform(av))
            av.setHpr(holdHpr)
        localAvatar.guiMgr.radarGui.updateDial(self)

    
    def getRadarNode(self):
        return self.radarTransformNode

    
    def handleHolidayStarted(self, area, holiday):
        self.map.findAllMatches('**/=Holiday=%s;+s' % (holiday,)).unstash()
        for node in area.getCapturePointNodes(holiday):
            zones = self.capturePoints.setdefault(holiday, { })
            zone = int(node.getTag('Zone'))
            if zone not in zones:
                object = MinimapCapturePoint(node, holiday, zone)
                zones[zone] = object
                self.addObject(object)
                continue
        

    handleHolidayStarted = report(types = [
        'frameCount',
        'args'], dConfigParam = 'minimap')(handleHolidayStarted)
    
    def handleHolidayEnded(self, area, holiday, override = False):
        if holiday in InvasionGlobals.INVASION_IDS and not override:
            taskMgr.doMethodLater(10, self.handleInvasionEnded, 'handleInvasionEnded', extraArgs = [
                area,
                holiday])
        else:
            self.map.findAllMatches('**/=Holiday=%s;+s' % (holiday,)).stash()
            for object in self.capturePoints.pop(holiday, { }).itervalues():
                self.removeObject(object)
            

    handleHolidayEnded = report(types = [
        'frameCount',
        'args'], dConfigParam = 'minimap')(handleHolidayEnded)
    
    def handleInvasionEnded(self, area, holiday):
        if not localAvatar.guiMgr.invasionScoreboard:
            self.map.findAllMatches('**/=Holiday=%s;+s' % (holiday,)).stash()
            for object in self.capturePoints.pop(holiday, { }).itervalues():
                self.removeObject(object)
예제 #7
0
파일: entity.py 프로젝트: asceth/devsyn
class Entity(DirectObject, object):
  def __init__(self, model = None):
    self.prime = None
    if model != None:
      self.set_model(model)

  def get_model(self):
    return self.prime

  def set_model(self, model):
    if model != None:
      if isinstance(model, PandaNode):
        self.prime = NodePath(model)
      elif isinstance(model, NodePath):
        self.prime = model
      else:
        if Filename(model).exists():
          self.model = Filename(model).getBasenameWoExtension()
          path = model
        else:
          if isinstance(model, Filename):
            self.model = model.getBasenameWoExtension()
            path = model.getFullpath()
          else:
            path = APP_PATH + model

          print "path: ", path
          if Filename(path).exists():
            pass
          elif Filename(path + ".bam").exists():
            path += ".bam"
          elif Filename(path + ".bam.pz").exists():
            path += ".bam.pz"
          elif Filename(path + ".egg").exists():
            path += ".egg"
          elif Filename(path + ".egg.pz").exists():
            path += ".egg.pz"
          elif Filename(path + ".x").exists():
            path += ".x"
          else:
            print ":object(error): can't find model", model, "!"
            # Probably shouldn't exit because of this
            sys.exit(1)
          self.model = model
        self.prime = base.loader.loadModel(path)
        if self.prime == None:
          print ":object(error): can't load model", model, "!"
          # Probably shouldn't exit because of this
          sys.exit(1)

  def getX(self):
    return self.prime.getX(base.render)

  def getY(self):
    return self.prime.getY(base.render)

  def getZ(self):
    return self.prime.getZ(base.render)

  def getH(self):
    return self.prime.getH(base.render)

  def getP(self):
    return self.prime.getP(base.render)

  def getR(self):
    return self.prime.getR(base.render)

  def getSx(self):
    return self.prime.getSx(base.render)

  def getSy(self):
    return self.prime.getSy(base.render)

  def getSz(self):
    return self.prime.getSz(base.render)

  def getPos(self):
    return self.prime.getPos(base.render)

  def getHpr(self):
    return self.prime.getHpr(base.render)

  def getScale(self):
    return self.prime.getScale(base.render)

  def getCollideMask(self):
    return self.prime.getCollideMask()

  def getTransparency(self):
    return self.prime.getTransparency()

  def getTwoSided(self):
    return self.prime.getTwoSided()

  def getParent(self):
    return self.prime.getParent()

  def setX(self, *v):
    self.prime.setX(*v)

  def setY(self, *v):
    self.prime.setY(*v)

  def setZ(self, *v):
    self.prime.setZ(*v)

  def setH(self, *v):
    self.prime.setH(*v)

  def setP(self, *v):
    self.prime.setP(*v)

  def setR(self, *v):
    self.prime.setR(*v)

  def setSx(self, *v):
    self.prime.setSx(*v)

  def setSy(self, *v):
    self.prime.setSy(*v)

  def setSz(self, *v):
    self.prime.setSz(*v)

  def setPos(self, *v):
    self.prime.setPos(*v)

  def setHpr(self, *v):
    self.prime.setHpr(*v)

  def setScale(self, *v):
    self.prime.setScale(*v)

  def setCollideMask(self, *v):
    self.prime.setCollideMask(*v)

  def setTransparency(self, *v):
    self.prime.setTransparency(*v)

  def setTwoSided(self, *v):
    self.prime.setTwoSided(*v)

  def removeNode(self):
    self.prime.removeNode()

  def reparentTo(self, parent):
    if isinstance(parent, Entity):
      parent = parent.prime
    if isinstance(parent, str):
      if parent.startswith("render/"):
        parent = parent[7:]
        tv = parent
        parent = base.render.find(tv)
        if parent == NodePath():
          parent = base.render.find("**/" + tv)
    if parent != NodePath() and parent != None:
      self.prime.reparentTo(parent)

  def wrtReparentTo(self, parent):
    if isinstance(parent, Entity):
      parent = parent.prime
    if isinstance(parent, str):
      if parent.startswith("render/"):
        parent = parent[7:]
        tv = parent
        parent = base.render.find(tv)
        if parent == NodePath():
          parent = base.render.find("**/" + tv)
    if parent != NodePath():
      self.prime.reparentTo(parent)

  def attachTo(self, parent):
    """This attaches the object to another object/nodepath. The caller object stays at the same place, with the same scale and rotation,
    but they become relative to the other object/nodepath. This is useful with for example a character that steps onto a moving ship or so."""
    if isinstance(parent, Entity):
      parent = parent.prime
    if isinstance(parent, str):
      if(parent.startswith("render/")): parent = parent[7:]
      tv = parent
      parent = base.render.find(tv)
      if(parent == NodePath()):
        parent = base.render.find("**/" + tv)
    if(parent != NodePath()):
      self.prime.setPos(self.prime.getPos(parent))
      self.prime.setHpr(self.prime.getHpr(parent))
      self.prime.setScale(self.prime.getScale(parent))
      self.prime.reparentTo(parent)

  def hide(self):
    self.prime.hide()

  def show(self):
    self.prime.show()

  def __del__(self):
    try:
      if isinstance(self.prime, NodePath):
        self.prime.removeNode()
    except AttributeError: pass

  def __getstate__(self):
    return [self.model, self.getX(), self.getY(), self.getZ(), self.getH(),
            self.getP(), self.getR(), self.getSx(), self.getSy(),
            self.getSz(), self.getCollideMask().getWord(),
            self.getTransparency(), self.getTwoSided(), str(self.getParent())]

  def __setstate__(self, p):
    if len(p) < 14:
      print ":object(error): This state is not compatible with this version!"
      sys.exit(1)

    self.setModel(p[0])
    self.setX(p[1])
    self.setY(p[2])
    self.setZ(p[3])
    self.setH(p[4])
    self.setP(p[5])
    self.setR(p[6])
    self.setSx(p[7])
    self.setSy(p[8])
    self.setSz(p[9])
    self.setCollideMask(BitMask32(p[10]))
    self.setTransparency(p[11])
    self.setTwoSided(p[12])
    self.reparentTo(p[13])