123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- class_name Test
- extends Node2D
- signal wait_done()
- @export var _enable_debug_collision = true
- var _timer
- var _timer_started = false
- var _wait_physics_ticks_counter = 0
- class Circle2D:
- extends Node2D
- var center
- var radius
- var color
- func _draw():
- draw_circle(center, radius, color)
- var _drawn_nodes = []
- func _enter_tree():
- if not _enable_debug_collision:
- get_tree().debug_collisions_hint = false
- func _physics_process(_delta):
- if _wait_physics_ticks_counter > 0:
- _wait_physics_ticks_counter -= 1
- if _wait_physics_ticks_counter == 0:
- emit_signal("wait_done")
- func add_line(pos_start, pos_end, color):
- var line = Line2D.new()
- line.points = [pos_start, pos_end]
- line.width = 1.5
- line.default_color = color
- _drawn_nodes.push_back(line)
- add_child(line)
- func add_circle(pos, radius, color):
- var circle = Circle2D.new()
- circle.center = pos
- circle.radius = radius
- circle.color = color
- _drawn_nodes.push_back(circle)
- add_child(circle)
- func add_shape(shape, shape_transform, color):
- var collision = CollisionShape2D.new()
- collision.shape = shape
- collision.transform = shape_transform
- collision.modulate = color
- _drawn_nodes.push_back(collision)
- add_child(collision)
- func clear_drawn_nodes():
- for node in _drawn_nodes:
- node.queue_free()
- _drawn_nodes.clear()
- func create_rigidbody(shape, pickable = false, shape_transform = Transform2D.IDENTITY):
- var collision = CollisionShape2D.new()
- collision.shape = shape
- collision.transform = shape_transform
- var body = RigidBody2D.new()
- body.add_child(collision)
- if pickable:
- var script = load("res://utils/rigidbody_pick.gd")
- body.set_script(script)
- return body
- func create_rigidbody_box(size, pickable = false, use_icon = false, shape_transform = Transform2D.IDENTITY):
- var shape = RectangleShape2D.new()
- shape.size = size
- var body = create_rigidbody(shape, pickable, shape_transform)
- if use_icon:
- var texture = load("res://icon.webp")
- var icon = Sprite2D.new()
- icon.texture = texture
- icon.scale = size / texture.get_size()
- body.add_child(icon)
- return body
- func find_node(node_name):
- var nodes = find_children(node_name)
- if nodes.size() > 0:
- return nodes[0]
- return null
- func start_timer(timeout):
- if _timer == null:
- _timer = Timer.new()
- _timer.one_shot = true
- add_child(_timer)
- _timer.timeout.connect(self._on_timer_done)
- else:
- cancel_timer()
- _timer.start(timeout)
- _timer_started = true
- return _timer
- func cancel_timer():
- if _timer_started:
- _timer.paused = true
- _timer.emit_signal("timeout")
- _timer.paused = false
- func is_timer_canceled():
- return _timer and _timer.paused
- func wait_for_physics_ticks(tick_count):
- _wait_physics_ticks_counter = tick_count
- return self
- func _on_timer_done():
- _timer_started = false
|