UnityのJavascriptでState Patternをやる2

こんにちは。ヤマヤタケシです。

UnityのJavascriptでState Patternをやるで、ステートパターンについて書きました。
が、使ってみてイマイチだったので、やり方を変えました。
こんな風に。

var count : int = 0;
class State
{

    function State( 
	t_init : Function,
	t_update : Function,
	t_exit : Function )
    {
	init   = t_init   ;
	update = t_update ;
	exit   = t_exit   ;
    }

    function Init() { init(); }
    function Update() { update(); }
    function Exit() { exit(); }

    var init   : Function;
    var update : Function;
    var exit   : Function;
}


function MainStateInit()   { Debug.Log ( "Main:init" ); }
function MainStateUpdate() { Debug.Log ( "Main:update" ); count++; }
function MainStateExit()   { Debug.Log ( "Main:exit" ); }   
var mainState = new MainState( MainStateInit, MainStateUpdate, MainStateExit );

function WaitStateInit()   { Debug.Log ( "Wait:init" ); }
function WaitStateUpdate() { Debug.Log ( "Wait:update" ); }
function WaitStateExit()   { Debug.Log ( "Wait:exit" ); }
var waitState = new WaitState( WaitStateInit, WaitStateUpdate, WaitStateExit );

function StateTest()
{
    Debug.Log( "FunctionTest" );
    var s : State;
    s = mainState;
    {
	s.Init();
	s.Update();
	s.Exit();
    }
    s = waitState;
    {
	s.Init();
	s.Update();
	s.Exit();
    }
}

以前は継承をベースにしたのですが、それだと変数へ直接アクセスができません。
以前はステートもクラスなので外側のメンバへは親への参照を持たせて、parent.count みたいに書く必要がありました。
まあいいやと思っていましたが、我慢できなくなりFunctionを使うように変更しました。

UnityのJavascriptは(UnityScript)は、Javascriptとはやっぱり違いますね。Function型を使う必要がありました。普通のJavascriptだとJavascritpだと関数は第一級オブジェクトだったのでそのまま代入できたのに。

まだ改良の余地があるかもしれませんが、とりあえず満足して使っています。

そんじゃまた。

軽い気持ちで有名になりたいのでクリックをお願いします!

UnityのJavascriptでState Patternをやる2” への1件のコメント

  1. ピンバック: UnityのJavascriptでState Patternをやる | ヤマヤタケシのブログ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です