Untitled
unknown
plain_text
2 years ago
2.6 kB
6
Indexable
extends Node2D export var max_range = 1000 var cast_to_position: Vector2 = Vector2(0, max_range) var particle_increment = 16 onready var ray = $RayCast2D var collision_health = 100 var bullet_start_point: Vector2 = Vector2() var bullet_end_point: Vector2 = Vector2() var ray_start_point: Vector2 = Vector2() var ray_end_point: Vector2 = Vector2() func collider_is_valid(collider): if collider.is_in_group("tree"): return true return false func get_collision_damage(collider): var collider_damage = 100.0 if collider.is_in_group("tree"): collider_damage = 50.0 return collider_damage func stop_bullet(point): collision_health = 0 ray_end_point = point bullet_end_point = point func _ready(): bullet_start_point = global_position bullet_end_point = global_position + cast_to_position ray_start_point = global_position ray_end_point = global_position + cast_to_position while collision_health > 0: ray.cast_to = cast_to_position ray.force_raycast_update() if ray.is_colliding(): var collider_object = ray.get_collider() var collision_point = ray.get_collision_point() if collider_is_valid(collider_object): var collision_damage = get_collision_damage(collider_object) collision_health -= collision_damage if collision_health <= 0: stop_bullet(collision_point) else: ray_start_point = collision_point ray.add_exception(ray.get_collider()) # HIT EFFECT var impact_inst = preload("res://scenes/effect_impact_default.tscn").instance() get_tree().get_root().add_child(impact_inst) impact_inst.global_position = collision_point impact_inst.global_rotation = global_rotation else: stop_bullet(collision_point) else: break var bullet_length = bullet_start_point.distance_to(bullet_end_point) var line_inst = preload("res://scenes/effect_bullet_line.tscn").instance() get_tree().get_root().add_child(line_inst) line_inst.global_position = global_position line_inst.global_rotation = global_rotation line_inst.add_point(Vector2(0, 24)) line_inst.add_point(Vector2(0, bullet_length)) var particle_point: Vector2 = bullet_start_point var amount_of_particles: float = bullet_length / particle_increment amount_of_particles = floor(amount_of_particles) if amount_of_particles >= 100: amount_of_particles = 100; for n in amount_of_particles: particle_point = particle_point.move_toward(bullet_end_point, particle_increment) var particle_inst = preload("res://scenes/effect_bullet_distortion.tscn").instance() get_tree().get_root().add_child(particle_inst) particle_inst.global_position = particle_point
Editor is loading...