4 import xml.etree.ElementTree
as ET
6 binaries =
'../../../binaries'
10 'posix':
'./libCollada_dbg.so',
11 'nt':
'Collada_dbg.dll',
16 os.environ[
'PATH'] =
'%s/system/' % binaries
19 library = cdll.LoadLibrary(
'%s/system/%s' % (binaries, dll_filename))
21 def log(severity, message):
22 print '[%s] %s' % ((
'INFO',
'WARNING',
'ERROR')[severity], message)
24 clog = CFUNCTYPE(
None, c_int, c_char_p)(log)
26 library.set_logger(clog)
27 skeleton_definitions = open(
'%s/data/tools/collada/skeletons.xml' % binaries).
read()
28 library.set_skeleton_definitions(skeleton_definitions, len(skeleton_definitions))
32 def cb(cbdata, str, len):
33 output.append(string_at(str, len))
35 cbtype = CFUNCTYPE(
None, POINTER(
None), POINTER(c_char), c_uint)
36 status = func(filename, cbtype(cb),
None)
37 assert(status == expected_status)
38 return ''.join(output)
41 return _convert_dae(library.convert_dae_to_pmd, *args, **kwargs)
44 return _convert_dae(library.convert_dae_to_psa, *args, **kwargs)
49 for f
in os.listdir(path):
61 actor = ET.Element(
'actor', version=
'1')
62 ET.SubElement(actor,
'castshadow')
63 group = ET.SubElement(actor,
'group')
64 variant = ET.SubElement(group,
'variant', frequency=
'100', name=
'Base')
65 ET.SubElement(variant,
'mesh').text = mesh+
'.pmd'
66 ET.SubElement(variant,
'texture').text = texture+
'.dds'
68 animations = ET.SubElement(variant,
'animations')
69 for name, file
in anims:
70 ET.SubElement(animations,
'animation', file=file+
'.psa', name=name, speed=
'100')
72 props = ET.SubElement(variant,
'props')
73 for name, file
in props_:
74 ET.SubElement(props,
'prop', actor=file+
'.xml', attachpoint=name)
76 return ET.tostring(actor)
79 actor = ET.Element(
'actor', version=
'1')
80 ET.SubElement(actor,
'castshadow')
81 group = ET.SubElement(actor,
'group')
82 variant = ET.SubElement(group,
'variant', frequency=
'100', name=
'Base')
83 ET.SubElement(variant,
'mesh').text = mesh+
'.pmd'
84 ET.SubElement(variant,
'texture').text = texture+
'.dds'
85 return ET.tostring(actor)
94 convert_dae_to_pmd(
'<COLLADA>This is still not valid COLLADA</COLLADA>', expected_status=-2)
98 test_data = binaries +
'/data/tests/collada'
99 test_mod = binaries +
'/data/mods/_test.collada'
107 for test_file
in [
'xsitest3c',
'xsitest3e',
'jav2d',
'jav2d2']:
110 print "* Converting PMD %s" % (test_file)
112 input_filename =
'%s/%s.dae' % (test_data, test_file)
113 output_filename =
'%s/art/meshes/%s.pmd' % (test_mod, test_file)
115 input = open(input_filename).
read()
117 open(output_filename,
'wb').
write(output)
119 xml =
create_actor(test_file,
'male', [(
'Idle',
'dudeidle'),(
'Corpse',
'dudecorpse'),(
'attack1',test_file),(
'attack2',
'jav2d')], [(
'helmet',
'teapot_basic_static')])
120 open(
'%s/art/actors/%s.xml' % (test_mod, test_file),
'w').
write(xml)
123 open(
'%s/art/actors/%s_static.xml' % (test_mod, test_file),
'w').
write(xml)
126 for test_file
in [
'xsitest3c',
'xsitest3e',
'jav2d',
'jav2d2']:
128 print "* Converting PSA %s" % (test_file)
130 input_filename =
'%s/%s.dae' % (test_data, test_file)
131 output_filename =
'%s/art/animation/%s.psa' % (test_mod, test_file)
133 input = open(input_filename).
read()
135 open(output_filename,
'wb').
write(output)
int read(int fd, void *buf, size_t nbytes)
void write(OutputCB &output, const T &data)
Outputs a structure, using sizeof to get the size.