using UnityEngine; public enum ToolType { Hands, Sander, SprayCan } public class PlayerToolManager : MonoBehaviour { [Header("Инструмент")] public ToolType currentTool = ToolType.Hands; [Header("Настройки")] [SerializeField] private float toolRange = 2.5f; [SerializeField] private LayerMask interactableLayer; [SerializeField] private float sandSpeed = 0.35f; // Скорость очистки в сек. [SerializeField] private Color sprayPaintColor = new Color(0.1f, 0.4f, 0.8f); // Выбранный цвет краски private Camera playerCam; private void Awake() { playerCam = GetComponentInChildren(); } private void Update() { // Не используем инструменты, если открыто меню или выбраны пустые руки if (currentTool == ToolType.Hands) return; // Зажата ЛКМ — работаем инструментом if (Input.GetMouseButton(0)) { UseActiveTool(); } } private void UseActiveTool() { Ray ray = new Ray(playerCam.transform.position, playerCam.transform.forward); if (!Physics.Raycast(ray, out RaycastHit hit, toolRange, interactableLayer)) return; CarPartVisuals visuals = hit.collider.GetComponentInParent(); if (visuals == null) return; if (currentTool == ToolType.Sander) { // ШЛИФОВКА: снижаем ржавчину к 0 if (visuals.CurrentRust > 0f) { float updatedRust = visuals.CurrentRust - (sandSpeed * Time.deltaTime); visuals.SetRust(updatedRust); } } else if (currentTool == ToolType.SprayCan) { // ПОКРАСКА: красим, только если ржавчина удалена if (visuals.CurrentRust <= 0.05f) { visuals.SetPaintColor(sprayPaintColor); } else { // Подсказка игроку Debug.Log("Нельзя красить: деталь еще ржавая! Зашлифуйте её."); } } } public void SelectTool(ToolType newTool) { currentTool = newTool; } }