/// <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; }
/// <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); }
//! セット 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; }
/// <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); }
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); }
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); }