view light8/sub_analyzer.py @ 151:990a9474d0e7

early cue stuff. the CueList will supply the CueFader with the cues to early cue stuff. the CueList will supply the CueFader with the cues to work with, and will do crossfading sooner or later. the format of cues is still very open. cuelist1 is a bogus cuelist for testing.
author dmcc
date Sun, 06 Jul 2003 16:33:06 +0000
parents a995fd1a8f03
children
line wrap: on
line source

#!/usr/bin/python
from Subs import *
from Patch import *
from types import TupleType

from Config import patch, subs

import re
import Patch
Patch.reload_data(0)

subusage = {}

# colors = 'ROGBVndcihs'
colors = 'ndcihs'

color_chart = {
    '1-01' : 'ROYd',   # broadway (morning - afternoon)
    '1-02' : 'i',      # int. mission
    '1-03' : 'R',      # phone booth
    '1-04' : 'RBVh',   # hotbox
    '1-05' : 'RBd',    # off broadway
    '1-06' : 'ROYd',   # ext. mission
    '1-07' : 'ROYn',   # gambler intro, off broadway
    '1-08' : 'ROBIVc',  # havana, clubs
    '1-09' : 'ROYBIVc', # havana, outside, night
    '1-10' : 'BVn',     # ext. mission, night (4am)

    '2-01' : 'RBIVh',  # hotbox
    '2-02' : 'RBn',    # more can i wish you
    '2-03' : 'GBs',    # sewer (crap game)
    '2-04' : 'Bn',     # sue me
    '2-05' : 'i',      # int. mission
    '2-06' : '',       # marry
    '2-07' : 'd',      # broadway finale
}

scene_names = {
    '1-01' : 'broadway (morning to afternoon)',
    '1-02' : 'int. mission',
    '1-03' : 'phone booth',
    '1-04' : 'hotbox',
    '1-05' : 'guys and dolls (off broadway)',
    '1-06' : 'ext. mission, lunch time',
    '1-07' : 'gambler intro, off broadway',
    '1-08' : 'havana, clubs',
    '1-09' : 'havana, outside, night',
    '1-10' : 'ext. mission, night (4am)',

    '2-01' : 'hotbox',
    '2-02' : 'more can i wish you',
    '2-03' : 'sewer (crap game)',
    '2-04' : 'sue me',
    '2-05' : 'rock the boat (int. mission)',
    '2-06' : 'marry (trav)',
    '2-07' : 'finale (broadway)',
}

sub_to_scene = {}

# blacklist is a list of *prefixes* to light names that won't be shown
blacklist = 'god upfill red blue cyc oran sidefill'.split()
blacklist.extend(['side l','side r'])

for subname, levdict in subs.items():
    if type(subname) == TupleType:
        subname = subname[0]
    oldname = subname
    subname = re.sub(r'\*(\d-\d+)-.*', r'\1', subname)
    if oldname == subname: continue
    sub_to_scene[oldname] = subname
    subname = oldname # restore 'em.  restore 'em good.
    if not levdict:
        print "Warning: %s is useless (empty sub)." % subname
    else:
        for ch, lev in levdict.items():
            if lev:
                ch = resolve_name(ch)
                subusage.setdefault(ch, [])
                subusage[ch].append((lev, subname))

def twist(l):
    return [(b,a) for a,b in l]

def format_usage(ch, usage):
    if max([ch.startswith(pre) for pre in blacklist]):
        return
    
    usage=twist(usage)
    usage.sort()
#    usage.reverse()
    usage=twist(usage)
    print "======= %s ======= (%d uses)" % (ch, len(usage))
    if 1:
        use_str = ''
        for lev, sub in usage:
            if lev>30:
                if sub_to_scene[sub] in color_chart:
                    subcolors = color_chart[sub_to_scene[sub]]
                    col_str = ''
                    for c in colors:
                        if c in subcolors: col_str += c
                        else: col_str +=  ' '
                    print col_str,
                else:
                    print ' ' * len(colors),
                scenename = scene_names.get(sub_to_scene[sub], '')
                levbar="*"*(lev//5)
                print '  %3d %-20s\t%-30s %s' % (lev, levbar,sub, scenename)
    else:
        use_str = '\n    '.join(["%d\t%s" % (lev, sub) for lev, sub in usage])
        print '    ' + use_str

subitems = subusage.items()
subitems.sort()
for ch, usage in subitems:
    if 0:
        usedict = {}
        for lev, subname in usage: # remove duplicates
            usedict[subname] = max(lev, usedict.get(subname, 0))

        newusage = [(lev, sub) for sub, lev in usedict.items()]

        format_usage(ch, newusage)
    else:
        format_usage(ch, usage)