Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Magnus Auvinen
committed
Apr 27, 2008
1 parent
a7cb368
commit ac18c6a
Showing
6 changed files
with
874 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
import os, imp, sys | ||
import datatypes | ||
import content | ||
import network | ||
|
||
|
||
def create_enum_table(names, num): | ||
lines = [] | ||
lines += ["enum", "{"] | ||
lines += ["\t%s=0,"%names[0]] | ||
for name in names[1:]: | ||
lines += ["\t%s,"%name] | ||
lines += ["\t%s" % num, "};"] | ||
return lines | ||
|
||
gen_content_header = False | ||
gen_content_source = True | ||
|
||
|
||
# collect sprites | ||
sprites = [] | ||
for set in content.Sprites: | ||
sprites += set.sprites | ||
|
||
|
||
if gen_content_header: | ||
|
||
print """ | ||
struct SOUND | ||
{ | ||
int id; | ||
const char *filename; | ||
}; | ||
struct SOUNDSET | ||
{ | ||
int num_sounds; | ||
SOUND *sound; | ||
}; | ||
struct IMAGE | ||
{ | ||
int id; | ||
const char *filename; | ||
}; | ||
struct SPRITESET | ||
{ | ||
IMAGE *image; | ||
int gridx; | ||
int gridy; | ||
}; | ||
struct SPRITE | ||
{ | ||
SPRITESET *set; | ||
int x, y, w, h; | ||
}; | ||
""" | ||
|
||
def generate_struct(this, name, parent_name): | ||
print "struct %s" % name | ||
|
||
print "{" | ||
if parent_name: | ||
print "\t%s base;" % parent_name | ||
for var in this.fields[this.baselen:]: | ||
for l in var.emit_declaration(): print "\t"+l | ||
print "};" | ||
|
||
generate_struct(content.WeaponBase, "WEAPONSPEC", None) | ||
for weapon in content.Weapons: | ||
generate_struct(weapon, "WEAPONSPEC_%s"%weapon.name.upper(), "WEAPONSPEC") | ||
|
||
# generate enums | ||
for l in create_enum_table(["SOUND_"+o.name.upper() for o in content.Sounds], "NUM_SOUNDS"): print l | ||
for l in create_enum_table(["IMAGE_"+o.name.upper() for o in content.Images], "NUM_IMAGES"): print l | ||
for l in create_enum_table(["SPRITE_"+o.name.upper() for o in sprites], "NUM_SPRITES"): print l | ||
|
||
for l in create_enum_table(["WEAPONTYPE_"+o.name.upper() for o in content.Weapons], "NUM_WEAPONTYPES"): print l | ||
|
||
if gen_content_source: | ||
# generate data | ||
for s in content.Sounds: | ||
print "static SOUND sounds_%s[%d] = {" % (s.name, len(s.files)) | ||
for filename in s.files: | ||
print '\t{%d, "%s"},' % (-1, filename) | ||
print "};" | ||
|
||
print "static SOUNDSET soundsets[%d] = {" % len(content.Sounds) | ||
for s in content.Sounds: | ||
print "\t{%d, sounds_%s}," % (len(s.files), s.name) | ||
#for filename in s.files: | ||
# print "\t{%d, '%s'}," % (-1, filename) | ||
print "};" | ||
|
||
print "static IMAGE images[%d] = {" % len(content.Images) | ||
for i in content.Images: | ||
print '\t{%d, "%s"},' % (-1, i.filename) | ||
print "};" | ||
|
||
print "static SPRITESET spritesets[%d] = {" % len(content.Sprites) | ||
for set in content.Sprites: | ||
if set.image: | ||
print '\t{&images[IMAGE_%s], %d, %d},' % (set.image.upper(), set.grid[0], set.grid[1]) | ||
else: | ||
print '\t{0, %d, %d},' % (set.grid[0], set.grid[1]) | ||
print "};" | ||
|
||
print "static SPRITE sprites[%d] = {" % len(sprites) | ||
spritesetid = 0 | ||
for set in content.Sprites: | ||
for sprite in set.sprites: | ||
print '\t{&spritesets[%d], %d, %d, %d, %d},' % (spritesetid, sprite.pos[0], sprite.pos[1], sprite.pos[2], sprite.pos[3]) | ||
spritesetid += 1 | ||
print "};" | ||
|
||
for weapon in content.Weapons: | ||
print "static WEAPONSPEC_%s weapon_%s = {" % (weapon.name.upper(), weapon.name) | ||
for var in weapon.fields: | ||
for l in var.emit_definition(): print "\t"+l, | ||
print "," | ||
print "};" | ||
|
||
print "struct WEAPONS" | ||
print "{" | ||
print "\tWEAPONSPEC *id[%d];" % len(content.Weapons) | ||
for w in content.Weapons: | ||
print "\tWEAPONSPEC_%s &weapon_%s;" % (w.name.upper(), w.name) | ||
print "" | ||
print "};" | ||
|
||
print "static WEAPONS weapons = {{%s}," % (",".join(["&weapon_%s.base"%w.name for w in content.Weapons])) | ||
for w in content.Weapons: | ||
print "\tweapon_%s," % w.name | ||
print "};" | ||
|
||
|
||
|
||
print """ | ||
struct DATACONTAINER | ||
{ | ||
int num_sounds; | ||
SOUNDSET *sounds; | ||
int num_images; | ||
IMAGE *images; | ||
int num_sprites; | ||
SPRITE *sprites; | ||
WEAPONS &weapons; | ||
};""" | ||
|
||
print "DATACONTAINER data = {" | ||
print "\t%d, soundsets," % len(content.Sounds) | ||
print "\t%d, images," % len(content.Images) | ||
print "\t%d, sprites," % len(content.Sprites) | ||
print "\tweapons," | ||
print "};" | ||
|
||
|
||
# NETWORK | ||
if 0: | ||
|
||
|
||
for e in network.Enums: | ||
for l in create_enum_table(["%s_%s"%(e.name, v) for v in e.values], "NUM_%sS"%e.name): print l | ||
print "" | ||
|
||
for l in create_enum_table([o.enum_name for o in network.Objects], "NUM_NETOBJTYPES"): print l | ||
print "" | ||
for l in create_enum_table([o.enum_name for o in network.Messages], "NUM_NETMSGTYPES"): print l | ||
print "" | ||
|
||
for item in network.Objects + network.Messages: | ||
for line in item.emit_declaration(): | ||
print line | ||
print "" | ||
|
||
|
||
if 0: | ||
# create names | ||
lines = [] | ||
lines += ["static const char *netobj_names[] = {"] | ||
lines += ['\t"%s",' % o.name for o in network.Objects] | ||
lines += ['\t""', "};", ""] | ||
|
||
for l in lines: | ||
print l | ||
|
||
for item in network.Objects: | ||
for line in item.emit_validate(): | ||
print line | ||
print "" | ||
|
||
# create validate tables | ||
lines = [] | ||
lines += ["typedef int(*VALIDATEFUNC)(void *data, int size);"] | ||
lines += ["static VALIDATEFUNC validate_funcs[] = {"] | ||
lines += ['\tvalidate_%s,' % o.name for o in network.Objects] | ||
lines += ["\t0x0", "};", ""] | ||
|
||
lines += ["int netobj_validate(int type, void *data, int size)"] | ||
lines += ["{"] | ||
lines += ["\tif(type < 0 || type >= NUM_NETOBJTYPES) return -1;"] | ||
lines += ["\treturn validate_funcs[type](data, size);"] | ||
lines += ["};", ""] | ||
|
||
for l in lines: | ||
print l | ||
|
Oops, something went wrong.