summary refs log tree commit diff stats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Memory.h4
-rw-r--r--Source/Panel.cpp16
-rw-r--r--Source/Panel.h21
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
26Panel::Panel() {}
27
25void Panel::Write(int id) { 28void 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:
90class Panel 90class Panel
91{ 91{
92public: 92public:
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
111private: 111private:
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