Skip to content

Commit 0a24ac1

Browse files
Handle tiles
1 parent 2d212f9 commit 0a24ac1

1 file changed

Lines changed: 86 additions & 19 deletions

File tree

src/hexagonify_wasm.ml

Lines changed: 86 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,13 @@ _tuiles_n = []
245245
_vus_n = []
246246
_vus_cx = []
247247
_vus_cy = []
248+
_methode_active = 0
249+
250+
251+
déf _coord_vers_entier(valeur):
252+
si valeur != valeur:
253+
retour 0
254+
retour entier(arrondir(valeur * 100.0))
248255

249256

250257
déf _tuiles_reinit():
@@ -260,6 +267,56 @@ déf _tuiles_reinit():
260267
retour 0
261268

262269

270+
déf _hors_champ(min_x, max_x, min_y, max_y, larg, haut):
271+
si max_x < 0 ou max_y < 0 ou min_x > larg ou min_y > haut:
272+
retour 1
273+
retour 0
274+
275+
276+
déf _ajouter_tuile_4(x0, y0, x1, y1, x2, y2, x3, y3, larg, haut):
277+
soit min_x = min(min(x0, x1), min(x2, x3))
278+
soit max_x = max(max(x0, x1), max(x2, x3))
279+
soit min_y = min(min(y0, y1), min(y2, y3))
280+
soit max_y = max(max(y0, y1), max(y2, y3))
281+
si _hors_champ(min_x, max_x, min_y, max_y, larg, haut) == 1:
282+
retour 0
283+
_tuiles_off.append(len(_tuiles_xs))
284+
_tuiles_n.append(4)
285+
_tuiles_xs.append(_coord_vers_entier(x0))
286+
_tuiles_ys.append(_coord_vers_entier(y0))
287+
_tuiles_xs.append(_coord_vers_entier(x1))
288+
_tuiles_ys.append(_coord_vers_entier(y1))
289+
_tuiles_xs.append(_coord_vers_entier(x2))
290+
_tuiles_ys.append(_coord_vers_entier(y2))
291+
_tuiles_xs.append(_coord_vers_entier(x3))
292+
_tuiles_ys.append(_coord_vers_entier(y3))
293+
retour 1
294+
295+
296+
déf _ajouter_tuile_6(x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, larg, haut):
297+
soit min_x = min(min(min(x0, x1), min(x2, x3)), min(x4, x5))
298+
soit max_x = max(max(max(x0, x1), max(x2, x3)), max(x4, x5))
299+
soit min_y = min(min(min(y0, y1), min(y2, y3)), min(y4, y5))
300+
soit max_y = max(max(max(y0, y1), max(y2, y3)), max(y4, y5))
301+
si _hors_champ(min_x, max_x, min_y, max_y, larg, haut) == 1:
302+
retour 0
303+
_tuiles_off.append(len(_tuiles_xs))
304+
_tuiles_n.append(6)
305+
_tuiles_xs.append(_coord_vers_entier(x0))
306+
_tuiles_ys.append(_coord_vers_entier(y0))
307+
_tuiles_xs.append(_coord_vers_entier(x1))
308+
_tuiles_ys.append(_coord_vers_entier(y1))
309+
_tuiles_xs.append(_coord_vers_entier(x2))
310+
_tuiles_ys.append(_coord_vers_entier(y2))
311+
_tuiles_xs.append(_coord_vers_entier(x3))
312+
_tuiles_ys.append(_coord_vers_entier(y3))
313+
_tuiles_xs.append(_coord_vers_entier(x4))
314+
_tuiles_ys.append(_coord_vers_entier(y4))
315+
_tuiles_xs.append(_coord_vers_entier(x5))
316+
_tuiles_ys.append(_coord_vers_entier(y5))
317+
retour 1
318+
319+
263320
déf _ajouter_poly(xs, ys, larg, haut):
264321
global _tuiles_xs, _tuiles_ys, _tuiles_off, _tuiles_n
265322
global _vus_n, _vus_cx, _vus_cy
@@ -290,19 +347,13 @@ déf _ajouter_poly(xs, ys, larg, haut):
290347
cy = sy / n
291348
si cx != cx ou cy != cy:
292349
retour 0
293-
cx = entier(cx * 100.0) / 100.0
294-
cy = entier(cy * 100.0) / 100.0
295-
pour k dans range(len(_vus_n)):
296-
si _vus_n[k] == n et _vus_cx[k] == cx et _vus_cy[k] == cy:
297-
retour 0
298-
_vus_n.append(n)
299-
_vus_cx.append(cx)
300-
_vus_cy.append(cy)
350+
soit cx_q = _coord_vers_entier(cx)
351+
soit cy_q = _coord_vers_entier(cy)
301352
_tuiles_off.append(len(_tuiles_xs))
302353
_tuiles_n.append(n)
303354
pour i dans range(n):
304-
_tuiles_xs.append(xs[i])
305-
_tuiles_ys.append(ys[i])
355+
_tuiles_xs.append(_coord_vers_entier(xs[i]))
356+
_tuiles_ys.append(_coord_vers_entier(ys[i]))
306357
retour 1
307358

308359

@@ -324,9 +375,19 @@ déf _gen_hex(larg, haut, a):
324375
decal = (rang % 2) * (hs / 2.0)
325376
pour col dans range(cols):
326377
x = -hs + decal + col * hs
327-
soit xs = [sommet_hex_x(x, y, a, i) pour i dans range(6)]
328-
soit ys = [sommet_hex_y(x, y, a, i) pour i dans range(6)]
329-
_ajouter_poly(xs, ys, larg, haut)
378+
soit x0 = sommet_hex_x(x, y, a, 0)
379+
soit y0 = sommet_hex_y(x, y, a, 0)
380+
soit x1 = sommet_hex_x(x, y, a, 1)
381+
soit y1 = sommet_hex_y(x, y, a, 1)
382+
soit x2 = sommet_hex_x(x, y, a, 2)
383+
soit y2 = sommet_hex_y(x, y, a, 2)
384+
soit x3 = sommet_hex_x(x, y, a, 3)
385+
soit y3 = sommet_hex_y(x, y, a, 3)
386+
soit x4 = sommet_hex_x(x, y, a, 4)
387+
soit y4 = sommet_hex_y(x, y, a, 4)
388+
soit x5 = sommet_hex_x(x, y, a, 5)
389+
soit y5 = sommet_hex_y(x, y, a, 5)
390+
_ajouter_tuile_6(x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, larg, haut)
330391
retour 0
331392

332393

@@ -339,9 +400,7 @@ déf _gen_carre(larg, haut, a):
339400
y = rang * a
340401
x2 = min(larg, x + a)
341402
y2 = min(haut, y + a)
342-
soit xs = [x, x2, x2, x]
343-
soit ys = [y, y, y2, y2]
344-
_ajouter_poly(xs, ys, larg, haut)
403+
_ajouter_tuile_4(x, y, x2, y, x2, y2, x, y2, larg, haut)
345404
retour 0
346405

347406

@@ -593,12 +652,14 @@ déf _gen_hex_tronque(larg, haut, a):
593652
# ── Dispatch et acces aux tuiles ──────────────────────────────
594653

595654
déf generer_tuiles(larg, haut, a, methode):
655+
global _methode_active
596656
_tuiles_reinit()
597657
si larg != larg ou haut != haut ou a != a ou methode != methode:
598658
retour 0
599659
si a <= 0:
600660
retour 0
601661
m = entier(methode)
662+
_methode_active = m
602663
si m == 0:
603664
_gen_hex(larg, haut, a)
604665
si m == 1:
@@ -625,18 +686,24 @@ déf generer_tuiles(larg, haut, a, methode):
625686

626687

627688
déf tuile_n_sommets(i):
628-
global _tuiles_n
689+
global _tuiles_n, _methode_active
690+
si _methode_active == 0:
691+
retour 6
692+
si _methode_active == 1:
693+
retour 4
694+
si _methode_active == 2:
695+
retour 3
629696
retour _tuiles_n[entier(i)]
630697

631698

632699
déf tuile_sommet_x(i, j):
633700
global _tuiles_xs, _tuiles_off
634-
retour _tuiles_xs[entier(_tuiles_off[entier(i)]) + entier(j)]
701+
retour _tuiles_xs[entier(_tuiles_off[entier(i)]) + entier(j)] / 100.0
635702

636703

637704
déf tuile_sommet_y(i, j):
638705
global _tuiles_ys, _tuiles_off
639-
retour _tuiles_ys[entier(_tuiles_off[entier(i)]) + entier(j)]
706+
retour _tuiles_ys[entier(_tuiles_off[entier(i)]) + entier(j)] / 100.0
640707

641708

642709
# ── Codes de methode ──────────────────────────────────────────

0 commit comments

Comments
 (0)