前回までの状況はこちら。
最新ソースはこちら。
https://github.com/takishita2nd/Picross
サイズ変更ダイアログにラベルとテキストボックスを追加します。
これらは新規クラスですね。
なので、ラベルクラスとテキストボックスクラスを作成します。
class Label : ObjectBase
{
private string _text;
private int fontOffsetX = 9;
private int fontOffsetY = 4;
private bool _isShow = false;
public Label(int x, int y, string text)
{
width = 128;
height = 32;
_x = x;
_y = y;
_text = text;
_valueText = new asd.TextObject2D();
_valueText.Text = _text;
_valueText.Font = null;
_valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
}
public void SetFontOffset(int x, int y)
{
fontOffsetX = x;
fontOffsetY = y;
_valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
}
public void Show()
{
_isShow = true;
_valueText.Font = Resource.getFont();
}
public void Hide()
{
_isShow = false; ;
_valueText.Font = null;
}
}
class TextBox : ObjectBase
{
private string _text;
private int fontOffsetX = 9;
private int fontOffsetY = 4;
protected bool enable = true;
private Action _action = null;
private bool _isShow = false;
public TextBox(int x, int y, string text)
{
width = 128;
height = 32;
_x = x;
_y = y;
_text = text;
_backTexture = new asd.TextureObject2D();
_backTexture.Position = new asd.Vector2DF(_x, _y);
_valueText = new asd.TextObject2D();
_valueText.Text = _text;
_valueText.Font = null;
_valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
}
public void SetFontOffset(int x, int y)
{
fontOffsetX = x;
fontOffsetY = y;
_valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
}
public void UpdateTexture(asd.Vector2DF pos)
{
if (pos.X > _x && pos.X < _x + width
&& pos.Y > _y && pos.Y < _y + height)
{
_backTexture.Texture = Resource.getSelectedTextTexture();
}
else
{
_backTexture.Texture = Resource.getTextTexture();
}
}
public void Show()
{
_isShow = true;
_backTexture.Texture = Resource.getTextTexture();
_valueText.Font = Resource.getFont();
}
public void Hide()
{
_isShow = false; ;
_backTexture.Texture = null;
_valueText.Font = null;
}
public void SetAction(Action action)
{
_action = action;
}
public void SetEnable(bool enable)
{
this.enable = enable;
}
public virtual void OnClick()
{
if (enable)
{
if (_action != null)
{
_action.Invoke();
}
}
}
}
OnClick処理は後々修正するかもしれない。
そして、ほとんどはButtonクラスのアレンジ。
これをDialogクラスで使用します。
class Dialog
{
private asd.TextureObject2D _texture;
private bool _isShow;
private Button _button = null;
private TextBox _rowText = null;
private TextBox _colText = null;
private Label _label1 = null;
private Label _label2 = null;
private int _x = 300;
private int _y = 300;
private int _width = 400;
private int _height = 200;
private Action _action = null;
public Dialog()
{
_isShow = false;
// 確定ボタン
_button = new Button(436, 400, "確定");
_button.SetFontOffset(46, 4);
_button.SetAction(() =>
{
if(_action != null)
{
_action.Invoke();
}
});
// ラベル
_label1 = new Label(320, 330, "↓");
_label2 = new Label(490, 330, "→");
// Row入力エリア
_rowText = new TextBox(350, 330, "0");
// Col入力エリア
_colText = new TextBox(520, 330, "0");
_texture = new asd.TextureObject2D();
_texture.Position = new asd.Vector2DF(_x, _y);
}
public void SetEngine()
{
asd.Engine.AddObject2D(_texture);
asd.Engine.AddObject2D(_label1.getTextObject());
asd.Engine.AddObject2D(_label2.getTextObject());
asd.Engine.AddObject2D(_rowText.getBackTexture());
asd.Engine.AddObject2D(_rowText.getTextObject());
asd.Engine.AddObject2D(_colText.getBackTexture());
asd.Engine.AddObject2D(_colText.getTextObject());
asd.Engine.AddObject2D(_button.getBackTexture());
asd.Engine.AddObject2D(_button.getTextObject());
}
public void SetAction(Action action)
{
_action = action;
}
public void Show()
{
_isShow = true;
_texture.Texture = Resource.getDialogTexture();
_label1.Show();
_label2.Show();
_rowText.Show();
_colText.Show();
_button.Show();
}
public void Hide()
{
_isShow = false;
_texture.Texture = null;
_label1.Hide();
_label2.Hide();
_rowText.Hide();
_colText.Hide();
_button.Hide();
}
public bool IsShow()
{
return _isShow;
}
public void UpdateTexture(asd.Vector2DF pos)
{
_rowText.UpdateTexture(pos);
_colText.UpdateTexture(pos);
_button.UpdateTexture(pos);
}
UI自分で作るのってめんどくさいね。
こんなのもう二度とやらない。