Added libarchive support to Dawn.

This commit is contained in:
2023-10-09 13:16:52 -05:00
parent 0692b2b6d1
commit 4dd4cb045c
38 changed files with 567 additions and 158 deletions

View File

@ -19,22 +19,20 @@ void LanguageAsset::updateSync() {
}
void LanguageAsset::updateAsync() {
assertTrue(this->state == 0x00, "LanguageAsset::updateAsync: State must be 0x00");
assertTrue(
this->state == LANGUAGE_ASSET_LOAD_STATE_NOT_LOADING,
"LanguageAsset::updateAsync: State must be NOT_LOADING"
);
// Open Asset
this->state = 0x01;
this->state = LANGUAGE_ASSET_LOAD_STATE_OPENING;
this->loader.open();
// Get Length
this->state = 0x02;
this->loader.end();
this->state = 0x03;
size_t len = this->loader.getPosition();
this->state = 0x04;
this->loader.rewind();
size_t len = this->loader.getSize();
// Create buffer
this->state = 0x05;
this->state = LANGUAGE_ASSET_LOAD_STATE_CREATING_BUFFER;
size_t position = 0;
// Loop over CSV
@ -55,23 +53,22 @@ void LanguageAsset::updateAsync() {
// Prepare for next string.
position = position + (size_t)(valueEnd - buffer + 1);
this->loader.rewind();
this->loader.skip(position);
this->loader.setPosition(position);
// Store strings.
std::string key((char *)keyStart);
this->values[key] = value;
}
this->state = 0x06;
this->loader.rewind();
this->state = 0x07;
this->state = LANGUAGE_ASSET_LOAD_STATE_READY_TO_READ;
this->loaded = true;
}
std::string LanguageAsset::getValue(std::string key) {
assertTrue(this->state == 0x07, "LanguageAsset::getValue: State must be 0x07");
assertTrue(
this->state == LANGUAGE_ASSET_LOAD_STATE_READY_TO_READ,
"LanguageAsset::getValue: State must be LANGUAGE_ASSET_LOAD_STATE_READY_TO_READ"
);
assertMapHasKey(this->values, key, "LanguageAsset::getValue: Key does not exist");
assertTrue(this->values[key].begin >= 0 && this->values[key].length > 0, "LanguageAsset::getValue: Value is invalid");

View File

@ -13,10 +13,17 @@ namespace Dawn {
size_t length;
};
enum LangageAssetLoadState {
LANGUAGE_ASSET_LOAD_STATE_NOT_LOADING,
LANGUAGE_ASSET_LOAD_STATE_OPENING,
LANGUAGE_ASSET_LOAD_STATE_CREATING_BUFFER,
LANGUAGE_ASSET_LOAD_STATE_READY_TO_READ
};
class LanguageAsset : public Asset {
protected:
AssetLoader loader;
uint8_t state = 0x00;
enum LangageAssetLoadState state = LANGUAGE_ASSET_LOAD_STATE_NOT_LOADING;
std::map<std::string, struct AssetLanguageValue> values;
uint8_t buffer[1024];

View File

@ -37,7 +37,11 @@ void TextureAsset::updateSync() {
void TextureAsset::updateAsync() {
if(this->state != 0x00) return;
this->state = 0x01;
this->loader.loadRaw(&this->buffer);
std::cout << "Update texture tool" << std::endl;
this->loader.open();
this->buffer = (uint8_t*)memoryAllocate(this->loader.getSize());
this->loader.read(this->buffer, this->loader.getSize());
this->loader.close();
this->state = 0x02;
// Parse header data.

View File

@ -19,11 +19,13 @@ void TilesetAsset::updateSync() {
}
void TilesetAsset::updateAsync() {
uint8_t *buffer;
assertTrue(this->state == 0x00, "TilesetAsset::updateAsync: Initial state should be 0x00");
this->state = 0x01;
this->loader.loadRaw(&buffer);
this->loader.open();
uint8_t *buffer = (uint8_t*)memoryAllocate(this->loader.getSize());
this->loader.read(buffer, this->loader.getSize());
this->loader.close();
this->state = 0x02;
char *strCurrent = (char *)buffer;

View File

@ -103,7 +103,6 @@ void TrueTypeAsset::updateAsync() {
struct TrueTypeAssetStyle style;
// Buffer
this->loader.rewind();
this->loader.setPosition(styleListBegin);
read = this->loader.read(buffer, 32);
assertTrue(read == 32, "TrueTypeAsset::updateAsync: Could not read variant");
@ -116,7 +115,6 @@ void TrueTypeAsset::updateAsync() {
styleListBegin += i + 1;
// Buffer
this->loader.rewind();
this->loader.setPosition(styleListBegin);
read = this->loader.read(buffer, 32);
assertTrue(read == 32, "TrueTypeAsset::updateAsync: Could not read variant style");