uFrame에서 Controller가 ViewModel과 분리되어 있는 이유
본문
using UnityEngine;
public class CustomLevelLoaderView : LevelLoaderView
{
public UISlider m_slider;
public UILabel m_label;
public void Update() {
if(this.m_slider != null)
{
this.m_slider.value = Model.Progress;
}
if (m_label != null)
{
this.m_label.text = Model.Status;
}
}
}
GameManager.TransitionLevel<{SceneManager}> (
(container) =>
{
container._{SceneManager}Settings = new {SceneManager}Settings ();
// something do on finished.
Debug.Log("transition done");
},
new string[]{"{LevelName}"}
);
상기의 기본 코드를 기반으로 작성한 generic function
using System;
/// <summary>
/// Transition uFrame Scene.
///
/// Recommend place this function on singleton class or statically
///
/// Synopsys
/// TransitionScene<TitleScene> ("TitleScene");
///
/// Compitable with uFrame 1.5.1 rc2
/// @author Donghyun You
/// @since 2015. 1. 18.
/// </summary>
/// <param name="sceneName">Scene name that registered on builtin levels</param>
/// <param name="onFinished">On finished.</param>
/// <typeparam name="T">The 1st type parameter.</typeparam>
public void TransitionScene<T>(string sceneName,Action onFinished=null) where T : SceneManager {
if (string.IsNullOrEmpty (sceneName))
{
throw new ArgumentNullException("sceneName");
}
Type type = typeof(T);
onFinished = onFinished ?? delegate() {};
GameManager.TransitionLevel<T> (
(container) =>
{
var settingParam = container.GetType ().GetField("_"+type.Name+"Settings");
var settingInstance = Activator.CreateInstance(Type.GetType (type.Name+"Settings"));
settingParam.SetValue(container,settingInstance);
// something do on finished.
onFinished();
},
new string[]{sceneName}
);
}
public override decimal LoadPriority
{
get { return 1; }
}
public override bool Enabled
{
get { return true; }
set {}
}
public override void Initialize (uFrameContainer container)
{
var typeContainer = uFrameEditor.TypesContainer;
// Color는 기본 설정에 포함되어있지 않음.
typeContainer.RegisterInstance (new ElementItemType () {
Type = typeof(Color),
Group = "",
Label = "Color",
IsPrimitive = true,
IsUnityEngine = true,
},"Color");
}