示例#1
0
 /// <summary>
 /// MCRect型で取得する
 /// </summary>
 /// <param name="rc"></param>
 public void GetRect(out MCRect rc)
 {
     rc        = new MCRect();
     rc.top    = (int)(1.0f / TextureInvW * spl.StartU);
     rc.left   = (int)(1.0f / TextureInvH * spl.StartV);
     rc.bottom = rc.top + (int)(Width - 1);
     rc.right  = rc.left + (int)(Width - 1);
 }
示例#2
0
        public MCBaseSprite CreateSpriteFromTextureName(string name, float anchorX = float.MinValue, float anchorY = float.MinValue)
        {
            string spriteName;
            //---------------------------------------------
            //! テクスチャースの読み込み
            //---------------------------------------------
            MCBaseTexture baseTx;

            if (!App.ImageMgr.GetTexture(name, out baseTx))
            {
                baseTx = MCTexture.CreateTextureFromFile(
                    App,
                    name,
                    name
                    );
                if (baseTx == null)
                {
                    throw new Exception("スプライト作成で、テキストテクスチャ[" + name + "]からテクスチャ作成失敗しました。");
                }
            }
            int w = baseTx.GetDesc().D2.Width;
            int h = baseTx.GetDesc().D2.Height;

            spriteName = CreateName(name, 0, 0, w, h, anchorX, anchorY);

            MCTexture tx = (MCTexture)baseTx;
            //---------------------------------------------
            //! スプライト登録
            //---------------------------------------------
            MCBaseSprite spriteData;

            if (!App.SpriteMgr.GetSpriteData(spriteName, out spriteData))
            {
                MCSprite sp;
                MCRect   rc = new MCRect();

                bool ret;
                rc.SetXYWH(0, 0, w, h);

                if (anchorX == float.MinValue && anchorY == float.MinValue)
                {
                    sp = MCSprite.CreateSprite(App, spriteName, baseTx, rc, MC_SPRITE_ANCHOR.CENTER);
                }
                else
                {
                    sp = MCSprite.CreateSprite(App, spriteName, baseTx, rc, MC_SPRITE_ANCHOR.CUSTOM, anchorX, anchorY);
                }

                if (sp == null)
                {
                    throw new Exception("スプライト作成失敗[" + spriteName + "]既に登録されている名前か、それ以外です。");
                }
                spriteData = sp;
            }

            m_spriteMgr.Add(spriteData, true);
            return(spriteData);
        }
        /// <summary>
        /// 指定した幅高さで、スプライトを作成する
        /// </summary>
        /// <param name="name">スプライト名</param>
        /// <param name="hTx"></param>
        /// <param name="w">幅、省略時1024</param>
        /// <param name="h">高さ、省略時1024</param>
        /// <returns></returns>
        protected MCDrawSprite CreateSpriteType1(string name, MCBaseTexture hTx, int w = 1024, int h = 1024)
        {
            //=====================================
            // マップチップ用のスプライト作成
            MCRect rc = new MCRect();

            rc.SetXYWH(0, 0, w, h);
            return(CreateSpriteType2(hTx, name, rc, w / 2, h / 2));
        }
        public MCBaseSprite CreatePrintScreenSprite(int x, int y, int w, int h, float anchorX = float.MinValue, float anchorY = float.MinValue)
        {
            //---------------------------------------------
            //! テクスチャースの読み込み
            //---------------------------------------------
            MCBaseTexture txISP;
            string        str;

            if (!App.ImageMgr.GetTexture("PrintScreen", out txISP))
            {
                str = "PrintScreenプライト取得に失敗しました。";
                throw new Exception(str);
            }

            string spriteName = CreateName("PrintScreen", x, y, w, h, anchorX, anchorY);


            MCTexture txSP = (MCTexture)txISP;
            //---------------------------------------------
            //! スプライト登録
            //---------------------------------------------
            MCBaseSprite spriteData;

            if (!App.SpriteMgr.GetSpriteData(spriteName, out spriteData))
            {
                MCRect   rc = new MCRect();
                MCSprite sp;
                rc.SetXYWH(x, y, w, h);

                if (anchorX == float.MinValue && anchorY == float.MinValue)
                {
                    sp = MCSprite.CreateSprite(App, spriteName, txISP, rc, MC_SPRITE_ANCHOR.CENTER);
                }
                else
                {
                    sp = MCSprite.CreateSprite(App, spriteName, txISP, rc, MC_SPRITE_ANCHOR.CUSTOM, anchorX, anchorY);
                }


                if (sp == null)
                {
                    throw new Exception("スプライト作成失敗[" + spriteName + "]既に登録されている名前か、それ以外です。");
                }

                spriteData = sp;
            }
            else
            {
                throw new Exception("PrintScreenスプライト[" + spriteName + "]は既に存在します。");
            }

            m_spriteMgr.Add(spriteData, true);
            return(spriteData);
        }
        /// <summary>
        /// 指定した幅高さで、スプライトを作成する
        /// </summary>
        /// <param name="hTx"></param>
        /// <param name="name">スプライト名</param>
        /// <param name="rc"></param>
        /// <param name="x">X座標</param>
        /// <param name="y">Y座標</param>
        /// <returns></returns>
        protected MCDrawSprite CreateSpriteType2(MCBaseTexture hTx, string name, MCRect rc, float x, float y)
        {
            MCDrawSprite draw = new MCDrawSprite(App);

            var handle = m_spriteRegister.CreateSpriteFromTextureName(name, rc.X, rc.Y, rc.Width, rc.Heith);

            draw = m_spriteRegister.CreateDrawSprite(handle);
            //=====================================
            // マップチップ用のスプライト作成
            draw.D2RenderType = (int)SPRITE_TYPE.DEFAULT;
            draw.Position     = new MCVector3(x, y, 0);
            return(draw);
        }
示例#6
0
        /// <summary>
        /// スプライトの作成
        /// </summary>
        /// <param name="name">取得、または作成するスプライト名</param>
        /// <param name="tx">基本テクスチャーハンドル</param>
        /// <param name="rc">テクスチャーから切り取る短径</param>
        /// <param name="x">アンカー位置X</param>
        /// <param name="y">アンカー表示位置Y</param>
        /// <returns>描画するスプライトMCDrawSprite</returns>
        public MCSprite GetCreateSprite(string name, MCBaseTexture tx, MCRect rc, float x = float.MinValue, float y = float.MinValue)
        {
            MCSprite sprite = null;
            bool     ret;

            if (tx == null)
            {
                return(null);
            }

            //=====================================
            // スプライト作成
            MCBaseSprite spTmp;

            if (App.SpriteMgr.GetSpriteData(name, out spTmp))
            {
                MCRect rect;
                if (spTmp.GetID() != MCSprite.SpriteID)
                {
                    return(null);
                }
                sprite = (MCSprite)spTmp;
                if (sprite.flags.SpriteType != (int)MC_SPRITE_DATA.SIMPLE)
                {
                    throw new Exception(name + " スプライトは、分割タイプ");
                }
                sprite.GetRect(out rect);
                if (!(rc == rect))
                {
                    return(sprite);
                }
            }
            else
            {
                if (x == float.MinValue || y == float.MinValue)
                {
                    sprite = MCSprite.CreateSprite(App, name, tx, rc, MC_SPRITE_ANCHOR.CENTER);
                }
                else
                {
                    sprite = MCSprite.CreateSprite(App, name, tx, rc, MC_SPRITE_ANCHOR.CUSTOM, x, y);
                }

                if (sprite == null)
                {
                    return(null);
                }
            }

            return(sprite);
        }
示例#7
0
 /// <summary>
 /// MCRect型から、1つのスプライトデータを作る
 /// </summary>
 /// <param name="rect"></param>
 public void ResetRect(MCRect rect)
 {
     if (flags.SpriteType == (uint)MC_SPRITE_DATA.SIMPLE)
     {
         Width      = rect.Width;
         Height     = rect.Heith;
         spl.StartU = TextureInvW * rect.left;
         spl.StartV = TextureInvH * (rect.top);
         spl.EndU   = TextureInvW * (rect.left + Width);
         spl.EndV   = TextureInvH * (rect.top + Height);
     }
     else
     {
         Debug.Assert(false);
     }
 }
示例#8
0
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }
            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;

                //=====================================
                // テクスチャー作成
                if (m_hMainRT == null)
                {
                    App.ImageMgr.GetTexture("2D_main_screen", out m_hMainRT);
                }
                if (m_hTx == null)
                {
                    m_hTx = GetCreateRenderTargetTexture2D("2D_Technique", m_mainTxLenght, m_mainTxLenght);
                }
                else
                {
                    m_hTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }
                if (m_hPrintSTx == null)
                {
                    App.ImageMgr.GetTexture("PrintScreen", out m_hPrintSTx);
                }

                //=====================================
                // 通常スプライト作成
                if (m_drawSprite == null)
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_sprite     = (MCSprite)m_spriteRegister.CreateSpriteFromTextureName("2D_Technique", rc.X, rc.Y, rc.Width, rc.Heith);
                    m_drawSprite = m_spriteRegister.CreateDrawSprite(m_sprite);
                    //=====================================
                    // マップチップ用のスプライト作成
                    m_drawSprite.D2RenderType = (int)SPRITE_TYPE.DEFAULT;
                    m_drawSprite.Position     = new MCVector3(
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f),
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f), 0
                        );
                }
                else
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_sprite.ResetRect(rc);

                    m_drawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f),
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f), 0
                        );
                }


                //=====================================
                // カメラの作成
                if (m_isConstCoordinate)
                {
                    if (m_hTxCamera == null)
                    {
                        CreateViewTextureCamera("FixedCameraSpriteD2Screen");
                    }
                }
                else
                {
                    if (m_hTxCamera == null)
                    {
                        CreateViewTextureCamera("MCTexture");
                    }
                }
                if (m_hTxCamera != null)
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }

                // ビューポートの設定
                m_aVP = new RawViewportF[] { new RawViewportF()
                                             {
                                                 X        = 0,
                                                 Y        = 0,
                                                 Width    = m_mainTxLenght,
                                                 Height   = m_mainTxLenght,
                                                 MinDepth = 0,
                                                 MaxDepth = 1.0f,
                                             } };
            }
        }
示例#9
0
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }

            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;
                //=====================================
                // テクスチャー作成
                if (m_mainScreenTx == null)
                {
                    m_mainScreenTx = GetCreateRenderTargetTexture2D("2D_main_screen", m_mainTxLenght, m_mainTxLenght);
                }
                else
                {
                    m_mainScreenTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }

                //---------------------------------------
                // メインスクリーン用常駐描画スプライト作成
                //---------------------------------------
                if (m_backSprite == null)
                {
                    m_backSprite = (MCSprite)m_spriteRegister.CreateSpriteFromTextureName("2D_main_screen", 0, 0, m_mainTxLenght, m_mainTxLenght, 0, 0);
                }
                else
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_backSprite.ResetRect(rc);
                }

                RawViewportF[] v;
                GetCurrentViewPort(out v);
                if (m_backDrawSprite == null)
                {
                    m_backDrawSprite          = m_spriteRegister.CreateDrawSprite(m_backSprite);
                    m_backDrawSprite.Effect   = (int)DCRL.DEF_SPRITE;
                    m_backDrawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }
                else
                {
                    m_backDrawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }


                //=====================================
                // カメラの作成
                if (m_hTxCamera == null)
                {
                    CreateTextureCamera("MCTexture", m_mainTxLenght, m_mainTxLenght);
                }
                else
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }
            }
        }
示例#10
0
        public static MCSprite CreateSprite(
            Application app,
            string spriteName,
            MCBaseTexture texture,
            MCRect rc,
            MC_SPRITE_ANCHOR anchorType = MC_SPRITE_ANCHOR.CUSTOM,
            float centerX = 0.0f, float centerY = 0.0f
            )
        {
            MCSprite sp = new MCSprite();

            // 登録済みのスプライトか?
            if (app.SpriteMgr.IsSprite(spriteName))
            {
                return(sp);
            }

            sp.SetTexture(texture);

            // テクスチャーの情報を取得する
            Texture2DDescription d2TxDesc = texture.GetDesc().D2;


            sp.flags.AnchorType = (uint)anchorType;
            sp.flags.SpriteType = (uint)MC_SPRITE_DATA.SIMPLE;
            sp.Name             = spriteName;
            sp.Width            = rc.Width;
            sp.Height           = rc.Heith;

            if (anchorType == MC_SPRITE_ANCHOR.CUSTOM)
            {
                sp.Anchor = new MCVector2(centerX, centerY);
            }
            else
            {
                sp.Anchor = new MCVector2(rc.Width >> 1, rc.Heith >> 1);
            }

            // UV座標作成
            float fFW = 1.0f / (d2TxDesc.Width);
            float fFH = 1.0f / (d2TxDesc.Height);

            sp.TextureInvW = fFW;
            sp.TextureInvH = fFH;
            sp.spl         = new MCSauceSprite();
            sp.spl.StartU  = rc.left * fFW;
            sp.spl.StartV  = rc.top * fFH;
            sp.spl.EndU    = (rc.right + 1) * fFW;
            sp.spl.EndV    = (rc.bottom + 1) * fFH;
            // 基準となる球体を作る
            float r = (float)System.Math.Sqrt(sp.Width * sp.Width + sp.Height * sp.Height);

            sp.Sphere = new Sphere(
                new MCVector3(r * 0.5f, -r * 0.5f, 0.0f),
                r
                );
            // 登録
            if (app.SpriteMgr.RegisterSprite(spriteName, sp))
            {
                return(sp);
            }

            return(sp);
        }
示例#11
0
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }
            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;

                //=====================================
                // テクスチャー作成
                if (m_hTx == null)
                {
                    MCPrintScreenTexture.Create(App, "2d_mapchip", m_mainTxLenght, m_mainTxLenght, out m_hTx);
                }
                else
                {
                    m_hTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }
                RawViewportF[] v;
                GetCurrentViewPort(out v);
                if (m_drawSprite == null)
                {
                    m_sprite              = (MCSprite)m_spriteRegister.CreateSpriteFromTextureName("mapchip", 0, 0, m_mainTxLenght, m_mainTxLenght, 0, 0);
                    m_drawSprite          = m_spriteRegister.CreateDrawSprite(m_sprite);
                    m_drawSprite.Effect   = (int)DCRL.DEF_SPRITE;
                    m_drawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }
                else
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_sprite.ResetRect(rc);

                    m_drawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }

                //=====================================
                // カメラの作成
                if (m_hTxCamera == null)
                {
                    CreateViewTextureCamera("MpachipCamera");
                }
                else
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }
            }

            // ビューポートの設定
            GetCurrentViewPort(out m_aVP);
        }