Untitled

 avatar
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...