Initial data

This commit is contained in:
Rendo 2025-07-17 20:28:47 +05:00
commit f65cb11474
12 changed files with 340 additions and 48 deletions

View file

@ -7,8 +7,9 @@ public partial class AdventureLevelResource : Resource
{
[Export] public float startSun = 50;
//[Export] public Array<Conditions> conditions;
[Export(PropertyHint.Range,"0,1,0.01")] public float wavePercentage;
[Export(PropertyHint.Range, "0,1,0.01")] public float wavePercentage;
[Export] public float standardWaveDelay;
[Export] public float initialWaveDelay;
[Export] public Array<WaveData> waves;
[Export] public Array<PackedScene> initialScenes = [.. new PackedScene[45]];
}

View file

@ -1,8 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://dkq82o31vr3i2"]
[gd_scene load_steps=5 format=3 uid="uid://dkq82o31vr3i2"]
[ext_resource type="Script" uid="uid://dkgxtig5fwdgi" path="res://addons/pvzadventure/scripts/AdventureEditor.cs" id="1_go5yu"]
[ext_resource type="Script" uid="uid://binuuattefn7d" path="res://addons/pvzadventure/scripts/FileButton.cs" id="2_d5hwn"]
[ext_resource type="PackedScene" uid="uid://db5ah76l43ng2" path="res://addons/pvzadventure/scenes/zombie_editor.tscn" id="3_1ojhm"]
[ext_resource type="Script" uid="uid://c6jttmpeyakoa" path="res://addons/pvzadventure/scripts/EditorsContainer.cs" id="3_5imrs"]
[ext_resource type="Script" uid="uid://b0hl4ap18wbb2" path="res://addons/pvzadventure/scripts/AdventureResourceInspector.cs" id="3_d5hwn"]
@ -52,10 +51,6 @@ size_flags_horizontal = 3
size_flags_stretch_ratio = 3.0
script = ExtResource("3_5imrs")
[node name="ZombieEditor" parent="Editor/WorkArea/PanelContainer" instance=ExtResource("3_1ojhm")]
visible = false
layout_mode = 2
[node name="Inspector" type="VSplitContainer" parent="Editor/WorkArea"]
layout_mode = 2
size_flags_horizontal = 3

View file

@ -1,5 +1,153 @@
[gd_scene format=3 uid="uid://sqessjn0m4o3"]
[gd_scene load_steps=3 format=3 uid="uid://sqessjn0m4o3"]
[ext_resource type="PackedScene" uid="uid://djb8ynxhnmo0t" path="res://addons/pvzadventure/scenes/universal_grid_item.tscn" id="1_d8e2t"]
[ext_resource type="Script" uid="uid://cumeahjpjgagq" path="res://addons/pvzadventure/scripts/InitialEditor.cs" id="1_tu7vy"]
[node name="InitialEditor" type="ScrollContainer"]
offset_right = 40.0
offset_bottom = 40.0
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_tu7vy")
[node name="GridContainer" type="GridContainer" parent="."]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
columns = 9
[node name="GridItem" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem2" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem3" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem4" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem5" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem6" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem7" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem8" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem9" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem10" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem11" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem12" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem13" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem14" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem15" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem16" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem17" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem18" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem19" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem20" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem21" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem22" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem23" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem24" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem25" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem26" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem27" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem28" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem29" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem30" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem31" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem32" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem33" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem34" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem35" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem36" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem37" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem38" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem39" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem40" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem41" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem42" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem43" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem44" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem45" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2

View file

@ -1,6 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://djb8ynxhnmo0t"]
[gd_scene load_steps=4 format=3 uid="uid://djb8ynxhnmo0t"]
[ext_resource type="Script" uid="uid://fof6kr0et8ng" path="res://addons/pvzadventure/scripts/ZE_GridItem.cs" id="1_e5mae"]
[ext_resource type="Script" uid="uid://b8ccbjhhus7xk" path="res://addons/pvzadventure/scripts/UNI_GridItem.cs" id="1_e5mae"]
[ext_resource type="Script" uid="uid://c3cgpwy1qaeww" path="res://addons/pvzadventure/scripts/packed_scene_preview_generator.gd" id="2_k7w8c"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jbknv"]
bg_color = Color(0.18359, 0.18359, 0.18359, 1)
@ -15,9 +16,9 @@ clip_contents = true
custom_minimum_size = Vector2(100, 100)
anchors_preset = -1
anchor_right = 0.172
anchor_bottom = 0.25
anchor_bottom = 0.212
offset_right = -0.200005
offset_bottom = -15.0
offset_bottom = 0.199997
theme_override_styles/panel = SubResource("StyleBoxFlat_jbknv")
script = ExtResource("1_e5mae")
@ -25,3 +26,10 @@ script = ExtResource("1_e5mae")
layout_mode = 2
expand_mode = 1
stretch_mode = 5
script = ExtResource("2_k7w8c")
[node name="Viewport" type="SubViewport" parent="Texture"]
process_mode = 4
transparent_bg = true
[node name="Camera2D" type="Camera2D" parent="Texture/Viewport"]

View file

@ -11,6 +11,7 @@ public partial class AdventureResourceInspector : Node
const string EVENTS_ITEM_NAME = "Events";
const string HUGEWAVE_ITEM_NAME = "Is huge wave?";
private PackedScene zombieEditorScene = ResourceLoader.Load<PackedScene>("uid://db5ah76l43ng2");
private PackedScene initialEditorScene = ResourceLoader.Load<PackedScene>("uid://sqessjn0m4o3");
private Tree tree;
private AdventureLevelResource heldResource;
@ -99,7 +100,10 @@ public partial class AdventureResourceInspector : Node
break;
case INITIAL_ITEM_NAME:
var initialEditor = initialEditorScene.Instantiate<InitialEditor>();
editorContainer.AddChild(initialEditor);
initialEditor.SetData(heldResource);
initialEditor.SaveCallback += adventureEditor.Save;
break;
}
}

View file

@ -0,0 +1,46 @@
using Godot;
[Tool]
public partial class InitialEditor : Node
{
public AdventureLevelResource editedResource;
[Signal] public delegate void SaveCallbackEventHandler();
public override void _Ready()
{
foreach (var child in GetChild(0).GetChildren())
{
if (child is UNI_GridItem gridItem)
{
gridItem.ResourceChanged += OnResourceChanged;
}
}
}
public void SetData(AdventureLevelResource resource)
{
editedResource = resource;
for (int i = 0; i < GetChild(0).GetChildCount(); i++)
{
if (GetChild(0).GetChild(i) is UNI_GridItem gridItem)
{
gridItem.index = i;
if (editedResource.initialScenes[i] == null)
gridItem.SetData("");
else
gridItem.SetData(editedResource.initialScenes[i].ResourcePath);
}
}
}
public void OnResourceChanged(string to, int index)
{
if (ResourceLoader.Exists(to))
{
editedResource.initialScenes[index] = ResourceLoader.Load<PackedScene>(to);
}
else
{
editedResource.initialScenes[index] = null;
}
EmitSignal(SignalName.SaveCallback);
}
}

View file

@ -0,0 +1 @@
uid://cumeahjpjgagq

View file

@ -1,15 +1,46 @@
using Godot;
using System;
[Tool]
public partial class UNI_GridItem : PanelContainer
{
// Called when the node enters the scene tree for the first time.
public override void _Ready()
private string path;
public int index;
[Signal] public delegate void ResourceChangedEventHandler(string path, int index);
public void SetData(string data)
{
path = data;
UpdateContent();
}
private void UpdateContent()
{
if (path == null || path == "")
{
GetNode<TextureRect>("Texture").Texture = null;
return;
}
GetNode<TextureRect>("Texture").Call("set_path", path);
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
public override Variant _GetDragData(Vector2 atPosition)
{
return path;
}
public override bool _CanDropData(Vector2 atPosition, Variant data)
{
return data.AsGodotDictionary<string, string>().ContainsKey("files") && ResourceLoader.Exists(data.AsGodotDictionary<string, Variant>()["files"].AsStringArray()[0]);
}
public override void _DropData(Vector2 atPosition, Variant data)
{
SetData(data.AsGodotDictionary<string, Variant>()["files"].AsStringArray()[0]);
EmitSignal(SignalName.ResourceChanged, path, index);
}
public override void _GuiInput(InputEvent @event)
{
if (@event is InputEventMouseButton buttonEvent && buttonEvent.ButtonIndex == MouseButton.Right )
{
SetData(null);
EmitSignal(SignalName.ResourceChanged, path, index);
}
}
}

View file

@ -0,0 +1,42 @@
@tool
extends TextureRect
@onready var subview = $Viewport
@onready var camera = $Viewport/Camera2D
var scene : Node
func set_path(path):
if scene:
scene.queue_free()
if ResourceLoader.exists(path) == false:
return
var packed_scene : PackedScene = load(path)
render_scene(path, packed_scene)
func render_scene(path: String,packed : PackedScene):
scene = packed.instantiate()
subview.add_child(scene)
var bb = get_bounding_box(scene)
subview.size = Vector2(max(bb.size.x,bb.size.y),max(bb.size.x,bb.size.y))
camera.position = bb.position * Vector2(0.5,0.5)
var vtexture : ViewportTexture = subview.get_texture()
texture = vtexture
func get_bounding_box(root: Node2D) -> Rect2:
var rect := Rect2();
var children := root.get_children();
while children:
var child = children.pop_back();
children.append_array(child.get_children());
if child.has_method('get_rect') and child.has_method('to_global'):
var child_rect := child.get_rect() as Rect2;
child_rect.position = child.to_global(child_rect.position);
rect = rect.merge(child_rect);
return rect;

View file

@ -0,0 +1 @@
uid://c3cgpwy1qaeww

View file

@ -1,8 +1,12 @@
[gd_resource type="Resource" script_class="AdventureLevelResource" load_steps=36 format=3 uid="uid://br3364jty1j0i"]
[gd_resource type="Resource" script_class="AdventureLevelResource" load_steps=40 format=3 uid="uid://br3364jty1j0i"]
[ext_resource type="PackedScene" uid="uid://xu4i6tmkv00a" path="res://scenes/entities/Zombies/bucket_zombie.tscn" id="1_n6yt3"]
[ext_resource type="Script" uid="uid://bximdujbkj2n4" path="res://addons/pvzadventure/AdventureLevelResource.cs" id="1_qb1ge"]
[ext_resource type="PackedScene" uid="uid://bw1w8jp0yeypy" path="res://scenes/entities/plants/aloe.tscn" id="1_y8rkm"]
[ext_resource type="Script" uid="uid://cw7yc3i2lgcja" path="res://addons/pvzadventure/WaveEvent.cs" id="2_8aewt"]
[ext_resource type="PackedScene" uid="uid://qq0cw8xtcoj3" path="res://scenes/entities/plants/garlic.tscn" id="2_dbrq5"]
[ext_resource type="Script" uid="uid://7rptlb5qr3b6" path="res://addons/pvzadventure/WaveData.cs" id="3_hlq35"]
[ext_resource type="PackedScene" uid="uid://bgqmwsb6ynm81" path="res://scenes/entities/Zombies/hobo.tscn" id="4_8h2xm"]
[ext_resource type="Script" uid="uid://dl12rj75tk2qi" path="res://addons/pvzadventure/RowSpawn.cs" id="4_8miqm"]
[ext_resource type="Script" uid="uid://cqxj7o8hdm82n" path="res://scripts/resources/ZombieResource.cs" id="5_8miqm"]
[ext_resource type="Resource" uid="uid://dkhjlu7u0vny6" path="res://resources/zombies/buckethead.tres" id="6_s62qb"]
@ -145,4 +149,5 @@ wavePercentage = 0.5
standardWaveDelay = 30.0
initialWaveDelay = 20.0
waves = [SubResource("Resource_8aewt"), SubResource("Resource_hlq35"), SubResource("Resource_8miqm"), SubResource("Resource_s62qb"), SubResource("Resource_yvl2y"), SubResource("Resource_ulhin"), SubResource("Resource_cafd0"), SubResource("Resource_y8rkm"), SubResource("Resource_dbrq5")]
initialScenes = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ExtResource("1_n6yt3"), null, null, null, ExtResource("1_y8rkm"), null, ExtResource("2_dbrq5"), null, null, null, null, null, null, null, null, null, null, null, ExtResource("4_8h2xm"), null, null, null, null, null, null, null, null, null]
metadata/_custom_type_script = "uid://bximdujbkj2n4"

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=14 format=3 uid="uid://xu4i6tmkv00a"]
[gd_scene load_steps=15 format=3 uid="uid://xu4i6tmkv00a"]
[ext_resource type="PackedScene" uid="uid://hhjbqkjqpt7x" path="res://scenes/entities/Zombies/cone_zombie.tscn" id="1_mwqpo"]
[ext_resource type="Shader" uid="uid://d0eo5uuj222c4" path="res://assets/shaders/CG_color_blender.gdshader" id="2_3mrqj"]
@ -24,6 +24,13 @@ region = Rect2(24, 2, 9, 9)
atlas = ExtResource("6_lea3a")
region = Rect2(0, 32, 9, 15)
[sub_resource type="Resource" id="Resource_lea3a"]
resource_local_to_scene = true
script = ExtResource("4_1s2fn")
flat_value = 5.0
percentage_value = 0.0
mult_value = 1.0
[sub_resource type="Resource" id="Resource_v1iwd"]
resource_local_to_scene = true
script = ExtResource("4_1s2fn")
@ -48,7 +55,7 @@ use_parent_material = false
[node name="RightUpperLeg" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt" index="1"]
use_parent_material = false
scale = Vector2(0.999835, 0.999835)
scale = Vector2(0.999836, 0.999836)
[node name="RightLowerLeg" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/RightUpperLeg" index="1"]
scale = Vector2(0.999833, 0.999833)
@ -58,47 +65,47 @@ scale = Vector2(0.999834, 0.999834)
[node name="LeftUpperLeg" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt" index="2"]
use_parent_material = false
scale = Vector2(0.999835, 0.999835)
[node name="LeftLowerLeg" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/LeftUpperLeg" index="1"]
scale = Vector2(0.999834, 0.999834)
scale = Vector2(0.999833, 0.999833)
[node name="LeftFoot" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/LeftUpperLeg/LeftLowerLeg" index="1"]
scale = Vector2(0.999829, 0.999829)
scale = Vector2(0.999831, 0.999831)
[node name="Body" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt" index="3"]
use_parent_material = false
scale = Vector2(0.999829, 0.999829)
scale = Vector2(0.999827, 0.999827)
[node name="RightUpperArm" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body" index="0"]
use_parent_material = false
scale = Vector2(0.999825, 0.999825)
scale = Vector2(0.999826, 0.999826)
[node name="RightLowerArm" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/RightUpperArm" index="1"]
scale = Vector2(0.999827, 0.999827)
scale = Vector2(0.999826, 0.999826)
[node name="RightHand" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/RightUpperArm/RightLowerArm" index="0"]
scale = Vector2(0.999828, 0.999828)
[node name="Tie" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body" index="2"]
rotation = 0.140011
skew = -0.000141382
rotation = -0.0952629
skew = -0.000141501
[node name="Head" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body" index="3"]
scale = Vector2(0.999828, 0.999828)
[node name="Right_Eye" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head/HeadParticle/Head" index="0"]
position = Vector2(-16, -8)
scale = Vector2(1, 1)
[node name="Left_Eye" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head/HeadParticle/Head" index="1"]
position = Vector2(-4, -9)
scale = Vector2(1, 1)
[node name="Jaw" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head/HeadParticle/Head" index="2"]
position = Vector2(-3.00172, 2.99709)
rotation = 0.0135876
scale = Vector2(0.999828, 0.999828)
position = Vector2(-2.88169, 2.71447)
rotation = -0.0665417
scale = Vector2(0.999829, 0.999829)
[node name="Jaw" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head" index="1"]
scale = Vector2(0.999828, 0.999828)
scale = Vector2(0.999829, 0.999829)
[node name="Hat" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head" index="4"]
position = Vector2(-6, -8)
@ -112,20 +119,20 @@ degradationStages = Array[Texture]([ExtResource("3_0nlp0"), ExtResource("4_xx7fu
scale = Vector2(0.999829, 0.999829)
[node name="Left_Lower_Arm" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/HandProjectile" index="0"]
rotation = 0.131641
scale = Vector2(0.999999, 0.999999)
rotation = -0.10097
scale = Vector2(0.999997, 0.999997)
[node name="Left_Hand" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/HandProjectile/Left_Lower_Arm" index="0"]
show_behind_parent = false
position = Vector2(-0.99983, 12.9978)
rotation = -0.0580983
scale = Vector2(0.999657, 0.999657)
rotation = -0.0832296
scale = Vector2(0.999659, 0.999659)
[node name="LeftLowerArm" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm" index="2"]
scale = Vector2(0.999829, 0.999829)
scale = Vector2(0.999827, 0.999827)
[node name="LeftHand" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/LeftLowerArm" index="0"]
scale = Vector2(0.999827, 0.999827)
scale = Vector2(0.999829, 0.999829)
[node name="Left_Hand" type="Sprite2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/LeftLowerArm/LeftHand" index="0"]
texture = SubResource("AtlasTexture_wfem3")
@ -139,13 +146,16 @@ centered = false
offset = Vector2(-5, 0)
metadata/_edit_lock_ = true
[node name="Eatbox" parent="." index="2"]
_damage = SubResource("Resource_lea3a")
[node name="Mover" parent="." index="4"]
_speed = SubResource("Resource_v1iwd")
_speedControlMult = 0.987455
_speedControlMult = 0.345736
[node name="HitPlayer" parent="." index="5"]
playlist = Array[AudioStream]([ExtResource("5_lt6ps"), ExtResource("6_kedip")])
channels = Array[String](["metal_hit", "hit"])
[node name="Armor" parent="." index="6"]
MaxHP = 375.0
[node name="HitPlayer" parent="." index="7"]
playlist = Array[AudioStream]([ExtResource("5_lt6ps"), ExtResource("6_kedip")])
channels = Array[String](["metal_hit", "hit"])