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);
    }
}

 

转载于:https://www.cnblogs.com/lightlfyan/p/4207348.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值