2025-02-10 02:13:46 +00:00
|
|
|
using DDD.Interfaces;
|
2024-06-16 23:41:21 +00:00
|
|
|
using UnityEngine;
|
|
|
|
|
2025-02-10 02:13:46 +00:00
|
|
|
namespace DDD
|
2024-06-16 23:41:21 +00:00
|
|
|
{
|
|
|
|
public class SeeThrough : MonoBehaviour
|
|
|
|
{
|
|
|
|
[SerializeField]
|
|
|
|
private LayerMask _maskLayer;
|
2024-06-28 03:22:32 +00:00
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
private float _size = 0.5f;
|
2024-06-16 23:41:21 +00:00
|
|
|
|
|
|
|
private Camera _mainCamera;
|
2024-06-30 19:05:24 +00:00
|
|
|
private Material _hitMaterialInstance;
|
|
|
|
private Material _previousMaterialInstance;
|
2024-06-16 23:41:21 +00:00
|
|
|
|
|
|
|
// Hashes
|
|
|
|
private static readonly int _sizeHash = Shader.PropertyToID("_Size");
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
{
|
2025-02-10 02:13:46 +00:00
|
|
|
//_mainCamera = CombatCameraManager.Instance.MainCamera;
|
2024-06-16 23:41:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
{
|
|
|
|
if (!_mainCamera) return;
|
|
|
|
|
|
|
|
var direction = _mainCamera.transform.position - transform.position;
|
|
|
|
var ray = new Ray(transform.position, direction.normalized);
|
|
|
|
|
|
|
|
if (Physics.Raycast(ray, out var hit, 100f, _maskLayer))
|
|
|
|
{
|
2024-06-30 19:05:24 +00:00
|
|
|
_hitMaterialInstance = hit.collider.GetComponent<IMaterialInstance>()?.MaterialInstance;
|
|
|
|
if (!_hitMaterialInstance) return;
|
2024-06-16 23:41:21 +00:00
|
|
|
|
2024-06-30 19:05:24 +00:00
|
|
|
if (!_hitMaterialInstance.HasProperty(_sizeHash)) return;
|
2024-06-16 23:41:21 +00:00
|
|
|
|
2024-06-30 19:05:24 +00:00
|
|
|
if (_previousMaterialInstance && _previousMaterialInstance != _hitMaterialInstance && _previousMaterialInstance.HasProperty(_sizeHash))
|
2024-06-16 23:41:21 +00:00
|
|
|
{
|
2024-06-30 19:05:24 +00:00
|
|
|
_previousMaterialInstance.SetFloat(_sizeHash, 0f);
|
2024-06-16 23:41:21 +00:00
|
|
|
}
|
|
|
|
|
2024-06-30 19:05:24 +00:00
|
|
|
_hitMaterialInstance.SetFloat(_sizeHash, _size);
|
|
|
|
_previousMaterialInstance = _hitMaterialInstance;
|
2024-06-16 23:41:21 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2024-06-30 19:05:24 +00:00
|
|
|
if (!_previousMaterialInstance) return;
|
2024-06-16 23:41:21 +00:00
|
|
|
|
2024-06-30 19:05:24 +00:00
|
|
|
if (_previousMaterialInstance.HasProperty(_sizeHash))
|
2024-06-16 23:41:21 +00:00
|
|
|
{
|
2024-06-30 19:05:24 +00:00
|
|
|
_previousMaterialInstance.SetFloat(_sizeHash, 0f);
|
2024-06-16 23:41:21 +00:00
|
|
|
}
|
2024-06-30 19:05:24 +00:00
|
|
|
_previousMaterialInstance = null;
|
2024-06-16 23:41:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|