コード例 #1
0
        /// エフェクトモデルデータの読み込み
        public bool SetEffData()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            /// エフェクトモデルデータ
            for (int id = 0; id < (int)Data.EffTypeId.Max; id++)
            {
                int mdlResId = (int)Data.ModelResId.Eff00 + id;

                if (dataList.MdlFileNameList[mdlResId] != "")
                {
                    resMgr.LoadModel(mdlResId, "/Application/res/data/3D/effect/" + dataList.MdlFileNameList[mdlResId]);
                }
            }

            /// エフェクトテクスチャデータ
            for (int id = 0; id < (int)Data.ModelEffTexId.Max; id++)
            {
                int mdlTexId = (int)Data.ModelTexResId.EffA + id;

                for (int i = 0; i < dataList.TexFileNameList.GetLength(1); i++)
                {
                    if (dataList.TexFileNameList[mdlTexId, i] != "")
                    {
                        resMgr.LoadTexture(mdlTexId,
                                           dataList.TexFileNameList[mdlTexId, i],
                                           "/3D/effect/" + dataList.TexFileNameList[mdlTexId, i]);
                    }
                }
            }

            return(true);
        }
コード例 #2
0
ファイル: CtrlFixture.cs プロジェクト: hatano0x06/Coroppoxus
        /// 備品の登録
        public void EntryAddFix(int fixResId, Vector3 rot, Vector3 scale, Vector3 pos)
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            if (resMgr.GetModel((int)Data.ModelResId.Fix00 + fixResId) == null)
            {
                return;
            }

            ActorFixBase actorFix;

            Data.FixTypeId fixId = (Data.FixTypeId)fixResId;

            if (fixId == Data.FixTypeId.Fix00 || fixId == Data.FixTypeId.Fix01 || fixId == Data.FixTypeId.Fix03 || fixId == Data.FixTypeId.Fix04)
            {
                actorFix = new ActorFixWooden();
            }
            else
            {
                actorFix = new ActorFixNormal();
            }

            actorFix.Init();
            actorFix.Start();
            actorFix.SetMdlHandle(fixId);

            actorFixList.Add(actorFix);

            SetPlace((actorFixList.Count - 1), rot, scale, pos);
        }
コード例 #3
0
        /// 開始
        public override bool DoStart()
        {
//			"/Application/res/data/2D/" + dataList.TexFileNameList[mdlTexId,i]
//		Data.ModelDataManager    resMgr = Data.ModelDataManager.GetInstance();
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            spriteShader = new ShaderProgram("/Application/shaders/Texture2.cgx");
            textureInfo  = resMgr.SetTexture2((int)Data.Tex2dResId.MakingWall1);


            float r = textureInfo.w;
            float b = textureInfo.h;

//      scale = 1/(float)texture.Height;
            vertices = new VertexBuffer(4, VertexFormat.Float3, VertexFormat.Float2);

            vertices.SetVertices(0, new float[] { 0, 0, 0,
                                                  r, 0, 0,
                                                  r, b, 0,
                                                  0, b, 0 });

            vertices.SetVertices(1, new float[] { textureInfo.u0, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v1,
                                                  textureInfo.u0, textureInfo.v1 });

            texCenter.X = textureInfo.w / 2;
            texCenter.Y = textureInfo.h / 2;

            DoUpdateMatrix();
            return(true);
        }
コード例 #4
0
ファイル: ObjChMonster.cs プロジェクト: hatano0x06/Coroppoxus
        /// 開始
        public override bool DoStart()
        {
//			"/Application/res/data/2D/" + dataList.TexFileNameList[mdlTexId,i]
//		Data.ModelDataManager    resMgr = Data.ModelDataManager.GetInstance();
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            if (TexId == 0)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Noumin1);
            }
            else if (TexId == 1)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Senshi1);
            }
            else if (TexId == 2)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Souryo1);
            }
            else if (TexId == 3)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Zonbi1);
            }
            else if (TexId == 4)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Necromancer1);
            }

            uvPos   = new Vector2(textureInfo.u0, textureInfo.v0);
            uvSize  = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
            texSize = new Vector2(textureInfo.w / 10, textureInfo.h / 10);

            DoUpdateMatrix();
            return(true);
        }
コード例 #5
0
ファイル: ObjChWall.cs プロジェクト: hatano0x06/Coroppoxus
        public bool startforChange(int texnumber)
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            spriteShader = new ShaderProgram("/Application/shaders/Texture2.cgx");
            textureInfo  = resMgr.SetTexture2(texnumber);

            float r = textureInfo.w;
            float b = textureInfo.h;

//		scale = 1/(float)texture.Height;
            vertices = new VertexBuffer(4, VertexFormat.Float3, VertexFormat.Float2);

            vertices.SetVertices(0, new float[] { 0, 0, 0,
                                                  r, 0, 0,
                                                  r, b, 0,
                                                  0, b, 0 });

            vertices.SetVertices(1, new float[] { textureInfo.u0, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v1,
                                                  textureInfo.u0, textureInfo.v1 });


            texCenter.X = textureInfo.w / 2;
            texCenter.Y = textureInfo.h / 2;

            DoUpdateMatrix();
            return(true);
        }
コード例 #6
0
        /// 開始
        public override bool DoStart()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            if (TexIdForText < (int)Data.Tex2dResId.NormalCharMax)
            {
                textureInfo = resMgr.SetTexture2(TexId + (int)Data.Tex2dResId.SpeechBalloon1);
                ObjTex.Start();
            }
            else if (TexIdForText == (int)Data.Tex2dResId.Zonbi1)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.SpeechBalloon3);
            }
            uvPos  = new Vector2(textureInfo.u0, textureInfo.v0);
            uvSize = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
            if (TexIdForText < (int)Data.Tex2dResId.NormalCharMax)
            {
                texSize = new Vector2(textureInfo.w / 10 * ObjTex.scaleX, textureInfo.h / 10);
            }
            else if (TexIdForText == (int)Data.Tex2dResId.Zonbi1)
            {
                texSize = new Vector2(textureInfo.w / 10, textureInfo.h / 10);
            }

            DoUpdateMatrix();
            return(true);
        }
コード例 #7
0
ファイル: ObjFixNormal.cs プロジェクト: hatano0x06/Coroppoxus
/// public メソッド
///---------------------------------------------------------------------------

        /// モデルのセット
        public void SetMdlHandle(Data.FixTypeId fixTypeId, int lodLv)
        {
            if (nowLodLev != lodLv)
            {
                int fixTypeIdx = (int)fixTypeId;
                int mdlResId   = (int)ObjFixLodData.LodModelTbl[fixTypeIdx, lodLv];
                int texResId   = (int)Data.ModelTexResId.Fix00 + fixTypeIdx;
                int shaResId   = (int)Data.ModelShaderReslId.Normal;

                if (mdlResId >= (int)Data.ModelResId.Fix00)
                {
                    Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

                    /// 速度アップのため、事前にテクスチャをバインドしておく
                    useMdlHdl.StartNoBindTex(resMgr.GetModel(mdlResId),
                                             resMgr.GetTextureContainer(texResId), resMgr.GetShaderContainer(shaResId));
                    drawFlg = true;
                }
                else
                {
                    drawFlg = false;
                }
                nowLodLev = lodLv;
            }
        }
コード例 #8
0
        public Hp2dTex(int Id, float posX, float posY, float speed)
        {
            this.Id = Id;
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            if (Id == (int)Data.Tex2dResId.TowerStart)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Bosstower);
            }
            else if (Id == (int)Data.Tex2dResId.HouseStart)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.BossMonument);
            }
            else if (Id == (int)Data.Tex2dResId.WallStart)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.BossWall);
            }
            else
            {
                textureInfo = resMgr.SetTexture2((int)Id);
            }

            uvPos   = new Vector2(textureInfo.u0, textureInfo.v0);
            uvSize  = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
            texSize = new Vector2(textureInfo.w, textureInfo.h) * 1.5f;

            //randomにする
            rotate      = StaticDataList.getRandom(0, 360);
            rotatespeed = StaticDataList.getRandom(3, 6) / 100.0f;
            Pos.X       = posX;
            Pos.Y       = posY;
            this.speed  = speed;
            deadFlag    = false;
        }
コード例 #9
0
        /// ステージモデルデータの読み込み
        public bool SetStgData()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            /// ステージモデルデータ
            for (int id = 0; id < (int)Data.StageTypeId.Max; id++)
            {
                int mdlResId = (int)Data.ModelResId.Stage + id;

                if (dataList.MdlFileNameList[mdlResId] != "")
                {
                    resMgr.LoadModel(mdlResId, "/Application/res/data/3D/field/" + dataList.MdlFileNameList[mdlResId]);
                }
            }

            /// ステージテクスチャデータ
            for (int id = 0; id < (int)Data.StageTypeId.Max; id++)
            {
                int mdlTexId = (int)Data.ModelTexResId.Stage + id;

                for (int i = 0; i < dataList.TexFileNameList.GetLength(1); i++)
                {
                    if (dataList.TexFileNameList[mdlTexId, i] != "")
                    {
                        resMgr.LoadTexture(mdlTexId,
                                           dataList.TexFileNameList[mdlTexId, i],
                                           "/3D/field/" + dataList.TexFileNameList[mdlTexId, i]);
                    }
                }
            }

            return(true);
        }
コード例 #10
0
ファイル: ObjChWall.cs プロジェクト: hatano0x06/Coroppoxus
        /// 開始
        public override bool DoStart()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            spriteShader = new ShaderProgram("/Application/shaders/Texture2.cgx");
            textureInfo  = resMgr.SetTexture2((int)Data.Tex2dResId.Gareki);

            float r = textureInfo.w;
            float b = textureInfo.h;

            scale    = 1 / (float)textureInfo.h;
            vertices = new VertexBuffer(4, VertexFormat.Float3, VertexFormat.Float2);

            vertices.SetVertices(0, new float[] { 0, 0, 0,
                                                  r, 0, 0,
                                                  r, b, 0,
                                                  0, b, 0 });

            vertices.SetVertices(1, new float[] { textureInfo.u0, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v1,
                                                  textureInfo.u0, textureInfo.v1 });



            texCenter.X = textureInfo.w / 2;
            texCenter.Y = textureInfo.h / 2;

            DoUpdateMatrix();
            return(true);
        }
コード例 #11
0
ファイル: ObjChHobit.cs プロジェクト: hatano0x06/Coroppoxus
        public void changeTex(int Id)
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            textureInfo = resMgr.SetTexture2(Id);

            uvPos   = new Vector2(textureInfo.u0, textureInfo.v0);
            uvSize  = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
            texSize = new Vector2(textureInfo.w / 10, textureInfo.h / 10);
        }
コード例 #12
0
 public void Init()
 {
     Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
     textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Uppertooth);
     uvPos       = new Vector2(textureInfo.u0, textureInfo.v0);
     uvSize      = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
     texSize     = new Vector2(textureInfo.w, textureInfo.h) * 8.0f;
     Pos.X       = 450;
     Pos.Y       = -200;
 }
コード例 #13
0
        /// 開始
        public override bool DoStart()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Bosstower);
            uvPos       = new Vector2(textureInfo.u0, textureInfo.v0);
            uvSize      = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
            texSize     = new Vector2(textureInfo.w / 10, textureInfo.h / 10);

            DoUpdateMatrix();
            return(true);
        }
コード例 #14
0
        /// 開始
        public override bool DoStart()
        {
            int mdlResId = (int)Data.ModelResId.Eff07;
            int texResId = (int)Data.ModelTexResId.EffF;
            int shaResId = (int)Data.ModelShaderReslId.Normal;

            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            useMdlHdl.Start(resMgr.GetModel(mdlResId), resMgr.GetTextureContainer(texResId), resMgr.GetShaderContainer(shaResId));
            useMdlHdl.SetPlayAnim(0, true);

            DoUpdateMatrix();
            return(true);
        }
コード例 #15
0
ファイル: ObjFixNormal.cs プロジェクト: hatano0x06/Coroppoxus
        /// モデルのセット
        public void SetBeforehandMdlBindTex(Data.FixTypeId fixTypeId, int lodLv)
        {
            int fixTypeIdx = (int)fixTypeId;
            int mdlResId   = (int)ObjFixLodData.LodModelTbl[fixTypeIdx, lodLv];
            int texResId   = (int)Data.ModelTexResId.Fix00 + fixTypeIdx;
            int shaResId   = (int)Data.ModelShaderReslId.Normal;

            if (mdlResId >= (int)Data.ModelResId.Fix00)
            {
                Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
                useMdlHdl.Start(resMgr.GetModel(mdlResId),
                                resMgr.GetTextureContainer(texResId), resMgr.GetShaderContainer(shaResId));
            }
        }
コード例 #16
0
ファイル: ObjStage.cs プロジェクト: hatano0x06/Coroppoxus
 /// 開始
 public override bool DoStart()
 {
     Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
     useMdlHdl.Start(resMgr.GetModel((int)Data.ModelResId.Stage),
                     resMgr.GetTextureContainer((int)Data.ModelTexResId.Stage),
                     resMgr.GetShaderContainer((int)Data.ModelShaderReslId.Normal)
                     );
     useMdlSkyHdl.Start(resMgr.GetModel((int)Data.ModelResId.Sky),
                        resMgr.GetTextureContainer((int)Data.ModelTexResId.Sky),
                        resMgr.GetShaderContainer((int)Data.ModelShaderReslId.Normal)
                        );
     useMdlHdl.SetPlayAnim(0, true);
     useMdlSkyHdl.SetPlayAnim(0, true);
     return(true);
 }
コード例 #17
0
ファイル: ObjChWall.cs プロジェクト: hatano0x06/Coroppoxus
        /// 開始
        public override bool DoStart()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            if (TexId != (int)Data.Tex2dResId.BossWall)
            {
                changeTex((int)Data.Tex2dResId.Gareki);
            }
            else
            {
                changeTex((int)Data.Tex2dResId.BossWall);
            }
            DoUpdateMatrix();
            return(true);
        }
コード例 #18
0
ファイル: CtrlFixture.cs プロジェクト: hatano0x06/Coroppoxus
        /// 草木のモデルセット
        private void setPlantModel(int id, int fixTypeIdx)
        {
            /// 草木のアニメーションは配置物個々で行うと処理の負荷がかかるため、
            /// CTRLにて全草木の配置物共通でアニメーションを行う

            int mdlResId = (int)Data.ModelResId.Fix00 + fixTypeIdx;
            int texResId = (int)Data.ModelTexResId.Fix00 + fixTypeIdx;
            int shaResId = (int)Data.ModelShaderReslId.Normal;

            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            plantModelHdl[id].Start(resMgr.GetModel(mdlResId),
                                    resMgr.GetTextureContainer(texResId), resMgr.GetShaderContainer(shaResId));

            plantModelHdl[id].SetPlayAnim(0, true);
        }
コード例 #19
0
ファイル: ObjEqpSword.cs プロジェクト: hatano0x06/Coroppoxus
        /// 開始
        public override bool DoStart()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            useMdlHdl.Start(resMgr.GetModel((int)Data.ModelResId.Sword),
                            resMgr.GetTextureContainer((int)Data.ModelTexResId.Sword),
                            resMgr.GetShaderContainer((int)Data.ModelShaderReslId.Normal)
                            );

            useMdlEffHdl.Start(resMgr.GetModel((int)Data.ModelResId.Eff00),
                               resMgr.GetTextureContainer((int)Data.ModelTexResId.EffA),
                               resMgr.GetShaderContainer((int)Data.ModelShaderReslId.Normal)
                               );
            useMdlEffHdl.SetPlayAnim(0, true);
            DoUpdateMatrix();
            return(true);
        }
コード例 #20
0
ファイル: LifeGauge.cs プロジェクト: hatano0x06/Coroppoxus
        public void Init()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.Life);
            uvPos       = new Vector2(textureInfo.u0, textureInfo.v0);
            uvSize      = new Vector2(textureInfo.u1 - textureInfo.u0, textureInfo.v1 - textureInfo.v0);
            texSize     = new Vector2(textureInfo.w, textureInfo.h) * 1.55f;

            /*
             * rot.X = 0.0f;
             * rot.Y = 0.0f;
             * rot.Z = 0.0f;
             */
            Pos.X = 125;
            Pos.Y = 60;
        }
コード例 #21
0
ファイル: ObjEffect.cs プロジェクト: hatano0x06/Coroppoxus
/// public メソッド
///---------------------------------------------------------------------------

        /// モデルのセット
        public void SetMdlHandle(Data.EffTypeId effTypeId)
        {
            int effTypeIdx = (int)effTypeId;
            int mdlResId   = (int)Data.ModelResId.Eff00 + effTypeIdx;
            int texResId   = (int)Data.ModelTexResId.EffA;
            int shaResId   = (int)Data.ModelShaderReslId.Normal;

            switch (effTypeId)
            {
            case Data.EffTypeId.Eff00:    texResId = (int)Data.ModelTexResId.EffA;    break;

            case Data.EffTypeId.Eff01:    texResId = (int)Data.ModelTexResId.EffB;    break;

            case Data.EffTypeId.Eff02:    texResId = (int)Data.ModelTexResId.EffB;    break;

            case Data.EffTypeId.Eff03:    texResId = (int)Data.ModelTexResId.EffC;    break;

            case Data.EffTypeId.Eff04:    texResId = (int)Data.ModelTexResId.EffC;    break;

            case Data.EffTypeId.Eff05:    texResId = (int)Data.ModelTexResId.EffD;    break;

            case Data.EffTypeId.Eff06:    texResId = (int)Data.ModelTexResId.EffE;    break;

            case Data.EffTypeId.Eff07:    texResId = (int)Data.ModelTexResId.EffF;    break;

            case Data.EffTypeId.Eff08:    texResId = (int)Data.ModelTexResId.EffE;    break;

            case Data.EffTypeId.Eff09:    texResId = (int)Data.ModelTexResId.EffE;    break;

            case Data.EffTypeId.Eff10:    texResId = (int)Data.ModelTexResId.EffG;    break;

            case Data.EffTypeId.Eff11:    texResId = (int)Data.ModelTexResId.EffH;    break;

            case Data.EffTypeId.Eff12:    texResId = (int)Data.ModelTexResId.EffI;    break;

            case Data.EffTypeId.Eff13:    texResId = (int)Data.ModelTexResId.EffI;    break;

            case Data.EffTypeId.Eff14:    texResId = (int)Data.ModelTexResId.EffI;    break;
            }


            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            useMdlHdl.Start(resMgr.GetModel(mdlResId), resMgr.GetTextureContainer(texResId), resMgr.GetShaderContainer(shaResId));
            useMdlHdl.SetPlayAnim(0, false);
        }
コード例 #22
0
/// public メソッド
///---------------------------------------------------------------------------

        /// キャラモデルデータの読み込み
        public bool SetCharData()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();

            /// 英雄

            /*
             * mdlResId = (int)Data.ModelResId.Hero;
             * mdlTexId = (int)Data.ModelTexResId.Hero;
             * resMgr.LoadModel( mdlResId,    "/Application/res/data/3D/char/"+dataList.MdlFileNameList[mdlResId] );
             * for( int i=0; i<dataList.TexFileNameList.GetLength(1); i++ ){
             *  if( dataList.TexFileNameList[mdlTexId,i] != "" ){
             *      resMgr.LoadTexture( mdlTexId,
             *                          dataList.TexFileNameList[mdlTexId,i],
             *                          "/3D/char/" + dataList.TexFileNameList[mdlTexId,i] );
             *  }
             * }
             */

            resMgr.Load2dTexture();
            return(true);
        }
コード例 #23
0
        /// 開始
        public override bool DoStart()
        {
            Data.ModelDataManager resMgr = Data.ModelDataManager.GetInstance();
            spriteShader = new ShaderProgram("/Application/shaders/Texture2.cgx");
            if (TexIdForText < 3)
            {
                textureInfo = resMgr.SetTexture2(TexId + (int)Data.Tex2dResId.SpeechBalloon1);
            }
            else if (TexIdForText == 3)
            {
                textureInfo = resMgr.SetTexture2((int)Data.Tex2dResId.SpeechBalloon3);
            }

            float r = textureInfo.w;
            float b = textureInfo.h;

            vertices = new VertexBuffer(4, VertexFormat.Float3, VertexFormat.Float2);

            vertices.SetVertices(0, new float[] { 0, 0, 0,
                                                  r, 0, 0,
                                                  r, b, 0,
                                                  0, b, 0 });

            vertices.SetVertices(1, new float[] { textureInfo.u0, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v0,
                                                  textureInfo.u1, textureInfo.v1,
                                                  textureInfo.u0, textureInfo.v1 });

            texCenter.X = textureInfo.w / 2;
            texCenter.Y = textureInfo.h / 2;
            if (TexIdForText < 3)
            {
                ObjTex.Start();
            }
            DoUpdateMatrix();
            return(true);
        }
コード例 #24
0
 /// モデルタイプのセット
 public void SetType( int type )
 {
     Data.ModelDataManager    resMgr = Data.ModelDataManager.GetInstance();
     TypeId = type;
     useMdlEffHdl.SetPlayAnim( 0, true );
 }