示例#1
0
文件: __init__.py 项目: garthand/s3py
 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])
示例#2
0
 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])
示例#3
0
文件: __init__.py 项目: garthand/s3py
    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
示例#4
0
    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
示例#5
0
 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
示例#6
0
文件: __init__.py 项目: garthand/s3py
 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
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
 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)