You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			GDScript
		
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			GDScript
		
	
| extends CharacterBody3D
 | |
| class_name Fragment
 | |
| 
 | |
| @export var sub: PackedScene
 | |
| @export var gravity_scale: float = 1.0
 | |
| @export var velocity_min: Vector2 = Vector2.ONE
 | |
| @export var velocity_max: Vector2 = Vector2.ONE
 | |
| 
 | |
| @onready var sprite3D: Sprite3D = %Sprite3D as Sprite3D
 | |
| 
 | |
| var gravity           = ProjectSettings.get_setting("physics/3d/default_gravity")
 | |
| var frame_rate: float = 0.1
 | |
| var frame_time: float = 0
 | |
| 
 | |
| 
 | |
| func _ready():
 | |
|     var dir: Vector2 = Util.angle_dir(randf_range(0, 360)) * randf_range(velocity_min.x, velocity_max.x)
 | |
|     velocity.x = dir.x
 | |
|     velocity.z = dir.y
 | |
|     velocity.y = randf_range(velocity_min.y, velocity_max.y)
 | |
| 
 | |
| 
 | |
| func _process(delta: float) -> void:
 | |
|     velocity.y -= gravity * gravity_scale * delta
 | |
|     var frame_count: int      = sprite3D.hframes * sprite3D.vframes
 | |
|     var frame_time_all: float = frame_rate * frame_count
 | |
|     frame_time += delta
 | |
|     sprite3D.frame = int(frame_time / frame_rate) % frame_count
 | |
|     frame_time = fmod(frame_time, frame_time_all)
 | |
|     move_and_slide()
 | |
|     var collision_count: int = get_slide_collision_count()
 | |
|     if collision_count > 0:
 | |
|         if sub:
 | |
|             var normal: Vector3 = Vector3.ZERO
 | |
|             for i in collision_count:
 | |
|                 var collision: KinematicCollision3D = get_slide_collision(i)
 | |
|                 normal += collision.get_normal()
 | |
|             normal = normal.normalized()
 | |
|             Global.effect_mgr.cast_particle(sub, global_position, normal)
 | |
|         queue_free()
 |