//-------------------------------------------------------- 
 | 
//    [Author]:           第二世界 
 | 
//    [  Date ]:           Thursday, September 07, 2017 
 | 
//-------------------------------------------------------- 
 | 
using UnityEngine; 
 | 
using System.Collections; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
  
 | 
public class ScreenDiffuseMove : MonoBehaviour 
 | 
{ 
 | 
  
 | 
    [SerializeField] DiffuseType m_MoveType = DiffuseType.MoveUp; 
 | 
    public DiffuseType moveType { get { return m_MoveType; } } 
 | 
  
 | 
    [SerializeField] float m_Speed = 10f; 
 | 
    public float speed { 
 | 
        get { return m_Speed; } 
 | 
        set { m_Speed = value; } 
 | 
    } 
 | 
  
 | 
    [SerializeField] TweenCurve m_SpeedRatioCurve; 
 | 
    [SerializeField] float m_Duration = 1f; 
 | 
    public float duration { 
 | 
        get { return m_Duration; } 
 | 
        set { m_Duration = value; } 
 | 
    } 
 | 
  
 | 
    [SerializeField] float m_Delay = 0f; 
 | 
    public float delay { 
 | 
        get { return m_Delay; } 
 | 
        set { m_Delay = value; } 
 | 
    } 
 | 
  
 | 
    [SerializeField] bool m_IsLocal = true; 
 | 
    public bool isLocal { 
 | 
        get { return m_IsLocal; } 
 | 
    } 
 | 
  
 | 
    float beginTime = 0f; 
 | 
    float endTime = 0f; 
 | 
    Vector2 direction = Vector2.up; 
 | 
    bool disableOnEnd = true; 
 | 
  
 | 
    public void Begin(bool _disableOnEnd = true) 
 | 
    { 
 | 
        beginTime = Time.time + delay; 
 | 
        endTime = Time.time + delay + duration; 
 | 
        disableOnEnd = _disableOnEnd; 
 | 
  
 | 
        switch (m_MoveType) 
 | 
        { 
 | 
            case DiffuseType.MoveUp: 
 | 
                direction = Vector2.up * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.MoveDown: 
 | 
                direction = Vector2.down * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.MoveLeft: 
 | 
                direction = Vector2.left * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.MoveRight: 
 | 
                direction = Vector2.right * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.RelativePosition: 
 | 
                direction = new Vector2(this.transform.position.x, this.transform.position.y).normalized * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.ReversalRelativePosition: 
 | 
                direction = new Vector2(-this.transform.position.x, this.transform.position.y).normalized * m_Speed; 
 | 
                break; 
 | 
        } 
 | 
  
 | 
        this.enabled = true; 
 | 
        if (!this.gameObject.activeInHierarchy) 
 | 
        { 
 | 
            this.SetActive(true); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public void Begin(Vector3 _direction, bool _disableOnEnd = true) 
 | 
    { 
 | 
        beginTime = Time.time + delay; 
 | 
        endTime = Time.time + delay + duration; 
 | 
        disableOnEnd = _disableOnEnd; 
 | 
  
 | 
        switch (m_MoveType) 
 | 
        { 
 | 
            case DiffuseType.MoveUp: 
 | 
                direction = Vector2.up * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.MoveDown: 
 | 
                direction = Vector2.down * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.MoveLeft: 
 | 
                direction = Vector2.left * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.MoveRight: 
 | 
                direction = Vector2.right * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.RelativePosition: 
 | 
                direction = new Vector2(_direction.x, _direction.y).normalized * m_Speed; 
 | 
                break; 
 | 
            case DiffuseType.ReversalRelativePosition: 
 | 
                direction = new Vector2(_direction.x, -_direction.y).normalized * m_Speed; 
 | 
                break; 
 | 
        } 
 | 
  
 | 
        this.enabled = true; 
 | 
        if (!this.gameObject.activeInHierarchy) 
 | 
        { 
 | 
            this.SetActive(true); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void LateUpdate() 
 | 
    { 
 | 
        if (Time.time < beginTime) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        if (Time.time < endTime) 
 | 
        { 
 | 
            var delta = direction * Time.deltaTime * m_SpeedRatioCurve.Evaluate((Time.time - beginTime) / duration); 
 | 
            if (isLocal) 
 | 
            { 
 | 
                this.transform.localPosition += new Vector3(delta.x, delta.y, 0); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                this.transform.position += new Vector3(delta.x, delta.y, 0); 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            if (disableOnEnd) 
 | 
            { 
 | 
                this.enabled = false; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    public enum DiffuseType 
 | 
    { 
 | 
        MoveUp, 
 | 
        MoveDown, 
 | 
        MoveLeft, 
 | 
        MoveRight, 
 | 
        RelativePosition, 
 | 
        ReversalRelativePosition, 
 | 
    } 
 | 
} 
 |