Skip to content

Commit 4cf9ad3

Browse files
committed
v0.2.3
1 parent ba7a90a commit 4cf9ad3

5 files changed

Lines changed: 270 additions & 14 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "react-hex-engine",
33
"description": "Hexagon Map Editor and Game Engine",
4-
"version": "0.2.2",
4+
"version": "0.2.3",
55
"main": "lib/index.js",
66
"author": "IcculusC",
77
"repository": "IcculusC/react-hex-engine",

src/HexUtils.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import Point from "./models/Point";
33

44
class HexUtils {
55
static DIRECTIONS = [
6-
new Hex(1, 0, -1),
7-
new Hex(1, -1, 0),
8-
new Hex(0, -1, 1),
9-
new Hex(-1, 0, 1),
10-
new Hex(-1, 1, 0),
11-
new Hex(0, 1, -1)
6+
new Hex(1, 0),
7+
new Hex(1, -1),
8+
new Hex(0, -1),
9+
new Hex(-1, 0),
10+
new Hex(-1, 1),
11+
new Hex(0, 1)
1212
];
1313

1414
static equals(a, b) {

src/Hexagon.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ class Hexagon extends Component {
6969

7070
static getDerivedStateFromProps(nextProps, prevState) {
7171
if (prevState.points !== nextProps.points) {
72-
const { layout, points, q, r, s } = nextProps;
73-
const hex = new Hex(q, r, s);
72+
const { layout, points, q, r } = nextProps;
73+
const hex = new Hex(q, r);
7474
const pixel = HexUtils.hexToPixel(hex, nextProps.layout);
7575
return { hex, pixel, layout, points };
7676
}
@@ -87,7 +87,7 @@ class Hexagon extends Component {
8787

8888
constructor(props) {
8989
super(props);
90-
const hex = new Hex(props.q, props.r, props.s);
90+
const hex = new Hex(props.q, props.r);
9191
const pixel = HexUtils.hexToPixel(hex, props.layout);
9292
this.state = {
9393
...this.state,

src/models/Hex.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,18 @@ class Hex {
22
constructor(q, r, s, meta = {}) {
33
this.q = q;
44
this.r = r;
5-
this.s = s;
6-
this.meta = {};
5+
if (s !== undefined) {
6+
if (typeof s === "number") {
7+
this.s = s;
8+
this.meta = meta;
9+
} else if (typeof s === "object") {
10+
this.s = -q - r;
11+
this.meta = s;
12+
}
13+
} else {
14+
this.s = -q - r;
15+
this.meta = {};
16+
}
717
}
818

919
toString() {
@@ -17,8 +27,8 @@ class Hex {
1727
}
1828

1929
static fromJSON(obj) {
20-
const { meta, q, r, s } = obj;
21-
return new Hex(q, r, s, meta);
30+
const { meta, q, r } = obj;
31+
return new Hex(q, r, meta);
2232
}
2333
}
2434

test/src/HexUtils.test.js

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import HexUtils from "../../src/HexUtils";
2+
import Hex from "../../src/models/Hex";
3+
import Orientation from "../../src/models/Orientation";
24

35
const hex1 = { q: 0, r: 0, s: 0 };
46
const hex2 = { q: 0, r: -2, s: 2 };
@@ -26,6 +28,250 @@ const layout = {
2628
}
2729
};
2830

31+
const map = {
32+
"-2,0,2": {
33+
meta: {
34+
hoverable: true,
35+
replaceable: true,
36+
selectable: true,
37+
selected: false
38+
},
39+
q: -2,
40+
r: 0,
41+
s: 2,
42+
tile: "empty"
43+
},
44+
"-2,1,1": {
45+
meta: {
46+
hoverable: true,
47+
replaceable: true,
48+
selectable: true,
49+
selected: true
50+
},
51+
q: -2,
52+
r: 1,
53+
s: 1,
54+
tile: "empty"
55+
},
56+
"-2,2,0": {
57+
meta: {
58+
hoverable: true,
59+
replaceable: true,
60+
selectable: true,
61+
selected: false
62+
},
63+
q: -2,
64+
r: 2,
65+
s: 0,
66+
tile: "empty"
67+
},
68+
"-1,-1,2": {
69+
meta: {
70+
hoverable: true,
71+
replaceable: true,
72+
selectable: true,
73+
selected: false
74+
},
75+
q: -1,
76+
r: -1,
77+
s: 2,
78+
tile: "empty"
79+
},
80+
"-1,0,1": {
81+
meta: {
82+
hoverable: true,
83+
replaceable: true,
84+
selectable: true,
85+
selected: false
86+
},
87+
q: -1,
88+
r: 0,
89+
s: 1,
90+
tile: "empty"
91+
},
92+
"-1,1,0": {
93+
meta: {
94+
hoverable: true,
95+
replaceable: true,
96+
selectable: true,
97+
selected: false
98+
},
99+
q: -1,
100+
r: 1,
101+
s: 0,
102+
tile: "empty"
103+
},
104+
"-1,2,-1": {
105+
meta: {
106+
hoverable: true,
107+
replaceable: true,
108+
selectable: true,
109+
selected: false
110+
},
111+
q: -1,
112+
r: 2,
113+
s: -1,
114+
tile: "empty"
115+
},
116+
"0,-2,2": {
117+
meta: {
118+
hoverable: true,
119+
replaceable: true,
120+
selectable: true,
121+
selected: false
122+
},
123+
q: 0,
124+
r: -2,
125+
s: 2,
126+
tile: "empty"
127+
},
128+
"0,-1,1": {
129+
meta: {
130+
hoverable: true,
131+
replaceable: true,
132+
selectable: true,
133+
selected: false
134+
},
135+
q: 0,
136+
r: -1,
137+
s: 1,
138+
tile: "empty"
139+
},
140+
"0,0,0": {
141+
meta: {
142+
hoverable: false,
143+
replaceable: false,
144+
selectable: false,
145+
selected: false
146+
},
147+
q: 0,
148+
r: 0,
149+
s: 0,
150+
tile: "colony"
151+
},
152+
"0,1,-1": {
153+
meta: {
154+
hoverable: true,
155+
replaceable: true,
156+
selectable: true,
157+
selected: false
158+
},
159+
q: 0,
160+
r: 1,
161+
s: -1,
162+
tile: "empty"
163+
},
164+
"0,2,-2": {
165+
meta: {
166+
hoverable: true,
167+
replaceable: true,
168+
selectable: true,
169+
selected: false
170+
},
171+
q: 0,
172+
r: 2,
173+
s: -2,
174+
tile: "empty"
175+
},
176+
"1,-2,1": {
177+
meta: {
178+
hoverable: true,
179+
replaceable: true,
180+
selectable: true,
181+
selected: false
182+
},
183+
q: 1,
184+
r: -2,
185+
s: 1,
186+
tile: "empty"
187+
},
188+
"1,-1,0": {
189+
meta: {
190+
hoverable: true,
191+
replaceable: true,
192+
selectable: true,
193+
selected: false
194+
},
195+
q: 1,
196+
r: -1,
197+
s: 0,
198+
tile: "empty"
199+
},
200+
"1,0,-1": {
201+
meta: {
202+
hoverable: true,
203+
replaceable: true,
204+
selectable: true,
205+
selected: false
206+
},
207+
q: 1,
208+
r: 0,
209+
s: -1,
210+
tile: "empty"
211+
},
212+
"1,1,-2": {
213+
meta: {
214+
hoverable: true,
215+
replaceable: true,
216+
selectable: true,
217+
selected: false
218+
},
219+
q: 1,
220+
r: 1,
221+
s: -2,
222+
tile: "empty"
223+
},
224+
"2,-2,0": {
225+
meta: {
226+
hoverable: true,
227+
replaceable: true,
228+
selectable: true,
229+
selected: false
230+
},
231+
q: 2,
232+
r: -2,
233+
s: 0,
234+
tile: "empty"
235+
},
236+
"2,-1,-1": {
237+
meta: {
238+
hoverable: true,
239+
replaceable: true,
240+
selectable: true,
241+
selected: false
242+
},
243+
q: 2,
244+
r: -1,
245+
s: -1,
246+
tile: "empty"
247+
},
248+
"2,0,-2": {
249+
meta: {
250+
hoverable: true,
251+
replaceable: true,
252+
selectable: true,
253+
selected: false
254+
},
255+
q: 2,
256+
r: 0,
257+
s: -2,
258+
tile: "empty"
259+
}
260+
};
261+
262+
const checkLayout = {
263+
spacing: 1.05,
264+
orientation: Orientation.Pointy,
265+
size: {
266+
x: 10,
267+
y: 10
268+
},
269+
origin: {
270+
x: 0,
271+
y: 0
272+
}
273+
};
274+
29275
test("HexUtils.equals should work", () => {
30276
expect(HexUtils.equals(hex1, hex1)).toBe(true);
31277
expect(HexUtils.equals(hex1, hex2)).toBe(false);

0 commit comments

Comments
 (0)