/// <param name="width">幅(ブロック)</param> /// <param name="height">高さ(ブロック)</param> /// <param name="blockModelEven">奇数座標のブロックのモデル</param> /// <param name="blockModelOdd">偶数座標のブロックのモデル</param> public Field(int width, int height, Model blockModelOdd, Model blockModelEven) { blocks = new Block[width, height]; for (int z = 0; z < height; z++) { for (int x = 0; x < width; x++) { Block block; if ((x + z) % 2 == 0) { block = new Block(x, z, blockModelEven); } else { block = new Block(x, z, blockModelOdd); } blocks[x, z] = block; } } }
/// <summary> /// 1枚絵のブロックから構成されるフィールドを作る. /// テクスチャの割り当てが変則的なため専用のモデルを使う必要がある. /// ---モデルの形式--- /// ブロックの上面にのみテクスチャを設定する. /// ------------------ /// </summary> /// <param name="width">幅(ブロック)</param> /// <param name="height">高さ(ブロック)</param> /// <param name="models">モデルの2次元配列</param> /// <param name="texture">フィールドの1枚絵</param> public Field(int width, int height, Model[,] models, Texture2D texture) { blocks = new Block[width, height]; // 1枚絵を作成 for (int z = 0; z < height; z++) { for (int x = 0; x < width; x++) { int blockWidth = (int)(texture.Width / width); int blockHeight = (int)(texture.Height / height); Rectangle sourceRect = new Rectangle(x * blockWidth, z * blockHeight, blockWidth, blockHeight); Texture2D cropTexture = new Texture2D(texture.GraphicsDevice, sourceRect.Width, sourceRect.Height); Color[] data = new Color[sourceRect.Width * sourceRect.Height]; texture.GetData(0, sourceRect, data, 0, data.Length); cropTexture.SetData(data); models[x, z].Meshes[0].Effects[0].Parameters["Texture"].SetValue(cropTexture); blocks[x, z] = new Block(x, z, models[x, z]); } } }
/// <param name="block">ブロック</param> public BlockInfo(Block block) : base(block) { this.IsDead = block.IsDead; this.PlayerInfo = block.PlayerInfo; }