Ładowanie poziomu, "cofka" binary readera

0

Witam, mam taki format poziomu do swojej gry:

LEVEL FORMAT:

LevelHeader
LevelGoal
LevelObject
LevelObject
(...)
string: "------!FINISHBLOCK!------"
(if dialogs are present) string: "------!BEGINDIALOGBLOCK!------"
DialogPart
DialogPart
(...)
string: "------!FINISHBLOCK!------"

LevelHeader, LevelGoal, itd. są structami. Zapis wiem jak zrobić, gorzej będzie z odczytem. Otóż jak widzicie, poszczególne części pliku poziomu są rozdzielone delimiterami będącymi stringami (dla wygody - dzięki temu w razie SNAFU mogę szybko podejrzeć w hexedicie i wiedzieć gdzie się bloki zaczynają i kończą).

Dlatego też, po każdym odczycie LevelObject czy DialogPart muszę patrzeć czy jak odczytam stringa to nie będzie on czasem równał się "------!FINISHBLOCK!------" a jesli tak to odczytać kolejnego stringa żebym wiedział jaki blok jest następny (oprócz pierwszego bloku z obiektami poziomu wszystkie inne mogą występować w dowolnej kolejności a format jest zaprojektowany aby można go było rozszerzać bez utraty kompatybilności).

Niestety jak pewnie wiecie, odczyt stringa powoduje przesunięcie "wskaźnika" pliku i teraz jak go przesunąć z powrotem w razie gdyby to jednak nie był "------!FINISHBLOCK!------", tylko losowe dane (wskazujące na to że dalej jest kolejny LevelObject czy DialogPart)?

Odczyt/zapis pliku będzie się odbywać przy pomocy BinaryReader/BinaryWriter.

0

Nie możesz tego zrobić sensownie i dodać słowa kluczowe "begin" i "end" bądź klamerki?
Plus tokenizer i problem znika.

0

Najlepiej gdybyś miał poziom w jakiejś klasie, a potem tylko serializował/deserializował obiekty.

0

@Hrypa, no właśnie nie najlepiej, bo jak będę musiał zmienić format to poziomy przestaną się ładować. Celowo to zrobiłem, żeby format dało się rozszerzać bez utraty kompatybilności ze starszymi/nowszymi wersjami gry. By mi dali popalić na Workshopie jak by się poziomy graczy przestały ładować!

@Patryk27 Tokenizer? Pierwsze słyszę. Będę musiał obczaić, masz linki do jakiś tutków?

0

Jakichś°
Nie mam, ale raczej pisanie czegoś tak trywialnego z tutoriala byłoby drobnym faux pas. Poczytaj na jakiej zasadzie to działa i napisz sam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1