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.
		
		
		
		
		
			
	
	
		
			
				
					
						
							|  |  |  | extends Node3D | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _input(event) -> void: | 
					
						
							|  |  |  | 	if !event.is_action_type(): return | 
					
						
							|  |  |  | 	if event is InputEventKey: | 
					
						
							|  |  |  | 		if not Global.controller_type == Enum.EControllerType.Keyboard: | 
					
						
							|  |  |  | 			Global.controller_type = Enum.EControllerType.Keyboard | 
					
						
							|  |  |  | 			SignalManager.input_device_change.emit() | 
					
						
							|  |  |  | 	elif event is InputEventJoypadButton or event is InputEventJoypadMotion: | 
					
						
							|  |  |  | 		if not Global.controller_type == Enum.EControllerType.Joypad: | 
					
						
							|  |  |  | 			Global.controller_type = Enum.EControllerType.Joypad | 
					
						
							|  |  |  | 			SignalManager.input_device_change.emit() | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	for action_name in InputMap.get_actions(): | 
					
						
							|  |  |  | 		if event.is_action_pressed(action_name): | 
					
						
							|  |  |  | 			SignalManager.input_action_pressed.emit(action_name) | 
					
						
							|  |  |  | 		elif event.is_action_released(action_name): | 
					
						
							|  |  |  | 			SignalManager.input_action_released.emit(action_name) | 
					
						
							|  |  |  | 	var input_dir: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down") | 
					
						
							|  |  |  | 	# 限定为8方向 | 
					
						
							|  |  |  | 	if input_dir.length() > 0: | 
					
						
							|  |  |  | 		# 计算角度并将其限制为45度的倍数 | 
					
						
							|  |  |  | 		var angle = input_dir.angle() | 
					
						
							|  |  |  | 		var snapped_angle = round(angle / (PI / 4)) * (PI / 4) | 
					
						
							|  |  |  | 		input_dir = Vector2(cos(snapped_angle), sin(snapped_angle)) | 
					
						
							|  |  |  | 	SignalManager.input_action_move.emit(input_dir) |