From bff40e55c9c55fbc8439bb225d1937b2d805e629 Mon Sep 17 00:00:00 2001 From: jbzdarkid Date: Mon, 18 Nov 2019 09:16:16 -0800 Subject: Cleanup & progress on tutorial --- Source/PuzzleSerializer.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Source/PuzzleSerializer.h (limited to 'Source/PuzzleSerializer.h') diff --git a/Source/PuzzleSerializer.h b/Source/PuzzleSerializer.h new file mode 100644 index 0000000..d9b9edd --- /dev/null +++ b/Source/PuzzleSerializer.h @@ -0,0 +1,62 @@ +#pragma once +#include +#include + +#include "Puzzle.h" + +class Memory; + +class PuzzleSerializer { +public: + PuzzleSerializer(const std::shared_ptr& memory); + Puzzle ReadPuzzle(int id); + void WritePuzzle(const Puzzle& p, int id); + +private: + // @Bug: Blue and orange are swapped? + enum Flags { + IS_ENDPOINT = 0x1, + IS_STARTPOINT = 0x2, + HAS_NO_CONN = 0x8, + HAS_DOT = 0x20, + DOT_IS_BLUE = 0x100, + DOT_IS_ORANGE = 0x200, + DOT_IS_INVISIBLE = 0x1000, + HAS_ONE_CONN = 0x100000, + HAS_VERTI_CONN = 0x200000, + HAS_HORIZ_CONN = 0x400000, + }; + + void ReadIntersections(Puzzle& p); + void ReadExtras(Puzzle& p); + void ReadDecorations(Puzzle& p, int id); + void ReadSequence(Puzzle& p, int id); + + void WriteIntersections(const Puzzle& p); + void WriteDots(const Puzzle& p); + void WriteGaps(const Puzzle& p); + void WriteEndpoints(const Puzzle& p); + void WriteDecorations(const Puzzle& p, int id); + void WriteSequence(const Puzzle& p, int id); + + std::tuple loc_to_xy(const Puzzle& p, int location) const; + int xy_to_loc(const Puzzle& p, int x, int y) const; + // Decoration location + std::tuple dloc_to_xy(const Puzzle& p, int location) const; + int xy_to_dloc(const Puzzle& p, int x, int y) const; + // Grid coordinates + std::tuple xy_to_pos(const Puzzle& p, int x, int y) const; + Cell::Dot FlagsToDot(int flags) const; + // Iterate connection lists for another location which is connected to us; return that other location. + int FindConnection(int location) const; + + std::shared_ptr _memory; + + std::vector _intersectionLocations; + std::vector _intersectionFlags; + std::vector _connectionsA; + std::vector _connectionsB; + std::vector> _endpointLocations; + + float MIN, MAX, WIDTH_INTERVAL, HEIGHT_INTERVAL, HORIZ_GAP_SIZE, VERTI_GAP_SIZE; +}; -- cgit 1.4.1