/// <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;
        }
Exemple #2
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);
        }
Exemple #3
0
 //! セット
 public void Set(MCSprite obj)
 {
     Set((MCBaseSprite)obj);
     flags.All = obj.flags.All;
     if (flags.SpriteType == (uint)MC_SPRITE_DATA.SIMPLE)
     {
         spl = obj.spl;
     }
     else
     {
         div = obj.div;
     }
     div = obj.div;
 }
Exemple #4
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 GetCreateSpriteDiv(string name, MCBaseTexture tx, int divW, int divH, 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))
            {
                if (spTmp.GetID() != MCSprite.SpriteID)
                {
                    return(null);
                }

                sprite = (MCSprite)spTmp;
                if (sprite.flags.SpriteType == (int)MC_SPRITE_DATA.DIVISION)
                {
                    return(sprite);
                }
                else
                {
                    throw new Exception(name + " スプライトは、分割タイプでは無い");
                }
            }
            else
            {
                if (x == float.MinValue || y == float.MinValue)
                {
                    sprite = MCSprite.CreateSpriteDiv(App, name, tx, divW, divH, MC_SPRITE_ANCHOR.CENTER);
                }
                else
                {
                    sprite = MCSprite.CreateSpriteDiv(App, name, tx, divW, divH, MC_SPRITE_ANCHOR.CUSTOM, x, y);
                }

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

            return(sprite);
        }
Exemple #5
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);
        }
Exemple #6
0
        public static MCSprite CreateSpriteDiv(
            Application app,
            string spriteName,
            MCBaseTexture texture,
            int baseW, int baseH,
            int divW, int divH,
            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.Texture00 = texture;

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

            sp.Name   = spriteName;
            sp.Width  = ImgInfo.Width;
            sp.Height = ImgInfo.Height;

            if (anchorType == MC_SPRITE_ANCHOR.CUSTOM)
            {
                var a = sp.Anchor;
                a.X = -centerX;
                a.Y = centerY;
            }
            else
            {
                var a = sp.Anchor;
                a.X = -(float)(divW >> 1);
                a.Y = (float)(divH >> 1);
            }


            //
            sp.flags.AnchorType = (uint)anchorType;
            sp.flags.SpriteType = (uint)MC_SPRITE_DATA.DIVISION;
            sp.div        = new MCSauceConsecutiveSprite();
            sp.div.DivW_U = (float)divW / ImgInfo.Width;
            sp.div.DivH_V = (float)divH / ImgInfo.Height;
            if (baseW == 0 || baseH == 0)
            {
                // 行と列の数
                sp.div.Col = ImgInfo.Width / divW;
                sp.div.Row = ImgInfo.Height / divH;
            }
            else
            {
                // 行と列の数
                sp.div.Col = baseW / divW;
                sp.div.Row = baseH / divH;
            }
            // 球体を作る
            float fWW = (float)(divW) * 0.5f;
            float fHH = (float)(divH) * 0.5f;
            float r   = (float)System.Math.Sqrt(fWW + fHH);
            var   s   = sp.Sphere;

            s.r       = r;
            s.c       = new MCVector3(r * 0.5f, -r * 0.5f, 0.0f);
            sp.Sphere = s;

            // 登録
            if (app.SpriteMgr.RegisterSprite(spriteName, sp))
            {
                return(sp);
            }

            return(sp);
        }