associate weapon scenes with resources
							parent
							
								
									c1fcfcd398
								
							
						
					
					
						commit
						3230e487f2
					
				|  | @ -8,15 +8,12 @@ public abstract partial class Item : Node2D | |||
|     [Signal] | ||||
|     public delegate void UsedItemEventHandler(Item item); | ||||
| 
 | ||||
|     [Export] | ||||
|     public string ItemName { get; set; } | ||||
| 
 | ||||
|     [Export] | ||||
|     public string Description { get; set; } | ||||
| 
 | ||||
|     [Export] | ||||
|     public bool CanStack { get; set; } = false; | ||||
| 
 | ||||
|     [Export] | ||||
|     public ItemMetadata Metadata { get; set; } | ||||
| 
 | ||||
|     public int Count { get; set; } = 1; | ||||
| 
 | ||||
|     public bool IsOneHanded { get; set; } = false; | ||||
|  | @ -41,7 +38,7 @@ public abstract partial class Item : Node2D | |||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         if (ItemName != item.ItemName) | ||||
|         if (Metadata.Name != item.Metadata.Name) | ||||
|         { | ||||
|             return false; | ||||
|         } | ||||
|  |  | |||
|  | @ -0,0 +1,16 @@ | |||
| using Godot; | ||||
| 
 | ||||
| namespace SupaLidlGame.Items; | ||||
| 
 | ||||
| [GlobalClass] | ||||
| public partial class ItemMetadata : Resource | ||||
| { | ||||
|     [Export] | ||||
|     public Utils.ScenePath Instance { get; set; } | ||||
| 
 | ||||
|     [Export] | ||||
|     public string Name { get; set; } | ||||
| 
 | ||||
|     [Export(PropertyHint.MultilineText)] | ||||
|     public string Description { get; set; } | ||||
| } | ||||
|  | @ -0,0 +1,14 @@ | |||
| [gd_resource type="Resource" script_class="ItemMetadata" load_steps=4 format=3 uid="uid://cjsh0dcgbfn77"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Utils/ScenePath.cs" id="1_haiji"] | ||||
| [ext_resource type="Script" path="res://Items/ItemMetadata.cs" id="2_hjbs0"] | ||||
| 
 | ||||
| [sub_resource type="Resource" id="Resource_mjj1w"] | ||||
| script = ExtResource("1_haiji") | ||||
| Path = "res://Items/Weapons/Bow.tscn" | ||||
| 
 | ||||
| [resource] | ||||
| script = ExtResource("2_hjbs0") | ||||
| Instance = SubResource("Resource_mjj1w") | ||||
| Name = "Bow" | ||||
| Description = "A bow and arrow." | ||||
|  | @ -1,8 +1,9 @@ | |||
| [gd_scene load_steps=16 format=3 uid="uid://cgg0sfm2qeiwn"] | ||||
| [gd_scene load_steps=17 format=3 uid="uid://cgg0sfm2qeiwn"] | ||||
| 
 | ||||
| [ext_resource type="Texture2D" uid="uid://dam6aigkw8xs" path="res://Assets/Sprites/Items/bow-and-arrow.png" id="1_1ghvv"] | ||||
| [ext_resource type="Script" path="res://Items/Weapons/ProjectileSpawner.cs" id="1_76bur"] | ||||
| [ext_resource type="PackedScene" uid="uid://cjiftn2suskla" path="res://Entities/Arrow.tscn" id="2_mvw0j"] | ||||
| [ext_resource type="Resource" uid="uid://cjsh0dcgbfn77" path="res://Items/Weapons/Bow.tres" id="3_j7q7r"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="3_pg4gy"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/RangedIdleState.cs" id="3_uxif8"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/RangedFireState.cs" id="4_moo4d"] | ||||
|  | @ -123,6 +124,7 @@ Knockback = 64.0 | |||
| InitialVelocity = 200.0 | ||||
| ShouldFreezeAngleOnUse = false | ||||
| PlayerLevelGain = 1.0 | ||||
| Metadata = ExtResource("3_j7q7r") | ||||
| 
 | ||||
| [node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")] | ||||
| script = ExtResource("3_pg4gy") | ||||
|  |  | |||
|  | @ -0,0 +1,14 @@ | |||
| [gd_resource type="Resource" script_class="ItemMetadata" load_steps=4 format=3 uid="uid://cud7l7t0qsc65"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Utils/ScenePath.cs" id="1_2t2st"] | ||||
| [ext_resource type="Script" path="res://Items/ItemMetadata.cs" id="1_fhdpj"] | ||||
| 
 | ||||
| [sub_resource type="Resource" id="Resource_clkv8"] | ||||
| script = ExtResource("1_2t2st") | ||||
| Path = "res://Items/Weapons/DocLance.tscn" | ||||
| 
 | ||||
| [resource] | ||||
| script = ExtResource("1_fhdpj") | ||||
| Instance = SubResource("Resource_clkv8") | ||||
| Name = "Shungite Spear" | ||||
| Description = "It's a billion year old lance, spear that protects against unwanted invaders." | ||||
|  | @ -1,6 +1,7 @@ | |||
| [gd_scene load_steps=22 format=3 uid="uid://p7oijq6dbvvk"] | ||||
| [gd_scene load_steps=23 format=3 uid="uid://p7oijq6dbvvk"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_1oyma"] | ||||
| [ext_resource type="Resource" uid="uid://cud7l7t0qsc65" path="res://Items/Weapons/DocLance.tres" id="2_5r5mm"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_c41ov"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/SwordIdleState.cs" id="3_sxffm"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/SwordAnticipateState.cs" id="4_t7af2"] | ||||
|  | @ -185,8 +186,7 @@ UseTime = 0.55 | |||
| Knockback = 64.0 | ||||
| ShouldHideIdle = true | ||||
| HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand") | ||||
| ItemName = "VSM-93" | ||||
| Description = "\"Violence. Speed. Momentum.\"" | ||||
| Metadata = ExtResource("2_5r5mm") | ||||
| 
 | ||||
| [node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")] | ||||
| script = ExtResource("2_c41ov") | ||||
|  | @ -251,6 +251,7 @@ libraries = { | |||
| 
 | ||||
| [node name="Hitbox" parent="." instance=ExtResource("9_buajm")] | ||||
| position = Vector2(16, -4) | ||||
| priority = 5 | ||||
| IsDisabled = true | ||||
| 
 | ||||
| [node name="CollisionShape2D" parent="Hitbox" index="0"] | ||||
|  |  | |||
|  | @ -0,0 +1,14 @@ | |||
| [gd_resource type="Resource" script_class="ItemMetadata" load_steps=4 format=3 uid="uid://iqe6rgnb3jur"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Utils/ScenePath.cs" id="1_o026a"] | ||||
| [ext_resource type="Script" path="res://Items/ItemMetadata.cs" id="2_j4tmu"] | ||||
| 
 | ||||
| [sub_resource type="Resource" id="Resource_abrg1"] | ||||
| script = ExtResource("1_o026a") | ||||
| Path = "res://Items/Weapons/Pugio.tscn" | ||||
| 
 | ||||
| [resource] | ||||
| script = ExtResource("2_j4tmu") | ||||
| Instance = SubResource("Resource_abrg1") | ||||
| Name = "Pugio" | ||||
| Description = "A sidearm dagger." | ||||
|  | @ -1,7 +1,8 @@ | |||
| [gd_scene load_steps=29 format=3 uid="uid://5y1acxl4j4n7"] | ||||
| [gd_scene load_steps=30 format=3 uid="uid://5y1acxl4j4n7"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mai31"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_5ramr"] | ||||
| [ext_resource type="Resource" uid="uid://iqe6rgnb3jur" path="res://Items/Weapons/Pugio.tres" id="2_ulca0"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/SwordIdleState.cs" id="3_fwkit"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/SwordAnticipateState.cs" id="4_nsn1q"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/SwordAttackState.cs" id="5_g1en5"] | ||||
|  | @ -350,6 +351,7 @@ UseAltTime = 1.5 | |||
| Knockback = 64.0 | ||||
| PlayerLevelGain = 1.0 | ||||
| HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand") | ||||
| Metadata = ExtResource("2_ulca0") | ||||
| 
 | ||||
| [node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")] | ||||
| script = ExtResource("2_5ramr") | ||||
|  |  | |||
|  | @ -0,0 +1,14 @@ | |||
| [gd_resource type="Resource" script_class="ItemMetadata" load_steps=4 format=3 uid="uid://cl7jvdu2lnv2d"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Utils/ScenePath.cs" id="1_mh5y8"] | ||||
| [ext_resource type="Script" path="res://Items/ItemMetadata.cs" id="2_asbkr"] | ||||
| 
 | ||||
| [sub_resource type="Resource" id="Resource_qqiwa"] | ||||
| script = ExtResource("1_mh5y8") | ||||
| Path = "res://Items/Weapons/Sword.tscn" | ||||
| 
 | ||||
| [resource] | ||||
| script = ExtResource("2_asbkr") | ||||
| Instance = SubResource("Resource_qqiwa") | ||||
| Name = "Sword" | ||||
| Description = "A basic sword." | ||||
|  | @ -1,6 +1,8 @@ | |||
| [gd_scene load_steps=25 format=3 uid="uid://dvqap2uhcah63"] | ||||
| [gd_scene load_steps=29 format=3 uid="uid://dvqap2uhcah63"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mlo73"] | ||||
| [ext_resource type="Script" path="res://Utils/ScenePath.cs" id="2_g8hkw"] | ||||
| [ext_resource type="Script" path="res://Items/ItemMetadata.cs" id="2_gy7e7"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_vwirq"] | ||||
| [ext_resource type="Script" path="res://State/Weapon/SwordIdleState.cs" id="3_nw6r0"] | ||||
| [ext_resource type="Texture2D" uid="uid://dp7osg05ip5oo" path="res://Assets/Sprites/sword.png" id="3_r75ni"] | ||||
|  | @ -15,6 +17,16 @@ | |||
| [ext_resource type="Texture2D" uid="uid://cmvh6pc71ir1m" path="res://Assets/Sprites/sword-swing-large.png" id="10_672jv"] | ||||
| [ext_resource type="AudioStream" uid="uid://qvthq6tppp63" path="res://Assets/Sounds/whoosh.wav" id="10_mfnl7"] | ||||
| 
 | ||||
| [sub_resource type="Resource" id="Resource_qqiwa"] | ||||
| script = ExtResource("2_g8hkw") | ||||
| Path = "res://Items/Weapons/Sword.tscn" | ||||
| 
 | ||||
| [sub_resource type="Resource" id="Resource_advps"] | ||||
| script = ExtResource("2_gy7e7") | ||||
| Instance = SubResource("Resource_qqiwa") | ||||
| Name = "The Fool's Sword" | ||||
| Description = "The Top Right's Sword" | ||||
| 
 | ||||
| [sub_resource type="Environment" id="Environment_72txp"] | ||||
| background_mode = 3 | ||||
| glow_enabled = true | ||||
|  | @ -320,6 +332,7 @@ Knockback = 64.0 | |||
| ShouldHideIdle = true | ||||
| PlayerLevelGain = 1.0 | ||||
| HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand") | ||||
| Metadata = SubResource("Resource_advps") | ||||
| 
 | ||||
| [node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")] | ||||
| script = ExtResource("2_vwirq") | ||||
|  |  | |||
|  | @ -0,0 +1,22 @@ | |||
| using Godot; | ||||
| 
 | ||||
| namespace SupaLidlGame.Utils; | ||||
| 
 | ||||
| [GlobalClass] | ||||
| public partial class ResourcePath : Resource | ||||
| { | ||||
|     private static Godot.Collections.Dictionary<string, Resource> _loaded; | ||||
| 
 | ||||
|     static ResourcePath() | ||||
|     { | ||||
|         _loaded = new(); | ||||
|     } | ||||
| 
 | ||||
|     [Export(Godot.PropertyHint.File)] | ||||
|     public string Path { get; set; } | ||||
| 
 | ||||
|     public T Load<T>() where T : Resource | ||||
|     { | ||||
|         return GD.Load<T>(Path); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,32 @@ | |||
| using Godot; | ||||
| 
 | ||||
| namespace SupaLidlGame.Utils; | ||||
| 
 | ||||
| [GlobalClass] | ||||
| public partial class ScenePath : ResourcePath | ||||
| { | ||||
|     private static Godot.Collections.Dictionary<string, PackedScene> _loaded; | ||||
| 
 | ||||
|     static ScenePath() | ||||
|     { | ||||
|         _loaded = new(); | ||||
|     } | ||||
| 
 | ||||
|     public PackedScene Load(bool useCached = false) | ||||
|     { | ||||
|         if (useCached && _loaded.ContainsKey(Path)) | ||||
|         { | ||||
|             return _loaded[Path]; | ||||
|         } | ||||
| 
 | ||||
|         // add scene to loaded to not have to reload scene when called again | ||||
|         var scene = base.Load<PackedScene>(); | ||||
|         _loaded.Add(Path, scene); | ||||
|         return scene; | ||||
|     } | ||||
| 
 | ||||
|     public T Instantiate<T>() where T : Node | ||||
|     { | ||||
|         return Load().Instantiate<T>(); | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue