diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/Memory.h | 4 | ||||
-rw-r--r-- | Source/Panel.cpp | 16 | ||||
-rw-r--r-- | Source/Panel.h | 21 |
3 files changed, 31 insertions, 10 deletions
diff --git a/Source/Memory.h b/Source/Memory.h index e7f8ff3..d14d58d 100644 --- a/Source/Memory.h +++ b/Source/Memory.h | |||
@@ -3,8 +3,8 @@ | |||
3 | #include <map> | 3 | #include <map> |
4 | #include <windows.h> | 4 | #include <windows.h> |
5 | 5 | ||
6 | // #define GLOBALS 0x5B28C0 | 6 | #define GLOBALS 0x5B28C0 |
7 | #define GLOBALS 0x62A080 | 7 | // #define GLOBALS 0x62A080 |
8 | 8 | ||
9 | // https://github.com/erayarslan/WriteProcessMemory-Example | 9 | // https://github.com/erayarslan/WriteProcessMemory-Example |
10 | // http://stackoverflow.com/q/32798185 | 10 | // http://stackoverflow.com/q/32798185 |
diff --git a/Source/Panel.cpp b/Source/Panel.cpp index 8642461..b6aa504 100644 --- a/Source/Panel.cpp +++ b/Source/Panel.cpp | |||
@@ -22,6 +22,9 @@ Panel::Panel(int id) { | |||
22 | ReadDecorations(id); | 22 | ReadDecorations(id); |
23 | } | 23 | } |
24 | 24 | ||
25 | // For testing | ||
26 | Panel::Panel() {} | ||
27 | |||
25 | void Panel::Write(int id) { | 28 | void Panel::Write(int id) { |
26 | WriteIntersections(id); | 29 | WriteIntersections(id); |
27 | WriteDecorations(id); | 30 | WriteDecorations(id); |
@@ -147,8 +150,7 @@ void Panel::ReadIntersections(int id) { | |||
147 | } else { | 150 | } else { |
148 | dir = Endpoint::Direction::DOWN; | 151 | dir = Endpoint::Direction::DOWN; |
149 | } | 152 | } |
150 | int x = 2 * (location % ((_width + 1) / 2)); | 153 | auto [x, y] = loc_to_xy(location); |
151 | int y = (_height - 1) - 2 * (location / ((_width + 1) / 2)); | ||
152 | _endpoints.push_back(Endpoint(x, y, dir)); | 154 | _endpoints.push_back(Endpoint(x, y, dir)); |
153 | } | 155 | } |
154 | } | 156 | } |
@@ -163,15 +165,15 @@ void Panel::WriteIntersections(int id) { | |||
163 | 165 | ||
164 | double min = 0.1; | 166 | double min = 0.1; |
165 | double max = 0.9; | 167 | double max = 0.9; |
166 | double width_interval = (max - min) / (_width - 1); | 168 | double width_interval = (max - min) / (_width/2); |
167 | double height_interval = (max - min) / (_height - 1); | 169 | double height_interval = (max - min) / (_height/2); |
168 | 170 | ||
169 | for (int y=0; y<_height; y++) { | 171 | for (int y=0; y<_height/2; y++) { |
170 | for (int x=0; x<_width; x++) { | 172 | for (int x=0; x<_width/2; x++) { |
171 | intersections.push_back(static_cast<float>(min + x * width_interval)); | 173 | intersections.push_back(static_cast<float>(min + x * width_interval)); |
172 | intersections.push_back(static_cast<float>(min + y * height_interval)); | 174 | intersections.push_back(static_cast<float>(min + y * height_interval)); |
173 | int flags = 0; | 175 | int flags = 0; |
174 | if (find(_startpoints, {x, y}) != -1) flags |= IntersectionFlags::IS_STARTPOINT; | 176 | if (find(_startpoints, {2*x, 2*y}) != -1) flags |= IntersectionFlags::IS_STARTPOINT; |
175 | intersectionFlags.push_back(flags); | 177 | intersectionFlags.push_back(flags); |
176 | if (y > 0) { | 178 | if (y > 0) { |
177 | connections.first.push_back(y * _width + x); | 179 | connections.first.push_back(y * _width + x); |
diff --git a/Source/Panel.h b/Source/Panel.h index c9b4910..565b4c3 100644 --- a/Source/Panel.h +++ b/Source/Panel.h | |||
@@ -90,7 +90,7 @@ private: | |||
90 | class Panel | 90 | class Panel |
91 | { | 91 | { |
92 | public: | 92 | public: |
93 | explicit Panel(int id); | 93 | Panel(int id); |
94 | // explicit Panel(nlohmann::json json); | 94 | // explicit Panel(nlohmann::json json); |
95 | 95 | ||
96 | void Write(int id); | 96 | void Write(int id); |
@@ -109,6 +109,9 @@ public: | |||
109 | }; | 109 | }; |
110 | 110 | ||
111 | private: | 111 | private: |
112 | // For testing | ||
113 | Panel(); | ||
114 | |||
112 | void ReadIntersections(int id); | 115 | void ReadIntersections(int id); |
113 | void WriteIntersections(int id); | 116 | void WriteIntersections(int id); |
114 | void ReadDecorations(int id); | 117 | void ReadDecorations(int id); |
@@ -117,6 +120,20 @@ private: | |||
117 | // TODO: Reflection data | 120 | // TODO: Reflection data |
118 | // TODO: Decoration colors | 121 | // TODO: Decoration colors |
119 | 122 | ||
123 | std::tuple<int, int> loc_to_xy(int location) { | ||
124 | int x = 2 * (location % ((_width + 1) / 2)); | ||
125 | int y = (_height - 1) - 2 * (location / ((_width + 1) / 2)); | ||
126 | return {x, y}; | ||
127 | } | ||
128 | |||
129 | int xy_to_loc(int x, int y) { | ||
130 | int height2 = (_height - 1) / 2; | ||
131 | int width2 = (_width + 1) / 2; | ||
132 | |||
133 | int rowsFromBottom = height2 - y/2; | ||
134 | return rowsFromBottom * width2 + x/2; | ||
135 | } | ||
136 | |||
120 | Memory _memory = Memory("witness64_d3d11.exe"); | 137 | Memory _memory = Memory("witness64_d3d11.exe"); |
121 | 138 | ||
122 | int _width, _height; | 139 | int _width, _height; |
@@ -125,4 +142,6 @@ private: | |||
125 | std::vector<Endpoint> _endpoints; | 142 | std::vector<Endpoint> _endpoints; |
126 | std::vector<std::pair<int ,int>> _startpoints; | 143 | std::vector<std::pair<int ,int>> _startpoints; |
127 | int _style; | 144 | int _style; |
145 | |||
146 | friend class PanelExtractionTests; | ||
128 | }; \ No newline at end of file | 147 | }; \ No newline at end of file |