How to use the ursina.internal_models.blend_importer.DNA_IO function in ursina

To help you get started, we’ve selected a few ursina examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def read_short(handle, fileheader):
        st = DNA_IO.SSHORT[fileheader.endian_index]
        return st.unpack(handle.read(st.size))[0]
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
offset += 4

        print("building #%d names" % names_len)
        for i in range(names_len):
            tName = DNA_IO.read_data0_offset(data, offset)
            offset = offset + len(tName) + 1
            names.append(DNAName(tName))
        del names_len

        offset = pad_up_4(offset)
        offset += 4
        types_len = intstruct.unpack_from(data, offset)[0]
        offset += 4
        print("building #%d types" % types_len)
        for i in range(types_len):
            dna_type_id = DNA_IO.read_data0_offset(data, offset)
            # None will be replaced by the DNAStruct, below
            types.append(DNAStruct(dna_type_id))
            offset += len(dna_type_id) + 1

        offset = pad_up_4(offset)
        offset += 4
        print("building #%d type-lengths" % types_len)
        for i in range(types_len):
            tLen = shortstruct.unpack_from(data, offset)[0]
            offset = offset + 2
            types[i].size = tLen
        del types_len

        offset = pad_up_4(offset)
        offset += 4
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def field_set(self, header, handle, path, value):
        assert(type(path) == bytes)

        field = self.field_from_path(header, handle, path)
        if field is None:
            raise KeyError("%r not found in %r" %
                    (path, [f.dna_name.name_only for f in self.fields]))

        dna_type = field.dna_type
        dna_name = field.dna_name

        if dna_type.dna_type_id == b'char':
            if type(value) is str:
                return DNA_IO.write_string(handle, value, dna_name.array_size)
            else:
                return DNA_IO.write_bytes(handle, value, dna_name.array_size)
        else:
            raise NotImplementedError("Setting %r is not yet supported for %r" %
                                      (dna_type, dna_name), dna_name, dna_type)
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
elif dna_type.dna_type_id == b'int':
            if dna_name.array_size > 1:
                return [DNA_IO.read_int(handle, header) for i in range(dna_name.array_size)]
            return DNA_IO.read_int(handle, header)
        elif dna_type.dna_type_id == b'short':
            if dna_name.array_size > 1:
                return [DNA_IO.read_short(handle, header) for i in range(dna_name.array_size)]
            return DNA_IO.read_short(handle, header)
        elif dna_type.dna_type_id == b'uint64_t':
            if dna_name.array_size > 1:
                return [DNA_IO.read_ulong(handle, header) for i in range(dna_name.array_size)]
            return DNA_IO.read_ulong(handle, header)
        elif dna_type.dna_type_id == b'float':
            if dna_name.array_size > 1:
                return [DNA_IO.read_float(handle, header) for i in range(dna_name.array_size)]
            return DNA_IO.read_float(handle, header)
        elif dna_type.dna_type_id == b'char':
            if dna_size == 1:
                # Single char, assume it's bitflag or int value, and not a string/bytes data...
                return DNA_IO.read_char(handle, header)
            if use_str:
                if use_nil:
                    return DNA_IO.read_string0(handle, dna_name.array_size)
                else:
                    return DNA_IO.read_string(handle, dna_name.array_size)
            else:
                if use_nil:
                    return DNA_IO.read_bytes0(handle, dna_name.array_size)
                else:
                    return DNA_IO.read_bytes(handle, dna_name.array_size)
        else:
            raise NotImplementedError("%r exists but isn't pointer, can't resolve field %r" %
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def read_string(handle, length):
        return DNA_IO.read_bytes(handle, length).decode('utf-8')
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def read_char(handle, fileheader):
        st = DNA_IO.UCHAR[fileheader.endian_index]
        return st.unpack(handle.read(st.size))[0]
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
if dna_name.array_size > 1:
                return [DNA_IO.read_ulong(handle, header) for i in range(dna_name.array_size)]
            return DNA_IO.read_ulong(handle, header)
        elif dna_type.dna_type_id == b'float':
            if dna_name.array_size > 1:
                return [DNA_IO.read_float(handle, header) for i in range(dna_name.array_size)]
            return DNA_IO.read_float(handle, header)
        elif dna_type.dna_type_id == b'char':
            if dna_size == 1:
                # Single char, assume it's bitflag or int value, and not a string/bytes data...
                return DNA_IO.read_char(handle, header)
            if use_str:
                if use_nil:
                    return DNA_IO.read_string0(handle, dna_name.array_size)
                else:
                    return DNA_IO.read_string(handle, dna_name.array_size)
            else:
                if use_nil:
                    return DNA_IO.read_bytes0(handle, dna_name.array_size)
                else:
                    return DNA_IO.read_bytes(handle, dna_name.array_size)
        else:
            raise NotImplementedError("%r exists but isn't pointer, can't resolve field %r" %
                    (path, dna_name.name_only), dna_name, dna_type)
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def read_int(handle, fileheader):
        st = DNA_IO.SINT[fileheader.endian_index]
        return st.unpack(handle.read(st.size))[0]
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def decode_structs(header, block, handle):
        """
        DNACatalog is a catalog of all information in the DNA1 file-block
        """
        print("building DNA catalog")
        shortstruct = DNA_IO.USHORT[header.endian_index]
        shortstruct2 = struct.Struct(header.endian_str + b'HH')
        intstruct = DNA_IO.UINT[header.endian_index]

        data = handle.read(block.size)
        types = []
        names = []

        structs = []
        sdna_index_from_id = {}

        offset = 8
        names_len = intstruct.unpack_from(data, offset)[0]
        offset += 4

        print("building #%d names" % names_len)
        for i in range(names_len):
github pokepetter / ursina / ursina / internal_models / blend_importer.py View on Github external
def read_string0(handle, length):
        return DNA_IO.read_bytes0(handle, length).decode('utf-8')