seefood_diet / Assets / Scripts / SDUIPresentView.cs
SDUIPresentView.cs
Raw
using System;
using UniRx;
using UnityEngine;

public interface ISDUIPresentView {

    Transform BodyTransform { get; }
    RectTransform ViewRect { get; }

    void Init (ISDUIPresentModel model);
    IObservable<ISDUIElement> Show (ISDUIElement element);
    IObservable<Unit> Hide ();
    IObservable<ISDUIElement> Navigate (ISDUIElement element, ISDUIElement previous);
    IObservable<ISDUIElement> Back (ISDUIElement element, ISDUIElement previous);
}

public class SDUIPresentView : MonoBehaviour, ISDUIPresentView {

    [SerializeField] protected Transform m_BodyTransform;
    public Transform BodyTransform { get { return m_BodyTransform; } }

    protected RectTransform m_ViewRect;
    public RectTransform ViewRect { get { return m_ViewRect; } }

    ISDUIPresentModel m_Model;

    protected virtual void Awake () {

        m_ViewRect = this.gameObject.GetComponent<RectTransform> ();
    }

    protected virtual void Start () {

        var safeAreaInset = SDEnvironment.Default.SafeAreaInset;
        m_ViewRect.offsetMin = new Vector2 (m_ViewRect.offsetMin.x, safeAreaInset.Bottom);
        m_ViewRect.offsetMax = new Vector2 (m_ViewRect.offsetMax.x, -safeAreaInset.Top);
    }

    public void Init (ISDUIPresentModel model) {

        m_Model = model;
    }

    public virtual IObservable<ISDUIElement> Show (ISDUIElement element) {

        return Observable.Return (element);
    }

    public virtual IObservable<Unit> Hide () {

        return Observable.Return (Unit.Default);
    }

    public virtual IObservable<ISDUIElement> Navigate (ISDUIElement element, ISDUIElement previous) {

        return Observable.Return (element);
    }

    public virtual IObservable<ISDUIElement> Back (ISDUIElement element, ISDUIElement previous) {

        return Observable.Return (element);
    }
}