前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
いままではデータ入力値がパレットの陰に隠れて見えづらい、という問題をうすうすと感じていましたが、これを修正したいと思います。
具体的には、パレットの上に入力値を表示し、ENTERボタンを押下することで入力データを反映させます。
なので、パレットを拡張。
そして、パレット周りの処理をがっつり書き換えました。
class Palette
{
public void OnClick(asd.Vector2DF pos)
{
if (paletteZeroSquareObject.IsClick(pos))
{
if(_valueText.Text != "" && _valueText.Text != "0")
{
if (_valueText.Text.Length < 2)
{
_valueText.Text += "0";
}
}
}
else if (paletteBSSquareObject.IsClick(pos))
{
if(_valueText.Text.Length > 0)
{
_valueText.Text = _valueText.Text.Remove(_valueText.Text.Length - 1);
}
}
else if (paletteCRSquareObject.IsClick(pos))
{
_valueText.Text = "";
}
else if (paletteENSquareObject.IsClick(pos))
{
value = _valueText.Text;
_isClickEnter = true;
}
else
{
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
if (paletteSquareObjects[row, col].IsClick(pos) == true)
{
if(_valueText.Text.Length < 2)
{
if(_valueText.Text == "0")
{
_valueText.Text = paletteSquareObjects[row, col].GetValue();
}
else
{
_valueText.Text += paletteSquareObjects[row, col].GetValue();
}
}
}
}
}
}
}
public bool IsClickEnter()
{
return _isClickEnter;
}
public string GetValue()
{
return value;
}
パレットを使用する側もがっつり書き換えます。
if (palette.IsClick(pos))
{
string value = string.Empty;
palette.OnClick(pos);
if(palette.IsClickEnter())
{
palette.Hide();
if (selectedNumberSquare != null)
{
selectedNumberSquare.SetValue(palette.GetValue());
if (selectedNumberSquare.GetStringValue() != string.Empty)
{
if (selectedRowIndex >= 0)
{
if (Math.Abs(selectedColIndex - 1) > rowNumberSquare[selectedRowIndex].Count)
{
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)
{
if (Math.Abs(selectedRowIndex - 1) > colNumberSquare[selectedColIndex].Count)
{
var square = new NumberSquare(selectedRowIndex - 1, selectedColIndex);
asd.Engine.AddObject2D(square.getBackTexture());
asd.Engine.AddObject2D(square.getTextObject());
colNumberSquare[selectedColIndex].Add(square);
}
}
}
else
{
if (selectedRowIndex >= 0)
{
if (Math.Abs(selectedColIndex - 1) <= rowNumberSquare[selectedRowIndex].Count)
{
asd.Engine.RemoveObject2D(rowNumberSquare[selectedRowIndex][Math.Abs(selectedColIndex + 1)].getBackTexture());
asd.Engine.RemoveObject2D(rowNumberSquare[selectedRowIndex][Math.Abs(selectedColIndex + 1)].getTextObject());
rowNumberSquare[selectedRowIndex].RemoveAt(Math.Abs(selectedColIndex + 1));
for (int col = selectedColIndex + 1; Math.Abs(col) < rowNumberSquare[selectedRowIndex].Count; col--)
{
rowNumberSquare[selectedRowIndex][Math.Abs(col)].SetPosition(selectedRowIndex, col - 1);
}
}
}
else if (selectedColIndex >= 0)
{
if (Math.Abs(selectedRowIndex - 1) <= colNumberSquare[selectedColIndex].Count)
{
asd.Engine.RemoveObject2D(colNumberSquare[selectedColIndex][Math.Abs(selectedRowIndex + 1)].getBackTexture());
asd.Engine.RemoveObject2D(colNumberSquare[selectedColIndex][Math.Abs(selectedRowIndex + 1)].getTextObject());
colNumberSquare[selectedColIndex].RemoveAt(Math.Abs(selectedRowIndex + 1));
for (int row = selectedRowIndex + 1; Math.Abs(row) < colNumberSquare[selectedColIndex].Count; row--)
{
colNumberSquare[selectedColIndex][Math.Abs(row)].SetPosition(row - 1, selectedColIndex);
}
}
}
selectedNumberSquare.SetValue("0");
}
selectedNumberSquare = null;
}
}
}
else
{
palette.Hide();
}
とりあえず、UI周りはこれで十分かと思います。
じゃあ、ロジックに戻りましょうか。
「【C#】【ピクロス】【ALTSEED】データ入力UIの改善」への1件のフィードバック