using UnityEngine;
using System.Collections;

public class RenderLineScaler : MonoBehaviour
{
    private const string _textureName = "_MainTex";
    private Material _lineMaterial;
    // x = 初始z长度,y = 初始z缩放,
    private Vector2 _defaultScale;
    private Transform _cameraTrans;
    private float _uvSpeed;
    
    public void Init(Transform cameraTrans, float uvSpeed)
    {
        _cameraTrans = cameraTrans;
        _uvSpeed = uvSpeed;
        var meshRenderer = GetComponentInChildren<MeshRenderer>();
        transform.localRotation = Quaternion.identity;
        _lineMaterial = meshRenderer.material;
        var size = meshRenderer.bounds.size;
        _defaultScale = new Vector2(size.z, transform.localScale.z);
    }

    public void UpdatePoint(Vector3 source, Vector3 target)
    {
        transform.position = source;
        var delta = target - source;
        if (delta == Vector3.zero)
            transform.localScale = Vector3.zero;
        else
        {
            var z = delta.normalized;
            var y = _cameraTrans.position - (transform.position + delta * 0.5f); 
            if (y == Vector3.zero)
                transform.localScale = Vector3.zero;
            else
            {
                var scale = delta.magnitude / _defaultScale.x * _defaultScale.y;
                transform.localScale = new Vector3(1f, 1f, scale);
                transform.localRotation = Quaternion.LookRotation(z, y);
                _lineMaterial.SetTextureOffset(_textureName, new Vector2(0f, Time.time * _uvSpeed));
                _lineMaterial.SetTextureScale(_textureName, new Vector2(1f, scale));
            }
        }
    }
}