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