Laser Script not working anymore since update

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By javrocks

Since Godot updated. My laser beam script which was working previously is no longer working. The setget function has changed or something, giving me an error on the variable is_casting.

extends RayCast2D

@export var cast_speed := 7000.0
@export var max_length := 1400
@export var growth_time := 0.1
@export var power = 30

@export var power_avail = true

@onready var casting_particles := $CastingParticles2D
@onready var collision_particles := $CollisionParticles2D
@onready var beam_particles := $BeamParticles2D
@onready var fill := $FillLine2D
@onready var line_width: float = fill.width

var is_casting := false setget set_is_casting   #THIS IS NOT WORKING ANYMORE


@onready var Player = get_tree().get_root().find_child("Player", true, false)
@onready var Head = get_tree().get_root().find_child("Head", true, false)

signal burn
signal fix
signal des



func _ready() -> void:
    global_position = Head.global_position + Vector2(11,-1)
    fill.points[1] = Vector2.ZERO
    set_physics_process(false)


func _unhandled_input(_event: InputEvent) -> void:
	
    if Input.is_action_just_pressed("ui_left_click"):
	    self.is_casting = true
	
    if Input.is_action_just_released("ui_left_click"):
	    $StopCasting.start()
	    $Reduce.stop()
	    $Add.start()
	
	
func _on_StopCasting_timeout():
    disappear()

func _physics_process(delta: float) -> void:

	
    target_position = (target_position + Vector2.RIGHT * cast_speed * 
delta)#.limit_length(max_length)
	
    if power == 0:
	    power_avail = false
    else: power_avail = true

    if power == 0:
	     disappear()
    if power_avail == false:
	    disappear()

    if power_avail == true:
	    cast_beam()        #                            This fires laser
	
    if Input.is_action_just_pressed("ui_left_click"):
	    $Reduce.start()
	    $Add.stop()
	

func set_is_casting(cast: bool) -> void:


    is_casting = cast    

    if is_casting:
	    target_position = Vector2.ZERO
	    fill.points[1] = target_position
	    appear()
    else:
	    collision_particles.emitting = false
	    disappear()
	
	
    set_physics_process(true)       # This fires laser
    beam_particles.emitting = is_casting
    casting_particles.emitting = is_casting


func cast_beam() -> void:
    var cast_point := target_position

    # Required, the raycast's collisions update one frame after moving otherwise, making the laser overshoot the collision point.
  
    force_raycast_update()
    if is_colliding():
	    cast_point = to_local(get_collision_point())
	    collision_particles.process_material.direction = Vector3(
		    get_collision_normal().x, get_collision_normal().y, 0
	    )
	
	    if get_collider().is_in_group("Asteroids"):
		    emit_signal("burn",get_collider())
		
	    if get_collider().is_in_group("Ship"):
		    emit_signal("burn",get_collider())
	    else : 
		    emit_signal("fix")
	
	    if get_collider().is_in_group("Missile"):
		    emit_signal("des",get_collider())


    collision_particles.emitting = is_colliding()

    fill.points[1] = cast_point
    collision_particles.position = cast_point
    beam_particles.position = cast_point * 0.5
    beam_particles.process_material.emission_box_extents.x = cast_point.length() * 0.5


func appear() -> void:
    var tween = create_tween()
    if tween.is_running():
	    tween.stop()
    tween.tween_property(fill, "width", line_width, growth_time * 2)
    tween.play()


func disappear() -> void:
    var tween = create_tween()
    if tween.is_running():
	    tween.stop()
    tween.tween_property(fill, "width", fill.width, growth_time)
    tween.play()
    set_physics_process(false) 
    is_casting = false
    beam_particles.emitting = false
    casting_particles.emitting = false
    collision_particles.emitting = false
    emit_signal("fix")



func _on_Reduce_timeout():
    if power != 0:
	    power = power - 1
    if power == 0:
	    $Reduce.stop()

func _on_Add_timeout():
    if power != 30:
	    power = power + 1
    if power == 30:
	    $Add.stop()
    power_avail = true
:bust_in_silhouette: Reply From: jgodfrey

The setget function has changed or something

Yes, it has. Like most things, details about the new set/get format are in the docs

Below is how i set is_casting. However it’s telling me that an infinite recursion is occuring in my disappear() function, Which is suppose to turn the beam off.

var is_casting:
    set = set_is_casting


func disappear() -> void:
    var tween = create_tween()
    if tween.is_running():
	    tween.stop()
    tween.tween_property(fill, "width", fill.width, growth_time)
    tween.play()
    set_physics_process(false) 
    self.is_casting = false
    beam_particles.emitting = false
    casting_particles.emitting = false
    collision_particles.emitting = false
    emit_signal("fix")

javrocks | 2023-05-07 19:32