前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
前回はサイズ変更ダイアログに数字を入力するところまでできましたので、今回は実際にその数字を反映させる処理を作成していきます。
まずは、ダイアログからROWとCOLを取得する処理を追加します。
class Dialog
{
public int GetRowValue()
{
return int.Parse(_rowValue);
}
public int GetColValue()
{
return int.Parse(_colValue);
}
これをダイアログを表示する側で使用します。
dialog.SetAction(() =>
{
dialog.Hide();
int row = dialog.GetRowValue();
int col = dialog.GetColValue();
while(row != drawSquares.Count)
{
if(drawSquares.Count > row)
{
var rowList = drawSquares[drawSquares.Count - 1];
foreach(var c in rowList)
{
asd.Engine.RemoveObject2D(c.getBackTexture());
}
drawSquares.RemoveAt(drawSquares.Count - 1);
}
else
{
List<DrawSquare> rowList = new List<DrawSquare>();
for (int c = 0; c < drawSquares[0].Count; c++)
{
var square = new DrawSquare(drawSquares.Count, c);
asd.Engine.AddObject2D(square.getBackTexture());
rowList.Add(square);
}
drawSquares.Add(rowList);
}
}
while(col != drawSquares[0].Count)
{
if(drawSquares[0].Count > col)
{
foreach(var r in drawSquares)
{
asd.Engine.RemoveObject2D(r[r.Count - 1].getBackTexture());
r.RemoveAt(r.Count - 1);
}
}
else
{
int rowindex = 0;
int colindex = drawSquares[0].Count;
foreach (var r in drawSquares)
{
var square = new DrawSquare(rowindex, colindex);
asd.Engine.AddObject2D(square.getBackTexture());
r.Add(square);
rowindex++;
}
}
}
});
SetAction()には、ダイアログでOKをクリックしたときに実行される処理をラムダ式で記述しています。
ダイアログを非表示にすると同時にROW、COLを取得し、その値に合わせて実際のピクロスのサイズを変更します。
ROWの値を変えると縦方向にマスが増えたり減ったり、COLの値を変えると横方向に、という感じです。
これはまずはROW、COLが増えたかどうかを判断し処理を変える必要があります。
ROWを変える場合は、マスのLISTオブジェクト
List<List<DrawSquare>> drawSquares
これの一番外のLISTを追加、削除します。
COLを変える場合は内側のLISTにオブジェクトを追加、削除します。
あと、実際に動かしてみて分かったのですが、エンジンにテクスチャなどのオブジェクトを追加する順番によって表示に影響が出る(後に追加した方が上に上書きされる)ので、
それを防ぐために、テクスチャの描画プライオリティを設定する必要がありました。
今回は
マスオブジェクト<<<<<ダイアログ<<パレット
の順番にプライオリティを設定しました。
動作結果はこうなりました。
ようやくここまで来たかって感じです。
次回はピクロス解析のカギとなる数字を入力する部分を作成していきます。