Merge pull request #39 from stevetts/temporary

Merge Content Pack Manager removal to master
This commit is contained in:
John Cote 2015-06-05 01:08:28 -04:00
commit b242d22e5d
7 changed files with 2 additions and 188 deletions

View file

@ -23,10 +23,6 @@ texture-anisotropic-degree 16
# Preferences: # Preferences:
preferences-filename user/preferences.json preferences-filename user/preferences.json
# Content packs:
content-packs-filepath user/contentpacks/
content-packs-sort-filename sort.yaml
# Backups: # Backups:
backups-filepath dependencies/backups/ backups-filepath dependencies/backups/
backups-extension .json backups-extension .json

View file

@ -1,11 +1,9 @@
from pandac.PandaModules import Vec4 from pandac.PandaModules import Vec4
from toontown.safezone.DDSafeZoneLoader import DDSafeZoneLoader from toontown.safezone.DDSafeZoneLoader import DDSafeZoneLoader
from toontown.town.DDTownLoader import DDTownLoader from toontown.town.DDTownLoader import DDTownLoader
from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownGlobals
from toontown.hood.ToonHood import ToonHood from toontown.hood.ToonHood import ToonHood
class DDHood(ToonHood): class DDHood(ToonHood):
notify = directNotify.newCategory('DDHood') notify = directNotify.newCategory('DDHood')
@ -16,7 +14,7 @@ class DDHood(ToonHood):
SKY_FILE = 'phase_3.5/models/props/BR_sky' SKY_FILE = 'phase_3.5/models/props/BR_sky'
SPOOKY_SKY_FILE = 'phase_3.5/models/props/BR_sky' SPOOKY_SKY_FILE = 'phase_3.5/models/props/BR_sky'
TITLE_COLOR = (0.8, 0.6, 0.5, 1.0) TITLE_COLOR = (0.8, 0.6, 0.5, 1.0)
underwaterColor = Vec4(0.0, 0.0, 0.6, 1.0)
HOLIDAY_DNA = { HOLIDAY_DNA = {
ToontownGlobals.WINTER_DECORATIONS: ['phase_6/dna/winter_storage_DD.pdna'], ToontownGlobals.WINTER_DECORATIONS: ['phase_6/dna/winter_storage_DD.pdna'],
ToontownGlobals.WACKY_WINTER_DECORATIONS: ['phase_6/dna/winter_storage_DD.pdna'], ToontownGlobals.WACKY_WINTER_DECORATIONS: ['phase_6/dna/winter_storage_DD.pdna'],
@ -26,18 +24,6 @@ class DDHood(ToonHood):
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
ToonHood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId) ToonHood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
# Load content pack ambience settings:
ambience = contentPacksMgr.getAmbience('donalds-dock')
color = ambience.get('underwater-color')
if color is not None:
try:
self.underwaterColor = Vec4(color['r'], color['g'], color['b'], color['a'])
except Exception, e:
raise ContentPackError(e)
elif self.underwaterColor is None:
self.underwaterColor = Vec4(0, 0, 0.6, 1)
def load(self): def load(self):
ToonHood.load(self) ToonHood.load(self)

View file

@ -1,10 +1,8 @@
from pandac.PandaModules import Vec4 from pandac.PandaModules import Vec4
from toontown.safezone.OZSafeZoneLoader import OZSafeZoneLoader from toontown.safezone.OZSafeZoneLoader import OZSafeZoneLoader
from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownGlobals
from toontown.hood.ToonHood import ToonHood from toontown.hood.ToonHood import ToonHood
class OZHood(ToonHood): class OZHood(ToonHood):
notify = directNotify.newCategory('OZHood') notify = directNotify.newCategory('OZHood')
@ -14,22 +12,11 @@ class OZHood(ToonHood):
SKY_FILE = 'phase_3.5/models/props/TT_sky' SKY_FILE = 'phase_3.5/models/props/TT_sky'
SPOOKY_SKY_FILE = 'phase_3.5/models/props/BR_sky' SPOOKY_SKY_FILE = 'phase_3.5/models/props/BR_sky'
TITLE_COLOR = (1.0, 0.5, 0.4, 1.0) TITLE_COLOR = (1.0, 0.5, 0.4, 1.0)
underwaterColor = Vec4(0.0, 0.0, 0.6, 1.0)
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
ToonHood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId) ToonHood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
# Load content pack ambience settings:
ambience = contentPacksMgr.getAmbience('outdoor-zone')
color = ambience.get('underwater-color')
if color is not None:
try:
self.underwaterColor = Vec4(color['r'], color['g'], color['b'], color['a'])
except Exception, e:
raise ContentPackError(e)
elif self.underwaterColor is None:
self.underwaterColor = Vec4(0, 0, 0.6, 1)
def load(self): def load(self):
ToonHood.load(self) ToonHood.load(self)

View file

@ -11,7 +11,6 @@ from toontown.cogdominium import CogdoInterior
from toontown.toon.Toon import teleportDebug from toontown.toon.Toon import teleportDebug
from toontown.hood import SkyUtil from toontown.hood import SkyUtil
class ToonHood(Hood): class ToonHood(Hood):
notify = directNotify.newCategory('ToonHood') notify = directNotify.newCategory('ToonHood')
@ -22,7 +21,6 @@ class ToonHood(Hood):
SKY_FILE = None SKY_FILE = None
SPOOKY_SKY_FILE = None SPOOKY_SKY_FILE = None
TITLE_COLOR = None TITLE_COLOR = None
HOLIDAY_DNA = {} HOLIDAY_DNA = {}
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
@ -54,18 +52,6 @@ class ToonHood(Hood):
State.State('final', self.enterFinal, self.exitFinal, [])], 'start', 'final') State.State('final', self.enterFinal, self.exitFinal, [])], 'start', 'final')
self.fsm.enterInitialState() self.fsm.enterInitialState()
# Load content pack ambience settings:
ambience = contentPacksMgr.getAmbience('general')
color = ambience.get('underwater-color')
if color is not None:
try:
self.underwaterColor = Vec4(color['r'], color['g'], color['b'], color['a'])
except Exception, e:
raise ContentPackError(e)
else:
self.underwaterColor = None
# Until we cleanup Hood, we will need to define some variables # Until we cleanup Hood, we will need to define some variables
self.id = self.ID self.id = self.ID
self.storageDNAFile = self.STORAGE_DNA self.storageDNAFile = self.STORAGE_DNA

View file

@ -1,138 +0,0 @@
from direct.directnotify.DirectNotifyGlobal import directNotify
import fnmatch
import os
import yaml
from panda3d.core import Multifile, Filename, VirtualFileSystem
APPLICABLE_FILE_PATTERNS = ('*.mf', 'ambience.yaml')
CONTENT_EXT_WHITELIST = ('.jpg', '.jpeg', '.rgb', '.png', '.ogg', '.ttf')
class ContentPackError(Exception):
pass
class ContentPacksManager:
notify = directNotify.newCategory('ContentPacksManager')
notify.setInfo(True)
def __init__(self, filepath='user/contentpacks/', sortFilename='sort.yaml'):
self.filepath = filepath
self.sortFilename = os.path.join(self.filepath, sortFilename)
if __debug__:
self.mountPoint = '../resources'
else:
self.mountPoint = '/'
self.vfs = VirtualFileSystem.getGlobalPtr()
self.sort = []
self.ambience = {}
def isApplicable(self, filename):
"""
Returns whether or not the specified file is applicable.
"""
# Does this file exist?
if not os.path.exists(filename):
return False
# Does this file match one of the applicable file patterns?
basename = os.path.basename(filename)
for pattern in APPLICABLE_FILE_PATTERNS:
if fnmatch.fnmatch(basename, pattern):
return True
return False
def applyMultifile(self, filename):
"""
Apply the specified multifile.
"""
mf = Multifile()
mf.openReadWrite(Filename(filename))
# Discard content with non-whitelisted extensions:
for subfileName in mf.getSubfileNames():
ext = os.path.splitext(subfileName)[1]
if ext not in CONTENT_EXT_WHITELIST:
mf.removeSubfile(subfileName)
self.vfs.mount(mf, self.mountPoint, 0)
def applyAmbience(self, filename):
"""
Apply the specified ambience configuration file.
"""
with open(os.path.join(self.filepath, filename), 'r') as f:
self.ambience.update(yaml.load(f) or {})
def apply(self, filename):
"""
Apply the specified content pack file.
"""
self.notify.info('Applying %s...' % filename)
basename = os.path.basename(filename)
if basename.endswith('.mf'):
self.applyMultifile(os.path.join(self.filepath, filename))
elif basename == 'ambience.yaml':
self.applyAmbience(filename)
def applyAll(self):
"""
Using the sort configuration, recursively apply all applicable content
pack files under the configured content packs directory.
"""
# First, read the sort configuration:
self.readSortConfig()
# Next, apply the sorted files:
for filename in self.sort[:]:
if self.isApplicable(os.path.join(self.filepath, filename)):
self.apply(filename)
else:
self.notify.warning('Invalidating %s...' % filename)
self.sort.remove(filename)
# Apply the non-sorted files:
for root, _, filenames in os.walk(self.filepath):
root = root[len(self.filepath):]
for filename in filenames:
filename = os.path.join(root, filename).replace('\\', '/')
# Ensure this file isn't sorted:
if filename in self.sort:
continue
# Ensure this file is applicable:
if not self.isApplicable(os.path.join(self.filepath, filename)):
continue
# Apply this file, and add it to the sort configuration:
self.apply(filename)
self.sort.append(filename)
# Finally, write the new sort configuration:
self.writeSortConfig()
def readSortConfig(self):
"""
Read the sort configuration.
"""
if not os.path.exists(self.sortFilename):
return
with open(self.sortFilename, 'r') as f:
self.sort = yaml.load(f) or []
def writeSortConfig(self):
"""
Write the sort configuration to disk.
"""
with open(self.sortFilename, 'w') as f:
for filename in self.sort:
f.write('- %s\n' % filename)
def getAmbience(self, group):
"""
Returns the ambience configurations for the specified group.
"""
return self.ambience.get(group, {})

View file

@ -1,3 +0,0 @@
*
!.gitignore
!sort.yaml