@@ -246,6 +246,9 @@ _vus_n = []
246246_vus_cx = []
247247_vus_cy = []
248248_methode_active = 0
249+ _gen_larg = 0.0
250+ _gen_haut = 0.0
251+ _gen_a = 0.0
249252
250253
251254déf _coord_vers_entier(valeur):
@@ -273,6 +276,73 @@ déf _hors_champ(min_x, max_x, min_y, max_y, larg, haut):
273276 retour 0
274277
275278
279+ déf _hex_visible(x, y, larg, haut, a):
280+ soit demi_larg = espacement_horiz(a) / 2.0
281+ soit min_x = x - demi_larg
282+ soit max_x = x + demi_larg
283+ soit min_y = y - a
284+ soit max_y = y + a
285+ retour 1 - _hors_champ(min_x, max_x, min_y, max_y, larg, haut)
286+
287+
288+ déf _compter_hex_visibles(larg, haut, a):
289+ soit hs = espacement_horiz(a)
290+ soit vs = espacement_vert(a)
291+ soit rangs = _nb_pas_inclusifs(- 2.0 * a, haut + 2.0 * a, vs)
292+ soit cols = _nb_pas_inclusifs(- hs, larg + hs, hs)
293+ soit total = 0
294+ pour rang dans range(rangs):
295+ soit y = - 2.0 * a + rang * vs
296+ soit decal = (rang % 2 ) * (hs / 2.0 )
297+ pour col dans range(cols):
298+ soit x = - hs + decal + col * hs
299+ si _hex_visible(x, y, larg, haut, a) == 1 :
300+ total = total + 1
301+ retour total
302+
303+
304+ déf _hex_centre_x_par_index(index, larg, haut, a):
305+ soit hs = espacement_horiz(a)
306+ soit vs = espacement_vert(a)
307+ soit rangs = _nb_pas_inclusifs(- 2.0 * a, haut + 2.0 * a, vs)
308+ soit cols = _nb_pas_inclusifs(- hs, larg + hs, hs)
309+ soit courant = 0
310+ pour rang dans range(rangs):
311+ soit y = - 2.0 * a + rang * vs
312+ soit decal = (rang % 2 ) * (hs / 2.0 )
313+ pour col dans range(cols):
314+ soit x = - hs + decal + col * hs
315+ si _hex_visible(x, y, larg, haut, a) == 1 :
316+ si courant == index:
317+ retour x
318+ courant = courant + 1
319+ retour 0.0
320+
321+
322+ déf _hex_centre_y_par_index(index, larg, haut, a):
323+ soit hs = espacement_horiz(a)
324+ soit vs = espacement_vert(a)
325+ soit rangs = _nb_pas_inclusifs(- 2.0 * a, haut + 2.0 * a, vs)
326+ soit cols = _nb_pas_inclusifs(- hs, larg + hs, hs)
327+ soit courant = 0
328+ pour rang dans range(rangs):
329+ soit y = - 2.0 * a + rang * vs
330+ soit decal = (rang % 2 ) * (hs / 2.0 )
331+ pour col dans range(cols):
332+ soit x = - hs + decal + col * hs
333+ si _hex_visible(x, y, larg, haut, a) == 1 :
334+ si courant == index:
335+ retour y
336+ courant = courant + 1
337+ retour 0.0
338+
339+
340+ déf _compter_carres(larg, haut, a):
341+ soit cols = entier(math.ceil(larg / a))
342+ soit rangs = entier(math.ceil(haut / a))
343+ retour cols * rangs
344+
345+
276346déf _ajouter_tuile_4(x0, y0, x1, y1, x2, y2, x3, y3, larg, haut):
277347 soit min_x = min(min(x0, x1), min(x2, x3))
278348 soit max_x = max(max(x0, x1), max(x2, x3))
@@ -366,42 +436,11 @@ déf _nb_pas_inclusifs(debut, fin, pas):
366436# ── Generateurs de tuiles ─────────────────────────────────────
367437
368438déf _gen_hex(larg, haut, a):
369- hs = espacement_horiz(a)
370- vs = espacement_vert(a)
371- rangs = _nb_pas_inclusifs(- 2.0 * a, haut + 2.0 * a, vs)
372- cols = _nb_pas_inclusifs(- hs, larg + hs, hs)
373- pour rang dans range(rangs):
374- y = - 2.0 * a + rang * vs
375- decal = (rang % 2 ) * (hs / 2.0 )
376- pour col dans range(cols):
377- x = - hs + decal + col * hs
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)
391- retour 0
439+ retour _compter_hex_visibles(larg, haut, a)
392440
393441
394442déf _gen_carre(larg, haut, a):
395- cols = entier(math.ceil(larg / a))
396- rangs = entier(math.ceil(haut / a))
397- pour col dans range(cols):
398- x = col * a
399- pour rang dans range(rangs):
400- y = rang * a
401- x2 = min(larg, x + a)
402- y2 = min(haut, y + a)
403- _ajouter_tuile_4(x, y, x2, y, x2, y2, x, y2, larg, haut)
404- retour 0
443+ retour _compter_carres(larg, haut, a)
405444
406445
407446déf _gen_triangle(larg, haut, a):
@@ -652,18 +691,21 @@ déf _gen_hex_tronque(larg, haut, a):
652691# ── Dispatch et acces aux tuiles ──────────────────────────────
653692
654693déf generer_tuiles(larg, haut, a, methode):
655- global _methode_active
694+ global _methode_active, _gen_larg, _gen_haut, _gen_a
656695 _tuiles_reinit()
657696 si larg != larg ou haut != haut ou a != a ou methode != methode:
658697 retour 0
659698 si a < = 0 :
660699 retour 0
661700 m = entier(methode)
662701 _methode_active = m
702+ _gen_larg = larg
703+ _gen_haut = haut
704+ _gen_a = a
663705 si m == 0 :
664- _gen_hex(larg, haut, a)
706+ retour _gen_hex(larg, haut, a)
665707 si m == 1 :
666- _gen_carre(larg, haut, a)
708+ retour _gen_carre(larg, haut, a)
667709 si m == 2 :
668710 _gen_triangle(larg, haut, a)
669711 si m == 3 :
@@ -697,12 +739,44 @@ déf tuile_n_sommets(i):
697739
698740
699741déf tuile_sommet_x(i, j):
700- global _tuiles_xs, _tuiles_off
742+ global _tuiles_xs, _tuiles_off, _methode_active, _gen_larg, _gen_haut, _gen_a
743+ si _methode_active == 0 :
744+ soit cx = _hex_centre_x_par_index(entier(i), _gen_larg, _gen_haut, _gen_a)
745+ soit cy = _hex_centre_y_par_index(entier(i), _gen_larg, _gen_haut, _gen_a)
746+ retour sommet_hex_x(cx, cy, _gen_a, entier(j))
747+ si _methode_active == 1 :
748+ soit cols = entier(math.ceil(_gen_larg / _gen_a))
749+ soit col = entier(i) % cols
750+ soit x = col * _gen_a
751+ soit x2 = min(_gen_larg, x + _gen_a)
752+ si entier(j) == 0 :
753+ retour x
754+ si entier(j) == 1 :
755+ retour x2
756+ si entier(j) == 2 :
757+ retour x2
758+ retour x
701759 retour _tuiles_xs[entier(_tuiles_off[entier(i)]) + entier(j)] / 100.0
702760
703761
704762déf tuile_sommet_y(i, j):
705- global _tuiles_ys, _tuiles_off
763+ global _tuiles_ys, _tuiles_off, _methode_active, _gen_larg, _gen_haut, _gen_a
764+ si _methode_active == 0 :
765+ soit cx = _hex_centre_x_par_index(entier(i), _gen_larg, _gen_haut, _gen_a)
766+ soit cy = _hex_centre_y_par_index(entier(i), _gen_larg, _gen_haut, _gen_a)
767+ retour sommet_hex_y(cx, cy, _gen_a, entier(j))
768+ si _methode_active == 1 :
769+ soit cols = entier(math.ceil(_gen_larg / _gen_a))
770+ soit rang = entier(i) // cols
771+ soit y = rang * _gen_a
772+ soit y2 = min(_gen_haut, y + _gen_a)
773+ si entier(j) == 0 :
774+ retour y
775+ si entier(j) == 1 :
776+ retour y
777+ si entier(j) == 2 :
778+ retour y2
779+ retour y2
706780 retour _tuiles_ys[entier(_tuiles_off[entier(i)]) + entier(j)] / 100.0
707781
708782
0 commit comments