Exemplo n.º 1
0
        /// <summary>
        /// 複製セットする
        /// </summary>
        /// <param name="r"></param>
        public void Set(MCDrawSprite r)
        {
            Set((MCDrawSpriteBase)r);
            for (int i = 0; i < 4; ++i)
            {
                m_aColor[i] = r.m_aColor[i];
            }

            m_cat      = r.m_cat;
            m_spSprite = r.m_spSprite;
            m_divNo    = r.m_divNo;
        }
Exemplo n.º 2
0
        /// <summary>
        /// IMCSpriteTypeより派生:スプライトの登録(さらに指定スプライトを切り取り&4頂点の色設定ができる)
        /// </summary>
        /// <param name="spDrawing"></param>
        /// <returns>通常、エラーが発生しなかった場合は 0 を返すようにプログラムする。</returns>
        internal int RegistrationDrawingCommand(MCDrawSprite drawSprite)
        {
            //-----------------------------------------------------
            // プライオリティー
            //-----------------------------------------------------
            //
            if (drawSprite.DrawCommandPriority.D2No == MCDrawCommandPriority.D2NO_MAX)
            {
                drawSprite.D2No = m_autoPpriorityNo++;
            }

            drawSprite.D2RenderType = m_spriteRenderIdx;

            drawSprite.Build();


            m_drawSprites.Add(drawSprite);

            return(App.BatchDrawingMgr.RegisterDrawingCommand(drawSprite));
        }
Exemplo n.º 3
0
        /// <summary>
        /// スプライト頂点データを更新する
        /// </summary>
        /// <param name="drawSprite">描画データ</param>
        /// <returns></returns>
        internal unsafe int VertexUpdate(MCDrawSprite drawSprite)
        {
            int   hr = 0;
            int   dwTmp;
            var   pSprite = drawSprite.Sprite;
            var   divNo = drawSprite.DivNo;
            float startX, startY, fEndX, fEndY;
            float startU, startV, endU, endV;
            float factorU, factorV;

            startX = pSprite.Anchor.X; //-0.5f;
            startY = pSprite.Anchor.Y; //+0.5f;

            if (pSprite.flags.SpriteType == (uint)MC_SPRITE_DATA.SIMPLE)
            {
                fEndX = pSprite.Width + startX;
                fEndY = -(pSprite.Height - startY);

                startU = pSprite.spl.StartU;
                startV = pSprite.spl.StartV;
                endU   = pSprite.spl.EndU;
                endV   = pSprite.spl.EndV;
            }
            else
            {
                fEndX = (pSprite.div.DivW_U * pSprite.Width) + startX;
                fEndY = -((pSprite.div.DivH_V * pSprite.Height) - startY);

                if (pSprite.div.Col == 0)
                {
                    factorV = (1.0f / pSprite.div.Row);

                    startU = 0.0f;
                    startV = factorV * divNo;
                    endU   = 1.0f;
                    endV   = startV + factorV;
                }
                else if (pSprite.div.Row == 0)
                {
                    factorU = (1.0f / pSprite.div.Col);

                    startU = factorU * divNo;
                    startV = 0.0f;
                    endU   = startU + factorU;
                    endV   = 1.0f;
                }
                else
                {
                    dwTmp  = divNo % pSprite.div.Col;
                    startU = pSprite.div.DivW_U * dwTmp;
                    dwTmp  = divNo / pSprite.div.Col;
                    startV = pSprite.div.DivH_V * dwTmp;
                    endU   = startU + pSprite.div.DivW_U;
                    endV   = startV + pSprite.div.DivH_V;
                }
            }

            DataStream MappedResource;
            var        box = App.ImmediateContext.MapSubresource(
                m_vertexBuffer,
                MapMode.WriteDiscard,
                SharpDX.Direct3D11.MapFlags.None,
                out MappedResource);

            unsafe
            {
                MC_VERTEX_PCTx *pV = (MC_VERTEX_PCTx *)MappedResource.DataPointer;
                if (drawSprite.SpriteCat.IsUse())
                {
                    if ((drawSprite.SpriteCat.GetFlgY() & MCSpriteCat.NEGATIVE) != 0)
                    {
                        // Y -
                        startY = startY - drawSprite.SpriteCat.GetPosition().Y;
                        startV = startV + System.Math.Abs(drawSprite.SpriteCat.GetPosition().Y) * pSprite.TextureInvH;
                    }
                    else if ((drawSprite.SpriteCat.GetFlgY() & MCSpriteCat.POSITIVE) != 0)
                    {
                        // Y +
                        fEndY = startY - drawSprite.SpriteCat.GetPosition().Y;
                        endV  = startV + System.Math.Abs(drawSprite.SpriteCat.GetPosition().Y) * pSprite.TextureInvH;
                    }
                    if ((drawSprite.SpriteCat.GetFlgX() & MCSpriteCat.NEGATIVE) != 0)
                    {
                        // X -
                        fEndX = startX + drawSprite.SpriteCat.GetPosition().X;
                        endU  = startU + drawSprite.SpriteCat.GetPosition().X *pSprite.TextureInvW;
                    }
                    else if ((drawSprite.SpriteCat.GetFlgX() & MCSpriteCat.POSITIVE) != 0)
                    {
                        // X +
                        startX = startX + drawSprite.SpriteCat.GetPosition().X;
                        startU = startU + drawSprite.SpriteCat.GetPosition().X *pSprite.TextureInvW;
                    }
                }
                Sprite_V3_UV_Color(drawSprite.Flip, startX, startY, fEndX, fEndY, startU, startV, endU, endV, drawSprite.Colors, pV);
            }

            App.ImmediateContext.UnmapSubresource(m_vertexBuffer, 0);

            if (hr != 0)
            {
                Debug.Assert(false); return(hr);
            }

            return(hr);
        }