unity3d mvvm c#

using UnityEngine;
using System.Collections;

public interface IState {
    void BeforEnter();
    void BeforLeave();
}

public interface ISceneState: IState {

}

public class GenFSM  {
    IState _state;
    public GenFSM(IState state){
        this._state = state;
        this._state.BeforEnter();
    }

    public void ChangeState(IState state){
        this._state.BeforLeave();
        this._state = state;
        this._state.BeforEnter();
    }
}

namespace Scene {
    public class Login: ISceneState {
        // ui vm
        public void BeforEnter(){
            // uivm.Oncommand( show ui)
        }

        public void BeforLeave(){

        }

        public void OnLogin(){
            //SceneViewModel.changeState(SceneViewModel.Game);
        }
    }

    public class Game: ISceneState {
        // package vm

        HeroViewModel heroViewModel;

        public void BeforEnter(){
            Application.LoadLevel(1);
            this.heroViewModel  = new HeroViewModel();
        }
        
        public void BeforLeave(){
            
        }
    }
}

public interface HeroCmd {
    void UseSkill();
    void AddBlood();
    void Say();
}

public class HeroViewModel: HeroCmd {
    public HeroViewModel(){
        var prefab = GameObject.Find ("hero") as GameObject;
        prefab.AddComponent("HeroBehaviour");
        HeroBehaviour inst = prefab.GetComponent<HeroBehaviour>();
        inst.vm = this;
    }

    public void OnCommand(string cmd){
        Debug.Log("on command: " +  cmd);
    }

    public void UseSkill(){}
    public void AddBlood(){}
    public void Say(){}
}



public class HeroBehaviour: MonoBehaviour {

    public HeroCmd vm;

    void Update(){
        if(Input.anyKeyDown){
            // animation
            vm.UseSkill();
        }
    }
}


public class UILoginViewModel {
    Scene.Login _l;
    public UILoginViewModel(Scene.Login L){
        this._l = L;
        var prefab = GameObject.Find ("login_ui") as GameObject;
        prefab.AddComponent("UIClickBehaviour");
    }

    void Login(){
        this._l.OnLogin();
    }
}


public class SceneViewModel {
    private Scene.Login _stateLogin;
    private Scene.Login _stateGame;

    GenFSM scenefsm;

    public SceneViewModel(){
        this._stateLogin = new Scene.Login();
        this.scenefsm = new GenFSM(this._stateLogin);
    }

    //command
    public void ChangeState(ISceneState state){
        scenefsm.ChangeState(state);
    }
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。