前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/sudokuGUI
パレットの中身を実装していきます。
まず、パレットに表示する数字ですが、これは、すでに作成しているSquareObjectを利用しましょうか。
これをこのまま使用できないので、継承して機能拡張を行います。
class SquareObject
{
protected int _x;
protected int _y;
protected int _row;
protected int _col;
private int _value;
protected asd.TextureObject2D _backTexture;
protected asd.TextObject2D _valueText;
protected const int offsetX = 10;
protected const int offsetY = 10;
protected const int fontOffsetX = 19;
protected const int fontOffsetY = 9;
protected const int width = 64;
protected const int height = 64;
privateからprotectedに書き換えました。
こうしなければ拡張先で変数を参照することができません。
class PaletteSquareObject : SquareObject
{
public PaletteSquareObject(int row, int col) : base(row, col)
{
}
public void setPosition(asd.Vector2DF pos)
{
_x = _row * width + (int)pos.X;
_y = _col * height + (int)pos.Y;
_backTexture.Position = new asd.Vector2DF(_x, _y);
_valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
}
}
パレットの数字はマウスの位置によってコロコロ変わるので、自由に表示位置を変更できるようにします。
このクラスをPaletteクラスで使用します。
class Palette
{
private asd.Vector2DF palettePosition;
private const int width = 192;
private const int height = 256;
private asd.TextureObject2D _texture;
PaletteSquareObject[,] paletteSquareObjects = new PaletteSquareObject[3, 3];
public Palette()
{
_texture = new asd.TextureObject2D();
for(int row = 0; row < 3; row++)
{
for(int col = 0; col < 3; col++)
{
paletteSquareObjects[row, col] = new PaletteSquareObject(row, col);
}
}
}
public void setEngine()
{
asd.Engine.AddObject2D(_texture);
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
asd.Engine.AddObject2D(paletteSquareObjects[row, col].getBackTexture());
asd.Engine.AddObject2D(paletteSquareObjects[row, col].getTextObject());
}
}
}
public void Show(asd.Vector2DF pos)
{
palettePosition = new asd.Vector2DF(pos.X, pos.Y - 64);
_texture.Position = palettePosition;
_texture.Texture = Resource.getPalette();
int value = 1;
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
paletteSquareObjects[row, col].setPosition(pos);
paletteSquareObjects[row, col].setValue(value);
value++;
}
}
}
public void Hide()
{
_texture.Texture = null;
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
paletteSquareObjects[row, col].setValue(0);
}
}
}
まず、コンストラクタでPaletteSquareObjectを3×3で作成します。
Show()でPaletteSquareObjectの座標設定と、数値設定(これで数字が表示される)、Hide()で数字を消します。
あと、Altseedエンジンにオブジェクトを追加する処理を書き換えました。全部Paletteクラスの中で直接追加した方が都合がいいと思いました。
実行結果はこうなりました。
だんだん形になってきましたね。