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.
		
		
		
		
		
			
		
			
				
	
	
		
			21 lines
		
	
	
		
			731 B
		
	
	
	
		
			GDScript
		
	
			
		
		
	
	
			21 lines
		
	
	
		
			731 B
		
	
	
	
		
			GDScript
		
	
| extends ActionWithTarget
 | |
| class_name ActionMoveTo
 | |
| 
 | |
| @export var dist_min: float = 0
 | |
| @export var dist_max: float = 5
 | |
| @export var offset: float = 0.1 #0为无偏差 1为偏差90度
 | |
| 
 | |
| 
 | |
| func execute(character: Character, target: Character, blackboard: Blackboard) -> int:
 | |
| 	var dir: Vector2 = target.pos2D() - character.pos2D()
 | |
| 	var dist: float  = dir.length()
 | |
| 	if (dist > dist_min ) and (dist < dist_max):
 | |
| 		character.move_stop()
 | |
| 		return SUCCESS
 | |
| 	var is_far: bool      = dist >= dist_max
 | |
| 	var to_dir: Vector2   = dir if is_far else -dir
 | |
| 	var offset_deg: float = 90 * randf() * clamp(offset, 0, 1) * (1 if randf() < 0.5 else -1)
 | |
| 	to_dir = to_dir.rotated(deg_to_rad(offset_deg))
 | |
| 	character.move_to(dir if is_far else -dir)
 | |
| 	return FAILURE
 |