Exemplo n.º 1
0
        /** スプライトインデックス。計算。
         */
        public void CalcSpriteIndex(SpriteList a_spritelist)
        {
            //リセット。
            for (int ii = 0; ii < this.list.Length; ii++)
            {
                this.list[ii].ResetSpriteIndex();
            }

            //スプライト。
            {
                int       t_calc_mode      = 0;
                int       t_calc_layer     = 0;
                int       t_calc_index     = 0;
                LayerItem t_calc_layeritem = this.list[t_calc_layer];

                while (t_calc_index < a_spritelist.GetListMax())
                {
                    Fee.Render2D.Sprite2D t_sprite = a_spritelist.GetItem(t_calc_index);
                    int t_layerindex = this.CalcLayerIndexFromDrawPriority(t_sprite.GetDrawPriority());

                    if (t_calc_layer < this.list.Length)
                    {
                        if (t_calc_mode == 0)
                        {
                            //開始インデックス。

                            if (t_layerindex < 0)
                            {
                                //除外。
                                t_calc_index++;
                            }
                            else
                            {
                                if (t_calc_layer == t_layerindex)
                                {
                                    //開始位置発見。
                                    t_calc_layeritem.sprite_index_start = t_calc_index;
                                    t_calc_layeritem.sprite_index_last  = t_calc_index;

                                    t_calc_index++;
                                    t_calc_mode = 1;
                                }
                                else
                                {
                                    //再チェック。
                                    t_calc_layeritem.sprite_index_start = -1;
                                    t_calc_layeritem.sprite_index_last  = -1;

                                    t_calc_layer++;
                                    t_calc_layeritem = this.list[t_calc_layer];
                                    t_calc_mode      = 0;
                                }
                            }
                        }
                        else
                        {
                            //終了インデックス。

                            if (t_calc_layer == t_layerindex)
                            {
                                //終了インデックス候補。
                                t_calc_layeritem.sprite_index_last = t_calc_index;
                                t_calc_index++;
                            }
                            else
                            {
                                //再チェック。
                                t_calc_layer++;
                                t_calc_layeritem = this.list[t_calc_layer];
                                t_calc_mode      = 0;
                            }
                        }
                    }
                }
            }
        }