復旧間近@シューティング

おはようございます。
もう少しで以前のゲーム画面へ復旧できるところまでいきました。
長かった・・・

長くなった原因は、

  • 描画すべき構造体が複数あったこと
  • 描画すべき構造体の管理がバラバラであったこと
  • 新しく追加したAnimation構造体で実現できる機能が多くて考え込んだ
  • Animation構造体に変更時、下位層の変数へアクセスするために長い文に変更しなければならなかった

です。
なので、最低限の動作を実装して組み込みました。
Animation構造体では下位構造体(Imageなど)の描画ロジックがあれば利用できるので、そちらを使いました。

以下はAnimation構造体とその周辺構造体の宣言です

    typedef struct Motion{//1フレームに動く(モーションする)値を保持
	    Position move;//移動座標
        int move_frame;
        double rotate;//移動角度値
        int rotate_frame;
        double alpha;//alpha
        int alpha_frame;
        Size size;
        int size_frame;
    }Motion;

    /*Movie*/

    #define MOVIE_CONTROL_STOP 0
    #define MOVIE_CONTROL_PLAY 1
    #define MOVIE_CONTROL_LOOP 2
    #define MOVIE_CONTROL_NEXT 3
    #define MOVIE_CONTROL_PREV 4
    

    typedef struct Movie{
        Image *koma;
        TimeLine limiter;
        int control_status;
    }Movie;

    /*View*/

    typedef struct View{
	    int enable;
	    Movie movie;
	    DrawCore core;
        Motion motion;
    }View;

    /*Effecter*/
    #define EFFECTER_TRIG_MAX               20
    #define EFFECTER_COMMAND_ELEMENT_MAX    7//コマンドを構成する要素の数
    #define EFFECTER_INDEX_COMMAND          0//1
    #define EFFECTER_INDEX_ACTIONFRAME      1//2
    #define EFFECTER_INDEX_TERMSFRAME       2//3
    #define EFFECTER_INDEX_PARAM1           3//4
    #define EFFECTER_INDEX_PARAM2           4//5
    #define EFFECTER_INDEX_PARAM3           5//6
    #define EFFECTER_INDEX_PARAM4           6//7
    //エフェクト定数 (MotionのSet〜関数に対応する)
    #define EFFECT_NONE         0
    #define EFFECT_MOVETRIG     1
    #define EFFECT_ALPHATRIG    2
    #define EFFECT_ROLLTRIG     3
    #define EFFECT_ROTATETRIG   4
    #define EFFECT_SIZETRIG     5
    #define EFFECT_MOVE         6
    #define EFFECT_ALPHA        7
    #define EFFECT_ROTATE       8
    #define EFFECT_SIZE         9


    typedef struct Effecter{
        double effectcommand_list[EFFECTER_TRIG_MAX][EFFECTER_COMMAND_ELEMENT_MAX];
    }Effecter;



    /*Animation*/
    #define ANIMATION_EFFECT_ELEMENT_MAX      100
    #define ANIMATION_CONTROL_STOP 0
    #define ANIMATION_CONTROL_PLAY 1
    #define ANIMATION_CONTROL_LOOP 2
    typedef struct Animation{
        int enable;
        TimeLine timeline;
        View views[ANIMATION_EFFECT_ELEMENT_MAX];//View<->Effect 1対1の関係を持っている
        Effecter effects[ANIMATION_EFFECT_ELEMENT_MAX]; 
        int control_status;
    }Animation;


一番大きいのは、Effecter構造体を用意したことです。まだ機能としては未実装(ロジックは書いたけど未テストのが正しい表現)ながら、
既存の旧Effect構造体とは全く関係の無い構造体で、トランジションを登録しておくことができます。登録されたトランジション命令は指定されたフレームに到達すると自動的に発行される仕組みです。
発想はやっぱりFlashAS3のムービークリップクラス・・・


Effecter構造体の周辺に見えるエフェクト定数が各トランジション命令に対応しています。

あとは、新しくEffecterが影響を与えるタイムラインが分離されました。これは既存のMovie構造体が持つタイムラインとは別で、トランジション専用のタイムラインになります。