mirror of
https://codeberg.org/Ikatono/TierMaker.git
synced 2025-10-28 20:45:35 -05:00
forgot to push for a while, got drag-and-drop mostly working
This commit is contained in:
127
card.cs
Normal file
127
card.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class card : Control
|
||||
{
|
||||
[Export]
|
||||
private string _CardName;
|
||||
public string CardName
|
||||
{
|
||||
get => _CardName;
|
||||
set
|
||||
{
|
||||
_CardName = value;
|
||||
if (IsNodeReady())
|
||||
PropogateCardName();
|
||||
}
|
||||
}
|
||||
private void PropogateCardName()
|
||||
{
|
||||
GetNode<Label>("CardNameLabel").Text = _CardName;
|
||||
}
|
||||
[Export]
|
||||
private string _CardId;
|
||||
public string CardId
|
||||
{
|
||||
get => _CardId;
|
||||
set
|
||||
{
|
||||
_CardId = value;
|
||||
if (IsNodeReady())
|
||||
PropogateCardId();
|
||||
}
|
||||
}
|
||||
private void PropogateCardId()
|
||||
{
|
||||
GetNode<Label>("%CardIdLabel").Text = _CardId;
|
||||
}
|
||||
private Texture2D _Texture;
|
||||
public void SetTexture(Texture2D texture)
|
||||
{
|
||||
_Texture = texture;
|
||||
if (IsNodeReady())
|
||||
PropogateTexture();
|
||||
}
|
||||
private void PropogateTexture()
|
||||
{
|
||||
if (_Texture is not null)
|
||||
{
|
||||
GetNode<TextureRect>("%CardImage").Texture = _Texture;
|
||||
_Texture = null;
|
||||
}
|
||||
}
|
||||
public Texture2D GetTexture()
|
||||
=> GetNode<TextureRect>("%CardImage").Texture;
|
||||
public Vector2 Center
|
||||
=> Size / 2;
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
PropogateCardName();
|
||||
PropogateCardId();
|
||||
PropogateTexture();
|
||||
}
|
||||
|
||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
}
|
||||
public override Variant _GetDragData(Vector2 atPosition)
|
||||
{
|
||||
GD.Print($"starting to drag {CardId}");
|
||||
var prev = card_preview.MakePreview(this);
|
||||
var prev_root = new Control();
|
||||
//prev.Position = atPosition;
|
||||
prev.Position = prev.Size / -2;
|
||||
prev_root.AddChild(prev);
|
||||
SetDragPreview(prev_root);
|
||||
return this;
|
||||
}
|
||||
public void SetImage(Texture2D texture)
|
||||
{
|
||||
Ready += () => InnerSetImage(texture);
|
||||
if (IsNodeReady())
|
||||
InnerSetImage(texture);
|
||||
}
|
||||
//only called while ready
|
||||
private void InnerSetImage(Texture2D texture)
|
||||
{
|
||||
var node = GetNode<TextureRect>("%CardImage");
|
||||
node.Texture = texture;
|
||||
}
|
||||
// private void HandleInput(InputEvent @event)
|
||||
// {
|
||||
// if (@event is InputEventMouseButton iemb)
|
||||
// {
|
||||
// if (iemb.ButtonIndex == MouseButton.Left)
|
||||
// {
|
||||
// if (iemb.Pressed)
|
||||
// {
|
||||
// InputSingleton.Instance.ClickedOn = this;
|
||||
// StartDrag();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// InputSingleton.Instance.ClickedOn = null;
|
||||
// StopDrag();
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// private void StartDrag()
|
||||
// {
|
||||
|
||||
// }
|
||||
// private void StopDrag()
|
||||
// {
|
||||
|
||||
// }
|
||||
public static card MakeCard(SceneTree tree)
|
||||
{
|
||||
var scene = GD.Load<PackedScene>("res://card.tscn");
|
||||
var c = scene.Instantiate<card>();
|
||||
c.CardId = tree.GetUnusedCardId();
|
||||
return c;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user