From c6d3e5390f1d037ad5c5658052367f95a1c4c46d Mon Sep 17 00:00:00 2001
From: Dominic Masters <dominic@domsplace.com>
Date: Fri, 9 Jun 2023 09:04:38 -0700
Subject: [PATCH] Font loading progress

---
 src/dawn/asset/assets/NewTrueTypeAsset.cpp | 73 ++++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 src/dawn/asset/assets/NewTrueTypeAsset.cpp

diff --git a/src/dawn/asset/assets/NewTrueTypeAsset.cpp b/src/dawn/asset/assets/NewTrueTypeAsset.cpp
new file mode 100644
index 00000000..0800c8e2
--- /dev/null
+++ b/src/dawn/asset/assets/NewTrueTypeAsset.cpp
@@ -0,0 +1,73 @@
+// Copyright (c) 2023 Dominic Masters
+// 
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "NewTrueTypeAsset.hpp"
+
+using namespace Dawn;
+
+NewTrueTypeAsset::NewTrueTypeAsset(AssetManager *assMan, std::string name) :
+  Asset(assMan, name),
+  loader(name + ".newtruetype")
+{
+
+}
+
+void NewTrueTypeAsset::updateSync() {
+
+}
+
+void NewTrueTypeAsset::updateAsync() {
+  if(this->state != NEW_TRUE_TYPE_ASSET_STATE_INITIAL) return;
+
+
+  this->state = NEW_TRUE_TYPE_ASSET_STATE_OPEN;
+  this->loader.open();
+
+  this->state = NEW_TRUE_TYPE_ASSET_STATE_VALIDATE_HEADER;
+
+  char buffer[1024];
+  this->loader.rewind();
+  size_t read = this->loader.read(buffer, sizeof(char) * 6);
+  assertTrue(read == (6 * sizeof(char)));
+  buffer[6] = '\0';
+
+  // Confirm "DE_TTF"
+  assertTrue(std::string(buffer) == "DE_TTF");
+
+  // Vertical bar
+  this->loader.read(buffer, 1);
+  assertTrue(buffer[0] == '|');
+
+  // Read version
+  this->state = NEW_TRUE_TYPE_ASSET_STATE_VALIDATE_VERSION;
+  read = this->loader.read(buffer, sizeof(char) * 5);
+  assertTrue(buffer[0] == '3');
+  assertTrue(buffer[1] == '.');
+  assertTrue(buffer[2] == '0');
+  assertTrue(buffer[3] == '0');
+  assertTrue(buffer[4] == '|');
+
+  // Read the count of font styles / variants.
+  this->state = NEW_TRUE_TYPE_ASSET_STATE_READ_VARIANT_COUNT;
+  read = this->loader.read(buffer, 64);
+  assertTrue(read > 0);
+
+  // Get position of vertical bar.
+  size_t i = 0;
+  while(buffer[i] != '|' && i < 64) i++;
+  assertTrue(buffer[i] == '|');
+  buffer[i] = '\0';
+
+  int32_t count = atoi(buffer);
+  assertTrue(count > 0);
+
+  // Now begin parsing each font style
+  while(true) {
+    
+  }
+}
+
+NewTrueTypeAsset::~NewTrueTypeAsset() {
+}
\ No newline at end of file