Author: elias
Date: Sat Apr 26 14:08:32 2008
New Revision: 26117

URL: http://svn.gna.org/viewcvs/wesnoth?rev=26117&view=rev
Log:
wmlunits: output a page with animation statistics

Added:
    trunk/data/tools/unit_tree/animations.py
Modified:
    trunk/data/tools/wmlunits

Added: trunk/data/tools/unit_tree/animations.py
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/unit_tree/animations.py?rev=26117&view=auto
==============================================================================
--- trunk/data/tools/unit_tree/animations.py (added)
+++ trunk/data/tools/unit_tree/animations.py Sat Apr 26 14:08:32 2008
@@ -1,0 +1,151 @@
+def write_animation(out, aa, name):
+    c = [0, 0]
+    for a in aa:
+        count_animations(out, name, a, c)
+    if c[1] > 1:
+        out.write("%d (%d)" % (c[0], c[1]))
+    else:
+        out.write("%d" % c[0])
+
+def count_animations(out, name, a, c):
+    frames = a.get_subs("frame")
+    if frames:
+        c[0] += len(frames)
+        c[1] += 1
+    for a2 in a.get_subs("animation"):
+        count_animations(out, name, a2, c)
+    for a2 in a.get_subs("if"):
+        count_animations(out, name, a2, c)
+    for a2 in a.get_subs("else"):
+        count_animations(out, name, a2, c)
+
+def write_table_row(out, unit, color, name = None):
+    anim_types = [
+        "attack_anim",
+        "defend",
+        "death",
+        "idle_anim",
+        "movement_anim",
+        "leading_anim",
+        "teleport",
+        "standing_anim",
+        "healing_anim",
+        "victory_anim",
+        "poison_anim",
+        "healed_anim",
+        "recruit_anim",
+        "levelin_anim",
+        "levelout_anim",
+        "extra_anim",
+    ]
+    
+    needed = {}
+    for at in anim_types: needed[at] = True
+
+    needed["healing_anim"] = False
+    needed["leading_anim"] = False
+    needed["teleport"] = False
+    for abil in unit.get_subs("abilities"):
+        if abil.get_subs("heals"):
+            needed["healing_anim"] = True
+        if abil.get_subs("leadership"):
+            needed["leading_anim"] = True
+        if abil.get_subs("teleport"):
+            needed["teleport"] = True     
+
+    if name == None: name = unit.id
+
+    out.write("<tr><td class=\"%s\">%s</td>" % (color and "c1" or "c2", name))
+
+    for t in anim_types:
+        if needed[t]:
+            aa = unit.get_subs(t)
+            if t == "extra_anim":
+                out.write("<td class=\"none\">")
+            else:
+                out.write("<td class=\"%s\">" % (aa and "ok" or "not"))
+            write_animation(out, aa, t)
+            out.write("</td>")
+        else:
+            out.write("<td class=\"none\">-</td>")
+
+    out.write("</tr>\n")
+
+    female = unit.get_first("female")
+    if female: write_table_row(out, female, color, name + "[f]")
+
+    for variation in unit.get_all("variation"):
+        write_table_row(out, variation, color, name + "[%s]" %
+            variation.get_text_val("variation_name"))
+
+def put_units(f, us):
+    f.write("<table>\n")
+    f.write("<tr>\n")
+    f.write("""
+<th>id</th>
+<th>attack</th>
+<th>defend</th>
+<th>death</th>
+<th>idle</th>
+<th>movement</th>
+<th>leading</th>
+<th>teleport</th>
+<th>standing</th>
+<th>healing</th>
+<th>victory</th>
+<th>poison</th>
+<th>healed</th>
+<th>recruit</th>
+<th>level in</th>
+<th>level out</th>
+<th>extra</th>
+""".lstrip())
+    f.write("</tr>\n")
+    
+    def by_race(u1, u2):
+        r1 = u1.rid
+        r2 = u2.rid
+        r = cmp(r1, r2)
+        if r == 0: r = cmp(u1.id, u2.id)
+        return r
+    us.sort(by_race)
+    race = None
+    color = 0
+    for u in us:
+        if u.race != race:
+            race = u.race
+            color ^= 1
+        write_table_row(f, u, color)
+
+    f.write("</table>\n")
+
+def write_table(f, wesnoth):
+    f.write("""
+<html>
+<head>
+<style type="text/css">
+th {font-size: small; }
+td {white-space: nowrap; width: 1px; }
+td.c1 {background-color: #fff080;}
+td.c2 {background-color: #80f0ff;}
+td.ok {border: solid 1px; background-color: #80ff80;}
+td.not {border: solid 1px; background-color: #ff8080;}
+td.none {border: solid 1px; background-color: #ffffff;}
+</style>
+</head>
+<body>
+""".lstrip())
+    f.write("<h1>animation statistics</h1>\n")
+    f.write("<i>total frames (number of animations)</i>\n")
+    
+    f.write("<h2>Mainline</h2>\n")
+    us = [x for x in wesnoth.unit_lookup.values() if x.campaign == "mainline"]
+    put_units(f, us)
+    
+    f.write("<h2>Campaigns and Addons</h2>\n")
+    us = [x for x in wesnoth.unit_lookup.values() if x.campaign != "mainline"]
+    put_units(f, us)
+
+    f.write("</body></html>")
+    f.close()    
+

Modified: trunk/data/tools/wmlunits
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/wmlunits?rev=26117&r1=26116&r2=26117&view=diff
==============================================================================
--- trunk/data/tools/wmlunits (original)
+++ trunk/data/tools/wmlunits Sat Apr 26 14:08:32 2008
@@ -17,6 +17,7 @@
 
 sys.path.append(".")
 import unit_tree.helpers as helpers
+import unit_tree.animations as animations
 
 html_header = '''
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd";>
@@ -781,7 +782,6 @@
     if not os.path.isdir(options.output):
         os.mkdir(options.output)
     write_index(options.output)
-
     
     campaigns = stuff.campaign_lookup.keys()
 
@@ -792,18 +792,11 @@
     
     for eid in stuff.era_lookup.keys():
         generate_era_report(options.output, isocode, eid, stuff)
-    
-    # Write a list with all unit ids, just for fun.
-    uids = stuff.unit_lookup.keys()
-    uids.sort()
-    f = MyFile(os.path.join(options.output, "uids.html"), "w")
-    f.write("<html><body>")
-    f.write("<ul>" + "\n".join(["<li>%s</li>" % x for x in uids]))
-    f.write("</body></html>")
-    f.close()
-        
+
     # Single unit reports.
     generate_single_unit_reports(options.output, isocode, stuff)
+    
+    return stuff
 
 if __name__ == '__main__':
     global options
@@ -853,11 +846,46 @@
 
     image_collector = helpers.ImageCollector(datadir, userdir)
 
-    did_images = False
+    once_without_translation = False
     for isocode in languages:
-        output(isocode)
-        if not did_images:
+        wesnoth = output(isocode)
+        if not once_without_translation:
             copy_images()
-            did_images = True
-        
-
+            once_without_translation = True
+            for u in wesnoth.unit_lookup.values():
+                r = u.race
+                if r: r = r.get_text_val("id", "none")
+                else: r = "none"
+                # Store rid and id for each units so we have it easier
+                u.rid = r
+                u.id = u.get_text_val("id")
+            
+            # Write a list with all unit ids, just for fun.
+            uids = wesnoth.unit_lookup.keys()
+            def by_race(u1, u2):
+                r = cmp(wesnoth.unit_lookup[u1].rid,
+                    wesnoth.unit_lookup[u2].rid)
+                if r == 0: r = cmp(u1, u2)
+                return r
+            uids.sort(by_race)
+            race = None
+            f = MyFile(os.path.join(options.output, "uids.html"), "w")
+            f.write("<html><body>")
+            for uid in uids:
+                u = wesnoth.unit_lookup[uid]
+                if u.race != race:
+                    if race != None: f.write("</ul>")
+                    f.write("<p>%s</p>\n" % u.rid)
+                    f.write("<ul>")
+                    race = u.race
+                f.write("<li>%s</li>\n" % uid)
+            f.write("</ul>")
+            f.write("</body></html>")
+            f.close()
+            
+            # Write animation statistics
+            f = MyFile(os.path.join(options.output, "animations.html"), "w")
+            animations.write_table(f, wesnoth)
+            f.close()
+        
+


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to