def write(self, stream, resource=None): s = StreamWriter(stream) s.u32(self.ID) s.u32(0) clip_stream = BytesIO() self.clip.write(clip_stream) s.u32(clip_stream.tell()) clip_stream.seek(0, SEEK_SET) clip_ptr = StreamPtr.begin_write(s, True) ik_ptr = StreamPtr.begin_write(s, True) actor_ptr = StreamPtr.begin_write(s, True) event_ptr = StreamPtr.begin_write(s, True) s.u32(self.unknown1) s.u32(self.unknown2) vector_ptr = StreamPtr.begin_write(s, True) for i in range(16): s.u8(self.unknown3[i]) clip_ptr.end() stream.write(clip_stream.read()) s.align(char=self.PADDING_CHAR) if self.ik_info != None: ik_ptr.end() self.ik_info.write(stream) s.align(char=self.PADDING_CHAR) actor_ptr.end() s.zs(self.actor_name) s.align(char=self.PADDING_CHAR) event_ptr.end() self.event_table.write(stream) s.align(char=self.PADDING_CHAR) vector_ptr.end() for i in range(4): s.f32(self.vector[i])
def write(self, stream, resource=None): s = StreamWriter(stream) s.u32(self.ID) s.u32(0) clip_stream = BytesIO() self.clip.write(clip_stream) s.u32(clip_stream.tell()) clip_stream.seek(0, SEEK_SET) clip_ptr = StreamPtr.begin_write(s, True) ik_ptr = StreamPtr.begin_write(s, True) actor_ptr = StreamPtr.begin_write(s, True) event_ptr = StreamPtr.begin_write(s, True) s.u32(self.unknown1) s.u32(self.unknown2) vector_ptr = StreamPtr.begin_write(s, True) for i in range(16): s.u8(self.unknown3[i]) clip_ptr.end() stream.write(clip_stream.read()) s.align(char=self.PADDING_CHAR) if self.ik_info is not None: ik_ptr.end() self.ik_info.write(stream) s.align(char=self.PADDING_CHAR) actor_ptr.end() s.zs(self.actor_name) s.align(char=self.PADDING_CHAR) event_ptr.end() self.event_table.write(stream) s.align(char=self.PADDING_CHAR) vector_ptr.end() for i in range(4): s.f32(self.vector[i])
def write(self, stream, resources=None): s = StreamWriter(stream) indexedFloats = [] curves = [] curveMap = {} for t in self.tracks: assert isinstance(t, Track) for curve in t: assert isinstance(curve, Curve) if len(curve.frames) > self.max_frame_count: self.max_frame_count = len(curve.frames) + 1 cdi = CurveDataInfo() curve.flags.static = len(curve.frames) == 0 cdi.frame_count = len(curve.frames) cdi.process_frames(curve.frames) cdi.flags = curve.flags cdi.type = curve.type cdi.track_key = t.track_key curveMap[cdi] = curve.frames curves.append(cdi) cCurves = len(curves) cFloats = len(indexedFloats) #Begin writing... s.chars('_pilC3S_') s.u32(self.version) s.u32(self.unknown1) s.f32(self.frame_duration) s.u16(self.max_frame_count) s.u16(self.unknown2) s.u32(cCurves) s.u32(cFloats) curveOffset = StreamPtr.begin_write(s) frameOffset = StreamPtr.begin_write(s) nameOffset = StreamPtr.begin_write(s) srcNameOffset = StreamPtr.begin_write(s) curveOffset.end() for curve in curves: curve.write(stream) nameOffset.end() s.zs(self.name) srcNameOffset.end() s.zs(self.source_file_name) frameOffset.end() for curve in curves: curve.frame_data_ptr.end() frames = curveMap[curve] for f in frames: f.write(stream, curve, indexedFloats) return self
def write(self, stream, resources=None): s = StreamWriter(stream) indexedFloats = [] curves = [] curveMap = {} for t in self.tracks: assert isinstance(t,Track) for curve in t: assert isinstance(curve,Curve) if len(curve.frames) > self.max_frame_count: self.max_frame_count = len(curve.frames) + 1 cdi = CurveDataInfo() curve.flags.static = len(curve.frames) == 0 cdi.frame_count = len(curve.frames) cdi.process_frames(curve.frames) cdi.flags = curve.flags cdi.type = curve.type cdi.track_key = t.track_key curveMap[cdi] = curve.frames curves.append(cdi) cCurves = len(curves) cFloats = len(indexedFloats) #Begin writing... s.chars('_pilC3S_') s.u32(self.version) s.u32(self.unknown1) s.f32(self.frame_duration) s.u16(self.max_frame_count) s.u16(self.unknown2) s.u32(cCurves) s.u32(cFloats) curveOffset = StreamPtr.begin_write(s) frameOffset = StreamPtr.begin_write(s) nameOffset = StreamPtr.begin_write(s) srcNameOffset = StreamPtr.begin_write(s) curveOffset.end() for curve in curves: curve.write(stream) nameOffset.end() s.zs(self.name) srcNameOffset.end() s.zs(self.source_file_name) frameOffset.end() for curve in curves: curve.frame_data_ptr.end() frames = curveMap[curve] for f in frames: f.write(stream, curve, indexedFloats) return self
def write(self, stream, resource=None): s = StreamWriter(stream) self.frame_data_ptr = StreamPtr.begin_write(s) s.u32(self.track_key) s.f32(self.offset) s.f32(self.scale) s.u16(self.frame_count) self.flags.write(stream) s.u8(self.type) return self
def write(self, stream, resource=None): s = StreamWriter(stream) self.frame_data_ptr = StreamPtr.begin_write(s) s.u32(self.track_key) s.f32(self.offset) s.f32(self.scale) s.u16(self.frame_count) self.flags.write(stream) s.u8(self.type) return self
def write_presets(cls, stream,presets, resources): s = StreamWriter(stream) s.i32(len(presets)) ce = ComplateEncoder() for preset in presets: assert isinstance(preset,cls.BuildBuyPreset) s.i8(preset.unk1) if preset.unk1 != 1: s.i32(preset.unk2) preset_ptr = StreamPtr.begin_write(s) ce.serialize(preset.complate,stream,resources) preset_ptr.end() s.u32(preset.id)
def write_pointer(self, stream): self.size32 = 1 t = type(self.value) if isinstance(self.value, list): self.size32 = len(self.value) t = type(self.value[0]) if t == float: self.type_code = self.TYPE.FLOAT elif t == int: self.type_code = self.TYPE.INT elif t == ExternalResource: self.type_code = self.TYPE.TEXTURE elif t == ResourceKey: self.size32 = 4 self.type_code = self.TYPE.TEXTURE else: raise NotImplementedError("Serialization of type %s is not supported in this format!" % t) s = StreamWriter(stream) s.hash(self.name) s.u32(self.type_code) s.u32(self.size32) self.pointer = StreamPtr.begin_write(s)
def write_pointer(self, stream): self.size32 = 1 t = type(self.value) if isinstance(self.value, list): self.size32 = len(self.value) t = type(self.value[0]) if t == float: self.type_code = self.TYPE.FLOAT elif t == int: self.type_code = self.TYPE.INT elif t == ExternalResource: self.type_code = self.TYPE.TEXTURE elif t == ResourceKey: self.size32 = 4 self.type_code = self.TYPE.TEXTURE else: raise NotImplementedError( "Serialization of type %s is not supported in this format!" % t) s = StreamWriter(stream) s.hash(self.name) s.u32(self.type_code) s.u32(self.size32) self.pointer = StreamPtr.begin_write(s)