Skip to main content
Code format
Source Link
Theraot
  • 28.2k
  • 4
  • 55
  • 83
enterextends codeNode2D

onready herevar ray = $RayCast2D

extends Node2D

onready var ray = $RayCast2D onready var lain = $Node2D/Line2D

var vec = Vector2() var max_bounces = 5

func _process(delta): lain.clear_points()

onready var lain = $Node2D/Line2D

var vec = Vector2()
var max_bounces = 5

func _process(delta):
    lain.clear_points()
    
    vec.y-=1
    
    lain.add_point(Vector2.ZERO)
    
    ray.global_position = lain.global_position
    ray.cast_to = vec.normalized()*1000
    ray.force_update_transform()
    
    var prev = null
    var bounces = 0
    
    while true:
        if not ray.is_colliding():
            var pt = ray.global_position + ray.cast_to
            lain.add_point(lain.to_local(pt))
            break
        
        var coll = ray.get_collider()
        var pt = ray.get_collision_point()
        
        lain.add_point(lain.to_local(pt))
        
        if not coll.is_in_group("Mirrors"):
            break
            
        var normal = ray.get_collision_normal()
        
        if normal == Vector2.ZERO:
            break
        
        if prev !=null:
            prev.collision_mask = 3
            prev.collision_layer = 3
        prev = coll
        prev.collision_mask = 0
        prev.collision_layer = 0
        
        
        ray.global_position = pt
        ray.cast_to = ray.cast_to.bounce(normal)
        ray.force_raycast_update()
        
        bounces+=1
        if bounces >= max_bounces:
            break
        
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
enter code here

extends Node2D

onready var ray = $RayCast2D onready var lain = $Node2D/Line2D

var vec = Vector2() var max_bounces = 5

func _process(delta): lain.clear_points()

vec.y-=1

lain.add_point(Vector2.ZERO)

ray.global_position = lain.global_position
ray.cast_to = vec.normalized()*1000
ray.force_update_transform()

var prev = null
var bounces = 0

while true:
    if not ray.is_colliding():
        var pt = ray.global_position + ray.cast_to
        lain.add_point(lain.to_local(pt))
        break
    
    var coll = ray.get_collider()
    var pt = ray.get_collision_point()
    
    lain.add_point(lain.to_local(pt))
    
    if not coll.is_in_group("Mirrors"):
        break
        
    var normal = ray.get_collision_normal()
    
    if normal == Vector2.ZERO:
        break
    
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
    prev = coll
    prev.collision_mask = 0
    prev.collision_layer = 0
    
    
    ray.global_position = pt
    ray.cast_to = ray.cast_to.bounce(normal)
    ray.force_raycast_update()
    
    bounces+=1
    if bounces >= max_bounces:
        break
    
if prev !=null:
    prev.collision_mask = 3
    prev.collision_layer = 3
extends Node2D

onready var ray = $RayCast2D
onready var lain = $Node2D/Line2D

var vec = Vector2()
var max_bounces = 5

func _process(delta):
    lain.clear_points()
    
    vec.y-=1
    
    lain.add_point(Vector2.ZERO)
    
    ray.global_position = lain.global_position
    ray.cast_to = vec.normalized()*1000
    ray.force_update_transform()
    
    var prev = null
    var bounces = 0
    
    while true:
        if not ray.is_colliding():
            var pt = ray.global_position + ray.cast_to
            lain.add_point(lain.to_local(pt))
            break
        
        var coll = ray.get_collider()
        var pt = ray.get_collision_point()
        
        lain.add_point(lain.to_local(pt))
        
        if not coll.is_in_group("Mirrors"):
            break
            
        var normal = ray.get_collision_normal()
        
        if normal == Vector2.ZERO:
            break
        
        if prev !=null:
            prev.collision_mask = 3
            prev.collision_layer = 3
        prev = coll
        prev.collision_mask = 0
        prev.collision_layer = 0
        
        
        ray.global_position = pt
        ray.cast_to = ray.cast_to.bounce(normal)
        ray.force_raycast_update()
        
        bounces+=1
        if bounces >= max_bounces:
            break
        
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
Rollback to Revision 1 - Edit approval overridden by post owner or moderator
Source Link
extends Node2D

onready var ray = $RayCast2D
onready var lain = $Node2D/Line2D

var vec = Vector2()
var max_bounces = 5

func _process(delta):
    lain.clear_points()
  enter code here
    

extends Node2D

onready var ray = $RayCast2D onready var lain = $Node2D/Line2D

var vec = Vector2() var max_bounces = 5

func _process(delta): lain.clear_points()

vec.y-=1
    
    lain.add_point(Vector2.ZERO)
    
    ray.global_position = lain.global_position
    ray.cast_to = vec.normalized()*1000
    ray.force_update_transform()
    
    var prev = null
    var bounces = 0
    
    while true:
        if not ray.is_colliding():
            var pt = ray.global_position + ray.cast_to
            lain.add_point(lain.to_local(pt))
            break
        
        var coll = ray.get_collider()
        var pt = ray.get_collision_point()
        
        lain.add_point(lain.to_local(pt))
        
        if not coll.is_in_group("Mirrors"):
            break
            
        var normal = ray.get_collision_normal()
        
        if normal == Vector2.ZERO:
            break
        
        if prev !=null:
            prev.collision_mask = 3
            prev.collision_layer = 3
        prev = coll
        prev.collision_mask = 0
        prev.collision_layer = 0
        
        
        ray.global_position = pt
        ray.cast_to = ray.cast_to.bounce(normal)
        ray.force_raycast_update()
        
        bounces+=1
        if bounces >= max_bounces:
            break
        
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
extends Node2D

onready var ray = $RayCast2D
onready var lain = $Node2D/Line2D

var vec = Vector2()
var max_bounces = 5

func _process(delta):
    lain.clear_points()
    
    vec.y-=1
    
    lain.add_point(Vector2.ZERO)
    
    ray.global_position = lain.global_position
    ray.cast_to = vec.normalized()*1000
    ray.force_update_transform()
    
    var prev = null
    var bounces = 0
    
    while true:
        if not ray.is_colliding():
            var pt = ray.global_position + ray.cast_to
            lain.add_point(lain.to_local(pt))
            break
        
        var coll = ray.get_collider()
        var pt = ray.get_collision_point()
        
        lain.add_point(lain.to_local(pt))
        
        if not coll.is_in_group("Mirrors"):
            break
            
        var normal = ray.get_collision_normal()
        
        if normal == Vector2.ZERO:
            break
        
        if prev !=null:
            prev.collision_mask = 3
            prev.collision_layer = 3
        prev = coll
        prev.collision_mask = 0
        prev.collision_layer = 0
        
        
        ray.global_position = pt
        ray.cast_to = ray.cast_to.bounce(normal)
        ray.force_raycast_update()
        
        bounces+=1
        if bounces >= max_bounces:
            break
        
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
enter code here

extends Node2D

onready var ray = $RayCast2D onready var lain = $Node2D/Line2D

var vec = Vector2() var max_bounces = 5

func _process(delta): lain.clear_points()

vec.y-=1

lain.add_point(Vector2.ZERO)

ray.global_position = lain.global_position
ray.cast_to = vec.normalized()*1000
ray.force_update_transform()

var prev = null
var bounces = 0

while true:
    if not ray.is_colliding():
        var pt = ray.global_position + ray.cast_to
        lain.add_point(lain.to_local(pt))
        break
    
    var coll = ray.get_collider()
    var pt = ray.get_collision_point()
    
    lain.add_point(lain.to_local(pt))
    
    if not coll.is_in_group("Mirrors"):
        break
        
    var normal = ray.get_collision_normal()
    
    if normal == Vector2.ZERO:
        break
    
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
    prev = coll
    prev.collision_mask = 0
    prev.collision_layer = 0
    
    
    ray.global_position = pt
    ray.cast_to = ray.cast_to.bounce(normal)
    ray.force_raycast_update()
    
    bounces+=1
    if bounces >= max_bounces:
        break
    
if prev !=null:
    prev.collision_mask = 3
    prev.collision_layer = 3
enterextends codeNode2D

onready herevar ray = $RayCast2D

extends Node2D

onready var ray = $RayCast2D onready var lain = $Node2D/Line2D

var vec = Vector2() var max_bounces = 5

func _process(delta): lain.clear_points()

onready var lain = $Node2D/Line2D

var vec = Vector2()
var max_bounces = 5

func _process(delta):
    lain.clear_points()
    
    vec.y-=1
    
    lain.add_point(Vector2.ZERO)
    
    ray.global_position = lain.global_position
    ray.cast_to = vec.normalized()*1000
    ray.force_update_transform()
    
    var prev = null
    var bounces = 0
    
    while true:
        if not ray.is_colliding():
            var pt = ray.global_position + ray.cast_to
            lain.add_point(lain.to_local(pt))
            break
        
        var coll = ray.get_collider()
        var pt = ray.get_collision_point()
        
        lain.add_point(lain.to_local(pt))
        
        if not coll.is_in_group("Mirrors"):
            break
            
        var normal = ray.get_collision_normal()
        
        if normal == Vector2.ZERO:
            break
        
        if prev !=null:
            prev.collision_mask = 3
            prev.collision_layer = 3
        prev = coll
        prev.collision_mask = 0
        prev.collision_layer = 0
        
        
        ray.global_position = pt
        ray.cast_to = ray.cast_to.bounce(normal)
        ray.force_raycast_update()
        
        bounces+=1
        if bounces >= max_bounces:
            break
        
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
enter code here

extends Node2D

onready var ray = $RayCast2D onready var lain = $Node2D/Line2D

var vec = Vector2() var max_bounces = 5

func _process(delta): lain.clear_points()

vec.y-=1

lain.add_point(Vector2.ZERO)

ray.global_position = lain.global_position
ray.cast_to = vec.normalized()*1000
ray.force_update_transform()

var prev = null
var bounces = 0

while true:
    if not ray.is_colliding():
        var pt = ray.global_position + ray.cast_to
        lain.add_point(lain.to_local(pt))
        break
    
    var coll = ray.get_collider()
    var pt = ray.get_collision_point()
    
    lain.add_point(lain.to_local(pt))
    
    if not coll.is_in_group("Mirrors"):
        break
        
    var normal = ray.get_collision_normal()
    
    if normal == Vector2.ZERO:
        break
    
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
    prev = coll
    prev.collision_mask = 0
    prev.collision_layer = 0
    
    
    ray.global_position = pt
    ray.cast_to = ray.cast_to.bounce(normal)
    ray.force_raycast_update()
    
    bounces+=1
    if bounces >= max_bounces:
        break
    
if prev !=null:
    prev.collision_mask = 3
    prev.collision_layer = 3
extends Node2D

onready var ray = $RayCast2D
onready var lain = $Node2D/Line2D

var vec = Vector2()
var max_bounces = 5

func _process(delta):
    lain.clear_points()
    
    vec.y-=1
    
    lain.add_point(Vector2.ZERO)
    
    ray.global_position = lain.global_position
    ray.cast_to = vec.normalized()*1000
    ray.force_update_transform()
    
    var prev = null
    var bounces = 0
    
    while true:
        if not ray.is_colliding():
            var pt = ray.global_position + ray.cast_to
            lain.add_point(lain.to_local(pt))
            break
        
        var coll = ray.get_collider()
        var pt = ray.get_collision_point()
        
        lain.add_point(lain.to_local(pt))
        
        if not coll.is_in_group("Mirrors"):
            break
            
        var normal = ray.get_collision_normal()
        
        if normal == Vector2.ZERO:
            break
        
        if prev !=null:
            prev.collision_mask = 3
            prev.collision_layer = 3
        prev = coll
        prev.collision_mask = 0
        prev.collision_layer = 0
        
        
        ray.global_position = pt
        ray.cast_to = ray.cast_to.bounce(normal)
        ray.force_raycast_update()
        
        bounces+=1
        if bounces >= max_bounces:
            break
        
    if prev !=null:
        prev.collision_mask = 3
        prev.collision_layer = 3
Source Link
Loading