23 Ocak 2017 Pazartesi

Learning uGaMa: Usage of Commands - Part2


Command:

Yapmak istediğiniz bazı işlemleri ayrı bir scrip içerisinde gerçekleştirebilirsiniz. Bu sayede Scriptler'i işlevlerine göre guruplandırabilirsiniz. Hangi işlevin nerede yapıldığını ve bu işlevlerde bir değişiklik yapılacağı zaman tek bir yerde değişiklik yapmış olmanızı sağlar. Bu işlevin farklı farklı çağıracağınız yerlerde (farklı scene, faklı med, hatta farklı commandlar gibi) bu işleve tekbir satırlar ulaşıp gerçekleştirilmesi sağlanır. Command'ları Context sınıfları içerisinde tanımlayabilirsiniz. İsteseniz Command'larla birlikte parametre gönderebilirsiniz. Commandlar içerisine gönderdiğiniz parametreleri yaratmış olduğunuz command içerisinde kullanabilirsiniz. Command'larda yapılan işlem tamamlandığında bu Command'ı çağırdığınız key ile mediatörler içerisinde dinleyebilirsiniz. Bu sayede bir çeşit event gibi kullanmış olursunuz.

Bu videoda anlattığım kodları aşağıda paylaşıyorum. Ayrıca unity package olarak şu link üzerinden indirip yaratmış olduğunuz boş bir projeye bu package'ı import edebilirsiniz.

https://github.com/CengizKuscu/LearningUGaMa/blob/master/part1%26part2.unitypackage

uGaMa için Link: https://github.com/CengizKuscu/uGaMa-v2.0/blob/master/uGaMa-v2.0.unitypackage



public enum AppEvent
{
    LOAD_SCENE,
    QUIT
}

using uGaMa.Context;

public class MainMenuContext : Context
{

 public override void Bindings()
 {
        mediatorMap.Bind<MainMenuView>().To<MainMenuMED>();

        commandMap.Bind(AppEvent.LOAD_SCENE).To<LoadSceneCMD>();
        commandMap.Bind(AppEvent.QUIT).To<QuitGameCMD>();
 }

 public override void UnBindings()
 {

 }
}

using uGaMa.Mediate;
using UnityEngine.UI;

public class MainMenuView : View
{
    public Button PlayBtn;
    public Button QuitBtn;
}

using UnityEngine;
using uGaMa.Mediate;

public class MainMenuMED : Mediator
{
    MainMenuView _view;

 // Use this for initialization
 public override void OnRegister()
 {
        _view = GetView() as MainMenuView;

        _view.PlayBtn.onClick.AddListener(PlayGameBtn);
        _view.QuitBtn.onClick.AddListener(QuitGameBtn);
 }

    private void QuitGameBtn()
    {
        Debug.Log("QuitGame");
        dispatcher.Dispatch(AppEvent.QUIT);
    }

    private void PlayGameBtn()
    {
        Debug.Log("PlayGame");
        dispatcher.Dispatch(AppEvent.LOAD_SCENE, AppScenes.LEVEL_1);
    }

    public override void OnRemove()
 {

 }
}

public class AppScenes
{
    public const string MAIN_MENU = "MainMenu";
    public const string CONTINUE_MENU = "ContinueMenu";
    public const string LEVEL_1 = "Level1";
}

using uGaMa.Command;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadSceneCMD : Command
{
 public override void Execute(NotifyParam notify)
 {
        string param = notify.data as string;
        Debug.Log("LoadSceneCMD Execute : "+param);
        SceneManager.LoadScene(param);
    }
}

using uGaMa.Command;
using UnityEngine;

public class QuitGameCMD : Command
{

 public override void Execute(NotifyParam notify)
 {
        Debug.Log("QUIT CMD Execute");
        Application.Quit();
 }
}

Hiç yorum yok:

Yorum Gönder