Advertisement
AndTer99

Untitled

Mar 10th, 2022
1,675
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends Node
  2.  
  3. var layers = []
  4.  
  5. func _ready() -> void:
  6.     for i in range(1, 21):
  7.         layers.append(ProjectSettings.get_setting("layer_names/3d_physics/layer_%d" % i))
  8.  
  9. func get_layer_bit(name: String):
  10.     return layers.find(name)
  11.    
  12. func get_layer_bit_in_object(obj: CollisionObject, name: String):
  13.     return obj.get_collision_layer_bit(get_layer_bit(name))
  14.    
  15. func get_mask_bit_in_object(obj: CollisionObject, name: String):
  16.     return obj.get_collision_mask_bit(get_layer_bit(name))
  17.    
  18. func set_layer_bit_in_object(obj: CollisionObject, name: String, value := true):
  19.     var bit = get_layer_bit(name)
  20.     obj.set_collision_layer_bit(bit, value)
  21.    
  22. func set_mask_bit_in_object(obj: CollisionObject, name: String, value := true):
  23.     var bit = get_layer_bit(name)
  24.     obj.set_collision_mask_bit(bit, value)
  25.    
  26. func set_layer_bits_in_object(obj: CollisionObject, names: PoolStringArray, value := true):
  27.     for n in names:
  28.         set_layer_bit_in_object(obj, n, value)
  29.        
  30. func set_mask_bits_in_object(obj: CollisionObject, names: PoolStringArray, value := true):
  31.     for n in names:
  32.         set_mask_bit_in_object(obj, n, value)
  33.    
  34. func toggle_layer_bit_in_object(obj: CollisionObject, name: String):
  35.     var bit = get_layer_bit(name)
  36.     var current = get_layer_bit_in_object(obj, name)
  37.     set_layer_bit_in_object(obj, name, not current)
  38.    
  39. func toggle_mask_bit_in_object(obj: CollisionObject, name: String):
  40.     var bit = get_layer_bit(name)
  41.     var current = get_mask_bit_in_object(obj, name)
  42.     set_mask_bit_in_object(obj, name, not current)
  43.    
  44. func toggle_layer_bits_in_object(obj: CollisionObject, names: PoolStringArray):
  45.     for n in names:
  46.         toggle_layer_bit_in_object(obj, n)
  47.        
  48. func toggle_mask_bits_in_object(obj: CollisionObject, names: PoolStringArray):
  49.     for n in names:
  50.         toggle_mask_bit_in_object(obj, n)
  51.  
  52. static func bool_to_sign(b: bool):
  53.     return 1 if b else -1
  54.    
  55. static func map(v: float, i_start: float, i_end: float, f_start: float, f_end: float, clamped := false) -> float:
  56.     var output := range_lerp(v, i_start, i_end, f_start, f_end)
  57.    
  58.     return clamp(output, f_start, f_end) if clamped else output
  59.  
  60. static func vec3_horizontal(v: Vector3) -> Vector2:
  61.     return vec3_remove_axis(v, Vector3.AXIS_Y)
  62.    
  63. static func vec3_remove_axis(v: Vector3, axis : int = Vector3.AXIS_Y) -> Vector2:
  64.     match axis:
  65.         Vector3.AXIS_X: return Vector2(v.y, v.z)
  66.         Vector3.AXIS_Y: return Vector2(v.x, v.z)
  67.         Vector3.AXIS_Z: return Vector2(v.x, v.y)
  68.        
  69.     return Vector2.ZERO
  70.    
  71. static func vec3_deg2rad(v: Vector3):
  72.     return Vector3(deg2rad(v.x), deg2rad(v.y), deg2rad(v.z))
  73.    
  74. static func vec2_deg2rad(v: Vector2):
  75.     return Vector2(deg2rad(v.x), deg2rad(v.y))
  76.    
  77. static func round_vec2(v : Vector2, digits : int = 3):
  78.     return Vector2(stepify(v.x, pow(10, -digits)), stepify(v.y, pow(10, -digits)))
  79.    
  80. static func get_global_pos(obj: Spatial) -> Vector3:
  81.     return obj.global_transform.origin
  82.    
  83. static func get_dir_vector(obj: Spatial, axis := Vector3.AXIS_Z) -> Vector3:
  84.     match axis:
  85.         Vector3.AXIS_X: return obj.global_transform.basis.x
  86.         Vector3.AXIS_Y: return obj.global_transform.basis.y
  87.         Vector3.AXIS_Z: return obj.global_transform.basis.z
  88.        
  89.     return Vector3.ZERO
  90.    
  91. static func rotate_with_mouse(event: InputEventMouseMotion, node: Spatial, x_rot_node : Spatial, sensitivity := .1 , head_rot_lim := 80.0, invert_y := false):
  92.     var event_rel : Vector2 = Utils.vec2_deg2rad(-event.relative * sensitivity)
  93.     var y_rot = event_rel.x
  94.  
  95.     node.rotate_y(y_rot)
  96.     x_rot_node.rotate_x(event_rel.y * -bool_to_sign(invert_y))
  97.  
  98.     var hrl = deg2rad(head_rot_lim)
  99.     x_rot_node.rotation.x = clamp(x_rot_node.rotation.x, -hrl, hrl)
  100.    
  101. static func delete_children(node):
  102.     for n in node.get_children():
  103.         n.queue_free()
  104.        
  105. static func transfer_node(obj: Node, new_parent: Node):
  106.     obj.get_parent().remove_child(obj)
  107.     new_parent.add_child(obj)
  108.  
  109. static func list_files_in_directory(path, extensions = [], include_hidden = false) -> PoolStringArray:
  110.     var files : PoolStringArray = []
  111.     var dir = Directory.new()
  112.     dir.open(path)
  113.     dir.list_dir_begin()
  114.  
  115.     var done = false
  116.     while not done:
  117.         var file : String = dir.get_next()
  118.         done = (file == "")
  119.        
  120.         var is_visible = (not file.begins_with(".") or include_hidden)
  121.         var correct_ext = (len(extensions) == 0 or file.get_extension() in extensions)
  122.        
  123.         if is_visible and correct_ext:
  124.             files.append(file)
  125.  
  126.     dir.list_dir_end()
  127.  
  128.     return files
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement