Untitled
unknown
plain_text
3 years ago
2.6 kB
9
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...