Perekyp/Assets/Scripts/Player/Tools/PlayerToolManager.cs

71 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<Camera>();
}
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<CarPartVisuals>();
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;
}
}