mirror of
https://codeberg.org/Ikatono/TierMaker.git
synced 2025-10-28 20:45:35 -05:00
tested version with most of the final functionality. Still a few known issues, like dragging to a row that extends to multiple lines
This commit is contained in:
25
CardCreateImageBox.cs
Normal file
25
CardCreateImageBox.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public partial class CardCreateImageBox : TextureRect
|
||||||
|
{
|
||||||
|
// Called when the node enters the scene tree for the first time.
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public override void _GuiInput(InputEvent @event)
|
||||||
|
{
|
||||||
|
if (@event is InputEventMouseButton iemb)
|
||||||
|
{
|
||||||
|
if (iemb.Pressed && iemb.ButtonIndex == MouseButton.Left)
|
||||||
|
{
|
||||||
|
GetNode<FileDialog>("%CardImagePicker").Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
102
CardCreateMarginContainer.cs
Normal file
102
CardCreateMarginContainer.cs
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public partial class CardCreateMarginContainer : MarginContainer
|
||||||
|
{
|
||||||
|
public readonly string Title = "Card";
|
||||||
|
public string CardTitle
|
||||||
|
{
|
||||||
|
get => GetNode<LineEdit>("%TitleEdit").Text;
|
||||||
|
set => GetNode<LineEdit>("%TitleEdit").Text = value;
|
||||||
|
}
|
||||||
|
public void SetStretchMode(StretchMode stretchMode)
|
||||||
|
{
|
||||||
|
switch (stretchMode)
|
||||||
|
{
|
||||||
|
case StretchMode.Unspecified:
|
||||||
|
case StretchMode.Fit:
|
||||||
|
default:
|
||||||
|
GetNode<BaseButton>("%StretchModeFitButton").ButtonPressed = true;
|
||||||
|
break;
|
||||||
|
case StretchMode.Stretch:
|
||||||
|
GetNode<BaseButton>("%StretchModeStretchButton").ButtonPressed = true;
|
||||||
|
break;
|
||||||
|
case StretchMode.Crop:
|
||||||
|
GetNode<BaseButton>("%StretchModeCropButton").ButtonPressed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public StretchMode GetStretchMode()
|
||||||
|
{
|
||||||
|
if (GetNode<BaseButton>("%StretchModeFitButton").ButtonPressed)
|
||||||
|
return StretchMode.Fit;
|
||||||
|
else if (GetNode<BaseButton>("%StretchModeStretchButton").ButtonPressed)
|
||||||
|
return StretchMode.Stretch;
|
||||||
|
else if (GetNode<BaseButton>("%StretchModeCropButton").ButtonPressed)
|
||||||
|
return StretchMode.Crop;
|
||||||
|
return StretchMode.Unspecified;
|
||||||
|
}
|
||||||
|
private void StetchModeChanged(BaseButton button)
|
||||||
|
{
|
||||||
|
var ci = GetNode<CardCreateImageBox>("%CardCreateImageBox");
|
||||||
|
switch (GetStretchMode())
|
||||||
|
{
|
||||||
|
case StretchMode.Stretch:
|
||||||
|
ci.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize;
|
||||||
|
ci.StretchMode = TextureRect.StretchModeEnum.Scale;
|
||||||
|
break;
|
||||||
|
case StretchMode.Crop:
|
||||||
|
ci.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize;
|
||||||
|
ci.StretchMode = TextureRect.StretchModeEnum.KeepAspectCovered;
|
||||||
|
break;
|
||||||
|
case StretchMode.Unspecified:
|
||||||
|
case StretchMode.Fit:
|
||||||
|
default:
|
||||||
|
ci.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize;
|
||||||
|
ci.StretchMode = TextureRect.StretchModeEnum.KeepAspectCentered;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Image Image
|
||||||
|
{
|
||||||
|
get => GetNode<TextureRect>("%CardCreateImageBox").Texture?.GetImage();
|
||||||
|
set => GetNode<TextureRect>("%CardCreateImageBox").Texture
|
||||||
|
= ImageTexture.CreateFromImage(value);
|
||||||
|
}
|
||||||
|
// Called when the node enters the scene tree for the first time.
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
(GetParent() as TabContainer)?.SetTabTitle(GetIndex(), Title);
|
||||||
|
GetNode<BaseButton>("%StretchModeFitButton").ButtonGroup.Pressed
|
||||||
|
+= StetchModeChanged;
|
||||||
|
GetNode<LineEdit>("%TitleEdit").TextSubmitted +=
|
||||||
|
(s) => GetNode<BaseButton>("%CreateMenuOkButton")
|
||||||
|
.EmitSignal(Button.SignalName.Pressed);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void ClearMenu()
|
||||||
|
{
|
||||||
|
GetNode<TextureRect>("%CardCreateImageBox").Texture = new Texture2D();
|
||||||
|
CardTitle = "";
|
||||||
|
SetStretchMode(StretchMode.Unspecified);
|
||||||
|
}
|
||||||
|
public void SendCardToGame()
|
||||||
|
{
|
||||||
|
var c = card.MakeCard(GetTree());
|
||||||
|
if (Image is Image im)
|
||||||
|
c.SetImage(ImageTexture.CreateFromImage(im));
|
||||||
|
c.SetStretchMode(GetStretchMode());
|
||||||
|
c.CardName = CardTitle;
|
||||||
|
this.GetParentOfType<game>().AddUnassignedCard(c);
|
||||||
|
}
|
||||||
|
public void FileSelected(string path)
|
||||||
|
{
|
||||||
|
Image image = new();
|
||||||
|
image.Load(path);
|
||||||
|
Image = image;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,13 +18,7 @@ public partial class CardEditImageBox : TextureRect
|
|||||||
{
|
{
|
||||||
if (iemb.Pressed && iemb.ButtonIndex == MouseButton.Left)
|
if (iemb.Pressed && iemb.ButtonIndex == MouseButton.Left)
|
||||||
{
|
{
|
||||||
// bool inControl = _HasPoint(iemb.Position);
|
GetNode<FileDialog>("%CardImagePicker").Show();
|
||||||
// GD.Print(inControl);
|
|
||||||
// if (iemb.Position.X >= 0 && iemb.Position.X <= Size.X
|
|
||||||
// && iemb.Position.Y >= 0 && iemb.Position.Y <= Size.Y)
|
|
||||||
// if (inControl)
|
|
||||||
GetNode<FileDialog>("%CardImagePicker").Show();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ public partial class CommandHandler : Node
|
|||||||
// Called when the node enters the scene tree for the first time.
|
// Called when the node enters the scene tree for the first time.
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
//force initialization of Deferer in main thread
|
||||||
|
_ = Deferer;
|
||||||
Settings = GetNode<Settings>("/root/Settings");
|
Settings = GetNode<Settings>("/root/Settings");
|
||||||
Game = GetNode<game>("/root/Game");
|
Game = GetNode<game>("/root/Game");
|
||||||
GetNode<TwitchChatWatcher>("/root/TwitchChatWatcher").IncomingCommand
|
GetNode<TwitchChatWatcher>("/root/TwitchChatWatcher").IncomingCommand
|
||||||
@@ -51,6 +53,7 @@ public partial class CommandHandler : Node
|
|||||||
|
|
||||||
private void IncomingCommand(Command command)
|
private void IncomingCommand(Command command)
|
||||||
{
|
{
|
||||||
|
GD.Print(command.GetArgs().Remaining());
|
||||||
if (!Settings.IsUserAuthorized(command.User, command.IsStreamer,
|
if (!Settings.IsUserAuthorized(command.User, command.IsStreamer,
|
||||||
command.IsModerator))
|
command.IsModerator))
|
||||||
return;
|
return;
|
||||||
@@ -167,7 +170,6 @@ public partial class CommandHandler : Node
|
|||||||
var rowId = args.Pop();
|
var rowId = args.Pop();
|
||||||
var colorStr = args.Pop();
|
var colorStr = args.Pop();
|
||||||
var color = Color.FromString(colorStr, new Color(0, 0, 0, 0));
|
var color = Color.FromString(colorStr, new Color(0, 0, 0, 0));
|
||||||
GD.Print($"Recoloring row to {color}");
|
|
||||||
if (color.IsEqualApprox(new Color(0, 0, 0, 0)))
|
if (color.IsEqualApprox(new Color(0, 0, 0, 0)))
|
||||||
throw new Exception($"invalid color {colorStr}");
|
throw new Exception($"invalid color {colorStr}");
|
||||||
Game.RecolorRow(rowId, color);
|
Game.RecolorRow(rowId, color);
|
||||||
@@ -195,7 +197,6 @@ public partial class CommandHandler : Node
|
|||||||
_ => throw new Exception($"Unrecognized {nameof(StretchMode)}"),
|
_ => throw new Exception($"Unrecognized {nameof(StretchMode)}"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
GD.Print($"Stretch mode: {mode}");
|
|
||||||
var uri = new Uri(url);
|
var uri = new Uri(url);
|
||||||
GD.Print("Starting image download");
|
GD.Print("Starting image download");
|
||||||
var resp = await Client.GetAsync(uri);
|
var resp = await Client.GetAsync(uri);
|
||||||
|
|||||||
19
DeleteCardButton.cs
Normal file
19
DeleteCardButton.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public partial class DeleteCardButton : Button
|
||||||
|
{
|
||||||
|
// Called when the node enters the scene tree for the first time.
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
private void EnableToggled(bool newState)
|
||||||
|
{
|
||||||
|
Disabled = !newState;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -57,12 +57,14 @@ public static class ExtensionHelper
|
|||||||
}
|
}
|
||||||
public static string GetUnusedRowId(this SceneTree tree)
|
public static string GetUnusedRowId(this SceneTree tree)
|
||||||
{
|
{
|
||||||
var ids = tree.GetNodesInGroup("RowGroup").OfType<row>().Select(r => r.RowId).ToArray();
|
var ids = tree.GetNodesInGroup("RowGroup").OfType<row>().Select(r => r.RowId)
|
||||||
|
.ToList();
|
||||||
int i = 1;
|
int i = 1;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (!ids.Contains(i.ToString()))
|
var s = i.ToString();
|
||||||
return i.ToString();
|
if (!ids.Contains(s))
|
||||||
|
return s;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public partial class RowCardContainer : HFlowContainer
|
|||||||
}
|
}
|
||||||
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
return data.As<card>() is not null;
|
return data.Obj is card;
|
||||||
}
|
}
|
||||||
public override void _DropData(Vector2 atPosition, Variant data)
|
public override void _DropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
|
|||||||
32
RowCreateMarginContainer.cs
Normal file
32
RowCreateMarginContainer.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public partial class RowCreateMarginContainer : MarginContainer
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public Color DefaultColor = new(0, 0, 0, 1);
|
||||||
|
public readonly string Title = "Row";
|
||||||
|
// Called when the node enters the scene tree for the first time.
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
(GetParent() as TabContainer).SetTabTitle(GetIndex(), Title);
|
||||||
|
ClearMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void SendRowToGame()
|
||||||
|
{
|
||||||
|
var r = row.MakeRow(GetTree());
|
||||||
|
r.RowColor = GetNode<ColorPickerButton>("%RowCreateColorPickerButton").Color;
|
||||||
|
r.RowText = GetNode<TextEdit>("%RowTextEdit").Text;
|
||||||
|
this.GetParentOfType<game>().CallDeferred("AddRow", r, -1);
|
||||||
|
}
|
||||||
|
public void ClearMenu()
|
||||||
|
{
|
||||||
|
GetNode<ColorPickerButton>("%RowCreateColorPickerButton").Color = DefaultColor;
|
||||||
|
GetNode<TextEdit>("%RowTextEdit").Text = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
20
RowDeleteButton.cs
Normal file
20
RowDeleteButton.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public partial class RowDeleteButton : Button
|
||||||
|
{
|
||||||
|
// Called when the node enters the scene tree for the first time.
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
private void ToggleEnable(bool newState)
|
||||||
|
{
|
||||||
|
Disabled = !newState;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ public partial class Settings : Node
|
|||||||
[Export]
|
[Export]
|
||||||
public bool AllowModerators { get; set; }
|
public bool AllowModerators { get; set; }
|
||||||
[Export]
|
[Export]
|
||||||
public string Command { get; set; }
|
public string Trigger { get; set; }
|
||||||
public List<string> UserWhitelist { get; } = new();
|
public List<string> UserWhitelist { get; } = new();
|
||||||
public List<string> UserBlacklist { get; } = new();
|
public List<string> UserBlacklist { get; } = new();
|
||||||
public Vector2 CardSize { get; private set; }
|
public Vector2 CardSize { get; private set; }
|
||||||
|
|||||||
@@ -178,13 +178,13 @@ public partial class TwitchChatWatcher : Node
|
|||||||
_ = Task.Run(() => SendPong(tcm), Token);
|
_ = Task.Run(() => SendPong(tcm), Token);
|
||||||
else if (tcm is Privmsg p)
|
else if (tcm is Privmsg p)
|
||||||
{
|
{
|
||||||
var com = Settings.Command;
|
var trig = Settings.Trigger;
|
||||||
if (string.IsNullOrWhiteSpace(com))
|
if (string.IsNullOrWhiteSpace(trig))
|
||||||
break;
|
break;
|
||||||
if (!p.ChatMessage.StartsWith(com))
|
if (!p.ChatMessage.StartsWith(trig))
|
||||||
continue;
|
continue;
|
||||||
var chat = p.ChatMessage;
|
var chat = p.ChatMessage;
|
||||||
chat = chat[com.Length..].TrimStart();
|
chat = chat[trig.Length..].TrimStart();
|
||||||
//TODO make better
|
//TODO make better
|
||||||
CallDeferred("emit_signal", SignalName.IncomingCommand,
|
CallDeferred("emit_signal", SignalName.IncomingCommand,
|
||||||
new Command(p.DisplayName,
|
new Command(p.DisplayName,
|
||||||
|
|||||||
1
card.cs
1
card.cs
@@ -124,7 +124,6 @@ public partial class card : Panel
|
|||||||
}
|
}
|
||||||
public override Variant _GetDragData(Vector2 atPosition)
|
public override Variant _GetDragData(Vector2 atPosition)
|
||||||
{
|
{
|
||||||
GD.Print($"starting to drag {CardId}");
|
|
||||||
var prev = card_preview.MakePreview(this);
|
var prev = card_preview.MakePreview(this);
|
||||||
var prev_root = new Control();
|
var prev_root = new Control();
|
||||||
prev_root.AddChild(prev);
|
prev_root.AddChild(prev);
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://dxvues6b3g2tn"]
|
[gd_scene load_steps=7 format=3 uid="uid://dxvues6b3g2tn"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://card_edit_popup.cs" id="1_xxurr"]
|
[ext_resource type="Script" path="res://card_edit_popup.cs" id="1_xxurr"]
|
||||||
[ext_resource type="Script" path="res://CardEditImageBox.cs" id="2_flth7"]
|
[ext_resource type="Script" path="res://CardEditImageBox.cs" id="2_flth7"]
|
||||||
|
[ext_resource type="Script" path="res://DeleteCardButton.cs" id="3_0btkn"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bhlqt64wrhx83" path="res://card_image_picker.tscn" id="3_4k21m"]
|
[ext_resource type="PackedScene" uid="uid://bhlqt64wrhx83" path="res://card_image_picker.tscn" id="3_4k21m"]
|
||||||
|
|
||||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nx8uj"]
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nx8uj"]
|
||||||
@@ -88,12 +89,22 @@ layout_mode = 2
|
|||||||
button_group = SubResource("ButtonGroup_t74v5")
|
button_group = SubResource("ButtonGroup_t74v5")
|
||||||
text = "Crop"
|
text = "Crop"
|
||||||
|
|
||||||
[node name="DeleteCardButton" type="Button" parent="CardEditContainer"]
|
[node name="DeleteCardHsplit" type="HSplitContainer" parent="CardEditContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 8
|
||||||
|
dragger_visibility = 1
|
||||||
|
|
||||||
|
[node name="DeleteCardEnable" type="CheckBox" parent="CardEditContainer/DeleteCardHsplit"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="DeleteCardButton" type="Button" parent="CardEditContainer/DeleteCardHsplit"]
|
||||||
custom_minimum_size = Vector2(100, 0)
|
custom_minimum_size = Vector2(100, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 8
|
size_flags_horizontal = 8
|
||||||
size_flags_vertical = 8
|
size_flags_vertical = 8
|
||||||
|
disabled = true
|
||||||
text = "DELETE"
|
text = "DELETE"
|
||||||
|
script = ExtResource("3_0btkn")
|
||||||
|
|
||||||
[node name="CardImagePicker" parent="." instance=ExtResource("3_4k21m")]
|
[node name="CardImagePicker" parent="." instance=ExtResource("3_4k21m")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -101,5 +112,6 @@ unique_name_in_owner = true
|
|||||||
[connection signal="canceled" from="." to="." method="CancelClicked"]
|
[connection signal="canceled" from="." to="." method="CancelClicked"]
|
||||||
[connection signal="confirmed" from="." to="." method="OkClicked"]
|
[connection signal="confirmed" from="." to="." method="OkClicked"]
|
||||||
[connection signal="visibility_changed" from="." to="." method="OnVisibilityChange"]
|
[connection signal="visibility_changed" from="." to="." method="OnVisibilityChange"]
|
||||||
[connection signal="pressed" from="CardEditContainer/DeleteCardButton" to="." method="DeleteCard"]
|
[connection signal="toggled" from="CardEditContainer/DeleteCardHsplit/DeleteCardEnable" to="CardEditContainer/DeleteCardHsplit/DeleteCardButton" method="EnableToggled"]
|
||||||
|
[connection signal="pressed" from="CardEditContainer/DeleteCardHsplit/DeleteCardButton" to="." method="DeleteCard"]
|
||||||
[connection signal="file_selected" from="CardImagePicker" to="." method="FileSelected"]
|
[connection signal="file_selected" from="CardImagePicker" to="." method="FileSelected"]
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://bhlqt64wrhx83"]
|
[gd_scene format=3 uid="uid://bhlqt64wrhx83"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://CardImagePicker.cs" id="1_j0c8l"]
|
|
||||||
|
|
||||||
[node name="CardImagePicker" type="FileDialog"]
|
[node name="CardImagePicker" type="FileDialog"]
|
||||||
title = "Choose Picture"
|
title = "Choose Picture"
|
||||||
@@ -12,4 +10,3 @@ file_mode = 0
|
|||||||
access = 2
|
access = 2
|
||||||
filters = PackedStringArray("*.png, *.jpg, *.jpeg, *.webp, *.svg; Supported Images")
|
filters = PackedStringArray("*.png, *.jpg, *.jpeg, *.webp, *.svg; Supported Images")
|
||||||
use_native_dialog = true
|
use_native_dialog = true
|
||||||
script = ExtResource("1_j0c8l")
|
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ public partial class card_preview : PanelContainer
|
|||||||
{
|
{
|
||||||
PropogateCardId();
|
PropogateCardId();
|
||||||
PropogateCardName();
|
PropogateCardName();
|
||||||
GD.Print(Size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
|||||||
79
create_menu_popup.cs
Normal file
79
create_menu_popup.cs
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
public partial class create_menu_popup : PanelContainer
|
||||||
|
{
|
||||||
|
[Signal]
|
||||||
|
public delegate void ClearMenuEventHandler();
|
||||||
|
private CardCreateMarginContainer _CardContainer;
|
||||||
|
public CardCreateMarginContainer CardContainer
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
_CardContainer ??= GetNode<CardCreateMarginContainer>("%CardCreateMarginContainer");
|
||||||
|
return _CardContainer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private RowCreateMarginContainer _RowContainer;
|
||||||
|
public RowCreateMarginContainer RowContainer
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
_RowContainer ??= GetNode<RowCreateMarginContainer>("%RowCreateMarginContainer");
|
||||||
|
return _RowContainer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Called when the node enters the scene tree for the first time.
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShowPopup()
|
||||||
|
{
|
||||||
|
this.GetParentOfType<game>().MenuOpenDisableInteraction();
|
||||||
|
Show();
|
||||||
|
}
|
||||||
|
public void ClosePopup()
|
||||||
|
{
|
||||||
|
Hide();
|
||||||
|
EmitSignal(SignalName.ClearMenu);
|
||||||
|
this.GetParentOfType<game>().MenuClosedEnableInteraction();
|
||||||
|
}
|
||||||
|
public void OkPressed()
|
||||||
|
{
|
||||||
|
var current = GetNode<TabContainer>("%CreateTabContainer").CurrentTab;
|
||||||
|
if (current == 0)
|
||||||
|
{
|
||||||
|
CardContainer.SendCardToGame();
|
||||||
|
ClosePopup();
|
||||||
|
}
|
||||||
|
else if (current == 1)
|
||||||
|
{
|
||||||
|
RowContainer.SendRowToGame();
|
||||||
|
ClosePopup();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception("No create container visible");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void CancelPressed()
|
||||||
|
{
|
||||||
|
ClosePopup();
|
||||||
|
}
|
||||||
|
private void OnVisibilityChange(bool visibility)
|
||||||
|
{
|
||||||
|
// EmitSignal(SignalName.Clear);
|
||||||
|
var tabs = GetNode<TabContainer>("%CreateTabContainer");
|
||||||
|
if (tabs.SelectNextAvailable())
|
||||||
|
tabs.SelectPreviousAvailable();
|
||||||
|
if (tabs.SelectPreviousAvailable())
|
||||||
|
tabs.SelectNextAvailable();
|
||||||
|
}
|
||||||
|
}
|
||||||
155
create_menu_popup.tscn
Normal file
155
create_menu_popup.tscn
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
[gd_scene load_steps=9 format=3 uid="uid://kyaqu004qlcq"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://create_menu_popup.cs" id="1_b3hbh"]
|
||||||
|
[ext_resource type="StyleBox" uid="uid://cota68polt1iy" path="res://SettingsOverlayStyleBox.tres" id="1_tgffv"]
|
||||||
|
[ext_resource type="Script" path="res://CardCreateMarginContainer.cs" id="2_ak8l2"]
|
||||||
|
[ext_resource type="Script" path="res://CardCreateImageBox.cs" id="4_jjllr"]
|
||||||
|
[ext_resource type="Script" path="res://RowCreateMarginContainer.cs" id="4_ro4l1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bhlqt64wrhx83" path="res://card_image_picker.tscn" id="5_mnbvn"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p58nf"]
|
||||||
|
|
||||||
|
[sub_resource type="ButtonGroup" id="ButtonGroup_54l0c"]
|
||||||
|
|
||||||
|
[node name="CreateMenuPopup" type="PanelContainer"]
|
||||||
|
clip_contents = true
|
||||||
|
offset_right = 40.0
|
||||||
|
offset_bottom = 40.0
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
theme_override_styles/panel = ExtResource("1_tgffv")
|
||||||
|
script = ExtResource("1_b3hbh")
|
||||||
|
|
||||||
|
[node name="CreateMarginContainer" type="MarginContainer" parent="."]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 8
|
||||||
|
theme_override_constants/margin_top = 8
|
||||||
|
theme_override_constants/margin_right = 8
|
||||||
|
theme_override_constants/margin_bottom = 8
|
||||||
|
|
||||||
|
[node name="TabSplitContainer" type="VSplitContainer" parent="CreateMarginContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="CreateTabContainer" type="TabContainer" parent="CreateMarginContainer/TabSplitContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[node name="CardCreateMarginContainer" type="MarginContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 10
|
||||||
|
theme_override_constants/margin_top = 6
|
||||||
|
theme_override_constants/margin_right = 10
|
||||||
|
theme_override_constants/margin_bottom = 6
|
||||||
|
script = ExtResource("2_ak8l2")
|
||||||
|
|
||||||
|
[node name="CardEditContainer" type="VBoxContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TitleContainer" type="HBoxContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TitleLabel" type="Label" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/TitleContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Text"
|
||||||
|
|
||||||
|
[node name="TitleEdit" type="LineEdit" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/TitleContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
|
[node name="CardDetailsContainer" type="HSplitContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
split_offset = 6
|
||||||
|
dragger_visibility = 1
|
||||||
|
|
||||||
|
[node name="CardImageSelectContainer" type="PanelContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer"]
|
||||||
|
clip_contents = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 0
|
||||||
|
size_flags_vertical = 0
|
||||||
|
mouse_filter = 1
|
||||||
|
theme_override_styles/panel = SubResource("StyleBoxFlat_p58nf")
|
||||||
|
|
||||||
|
[node name="CardCreateImageBox" type="TextureRect" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/CardImageSelectContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(200, 200)
|
||||||
|
layout_mode = 2
|
||||||
|
expand_mode = 1
|
||||||
|
stretch_mode = 5
|
||||||
|
script = ExtResource("4_jjllr")
|
||||||
|
|
||||||
|
[node name="CardImagePicker" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/CardImageSelectContainer/CardCreateImageBox" instance=ExtResource("5_mnbvn")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="ImageStretchButtonsContainer" type="VBoxContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="StretchModeLabel" type="Label" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/ImageStretchButtonsContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = " Stretch Mode"
|
||||||
|
|
||||||
|
[node name="StretchModeFitButton" type="CheckBox" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/ImageStretchButtonsContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
button_pressed = true
|
||||||
|
button_group = SubResource("ButtonGroup_54l0c")
|
||||||
|
text = "Fit"
|
||||||
|
|
||||||
|
[node name="StretchModeStretchButton" type="CheckBox" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/ImageStretchButtonsContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
button_group = SubResource("ButtonGroup_54l0c")
|
||||||
|
text = "Stretch"
|
||||||
|
|
||||||
|
[node name="StretchModeCropButton" type="CheckBox" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/ImageStretchButtonsContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
button_group = SubResource("ButtonGroup_54l0c")
|
||||||
|
text = "Crop"
|
||||||
|
|
||||||
|
[node name="RowCreateMarginContainer" type="MarginContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("4_ro4l1")
|
||||||
|
|
||||||
|
[node name="RowEditVbox" type="HSplitContainer" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/RowCreateMarginContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="RowCreateColorPickerButton" type="ColorPickerButton" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/RowCreateMarginContainer/RowEditVbox"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(200, 200)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 0
|
||||||
|
size_flags_vertical = 0
|
||||||
|
edit_alpha = false
|
||||||
|
|
||||||
|
[node name="RowTextEdit" type="TextEdit" parent="CreateMarginContainer/TabSplitContainer/CreateTabContainer/RowCreateMarginContainer/RowEditVbox"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(200, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="CreateMenuButtonContainer" type="HBoxContainer" parent="CreateMarginContainer/TabSplitContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
alignment = 2
|
||||||
|
|
||||||
|
[node name="CreateMenuCancelButton" type="Button" parent="CreateMarginContainer/TabSplitContainer/CreateMenuButtonContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(100, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 8
|
||||||
|
text = "Cancel"
|
||||||
|
|
||||||
|
[node name="CreateMenuOkButton" type="Button" parent="CreateMarginContainer/TabSplitContainer/CreateMenuButtonContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(100, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 8
|
||||||
|
text = "OK"
|
||||||
|
|
||||||
|
[connection signal="file_selected" from="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer/CardEditContainer/CardDetailsContainer/CardImageSelectContainer/CardCreateImageBox/CardImagePicker" to="CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer" method="FileSelected"]
|
||||||
|
[connection signal="pressed" from="CreateMarginContainer/TabSplitContainer/CreateMenuButtonContainer/CreateMenuCancelButton" to="." method="CancelPressed"]
|
||||||
|
[connection signal="pressed" from="CreateMarginContainer/TabSplitContainer/CreateMenuButtonContainer/CreateMenuOkButton" to="." method="OkPressed"]
|
||||||
47
game.cs
47
game.cs
@@ -3,6 +3,7 @@ using System;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@@ -16,6 +17,14 @@ public partial class game : Control
|
|||||||
return _SettingsPopup;
|
return _SettingsPopup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private create_menu_popup _CreateMenuPopup;
|
||||||
|
private create_menu_popup CreateMenuPopup
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
_CreateMenuPopup ??= GetNode<create_menu_popup>("%CreateMenuPopup");
|
||||||
|
return _CreateMenuPopup;
|
||||||
|
}
|
||||||
|
}
|
||||||
[Export]
|
[Export]
|
||||||
private Vector2 _CardSize = new(200, 200);
|
private Vector2 _CardSize = new(200, 200);
|
||||||
public Vector2 CardSize
|
public Vector2 CardSize
|
||||||
@@ -77,10 +86,24 @@ public partial class game : Control
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
CreateMenuPopup.ClosePopup();
|
||||||
SettingsPopup.ShowPopup();
|
SettingsPopup.ShowPopup();
|
||||||
}
|
}
|
||||||
GetViewport().SetInputAsHandled();
|
GetViewport().SetInputAsHandled();
|
||||||
}
|
}
|
||||||
|
else if (@event.IsActionPressed("CreationMenu"))
|
||||||
|
{
|
||||||
|
if (CreateMenuPopup.Visible)
|
||||||
|
{
|
||||||
|
CreateMenuPopup.ClosePopup();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SettingsPopup.ClosePopup();
|
||||||
|
CreateMenuPopup.ShowPopup();
|
||||||
|
}
|
||||||
|
GetViewport().SetInputAsHandled();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
@@ -109,6 +132,7 @@ public partial class game : Control
|
|||||||
var node = GetNode<VBoxContainer>("%RowContainer");
|
var node = GetNode<VBoxContainer>("%RowContainer");
|
||||||
node.AddChild(row);
|
node.AddChild(row);
|
||||||
node.MoveChild(row, index);
|
node.MoveChild(row, index);
|
||||||
|
PropogateCardSize();
|
||||||
}
|
}
|
||||||
public void RemoveRow(string id)
|
public void RemoveRow(string id)
|
||||||
{
|
{
|
||||||
@@ -175,17 +199,25 @@ public partial class game : Control
|
|||||||
}
|
}
|
||||||
public void ImportGame(string filename)
|
public void ImportGame(string filename)
|
||||||
{
|
{
|
||||||
GD.Print($"Importing from {filename}");
|
using var reader = new StreamReader(
|
||||||
Serializer.LoadFromSerial(this,
|
new DeflateStream(
|
||||||
File.ReadAllText(filename)
|
new FileStream(filename, FileMode.Open),
|
||||||
|
CompressionMode.Decompress
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
var s = reader.ReadToEnd();
|
||||||
|
Serializer.LoadFromSerial(this, s);
|
||||||
}
|
}
|
||||||
public void ExportGame(string filename, ExportSettings es)
|
public void ExportGame(string filename, ExportSettings es)
|
||||||
{
|
{
|
||||||
GD.Print($"Exporting to {filename}");
|
using var writer = new StreamWriter(
|
||||||
File.WriteAllText(filename,
|
new DeflateStream(
|
||||||
Serializer.CreateGameJson(this, es)
|
new FileStream(filename, FileMode.OpenOrCreate),
|
||||||
|
CompressionLevel.Optimal
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
var json = Serializer.CreateGameJson(this, es);
|
||||||
|
writer.Write(json);
|
||||||
}
|
}
|
||||||
#region Commands
|
#region Commands
|
||||||
public void MoveCard(string cardId, string targetRowId, int? toIndex = null)
|
public void MoveCard(string cardId, string targetRowId, int? toIndex = null)
|
||||||
@@ -244,8 +276,7 @@ public partial class game : Control
|
|||||||
}
|
}
|
||||||
public void CreateRow(Color? color = null, string title = null)
|
public void CreateRow(Color? color = null, string title = null)
|
||||||
{
|
{
|
||||||
var scn = GD.Load<PackedScene>("res://row.tscn");
|
var r = row.MakeRow(GetTree());
|
||||||
var r = scn.Instantiate() as row;
|
|
||||||
if (!string.IsNullOrWhiteSpace(title))
|
if (!string.IsNullOrWhiteSpace(title))
|
||||||
r.RowText = title;
|
r.RowText = title;
|
||||||
if (color is Color color1)
|
if (color is Color color1)
|
||||||
|
|||||||
10
game.tscn
10
game.tscn
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://ck0t4k3guvmfm"]
|
[gd_scene load_steps=10 format=3 uid="uid://ck0t4k3guvmfm"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://b7pebyti48f7b" path="res://row.tscn" id="1_numg7"]
|
[ext_resource type="PackedScene" uid="uid://b7pebyti48f7b" path="res://row.tscn" id="1_numg7"]
|
||||||
[ext_resource type="Script" path="res://game.cs" id="1_vl33u"]
|
[ext_resource type="Script" path="res://game.cs" id="1_vl33u"]
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://jm7tss267q8y" path="res://settings_popup.tscn" id="6_e1cou"]
|
[ext_resource type="PackedScene" uid="uid://jm7tss267q8y" path="res://settings_popup.tscn" id="6_e1cou"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dxvues6b3g2tn" path="res://card_edit_popup.tscn" id="6_eqvov"]
|
[ext_resource type="PackedScene" uid="uid://dxvues6b3g2tn" path="res://card_edit_popup.tscn" id="6_eqvov"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dwtxrx5xtewur" path="res://row_edit_popup.tscn" id="7_nyiqt"]
|
[ext_resource type="PackedScene" uid="uid://dwtxrx5xtewur" path="res://row_edit_popup.tscn" id="7_nyiqt"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://kyaqu004qlcq" path="res://create_menu_popup.tscn" id="8_f2hb2"]
|
||||||
|
|
||||||
[node name="Game" type="Control"]
|
[node name="Game" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
@@ -104,9 +105,16 @@ visible = false
|
|||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
theme_override_styles/panel = ExtResource("6_8am6d")
|
theme_override_styles/panel = ExtResource("6_8am6d")
|
||||||
|
|
||||||
|
[node name="CreateMenuPopup" parent="." instance=ExtResource("8_f2hb2")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
|
layout_mode = 0
|
||||||
|
|
||||||
[node name="CardEditPopup" parent="." instance=ExtResource("6_eqvov")]
|
[node name="CardEditPopup" parent="." instance=ExtResource("6_eqvov")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[connection signal="ExportSelected" from="SettingsPopup" to="." method="ExportGame"]
|
[connection signal="ExportSelected" from="SettingsPopup" to="." method="ExportGame"]
|
||||||
[connection signal="ImportSelected" from="SettingsPopup" to="." method="ImportGame"]
|
[connection signal="ImportSelected" from="SettingsPopup" to="." method="ImportGame"]
|
||||||
|
[connection signal="ClearMenu" from="CreateMenuPopup" to="CreateMenuPopup/CreateMarginContainer/TabSplitContainer/CreateTabContainer/CardCreateMarginContainer" method="ClearMenu"]
|
||||||
|
[connection signal="ClearMenu" from="CreateMenuPopup" to="CreateMenuPopup/CreateMarginContainer/TabSplitContainer/CreateTabContainer/RowCreateMarginContainer" method="ClearMenu"]
|
||||||
|
|||||||
@@ -50,3 +50,9 @@ LocationMenu={
|
|||||||
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(193, 8),"global_position":Vector2(197, 49),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(193, 8),"global_position":Vector2(197, 49),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
CreationMenu={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194333,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":4,"position":Vector2(159, 18),"global_position":Vector2(163, 59),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
3
row.cs
3
row.cs
@@ -100,7 +100,6 @@ public partial class row : Control
|
|||||||
}
|
}
|
||||||
public void DropCardOn(Vector2 atPosition, Variant data)
|
public void DropCardOn(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
GD.Print($"Dropping at {atPosition}");
|
|
||||||
card c = data.As<card>()
|
card c = data.As<card>()
|
||||||
?? throw new Exception("invalid drag data");
|
?? throw new Exception("invalid drag data");
|
||||||
var g = this.GetParentOfType<game>()
|
var g = this.GetParentOfType<game>()
|
||||||
@@ -131,7 +130,7 @@ public partial class row : Control
|
|||||||
}
|
}
|
||||||
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
return data.As<row>() is not null;
|
return data.Obj is row;
|
||||||
}
|
}
|
||||||
public override void _DropData(Vector2 atPosition, Variant data)
|
public override void _DropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,10 +39,15 @@ public partial class row_edit_popup : PanelContainer
|
|||||||
}
|
}
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
|
Hide();
|
||||||
GetNode<ColorPickerButton>("%ColorPickerButton").Color = DefaultColor;
|
GetNode<ColorPickerButton>("%ColorPickerButton").Color = DefaultColor;
|
||||||
GetNode<TextEdit>("%RowTextEdit").Text = "";
|
GetNode<TextEdit>("%RowTextEdit").Text = "";
|
||||||
EditingRow = null;
|
EditingRow = null;
|
||||||
Hide();
|
|
||||||
this.GetParentOfType<game>().MenuClosedEnableInteraction();
|
this.GetParentOfType<game>().MenuClosedEnableInteraction();
|
||||||
}
|
}
|
||||||
|
public void DeleteRow()
|
||||||
|
{
|
||||||
|
EditingRow.QueueFree();
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://dwtxrx5xtewur"]
|
[gd_scene load_steps=3 format=3 uid="uid://dwtxrx5xtewur"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://row_edit_popup.cs" id="1_1wf8q"]
|
[ext_resource type="Script" path="res://row_edit_popup.cs" id="1_1wf8q"]
|
||||||
|
[ext_resource type="Script" path="res://RowDeleteButton.cs" id="2_wjpay"]
|
||||||
|
|
||||||
[node name="RowEditPopup" type="PanelContainer"]
|
[node name="RowEditPopup" type="PanelContainer"]
|
||||||
script = ExtResource("1_1wf8q")
|
script = ExtResource("1_1wf8q")
|
||||||
@@ -10,14 +11,19 @@ layout_mode = 2
|
|||||||
theme_override_constants/margin_right = 5
|
theme_override_constants/margin_right = 5
|
||||||
theme_override_constants/margin_bottom = 5
|
theme_override_constants/margin_bottom = 5
|
||||||
|
|
||||||
[node name="VSplitContainer" type="VSplitContainer" parent="RowEditMarginContainer"]
|
[node name="RowEditOuterVbox" type="VSplitContainer" parent="RowEditMarginContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
dragger_visibility = 1
|
dragger_visibility = 1
|
||||||
|
|
||||||
[node name="RowEditVbox" type="HSplitContainer" parent="RowEditMarginContainer/VSplitContainer"]
|
[node name="RowEditInnerVbox" type="VSplitContainer" parent="RowEditMarginContainer/RowEditOuterVbox"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
dragger_visibility = 1
|
||||||
|
|
||||||
[node name="ColorPickerButton" type="ColorPickerButton" parent="RowEditMarginContainer/VSplitContainer/RowEditVbox"]
|
[node name="RowEditVbox" type="HSplitContainer" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox"]
|
||||||
|
layout_mode = 2
|
||||||
|
dragger_visibility = 1
|
||||||
|
|
||||||
|
[node name="ColorPickerButton" type="ColorPickerButton" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowEditVbox"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(200, 200)
|
custom_minimum_size = Vector2(200, 200)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
@@ -25,28 +31,45 @@ size_flags_horizontal = 0
|
|||||||
size_flags_vertical = 0
|
size_flags_vertical = 0
|
||||||
edit_alpha = false
|
edit_alpha = false
|
||||||
|
|
||||||
[node name="RowTextEdit" type="TextEdit" parent="RowEditMarginContainer/VSplitContainer/RowEditVbox"]
|
[node name="RowTextEdit" type="TextEdit" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowEditVbox"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(200, 0)
|
custom_minimum_size = Vector2(200, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="RowEditButtonContainer" type="HBoxContainer" parent="RowEditMarginContainer/VSplitContainer"]
|
[node name="RowDeleteHbox" type="HSplitContainer" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 8
|
||||||
|
dragger_visibility = 1
|
||||||
|
|
||||||
|
[node name="RowDeleteEnableButton" type="CheckBox" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowDeleteHbox"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="RowDeleteButton" type="Button" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowDeleteHbox"]
|
||||||
|
custom_minimum_size = Vector2(135, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
disabled = true
|
||||||
|
text = "DELETE"
|
||||||
|
script = ExtResource("2_wjpay")
|
||||||
|
|
||||||
|
[node name="RowEditButtonContainer" type="HBoxContainer" parent="RowEditMarginContainer/RowEditOuterVbox"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
alignment = 2
|
alignment = 2
|
||||||
|
|
||||||
[node name="RowEditCancelButton" type="Button" parent="RowEditMarginContainer/VSplitContainer/RowEditButtonContainer"]
|
[node name="RowEditCancelButton" type="Button" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditButtonContainer"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(100, 0)
|
custom_minimum_size = Vector2(100, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 8
|
size_flags_horizontal = 8
|
||||||
text = "Cancel"
|
text = "Cancel"
|
||||||
|
|
||||||
[node name="RowEditOkButton" type="Button" parent="RowEditMarginContainer/VSplitContainer/RowEditButtonContainer"]
|
[node name="RowEditOkButton" type="Button" parent="RowEditMarginContainer/RowEditOuterVbox/RowEditButtonContainer"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(100, 0)
|
custom_minimum_size = Vector2(100, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 8
|
size_flags_horizontal = 8
|
||||||
text = "OK"
|
text = "OK"
|
||||||
|
|
||||||
[connection signal="pressed" from="RowEditMarginContainer/VSplitContainer/RowEditButtonContainer/RowEditCancelButton" to="." method="CancelClicked"]
|
[connection signal="toggled" from="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowDeleteHbox/RowDeleteEnableButton" to="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowDeleteHbox/RowDeleteButton" method="ToggleEnable"]
|
||||||
[connection signal="pressed" from="RowEditMarginContainer/VSplitContainer/RowEditButtonContainer/RowEditOkButton" to="." method="OkClicked"]
|
[connection signal="pressed" from="RowEditMarginContainer/RowEditOuterVbox/RowEditInnerVbox/RowDeleteHbox/RowDeleteButton" to="." method="DeleteRow"]
|
||||||
|
[connection signal="pressed" from="RowEditMarginContainer/RowEditOuterVbox/RowEditButtonContainer/RowEditCancelButton" to="." method="CancelClicked"]
|
||||||
|
[connection signal="pressed" from="RowEditMarginContainer/RowEditOuterVbox/RowEditButtonContainer/RowEditOkButton" to="." method="OkClicked"]
|
||||||
|
|||||||
@@ -63,6 +63,13 @@ public partial class settings_popup : PanelContainer
|
|||||||
}
|
}
|
||||||
public void _on_ok_button_pressed()
|
public void _on_ok_button_pressed()
|
||||||
{
|
{
|
||||||
|
var settings = GetNode<Settings>("/root/Settings");
|
||||||
|
settings.AllowModerators = GetNode<CheckBox>("%CheckBoxModerator").ButtonPressed;
|
||||||
|
settings.Trigger = GetNode<LineEdit>("%CommandEdit").Text;
|
||||||
|
settings.SetUserLists(GetNode<TextEdit>("%WhiteListEdit").Text.Split('\n',
|
||||||
|
StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries),
|
||||||
|
GetNode<TextEdit>("%BlackListEdit").Text.Split('\n',
|
||||||
|
StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries));
|
||||||
GetNode<ConfigStretchContainer>("%ConfigStretchContainer").Apply();
|
GetNode<ConfigStretchContainer>("%ConfigStretchContainer").Apply();
|
||||||
ClosePopup();
|
ClosePopup();
|
||||||
}
|
}
|
||||||
@@ -102,16 +109,11 @@ public partial class settings_popup : PanelContainer
|
|||||||
}
|
}
|
||||||
private void SuccessfulConnection()
|
private void SuccessfulConnection()
|
||||||
{
|
{
|
||||||
|
GD.Print(nameof(SuccessfulConnection));
|
||||||
var tcw = GetNode<TwitchChatWatcher>("/root/TwitchChatWatcher");
|
var tcw = GetNode<TwitchChatWatcher>("/root/TwitchChatWatcher");
|
||||||
if (tcw.State != System.Net.WebSockets.WebSocketState.Open)
|
if (tcw.State != System.Net.WebSockets.WebSocketState.Open)
|
||||||
throw new Exception("Websocket closed");
|
throw new Exception("Websocket closed");
|
||||||
var settings = GetNode<Settings>("/root/Settings");
|
GetNode<BaseButton>("%JoinChannelButton").Disabled = false;
|
||||||
settings.AllowModerators = GetNode<CheckBox>("%CheckBoxModerator").ButtonPressed;
|
|
||||||
settings.Command = GetNode<LineEdit>("%CommandEdit").Text;
|
|
||||||
settings.SetUserLists(GetNode<TextEdit>("%WhiteListEdit").Text.Split('\n',
|
|
||||||
StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries),
|
|
||||||
GetNode<TextEdit>("%BlackListEdit").Text.Split('\n',
|
|
||||||
StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries));
|
|
||||||
UnlockPopup();
|
UnlockPopup();
|
||||||
}
|
}
|
||||||
private void SocketConnected()
|
private void SocketConnected()
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ unique_name_in_owner = true
|
|||||||
custom_minimum_size = Vector2(125, 0)
|
custom_minimum_size = Vector2(125, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 8
|
size_flags_horizontal = 8
|
||||||
|
disabled = true
|
||||||
text = "Join Channel"
|
text = "Join Channel"
|
||||||
|
|
||||||
[node name="ConnectButton" type="Button" parent="SettingsDivider/SettingsPopupContainer/ChatMarginContainer/ChatContainer/ConnectButtonMarginContainer/HBoxContainer"]
|
[node name="ConnectButton" type="Button" parent="SettingsDivider/SettingsPopupContainer/ChatMarginContainer/ChatContainer/ConnectButtonMarginContainer/HBoxContainer"]
|
||||||
@@ -217,6 +218,7 @@ unique_name_in_owner = true
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 4
|
size_flags_horizontal = 4
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
|
button_pressed = true
|
||||||
text = "Scale Images"
|
text = "Scale Images"
|
||||||
|
|
||||||
[node name="ButtonContainer" type="HBoxContainer" parent="SettingsDivider"]
|
[node name="ButtonContainer" type="HBoxContainer" parent="SettingsDivider"]
|
||||||
|
|||||||
Reference in New Issue
Block a user