Advertisement
Guest User

Untitled

a guest
Jul 9th, 2020
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. extends Spatial
  2.  
  3. const LOG_LEVEL = Util.LOG_LOW
  4.  
  5. const SIZE = 1.0
  6. const HEIGHT = sqrt(3.0) * SIZE
  7. const HALF_HEIGHT = HEIGHT * 0.5 # Should be 0.86603 for size of 1
  8. const KITE_HEIGHT = (2.0/3.0) * (HALF_HEIGHT) # 0.57735 for size of 1
  9. const KITE_ORTHOGONAL_HEIGHT = (0.75) * KITE_HEIGHT # 0.43301, distance from longside to oppo point
  10. const KITE_SIDE_LONG = SIZE / 2.0
  11. const KITE_SIDE_SHORT = (2.0/3.0) * KITE_ORTHOGONAL_HEIGHT # Should be 0.28868 for size of 1
  12.  
  13. onready var mesh_instance = $MeshInstance
  14.  
  15. var pt1: Vector3 = Vector3(0.0, 0.0, 0.0)
  16. var pt2: Vector3 = Vector3(KITE_ORTHOGONAL_HEIGHT, 0.0, 0.25)
  17. var pt3: Vector3 = Vector3(KITE_SIDE_SHORT, 0.0, 0.5)
  18. var pt4: Vector3 = Vector3(0.0, 0.0, 0.5)
  19.  
  20. var first_tri_first_kite_vertices = PoolVector3Array([pt1, pt2, pt3, pt4])
  21.  
  22. func _ready():
  23. var array_mesh = ArrayMesh.new()
  24. var rolling_vertices: PoolVector3Array = first_tri_first_kite_vertices
  25. for i in 6:
  26. array_mesh = draw_hex_tri(rolling_vertices, array_mesh)
  27. for i2 in rolling_vertices.size():
  28. rolling_vertices[i2] = (point_rotation(rolling_vertices[i2], rolling_vertices[0], 60.0))
  29.  
  30. apply_color(array_mesh)
  31.  
  32. mesh_instance.mesh = array_mesh
  33.  
  34. func draw_hex_tri(base_verts: PoolVector3Array, local_array_mesh: ArrayMesh):
  35. var mesh_arrays = []
  36. mesh_arrays.resize(Mesh.ARRAY_MAX)
  37.  
  38. var indices = PoolIntArray([0, 1, 2, 0, 2, 3])
  39. for i in range(3): # Iterate over each kite
  40. var verts = PoolVector3Array() # kite-specific vertices
  41. Util.loud_log("drawing hex tri %s. verts" % i, base_verts, LOG_LEVEL)
  42. for i2 in base_verts.size():
  43. verts.push_back(point_rotation(base_verts[i2], base_verts[2], 120.0 * i))
  44.  
  45. mesh_arrays[Mesh.ARRAY_VERTEX] = verts
  46. mesh_arrays[Mesh.ARRAY_INDEX] = indices
  47.  
  48. local_array_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, mesh_arrays)
  49.  
  50. return local_array_mesh
  51.  
  52. func point_rotation(point_to_rotate: Vector3, rotation_origin: Vector3, angle: float) -> Vector3:
  53. var rads: float = deg2rad(angle)
  54. var sin_val: float = sin(rads)
  55. var cos_val: float = cos(rads)
  56.  
  57. # Translate point to origin
  58. point_to_rotate.x -= rotation_origin.x
  59. point_to_rotate.z -= rotation_origin.z
  60.  
  61. # Rotate point
  62. var xnew: float = point_to_rotate.x * cos_val - point_to_rotate.z * sin_val
  63. var znew: float = point_to_rotate.x * sin_val + point_to_rotate.z * cos_val # Really, though? point_to_rotate.x???
  64.  
  65. # Translate back
  66. var return_value: Vector3 = Vector3(xnew + rotation_origin.x, 0.0, znew + rotation_origin.z)
  67. return return_value
  68.  
  69. func make_materials(n: int) -> Array: # Generates an array of SpatialMaterials with given length of random colors
  70. Util.loud_log("making materials. n", n, LOG_LEVEL)
  71. var return_array = []
  72. var rng = RandomNumberGenerator.new()
  73. rng.randomize()
  74. for i in range(n):
  75. var mat = SpatialMaterial.new()
  76. var color = Color(rng.randf_range(0.0, 1.0), rng.randf_range(0.0, 1.0), rng.randf_range(0.0, 1.0))
  77. mat.albedo_color = color
  78. Util.low_log("color", color, LOG_LEVEL)
  79. return_array.push_back(mat)
  80. return return_array
  81.  
  82. func apply_color(local_array_mesh: ArrayMesh):
  83. var surface_count = local_array_mesh.get_surface_count()
  84. Util.loud_log("local_array_mesh.surface_count", surface_count, LOG_LEVEL)
  85. var mats = make_materials(surface_count)
  86. for i in surface_count:
  87. local_array_mesh.surface_set_material(i, mats[i])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement