Add animation to spell editor.
加入法术编辑器的动画。
This commit is contained in:
parent
77f2bac36e
commit
81344faa3e
|
@ -1,7 +1,7 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://djsh4unystlf0"]
|
||||
[gd_scene load_steps=16 format=3 uid="uid://djsh4unystlf0"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://qowlv0viyqbb" path="res://sprites/ui/Null.png" id="1_346je"]
|
||||
[ext_resource type="Script" path="res://scripts/furniture/GuiFurniture.cs" id="1_t1qdg"]
|
||||
[ext_resource type="Texture2D" uid="uid://cyciw4drjvrs8" path="res://sprites/furnitures/SpellEditor.png" id="2_sbshw"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vx4tg"]
|
||||
size = Vector2(31, 31)
|
||||
|
@ -9,15 +9,90 @@ size = Vector2(31, 31)
|
|||
[sub_resource type="CircleShape2D" id="CircleShape2D_in1f7"]
|
||||
radius = 52.6118
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_yq6e3"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(0, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ljyfv"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(44, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_46j2i"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(88, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_q6a2v"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(132, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_lyh2i"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(0, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_84sml"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(44, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_xncbb"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(88, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_eaqhr"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(132, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_bcdl4"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(0, 86, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_a4mgy"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(44, 86, 44, 43)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_mppe5"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_yq6e3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_ljyfv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_46j2i")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_q6a2v")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_lyh2i")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_84sml")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_xncbb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_eaqhr")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_bcdl4")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_a4mgy")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="RigidBody2D" type="RigidBody2D"]
|
||||
collision_layer = 256
|
||||
collision_mask = 160
|
||||
script = ExtResource("1_t1qdg")
|
||||
Path = "res://prefab/ui/SpellEditorUI.tscn"
|
||||
|
||||
[node name="Null" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("1_346je")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-0.5, -0.5)
|
||||
shape = SubResource("RectangleShape2D_vx4tg")
|
||||
|
@ -27,3 +102,9 @@ visible = false
|
|||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="OperateArea2D"]
|
||||
shape = SubResource("CircleShape2D_in1f7")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
scale = Vector2(0.7, 0.7)
|
||||
sprite_frames = SubResource("SpriteFrames_mppe5")
|
||||
autoplay = "default"
|
||||
frame_progress = 0.717769
|
||||
|
|
|
@ -84,13 +84,16 @@ text = "ui_re_create_map"
|
|||
|
||||
[node name="SeedLabel" type="Label" parent="CanvasLayer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 25.0
|
||||
grow_horizontal = 2
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -45.0
|
||||
offset_top = -16.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
theme_override_font_sizes/font_size = 10
|
||||
|
||||
[node name="MapContainer" parent="CanvasLayer/Control" instance=ExtResource("6_ljdj4")]
|
||||
layout_mode = 1
|
||||
|
|
|
@ -784,6 +784,7 @@ public partial class CharacterTemplate : CharacterBody2D
|
|||
{
|
||||
//Remove the item from the item container
|
||||
//从物品容器内取出物品
|
||||
originalItem.OnThrow(velocity);
|
||||
var item = originalItem.CreateItem(1);
|
||||
if (item is not Node2D node2D)
|
||||
{
|
||||
|
|
|
@ -89,7 +89,6 @@ public partial class Player : CharacterTemplate
|
|||
private void SelectedItemChangeEvent(SelectedItemChangeEvent selectedItemChangeEvent)
|
||||
{
|
||||
var item = selectedItemChangeEvent.NewItem;
|
||||
GameSceneDepend.DynamicUiGroup?.HideAllControl();
|
||||
if (item is Node2D node2D)
|
||||
{
|
||||
CurrentItem = node2D;
|
||||
|
@ -229,9 +228,6 @@ public partial class Player : CharacterTemplate
|
|||
{
|
||||
UseItem(GetGlobalMousePosition());
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Pick up an item
|
||||
//捡起物品
|
||||
if (Input.IsActionJustPressed("pick_up"))
|
||||
|
@ -305,7 +301,6 @@ public partial class Player : CharacterTemplate
|
|||
}
|
||||
|
||||
ThrowItem(ItemContainer.GetSelectIndex(), 1, GetThrowVelocity());
|
||||
GameSceneDepend.DynamicUiGroup?.HideAllControl();
|
||||
CurrentItem = null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,4 +121,11 @@ public interface IItem
|
|||
/// <param name="owner">Owner of current item, if any</param>
|
||||
/// <param name="targetGlobalPosition">Target position, such as the position of the cursor when used by the player</param>
|
||||
void Use(Node2D? owner, Vector2 targetGlobalPosition);
|
||||
|
||||
/// <summary>
|
||||
/// <para>When the item is thrown</para>
|
||||
/// <para>当物品被抛出时</para>
|
||||
/// </summary>
|
||||
/// <param name="velocity"></param>
|
||||
void OnThrow(Vector2 velocity);
|
||||
}
|
|
@ -25,6 +25,20 @@ public partial class Packsack : PickAbleTemplate
|
|||
});
|
||||
}
|
||||
|
||||
protected override void OnSelectChange(bool isSelected)
|
||||
{
|
||||
if (isSelected)
|
||||
{
|
||||
return;
|
||||
}
|
||||
GameSceneDepend.DynamicUiGroup?.HideControl(Path);
|
||||
}
|
||||
|
||||
public override void OnThrow(Vector2 velocity)
|
||||
{
|
||||
GameSceneDepend.DynamicUiGroup?.HideControl(Path);
|
||||
}
|
||||
|
||||
public override void CopyAttributes(Node node)
|
||||
{
|
||||
base.CopyAttributes(node);
|
||||
|
|
|
@ -48,5 +48,11 @@ public class PlaceholderItem : IItem
|
|||
|
||||
public void Use(Node2D? owner, Vector2 targetGlobalPosition)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public void OnThrow(Vector2 velocity)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using ColdMint.scripts.inventory;
|
||||
using ColdMint.scripts.map.events;
|
||||
using Godot;
|
||||
|
||||
namespace ColdMint.scripts.loader.uiLoader;
|
||||
|
@ -14,9 +15,28 @@ public partial class SpellEditorUi : UiLoaderTemplate
|
|||
_exitButton = GetNode<Button>("ExitButton");
|
||||
_itemSlot = GetNode<ItemSlotNode>("ItemSlot");
|
||||
_itemContainer = new UniversalItemContainer(1);
|
||||
_itemContainer.ItemDataChangeEvent += OnItemDataChangeEvent;
|
||||
_itemSlot.Update(_itemContainer.GetPlaceHolderItem(0));
|
||||
}
|
||||
|
||||
private void OnItemDataChangeEvent(ItemDataChangeEvent itemDataChangeEvent)
|
||||
{
|
||||
if (_itemSlot == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_itemSlot.Update(itemDataChangeEvent.NewItem);
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
base._ExitTree();
|
||||
if (_itemContainer != null)
|
||||
{
|
||||
_itemContainer.ItemDataChangeEvent -= OnItemDataChangeEvent;
|
||||
}
|
||||
}
|
||||
|
||||
public override void LoadUiActions()
|
||||
{
|
||||
if (_exitButton != null)
|
||||
|
|
|
@ -46,7 +46,7 @@ public partial class PickAbleTemplate : RigidBody2D, IItem
|
|||
return TranslationServerUtils.Translate(key) ?? key;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Owner</para>
|
||||
/// <para>主人</para>
|
||||
|
@ -92,12 +92,38 @@ public partial class PickAbleTemplate : RigidBody2D, IItem
|
|||
public bool Picked { get; set; }
|
||||
|
||||
public int MaxQuantity { get; set; } = 1;
|
||||
public bool IsSelect { get; set; }
|
||||
|
||||
private bool _isSelected;
|
||||
|
||||
public bool IsSelect
|
||||
{
|
||||
get => _isSelected;
|
||||
set
|
||||
{
|
||||
if (_isSelected == value)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_isSelected = value;
|
||||
OnSelectChange(value);
|
||||
}
|
||||
}
|
||||
|
||||
public IItemContainer? ItemContainer { get; set; }
|
||||
public IItemContainer? SelfItemContainer { get; set; }
|
||||
|
||||
private Label? _tipLabel;
|
||||
|
||||
/// <summary>
|
||||
/// <para></para>
|
||||
/// <para>当选中状态发生改变时</para>
|
||||
/// </summary>
|
||||
/// <param name="isSelected"></param>
|
||||
protected virtual void OnSelectChange(bool isSelected)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public IItem? CreateItem(int number)
|
||||
{
|
||||
if (number == 0)
|
||||
|
@ -156,6 +182,11 @@ public partial class PickAbleTemplate : RigidBody2D, IItem
|
|||
{
|
||||
}
|
||||
|
||||
public virtual void OnThrow(Vector2 velocity)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_damageArea2D = GetNode<Area2D>("DamageArea2D");
|
||||
|
|
BIN
sprites/furnitures/SpellEditor.png
Normal file
BIN
sprites/furnitures/SpellEditor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
34
sprites/furnitures/SpellEditor.png.import
Normal file
34
sprites/furnitures/SpellEditor.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cyciw4drjvrs8"
|
||||
path="res://.godot/imported/SpellEditor.png-a8650f7f0135f5be6d7d33b867de82ab.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://sprites/furnitures/SpellEditor.png"
|
||||
dest_files=["res://.godot/imported/SpellEditor.png-a8650f7f0135f5be6d7d33b867de82ab.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
Loading…
Reference in New Issue
Block a user