Advertisement
Ulabael

Алло, все нормально?

Jan 27th, 2023 (edited)
838
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Снизу - два идентичных кода для Godot, GDScript, но по какой-то причине при одних и тех же вводных данных они дают разный результат
  2. Новый скрипт:
  3. func pixel_to_hex(x,y,size):
  4.     var q = (2.0/3 *  x                             ) / size
  5.     var r = (-1.0/3*  x + sqrt(3.0)/3 * y)        / size   
  6.  
  7.     var s : float = -q-r
  8.    
  9.     var qr = round(q)
  10.     var rr = round(r)
  11.     var sr = round(s)
  12.    
  13.     var q_diff = abs(qr - q)
  14.     var r_diff = abs(rr - r)
  15.     var s_diff = abs(sr - s)
  16.    
  17.     if (q_diff > r_diff and q_diff > s_diff):
  18.         qr = -rr-sr
  19.     elif (r_diff > s_diff):
  20.         rr = -qr-sr
  21.     else:
  22.         sr = -qr-rr
  23.    
  24.     q = qr
  25.     r = rr
  26.     s = sr
  27.    
  28.     var col : int = round(q)
  29.     var row : int = round(r) + (col - (col&1)) / 2;
  30.    
  31.     print([col,row])
  32.  
  33. Старые СКРИПТЫ:
  34. Пояснение:
  35. Vector2 и Vector3 никак не меняют переменные, по сути - это просто массивы.
  36. func px_to_hex(vec, size = GlobalVars.grid['hexSize']):
  37.     var q = (2.0/3 *  vec.x                             ) / size
  38.     var r = (-1.0/3*  vec.x + sqrt(3.0)/3 * vec.y)        / size
  39.     vec = Vector2(q,r)
  40.     vec = axial_to_oddq(axial_round(vec))
  41.    
  42.     return vec
  43.  
  44. func axial_round(vec):
  45.     vec = axial_to_cube(vec)
  46.     vec = cube_round(vec)
  47.     return vec
  48.  
  49. func axial_to_cube(vec):
  50.     var s = -vec.x-vec.y
  51.     return Vector3(vec.x, vec.y, s)
  52.    
  53.  
  54. func cube_round(vec):
  55.     var q = round(vec.x)
  56.     var r = round(vec.y)
  57.     var s = round(vec.z)   
  58.  
  59.     var q_diff = abs(q - vec.x)
  60.     var s_diff = abs(r - vec.y)
  61.     var r_diff = abs(s - vec.z)
  62.     if (q_diff > r_diff and q_diff > s_diff):
  63.         q = -r-s
  64.     elif (r_diff > s_diff):
  65.         r = -q-s
  66.     else:
  67.         s = -q-r
  68.    
  69.     return Vector3(q,r,s)
  70.  
  71. func axial_to_oddq(vec):
  72.     var col : int = int(vec.x)
  73.     var row : int = int(vec.y) + (col - (int(col) & 1)) / 2
  74.     return Vector2(col, row)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement