mirror of
https://github.com/Relintai/pandemonium_demo_projects.git
synced 2024-12-23 14:06:50 +01:00
71 lines
1.7 KiB
GDScript3
71 lines
1.7 KiB
GDScript3
|
extends Test
|
||
|
|
||
|
|
||
|
var _do_raycasts = false
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
yield(start_timer(0.5), "timeout")
|
||
|
if is_timer_canceled():
|
||
|
return
|
||
|
|
||
|
_do_raycasts = true
|
||
|
|
||
|
|
||
|
func _physics_process(_delta):
|
||
|
if not _do_raycasts:
|
||
|
return
|
||
|
|
||
|
_do_raycasts = false
|
||
|
|
||
|
Log.print_log("* Start Raycasting...")
|
||
|
|
||
|
clear_drawn_nodes()
|
||
|
|
||
|
for node in $Shapes.get_children():
|
||
|
var body = node as PhysicsBody2D
|
||
|
var space_state = body.get_world_2d().direct_space_state
|
||
|
var body_name = String(body.name).substr("RigidBody".length())
|
||
|
|
||
|
Log.print_log("* Testing: %s" % body_name)
|
||
|
|
||
|
var center = body.position
|
||
|
|
||
|
# Raycast entering from the top.
|
||
|
var res = _add_raycast(space_state, center - Vector2(0, 100), center)
|
||
|
Log.print_log("Raycast in: %s" % ("HIT" if res else "NO HIT"))
|
||
|
|
||
|
# Raycast exiting from inside.
|
||
|
center.x -= 20
|
||
|
res = _add_raycast(space_state, center, center + Vector2(0, 200))
|
||
|
Log.print_log("Raycast out: %s" % ("HIT" if res else "NO HIT"))
|
||
|
|
||
|
# Raycast all inside.
|
||
|
center.x += 40
|
||
|
res = _add_raycast(space_state, center, center + Vector2(0, 40))
|
||
|
Log.print_log("Raycast inside: %s" % ("HIT" if res else "NO HIT"))
|
||
|
|
||
|
if String(body.name).ends_with("ConcavePolygon"):
|
||
|
# Raycast inside an internal face.
|
||
|
center.x += 20
|
||
|
res = _add_raycast(space_state, center, center + Vector2(0, 40))
|
||
|
Log.print_log("Raycast inside face: %s" % ("HIT" if res else "NO HIT"))
|
||
|
|
||
|
|
||
|
func _add_raycast(space_state, pos_start, pos_end):
|
||
|
var result = space_state.intersect_ray(pos_start, pos_end)
|
||
|
var color
|
||
|
if result:
|
||
|
color = Color.green
|
||
|
else:
|
||
|
color = Color.red.darkened(0.5)
|
||
|
|
||
|
# Draw raycast line.
|
||
|
add_line(pos_start, pos_end, color)
|
||
|
|
||
|
# Draw raycast arrow.
|
||
|
add_line(pos_end, pos_end + Vector2(-5, -10), color)
|
||
|
add_line(pos_end, pos_end + Vector2(5, -10), color)
|
||
|
|
||
|
return result
|