Example #1
0
 def read_object(self,
                 expected_type_reader=None,
                 type_params=None,
                 expected_type=None):
     type_id = self.read_7bit_encoded_int()
     if type_id == 0:
         # null object
         return None
     try:
         type_reader = self.type_readers[type_id - 1]
     except IndexError:
         raise ReaderError("type id out of range: {} > {}".format(
             type_id, len(self.type_readers)))
     if expected_type_reader is not None:
         try:
             if expected_type_reader.is_generic_type and expected_type_reader.target_type is None:
                 expected_type = generic_reader_type(
                     expected_type_reader, type_params)
             elif expected_type_reader.is_enum_type:
                 expected_type = generic_reader_type(
                     EnumReader, [expected_type_reader.target_type])
             else:
                 expected_type = expected_type_reader.target_type
         except AttributeError:
             raise ReaderError("bad expected_type_reader: '{}'".format(
                 expected_type_reader))
     if expected_type is not None:
         if type_reader.target_type != expected_type:
             raise ReaderError("Unexpected type: '{}' != '{}'".format(
                 type_reader.target_type, expected_type))
     return type_reader.read()
Example #2
0
 def read(self):
     if self.file_platform == PLATFORM_WINDOWS:
         name = self.stream.read_string()
         cubemap = self.stream.read_object(Texture2DReader)
         size = self.stream.read_vector3()
         geometry = self.stream.read_object(
             ShaderInstancedIndexedPrimitivesReader,
             [VertexPositionNormalTextureInstanceReader, MatrixReader])
         actor_type = self.stream.read_object(ActorTypeReader)
         no_silhouette = self.stream.read_boolean()
         return ArtObjectPC(name, cubemap, size, geometry, actor_type,
                            no_silhouette)
     else:
         name = self.stream.read_string()
         cubemap_path = self.stream.read_string()
         size = self.stream.read_vector3()
         geometry = self.stream.read_object(
             ShaderInstancedIndexedPrimitivesReader,
             [VertexPositionNormalTextureInstanceReader, MatrixReader])
         actor_type = self.stream.read_object(ActorTypeReader)
         no_silhouette = self.stream.read_boolean()
         laser_outlets = self.stream.read_object(
             ReflectiveReader,
             [generic_reader_type(SetReader, [FaceOrientationReader])])
         return ArtObject(name, cubemap_path, size, geometry, actor_type,
                          no_silhouette, laser_outlets)
Example #3
0
 def read_object(self,
                 expected_type_reader=None,
                 type_params=None,
                 expected_type=None):
     type_id = self.read_7bit_encoded_int()
     if type_id == 0:
         # null object
         return None
     try:
         type_reader = self.type_readers[type_id - 1]
     except IndexError:
         raise ReaderError("type id out of range: {} > {}".format(
             type_id, len(self.type_readers)))
     if expected_type_reader is not None:
         try:
             if expected_type_reader.is_generic_type and expected_type_reader.target_type is None:
                 expected_type = generic_reader_type(
                     expected_type_reader, type_params)
             elif expected_type_reader.is_enum_type:
                 expected_type = generic_reader_type(
                     EnumReader, [expected_type_reader.target_type])
             else:
                 expected_type = expected_type_reader.target_type
         except AttributeError:
             raise ReaderError("bad expected_type_reader: '{}'".format(
                 expected_type_reader))
     if expected_type is not None:
         if expected_type != 'System.Object':
             if type_reader.target_type != expected_type:
                 # check parent type readers
                 for cls in type_reader.__class__.__mro__:
                     if hasattr(cls, 'target_type'):
                         if cls.target_type == expected_type:
                             break
                 else:
                     raise ReaderError(
                         "Unexpected type: '{}' != '{}'".format(
                             type_reader.target_type, expected_type))
     return type_reader.read()
Example #4
0
 def read_object(self, expected_type_reader=None, type_params=None, expected_type=None):
     type_id = self.read_7bit_encoded_int()
     if type_id == 0:
         # null object
         return None
     try:
         type_reader = self.type_readers[type_id - 1]
     except IndexError:
         raise ReaderError("type id out of range: {} > {}".format(type_id, len(self.type_readers)))
     if expected_type_reader is not None:
         try:
             if expected_type_reader.is_generic_type and expected_type_reader.target_type is None:
                 expected_type = generic_reader_type(expected_type_reader, type_params)
             elif expected_type_reader.is_enum_type:
                 expected_type = generic_reader_type(EnumReader, [expected_type_reader.target_type])
             else:
                 expected_type = expected_type_reader.target_type
         except AttributeError:
             raise ReaderError("bad expected_type_reader: '{}'".format(expected_type_reader))
     if expected_type is not None:
         if type_reader.target_type != expected_type:
             raise ReaderError("Unexpected type: '{}' != '{}'".format(type_reader.target_type, expected_type))
     return type_reader.read()
Example #5
0
 def read(self):
     if self.file_platform == PLATFORM_WINDOWS:
         name = self.stream.read_string()
         cubemap = self.stream.read_object(Texture2DReader)
         size = self.stream.read_vector3()
         geometry = self.stream.read_object(ShaderInstancedIndexedPrimitivesReader,
                                            [VertexPositionNormalTextureInstanceReader, MatrixReader])
         actor_type = self.stream.read_object(ActorTypeReader)
         no_silhouette = self.stream.read_boolean()
         return ArtObjectPC(name, cubemap, size, geometry, actor_type, no_silhouette)
     else:
         name = self.stream.read_string()
         cubemap_path = self.stream.read_string()
         size = self.stream.read_vector3()
         geometry = self.stream.read_object(ShaderInstancedIndexedPrimitivesReader,
                                            [VertexPositionNormalTextureInstanceReader, MatrixReader])
         actor_type = self.stream.read_object(ActorTypeReader)
         no_silhouette = self.stream.read_boolean()
         laser_outlets = self.stream.read_object(ReflectiveReader, [generic_reader_type(SetReader,
                                                                                        [FaceOrientationReader])])
         return ArtObject(name, cubemap_path, size, geometry, actor_type, no_silhouette, laser_outlets)