前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
前回追加した数字入力マスに数字を入力する処理を作っていきます。
数字入力はサイズ変更ダイアログと同じパレットを使用します。
// パレット
Palette palette = new Palette();
palette.SetEngine();
palette.Hide();
数字入力マスをクリックすると、パレットを表示させます。
パレット表示中は、マウスカーソルの所にある数字マスのテクスチャを色つきに変更します。
そして、数字をクリックすると、その数字が数字マスに入ります。
パレットの外をクリックすると、パレットを閉じ、入力終了になります。
これをコードに書いたらこうなりました。
while (asd.Engine.DoEvents())
{
asd.Vector2DF pos = asd.Engine.Mouse.Position;
if (!dialog.IsShow())
{
if (!palette.IsShow())
{
foreach (var rowList in rowNumberSquare)
{
foreach (var s in rowList)
{
s.UpdateTexture(pos);
}
}
foreach (var colList in colNumberSquare)
{
foreach (var s in colList)
{
s.UpdateTexture(pos);
}
}
foreach (Button button in buttons)
{
button.UpdateTexture(pos);
}
}
else
{
palette.UpdateTexture(pos);
}
}
else
{
dialog.UpdateTexture(pos);
}
if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
{
if (!dialog.IsShow())
{
if (!palette.IsShow())
{
int rowIndex;
int colIndex;
rowIndex = 0;
foreach (var rowList in rowNumberSquare)
{
colIndex = -1;
foreach (var s in rowList)
{
if (s.IsClick(pos))
{
selectedNumberSquare = s;
selectedRowIndex = rowIndex;
selectedColIndex = colIndex;
palette.Show(pos);
}
colIndex--;
}
rowIndex++;
}
colIndex = 0;
foreach (var colList in colNumberSquare)
{
rowIndex = -1;
foreach (var s in colList)
{
if (s.IsClick(pos))
{
selectedNumberSquare = s;
selectedRowIndex = rowIndex;
selectedColIndex = colIndex;
palette.Show(pos);
}
rowIndex--;
}
colIndex++;
}
foreach (Button button in buttons)
{
if (button.IsClick(pos))
{
button.OnClick();
}
}
}
else
{
if (palette.IsClick(pos))
{
string v = palette.GetClickValue(pos);
updateTextValue(selectedNumberSquare, v);
}
else
{
palette.Hide();
if(selectedNumberSquare != null)
{
if(selectedNumberSquare.GetStringValue() != string.Empty)
{
if (selectedRowIndex >= 0)
{
var square = new NumberSquare(selectedRowIndex, selectedColIndex - 1);
asd.Engine.AddObject2D(square.getBackTexture());
asd.Engine.AddObject2D(square.getTextObject());
rowNumberSquare[selectedRowIndex].Add(square);
}
else if (selectedColIndex >= 0)
{
var square = new NumberSquare(selectedRowIndex - 1, selectedColIndex);
asd.Engine.AddObject2D(square.getBackTexture());
asd.Engine.AddObject2D(square.getTextObject());
colNumberSquare[selectedColIndex].Add(square);
}
}
}
}
}
}
else
{
dialog.OnClick(pos);
}
}
実行結果はこんな感じになります。
数字入力を終えると、さらに入力スペースが増えるように細工しています。
ただ、このあたりの処理は変更するかもしれません。
ここどうするのが良いのかなーと言うのを未だに考えています。