MoviePlayNode.cs 2.65 KB
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MoviePlayNode : MonoBehaviour
{
    [SerializeField]
    private Text _textNode;
    [SerializeField]
    private Transform _dragTarget;
    [SerializeField]
    private float _moveSpeed;
    [SerializeField]
    private Collider2D _button;

    private string _filename;
    private NetworkUser _netNode;
    private Vector3 _initPos;
    private RectTransform _xform;

    private void Start()
    {
        _initPos = _button.transform.position;
        _xform = _button.transform.GetComponent<RectTransform>();
    }

    public void Initialize(string title, string filename, NetworkUser parent)
    {
        _textNode.text = title;
        _filename = filename;
        _netNode = parent;

        gameObject.name = title;
    }

    private bool _isDragging = false;
    private float _lastVel = 0;

    public void Drag(UnityEngine.EventSystems.BaseEventData test)
    {
        _isDragging = true;
        _canReset = false;

        iTween.Stop(_button.gameObject);

        var ped = (UnityEngine.EventSystems.PointerEventData)test;
        _button.transform.position += Vector3.up * ped.delta.y;
        _lastVel = ped.delta.y;
    }

    public void DragEnd()
    {
        _isDragging = false;
        _canPlay = true;
    }

    private bool _canReset = false;

    private void Update()
    {
        if (_button.transform.position.y >= _dragTarget.position.y)
        {
            _isDragging = false;
            PlayMovie();
        }

        if (_isDragging) return;

        _lastVel /= 1.15f;
        if (_lastVel < 0) _lastVel = 0;

        _button.transform.position += Vector3.up * _lastVel;

        if (_lastVel <= 0.1f)
            _canReset = true;

        if (_canReset)
        {
            _canReset = false;
            iTween.MoveUpdate(_button.gameObject, iTween.Hash(
                "y", _initPos.y,
                "speed", _moveSpeed
                ));
        }
    }

    private void LateUpdate()
    {
        if (_button.transform.position.y > _dragTarget.position.y)
        {
            _lastVel = 0;
            _button.transform.position = new Vector3(_button.transform.position.x, _dragTarget.position.y, _button.transform.position.z);
        }
        if (_button.transform.position.y < _initPos.y)
        {
            _lastVel = 0;
            _button.transform.position = new Vector3(_button.transform.position.x, _initPos.y, _button.transform.position.z);
        }
    }

    private bool _canPlay = true;

    public void PlayMovie()
    {
        if (!_canPlay || _isDragging) return;

        _netNode.CmdLoadVideo(_filename);
        _canPlay = false;
    }
}