Example #1
0
    def test_storage_visgroups(self):
        store = DNAStorage()
        vg = DNAVisGroup("my_vg")

        vg.addVisible("visible1")
        vg.addVisible("visible2")
        vg.addVisible("visible3")

        store.storeDNAVisGroup(vg)
        self.assertEqual(store.getNumDNAVisGroups(), 1)
        self.assertEqual(store.getNumDNAVisGroupsAI(), 1)
        self.assertEqual(store.getDNAVisGroupAI(0), vg)
        self.assertEqual(store.getDNAVisGroupName(0), vg.getName())

        num_visibles = store.getNumVisiblesInDNAVisGroup(0)
        self.assertEqual(num_visibles, 3)

        for i in xrange(num_visibles):
            self.assertEqual(store.getVisibleName(0, i), "visible%d" % (i + 1))

        vg.removeVisible("visible2")
        self.assertEqual(store.getNumVisiblesInDNAVisGroup(0), 2)
        self.assertEqual(store.getVisibleName(0, 0), "visible1")
        self.assertEqual(store.getVisibleName(0, 1), "visible3")

        store.resetDNAVisGroups()
        self.assertEqual(store.getNumDNAVisGroups(), 0)
        self.assertEqual(store.getNumDNAVisGroupsAI(), 0)
Example #2
0
 def setupDNA(self):
     if self.dnaStore:
         return None
     self.dnaStore = DNAStorage()
     dnaFileName = self.genDNAFileName()
     loadDNAFileAI(self.dnaStore, dnaFileName)
     self.initDNAInfo()
    def enter(self, requestStatus):
        CogHQExterior.CogHQExterior.enter(self, requestStatus)

        for train in self.trains:
            train.show()

        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)
        loadDNAFileAI(dnaStore, dnaFileName)

        # Collect all of the vis group zone IDs:
        self.zoneVisDict = {}
        for i in range(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in range(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.getVisible(i)))
            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        # Next, we want interest in all vis groups due to this being a Cog HQ:
        base.cr.sendSetZoneMsg(self.zoneId, list(self.zoneVisDict.values())[0])
Example #4
0
    def test_load_invalid_file(self):
        store = DNAStorage()
        root = self.loader.loadDNAFile(store, Filename('invalid.pdna'))
        self.assertTrue(root.isEmpty())

        root = self.loader.loadDNAFileAI(store, Filename('invalid.pdna'))
        self.assertTrue(root is None)
Example #5
0
    def __test_loader(self, filename, use_loader_class):
        store = DNAStorage()

        if use_loader_class:
            np = self.loader.loadDNAFile(store, filename)
            expected_repr = '''PandaNode dna
  PandaNode test
    PandaNode 1000
      PandaNode subgroup
        ModelNode prop_test T:(pos -12 5 7 hpr 180 15 0) S:(ColorScaleAttrib)
        PandaNode tb3:test_block [DNACode]
        PandaNode sb3:test_block'''

        else:
            np = NodePath(loadDNAFile(store, filename))
            expected_repr = '''PandaNode test
  PandaNode 1000
    PandaNode subgroup
      ModelNode prop_test T:(pos -12 5 7 hpr 180 15 0) S:(ColorScaleAttrib)
      PandaNode tb3:test_block [DNACode]
      PandaNode sb3:test_block'''

        self.check_store(store)

        ss = StringStream()
        np.ls(ss)

        self.assertEqual(ss.getData().strip(), expected_repr)
Example #6
0
    def test_blocks(self):
        store = DNAStorage()
        block1 = (
            4269,  # block_number
            "libpandadna",  # title
            "",  # article
            "",  # bldg_type
            1337  # zone_id
        )
        block2 = (
            1337,  # block_number
            "Visual Studio 2010",  # title
            "",  # article
            "",  # bldg_type
            4269  # zone_id
        )
        block3 = (
            1000,  # block_number
            "C++ reader",  # title
            "",  # article
            "",  # bldg_type
            4269  # zone_id
        )

        store.storeBlock(*block1)
        store.storeBlock(*block2)
        store.storeBlock(*block3)

        door1 = NodePath('block-1000')
        door1.setPos(5, 5, 10)
        door1.setH(180)
        store.storeBlockDoor(1000, door1)

        self.assertEqual(store.getNumBlockNumbers(), 3)

        # Test an invalid block number
        self.assertEqual(store.getZoneFromBlockNumber(100), 0)
        self.assertEqual(store.getZoneFromBlockNumber(1000), 4269)
        self.assertEqual(store.getZoneFromBlockNumber(1337), 4269)
        self.assertEqual(store.getZoneFromBlockNumber(4269), 1337)
        self.assertEqual(store.getTitleFromBlockNumber(1000), "C++ reader")
        self.assertEqual(store.getTitleFromBlockNumber(1337),
                         "Visual Studio 2010")
        self.assertEqual(store.getTitleFromBlockNumber(4269), "libpandadna")
        self.assertEqual(store.getBlockNumberAt(0), 4269)
        self.assertEqual(store.getBlockNumberAt(1), 1337)
        self.assertEqual(store.getBlockNumberAt(2), 1000)
        self.assertEqual(store.getDoorPosHprFromBlockNumber(1000), door1)
        self.assertTrue(store.getDoorPosHprFromBlockNumber(1337).isEmpty())

        store.resetBlockNumbers()
        store.resetBlockZones()

        self.assertEqual(store.getTitleFromBlockNumber(1000), "")
        self.assertEqual(store.getTitleFromBlockNumber(1337), "")
        self.assertEqual(store.getTitleFromBlockNumber(4269), "")
Example #7
0
 def loadDnaStore(self):
     if not hasattr(self, 'dnaStore'):
         self.dnaStore = DNAStorage()
         files = ('phase_4/dna/storage.dna',
                  'phase_3.5/dna/storage_interior.dna')
         dnaBulk = DNABulkLoader(self.dnaStore, files)
         dnaBulk.loadDNAFiles()
         self.dnaStore.storeFont('humanist',
                                 ToontownGlobals.getInterfaceFont())
         self.dnaStore.storeFont('mickey', ToontownGlobals.getSignFont())
         self.dnaStore.storeFont('suit', ToontownGlobals.getSuitFont())
    def getDnaStore(self, zoneId):
        if zoneId in self.__dnaMap:
            return self.__dnaMap[zoneId]

        x = DNAStorage.DNAStorage()
        filename = self.genDNAFileName(zoneId)

        print 'Loading dna file', self.genDNAFileName(zoneId)
        self.loadDNAFileAI(x, filename)

        self.__dnaMap[zoneId] = x

        return x
Example #9
0
    def test_font(self):
        store = DNAStorage()
        font1 = loader.loadFont('files/arial.ttf')
        font2 = loader.loadFont('files/comic.ttf')

        store.storeFont('font1', font1)
        store.storeFont('font2', font2)
        self.assertEqual(store.findFont('font1'), font1)
        self.assertEqual(store.findFont('font2'), font2)
        self.assertEqual(store.findFont('bad'), None)

        store.resetFonts()

        self.assertEqual(store.findFont('font1'), None)
        self.assertEqual(store.findFont('font2'), None)
Example #10
0
    def test_texture(self):
        store = DNAStorage()
        texture1 = loader.loadTexture('files/texture1.png')
        texture2 = loader.loadTexture('files/texture2.png')

        store.storeTexture('texture1', texture1)
        store.storeTexture('texture2', texture2)
        self.assertEqual(store.findTexture('texture1'), texture1)
        self.assertEqual(store.findTexture('texture2'), texture2)
        self.assertEqual(store.findTexture('bad'), None)

        store.resetTextures()

        self.assertEqual(store.findTexture('texture1'), None)
        self.assertEqual(store.findTexture('texture2'), None)
Example #11
0
    def test_storage_catalog(self):
        store = DNAStorage()
        store.storeCatalogCode('root', 'code1')
        store.storeCatalogCode('root', 'code2')
        store.storeCatalogCode('root', 'code3')

        colors = ('red', 'green', 'blue', 'yellow', 'orange')
        for color in colors:
            store.storeCatalogCode('colors', color)

        self.assertEqual(store.getNumCatalogCodes('colors'), len(colors))

        for i, color in enumerate(colors):
            self.assertEqual(store.getCatalogCode('colors', i), color)

        # 'bad' root must have no codes
        self.assertEqual(store.getNumCatalogCodes('bad'), 0)
Example #12
0
    def test_loader(self):
        store = DNAStorage()
        np = self.loader.loadDNAFile(store, Filename('test.pdna'))

        self.check_store(store)

        expected_repr = '''PandaNode dna
  PandaNode root
    PandaNode test
      PandaNode 1000
        PandaNode subgroup
          ModelNode prop_test T:(pos -12 5 7 hpr 180 15 0) S:(ColorScaleAttrib)
          PandaNode tb3:test_block [DNACode]
          PandaNode sb3:test_block'''
        ss = StringStream()
        np.ls(ss)
        self.assertEqual(ss.getData().strip(), expected_repr)
    def __init__(self, air, zoneId, canonicalHoodId):
        self.air = air
        self.zoneId = zoneId
        self.canonicalHoodId = canonicalHoodId

        self.fishingPonds = []
        self.partyGates = []
        self.treasurePlanner = None
        self.buildingManagers = []
        self.suitPlanners = []

        for zoneId in self.getZoneTable():
            self.notify.info('Creating objects... ' +
                             self.getLocationName(zoneId))
            dnaFileName = self.air.lookupDNAFileName(zoneId)
            dnaStore = DNAStorage()
            dnaData = simbase.air.loadDNAFileAI(dnaStore, dnaFileName)
            self.air.dnaStoreMap[zoneId] = dnaStore
            self.air.dnaDataMap[zoneId] = dnaData
Example #14
0
    def test_nodes(self):
        store = DNAStorage()
        store.storeNode('files/node.bam', 'dummy', 'node')
        store.storeHoodNode('files/hood_node.bam', 'dummy', 'hood_node')
        store.storePlaceNode('files/place_node.bam', 'dummy', 'place_node')

        self.assertTrue(store.findNode('bad').isEmpty())
        self.assertFalse(store.findNode('node').isEmpty())
        self.assertFalse(store.findNode('hood_node').isEmpty())
        self.assertFalse(store.findNode('place_node').isEmpty())

        store.resetNodes()
        self.assertTrue(store.findNode('node').isEmpty())

        store.resetHoodNodes()
        self.assertTrue(store.findNode('hood_node').isEmpty())

        store.resetPlaceNodes()
        self.assertTrue(store.findNode('place_node').isEmpty())
Example #15
0
    def enter(self, requestStatus):
        self.zoneId = requestStatus['zoneId']

        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)

        if not dnaFileName.endswith('13200.dna'):

            loadDNAFileAI(dnaStore, dnaFileName)

            # Collect all of the vis group zone IDs:
            self.zoneVisDict = {}
            for i in range(dnaStore.getNumDNAVisGroupsAI()):
                groupFullName = dnaStore.getDNAVisGroupName(i)
                visGroup = dnaStore.getDNAVisGroupAI(i)
                visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
                visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
                visibles = []
                for i in range(visGroup.getNumVisibles()):
                    visibles.append(int(visGroup.getVisible(i)))
                visibles.append(ZoneUtil.getBranchZone(visZoneId))
                self.zoneVisDict[visZoneId] = visibles

            # Next, we want interest in all vis groups due to this being a Cog HQ:
            base.cr.sendSetZoneMsg(self.zoneId, list(self.zoneVisDict.values())[0])

        BattlePlace.BattlePlace.enter(self)
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        self.nodeList = [self.loader.geom]
        self.loader.hood.startSky()
        self._telemLimiter = TLGatherAllAvs('FactoryExterior', RotationLimitToH)
        self.accept('doorDoneEvent', self.handleDoorDoneEvent)
        self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger)
        NametagGlobals.setWant2dNametags(True)
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList, self.zoneId)
        how = requestStatus['how']
        self.fsm.request(how, [requestStatus])
Example #16
0
    def test_loader_ai(self):
        store = DNAStorage()
        root = self.loader.loadDNAFileAI(store, Filename('test.pdna'))

        self.check_store(store)

        def check_name_class_and_children_count(comp,
                                                klass,
                                                name,
                                                num_children=1):
            self.assertEqual(comp.getName(), name)
            self.assertEqual(comp.__class__, klass)
            self.assertEqual(comp.getNumChildren(), num_children)

        check_name_class_and_children_count(root, DNAGroup, "root")

        test_group = root.at(0)
        check_name_class_and_children_count(test_group, DNAGroup, "test")

        test_visgroup = test_group.at(0)
        self.assertEqual(store.getDNAVisGroupAI(0), test_visgroup)
        check_name_class_and_children_count(test_visgroup, DNAVisGroup, "1000")

        test_subgroup = test_visgroup.at(0)
        check_name_class_and_children_count(test_subgroup,
                                            DNAGroup,
                                            "subgroup",
                                            num_children=2)

        test_prop = test_subgroup.at(0)
        check_name_class_and_children_count(test_prop,
                                            DNAProp,
                                            "prop_test",
                                            num_children=0)

        test_building = test_subgroup.at(1)
        check_name_class_and_children_count(test_building,
                                            DNALandmarkBuilding,
                                            "tb3:test_block",
                                            num_children=0)
Example #17
0
    def initialize(self):
        # Get DNA file appropriate to this house...
        dnaFile = houseInteriors[self.houseIndex]

        # Load DNA...
        dnaStorage = DNAStorage()
        dnaData = loadDNAFileAI(dnaStorage, dnaFile)

        # Read it into furniture...
        furnitureReader = DNAFurnitureReaderAI(dnaData, [-11, 2, 0, 0, 0, 0])

        # Set furniture:
        self.furnitureManager.setItems(furnitureReader.getBlob())

        # Set default windows and wallpaper:
        del self.furnitureManager.windows[:]
        self.furnitureManager.windows.extend(defaultWindows)
        self.furnitureManager.applyWindows()
        del self.furnitureManager.wallpaper[:]
        self.furnitureManager.wallpaper.extend(defaultWallpaper)
        self.furnitureManager.applyWallpaper()

        # Save:
        self.furnitureManager.saveToHouse()
Example #18
0
    def test_suit_points(self):
        store = DNAStorage()

        point1 = DNASuitPoint(5, DNASuitPoint.STREET_POINT,
                              Point3(100, 20, 0.5))
        point2 = DNASuitPoint(10, DNASuitPoint.STREET_POINT,
                              Point3(100, 0, 0.5))
        point3 = DNASuitPoint(15, DNASuitPoint.FRONT_DOOR_POINT,
                              Point3(100, -20, 0.5), 10)

        store.storeSuitPoint(point1)
        store.storeSuitPoint(point2)
        store.storeSuitPoint(point3)

        self.assertEqual(store.getNumSuitPoints(), 3)
        self.assertEqual(store.getSuitPointAtIndex(0), point1)
        self.assertEqual(store.getSuitPointAtIndex(1), point2)
        self.assertEqual(store.getSuitPointAtIndex(2), point3)
        self.assertEqual(store.getSuitPointWithIndex(5), point1)
        self.assertEqual(store.getSuitPointWithIndex(10), point2)
        self.assertEqual(store.getSuitPointWithIndex(15), point3)

        # Test invalid index
        self.assertEqual(store.getSuitPointWithIndex(1000), None)

        # Test suit edges
        edges = ((5, 10, 2301), (10, 15, 2302), (15, 5, 2303))

        for edge in edges:
            store.storeSuitEdge(*edge)

        for edge in edges:
            dna_edge = store.getSuitEdge(edge[0], edge[1])
            self.assertTrue(dna_edge is not None)
            self.assertEqual(dna_edge.getStartPoint(),
                             store.getSuitPointWithIndex(edge[0]))
            self.assertEqual(dna_edge.getEndPoint(),
                             store.getSuitPointWithIndex(edge[1]))
            self.assertEqual(dna_edge.getZoneId(), edge[2])
            self.assertEqual(store.getSuitEdgeZone(edge[0], edge[1]), edge[2])

        adj_points = store.getAdjacentPoints(point1)
        self.assertEqual(adj_points.getNumPoints(), 1)
        self.assertEqual(adj_points.getPoint(0), point2)
        self.assertEqual(store.getSuitEdgeTravelTime(5, 10, 5), 4)
        self.assertEqual(store.getSuitEdgeTravelTime(10, 15, 5), 4)
        self.assertEqual(store.getSuitEdgeTravelTime(15, 5, 5), 8)

        # Test suit path
        path = store.getSuitPath(point1, point3, 1, 10)
        self.assertEqual(path.getNumPoints(), 3)
        self.assertEqual(path.getPoint(0), point1)
        self.assertEqual(path.getPoint(1), point2)
        self.assertEqual(path.getPoint(2), point3)

        # Test invalid values
        store.storeSuitEdge(1, 2, 2800)
        self.assertEqual(store.getSuitEdge(1, 2), None)
        self.assertEqual(store.getSuitEdge(145, 13442), None)
        self.assertEqual(store.getSuitEdgeTravelTime(1, 2, 5), 0)
        self.assertEqual(repr(store.getSuitEdgeTravelTime(10, 15, 0)),
                         'inf')  # Division by 0

        point4 = DNASuitPoint(400, DNASuitPoint.STREET_POINT, Point3(0, 0, 0))
        self.assertEqual(store.getSuitPath(point4, point2, 1, 10), None)

        # Reset
        store.resetSuitPoints()
        self.assertEqual(store.getSuitPointWithIndex(5), None)
        self.assertEqual(store.getSuitPointWithIndex(10), None)
        self.assertEqual(store.getSuitPointWithIndex(15), None)
        self.assertTrue(store.discoverContinuity())
Example #19
0
 def loadDnaStoreTutorial(self):
     self.dnaStore = DNAStorage()
     files = ('phase_3.5/dna/storage_tutorial.dna',
              'phase_3.5/dna/storage_interior.dna')
     dnaBulk = DNABulkLoader(self.dnaStore, files)
     dnaBulk.loadDNAFiles()
Example #20
0
import sys
from panda3d.core import *

loadPrcFileData('', 'want-directtools #t')

import direct.directbase.DirectStart

sys.path.append('../../..')
getModelPath().appendDirectory('../..')

mode = "7100"
if len(sys.argv) > 1:
    mode = sys.argv[1]

from libpandadna import DNAStorage, DNALoader
s = DNAStorage.DNAStorage()
ld = DNALoader.DNALoader()


def load(x):
    return ld.loadDNAFile(s, x)


load('../../phase_4/dna/storage.pdna')
load('../../phase_5/dna/storage_town.pdna')
load('storage_FF.pdna')
load('storage_FF_%s.pdna' % ("sz" if mode == "sz" else "town"))
m = load('funny_farm_%s.pdna' % mode)
dnaEnviron = render.attachNewNode('dna_render')
m.reparentTo(dnaEnviron)
base.disableMouse()
Example #21
0
 def setUpClass(cls):
     cls.store = DNAStorage()
 def setUpClass(cls):
     cls.store = DNAStorage()
     cls.defaultColor = Vec4(1)
Example #23
0
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     self.interior = loader.loadModel(
         'phase_3.5/models/modules/toon_interior_tutorial')
     self.interior.reparentTo(render)
     dnaStore = DNAStorage()
     node = loader.loadDNAFile(self.cr.playGame.hood.dnaStore,
                               'phase_3.5/dna/tutorial_street.dna')
     self.street = render.attachNewNode(node)
     self.street.flattenMedium()
     self.street.setPosHpr(-17, 42, -0.5, 180, 0, 0)
     self.street.find('**/tb2:toon_landmark_TT_A1_DNARoot').stash()
     self.street.find(
         '**/tb1:toon_landmark_hqTT_DNARoot/**/door_flat_0').stash()
     self.street.findAllMatches('**/+CollisionNode').stash()
     self.skyFile = 'phase_3.5/models/props/TT_sky'
     self.sky = loader.loadModel(self.skyFile)
     self.sky.setScale(0.8)
     self.sky.reparentTo(render)
     self.sky.setDepthTest(0)
     self.sky.setDepthWrite(0)
     self.sky.setBin('background', 100)
     self.sky.find('**/Sky').reparentTo(self.sky, -1)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = 'door_double_round_ul'
     if doorModelName[-1:] == 'r':
         doorModelName = doorModelName[:-1] + 'l'
     else:
         doorModelName = doorModelName[:-1] + 'r'
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.8, 0.8, 0.8)
     door_origin.setPos(door_origin, 0, -0.025, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore,
                       str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
     npcOrigin = self.interior.find('**/npc_origin_' + repr(
         (self.cr.doId2do[self.npcId].posIndex)))
     if not npcOrigin.isEmpty():
         self.cr.doId2do[self.npcId].reparentTo(npcOrigin)
         self.cr.doId2do[self.npcId].clearMat()
     self.createSuit()
     base.localAvatar.setPosHpr(-2, 12, 0, -10, 0, 0)
     base.localAvatar.startPosHprBroadcast()
     base.localAvatar.b_setParent(ToontownGlobals.SPRender)
     self.cr.doId2do[self.npcId].setChatAbsolute(
         TTLocalizer.QuestScriptTutorialMickey_4, CFSpeech)
     place = base.cr.playGame.getPlace()
     if place and hasattr(place,
                          'fsm') and place.fsm.getCurrentState().getName():
         self.notify.info('Tutorial movie: Place ready.')
         self.playMovie()
     else:
         self.notify.info(
             'Tutorial movie: Waiting for place=%s, has fsm=%s' %
             (place, hasattr(place, 'fsm')))
         if hasattr(place, 'fsm'):
             self.notify.info('Tutorial movie: place state=%s' %
                              place.fsm.getCurrentState().getName())
         self.acceptOnce('enterTutorialInterior', self.playMovie)