Es geht weiter!

Nach fast einem Jahr Pause geht es nun weiter mit dem Projekt OctoAwesome! Das NoobDevTv-Team versucht wieder regelmäßig Donnerstags um 19 Uhr einen OctoAwesome-Stream auf den Streaming-Kanäle von NoobDevTv: Twitch, Youtube und Mixer. zu veranstalten! Die neu produzierten Folgen der nun dritten Staffel werden ab jetzt auf deren Youtube-Kanal veröffentlicht.

Chunk Serializer: Unterschied zwischen den Versionen

Aus OctoAwesome Wiki
Wechseln zu: Navigation, Suche
(Aus Technischer Dokumentation Herverschoben. Artikel ist ausbaufähig)
 
Zeile 1: Zeile 1:
[[Kategorie:Seitenindex]][[Kategorie:OctoAwesome.Runtime]]
+
[[Kategorie:Seitenindex]][[Kategorie:OctoAwesome.Runtime]][[Kategorie:Dokumentation]]
{{Überarbeiten}} [[Kategorie:Überarbeiten]]
+
Zur Chunk-Serialisierung wird ein eigenes, selbst entwickeltes und speziell auf unsere Anforderungen optimiertes Dateiformat verwendet. '''Der Chunk-Serializer''' schreibt die daten binär mit Hilfe des BinaryWriters in die .chunk-Datei. Wie der Name schon sagt, wird jeweils nur ein Chunk auf einmal serialisiert. Der Speicherverbrauch einer Chunkdatei beträgt ~33KB.
'''Der Chunk-Serializer''' schreibt die daten binär mit Hilfe des BinaryWriters in die .chunk-Datei.
 
  
= Schreibreihenfolge =
+
== Header ==
Folgende Informationen werden in dieser Reihenfolge geschrieben:
+
Im Header wird dem Programm mitgeteilt, welche Blocktypen auf dem Chunk verwendet werden. Zuerst wird ein Flag als byte geschrieben, was angibt ob mehr (1) oder weniger (0) als 255 Blocktypen verwendet werden. Heute immer 0 (mangels Angebot an Plugins). Danach wird die eigentliche Anzahl der Blocktypen entweder als byte (<255 Blocktypen) oder als ushort (>255 Blocktypen) geschrieben. Anschließend werden die Namen der Blocktypen als string geschrieben (z.B. OctoAwesome.Basics.GrassBlockDefinition).
  
{| class="wikitable"
+
== Daten ==
| '''Information'''
+
Jetzt werden die eigentlichen Daten der Blöcke als lineares Array geschrieben: Zuerst der Index der BlockDefinition (Typumstellung genauso bei 255 Blocktypen, siehe oben). Blocktyp 0 ist ein leerer Luftblock. Dann folgt ein int mit beliebigen Metadaten, falls der Blocktyp dies mit BlockDefinition.HasMetadata anfordert.
| '''Datentyp'''
 
| '''Häufigkeit'''
 
| '''Beschreibung/Anmerkungen'''
 
|-
 
| Typ der Typanzahl
 
| byte
 
| Einmal
 
| Gibt an, ob die Anzahl der Blocktypen als byte (0) oder ushort (1) geschrieben werden.
 
|-
 
| Anzahl der Blocktypen
 
| byte/ushort
 
| Einmal
 
| Gibt an, wie viele unterschiedliche Blocktypen in diesem Chunk verwendet werden. Bei weniger als 255 Typen als byte.
 
|-
 
| Voller Name der Blocktypen
 
| string
 
| pro Blocktyp
 
| z.B. OctoAwesome.Basics.GrassBlockDefinition
 
|-
 
| Typindex des Blocks
 
| byte/ushort
 
| pro Block
 
| Bei weniger als 255 Typen als byte. Typ 0 ist Luft.
 
|-
 
| Metadaten
 
| int
 
| pro Block
 
| Nur wenn Blocktyp Metadaten speichert (BlockDefinition.HasMetadata)
 
|}
 
  
[https://github.com/tomwendel/octoawesome/blob/master/OctoAwesome/OctoAwesome.Runtime/ChunkSerializer.cs Zur Implementierung (GitHub)]
+
== Links ==
 +
[https://github.com/tomwendel/octoawesome/blob/master/OctoAwesome/OctoAwesome.Runtime/ChunkSerializer.cs Die Implementierung auf GitHub]

Version vom 14. Januar 2016, 20:23 Uhr

Zur Chunk-Serialisierung wird ein eigenes, selbst entwickeltes und speziell auf unsere Anforderungen optimiertes Dateiformat verwendet. Der Chunk-Serializer schreibt die daten binär mit Hilfe des BinaryWriters in die .chunk-Datei. Wie der Name schon sagt, wird jeweils nur ein Chunk auf einmal serialisiert. Der Speicherverbrauch einer Chunkdatei beträgt ~33KB.

Header

Im Header wird dem Programm mitgeteilt, welche Blocktypen auf dem Chunk verwendet werden. Zuerst wird ein Flag als byte geschrieben, was angibt ob mehr (1) oder weniger (0) als 255 Blocktypen verwendet werden. Heute immer 0 (mangels Angebot an Plugins). Danach wird die eigentliche Anzahl der Blocktypen entweder als byte (<255 Blocktypen) oder als ushort (>255 Blocktypen) geschrieben. Anschließend werden die Namen der Blocktypen als string geschrieben (z.B. OctoAwesome.Basics.GrassBlockDefinition).

Daten

Jetzt werden die eigentlichen Daten der Blöcke als lineares Array geschrieben: Zuerst der Index der BlockDefinition (Typumstellung genauso bei 255 Blocktypen, siehe oben). Blocktyp 0 ist ein leerer Luftblock. Dann folgt ein int mit beliebigen Metadaten, falls der Blocktyp dies mit BlockDefinition.HasMetadata anfordert.

Links

Die Implementierung auf GitHub