Massive refactor (inventory menu still a little broken but its Good Enough)

This commit is contained in:
2024-09-12 02:24:14 -07:00
parent 149c8d9571
commit b4662a0c7b
94 changed files with 1066 additions and 825 deletions

105
src/items/Inventory.cs Normal file
View File

@@ -0,0 +1,105 @@
using Chickensoft.Collections;
using Chickensoft.GodotNodeInterfaces;
using Godot;
using System;
using System.Collections.Generic;
using static GameJamDungeon.Inventory;
namespace GameJamDungeon;
public interface IInventory : INode
{
public List<IInventoryItem> Items { get; }
public IAutoProp<Weapon> EquippedWeapon { get; }
public IAutoProp<Armor> EquippedArmor { get; }
public IAutoProp<Accessory> EquippedAccessory { get; }
public bool TryAdd(IInventoryItem inventoryItem);
public void Remove(IInventoryItem inventoryItem);
public void Equip(IEquipable equipable);
public void Unequip(IEquipable equipable);
public bool IsEquipped(IEquipable equipable);
event Inventory.InventoryAtCapacityEventHandler InventoryAtCapacity;
}
public partial class Inventory : Node, IInventory
{
// TODO: Constants class with export
private const int _maxInventorySize = 20;
[Signal]
public delegate void InventoryAtCapacityEventHandler(string rejectedItemName);
public Inventory()
{
Items = [];
}
public List<IInventoryItem> Items { get; private set; }
public IAutoProp<Weapon> EquippedWeapon => _equippedWeapon;
private AutoProp<Weapon> _equippedWeapon { get; set; } = new AutoProp<Weapon>(new Weapon());
public IAutoProp<Armor> EquippedArmor => _equippedArmor;
private AutoProp<Armor> _equippedArmor { get; set; } = new AutoProp<Armor>(new Armor());
public IAutoProp<Accessory> EquippedAccessory => _equippedAccessory;
private AutoProp<Accessory> _equippedAccessory { get; set; } = new AutoProp<Accessory>(new Accessory());
public bool TryAdd(IInventoryItem inventoryItem)
{
if (Items.Count >= _maxInventorySize)
{
EmitSignal(SignalName.InventoryAtCapacity, inventoryItem.Info.Name);
return false;
}
Items.Add(inventoryItem);
return true;
}
public void Remove(IInventoryItem inventoryItem) => Items.Remove(inventoryItem);
public void Equip(IEquipable equipable)
{
if (equipable is Weapon weapon)
_equippedWeapon.OnNext(weapon);
else if (equipable is Armor armor)
_equippedArmor.OnNext(armor);
else if (equipable is Accessory accessory)
_equippedAccessory.OnNext(accessory);
else
throw new NotImplementedException("Item type is not supported.");
}
public void Unequip(IEquipable equipable)
{
if (equipable is Weapon weapon)
_equippedWeapon.OnNext(new Weapon());
else if (equipable is Armor armor)
_equippedArmor.OnNext(new Armor());
else if (equipable is Accessory accessory)
_equippedAccessory.OnNext(new Accessory());
else
throw new NotImplementedException("Item type is not supported.");
}
public bool IsEquipped(IEquipable equipable)
{
if (equipable is Weapon weapon)
return _equippedWeapon.Value.Equals(weapon);
else if (equipable is Armor armor)
return _equippedArmor.Value.Equals(armor);
else if (equipable is Accessory accessory)
return _equippedAccessory.Value.Equals(accessory);
else
throw new NotImplementedException("Item type is not supported.");
}
}

View File

@@ -1,16 +1,13 @@
using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.GodotNodeInterfaces;
using System;
namespace GameJamDungeon
{
public interface IInventoryItem : INode3D
{
public Guid ID { get; }
public IGameRepo GameRepo { get; }
public InventoryItemInfo Info { get; }
public InventoryItemStats Info { get; }
public void Throw();

View File

@@ -2,7 +2,7 @@ using Godot;
using System;
[GlobalClass]
public partial class InventoryItemInfo : Resource
public partial class InventoryItemStats : Resource
{
[Export]
public string Name = string.Empty;

View File

@@ -31,23 +31,23 @@ namespace GameJamDungeon
foreach (var armor in armorResources)
{
var armorInfo = GD.Load<ArmorInfo>($"res://src/items/armor/resources/{armor}");
var armorInfo = GD.Load<ArmorStats>($"res://src/items/armor/resources/{armor}");
var armorScene = ArmorScene.Instantiate<Armor>();
armorScene.ArmorInfo = armorInfo;
armorScene.ArmorStats = armorInfo;
database.Add(armorScene);
}
foreach (var weapon in weaponResources)
{
var weaponInfo = GD.Load<WeaponInfo>($"res://src/items/weapons/resources/{weapon}");
var weaponInfo = GD.Load<WeaponStats>($"res://src/items/weapons/resources/{weapon}");
var weaponScene = WeaponScene.Instantiate<Weapon>();
weaponScene.WeaponInfo = weaponInfo;
weaponScene.WeaponStats = weaponInfo;
database.Add(weaponScene);
}
foreach (var accessory in accessoryResources)
{
var accessoryInfo = GD.Load<AccessoryInfo>($"res://src/items/accessory/resources/{accessory}");
var accessoryInfo = GD.Load<AccessoryStats>($"res://src/items/accessory/resources/{accessory}");
var accessoryScene = AccessoryScene.Instantiate<Accessory>();
accessoryScene.AccessoryInfo = accessoryInfo;
database.Add(accessoryScene);
@@ -55,7 +55,7 @@ namespace GameJamDungeon
foreach (var throwable in throwableResources)
{
var throwableItemInfo = GD.Load<ThrowableItemInfo>($"res://src/items/throwable/resources/{throwable}");
var throwableItemInfo = GD.Load<ThrowableItemStats>($"res://src/items/throwable/resources/{throwable}");
var throwableItemScene = ThrowableItemScene.Instantiate<ThrowableItem>();
throwableItemScene.ThrowableItemInfo = throwableItemInfo;
database.Add(throwableItemScene);
@@ -63,7 +63,7 @@ namespace GameJamDungeon
foreach (var consumable in consumableResources)
{
var consumableItemInfo = GD.Load<ConsumableItemInfo>($"res://src/items/consumable/resources/{consumable}");
var consumableItemInfo = GD.Load<ConsumableItemStats>($"res://src/items/consumable/resources/{consumable}");
var consumableItemScene = ConsumableItemScene.Instantiate<ConsumableItem>();
consumableItemScene.ConsumableItemInfo = consumableItemInfo;
database.Add(consumableItemScene);

View File

@@ -1,16 +1,16 @@
[gd_scene load_steps=7 format=3 uid="uid://twrj4wixcbu7"]
[ext_resource type="Script" path="res://src/items/ItemDatabase.cs" id="1_7b315"]
[ext_resource type="PackedScene" uid="uid://db206brufi83s" path="res://src/items/weapons/Weapon.tscn" id="2_14w53"]
[ext_resource type="PackedScene" uid="uid://dorr7v1tkeiy0" path="res://src/items/armor/Armor.tscn" id="3_p6rkn"]
[ext_resource type="PackedScene" uid="uid://b07srt3lckt4e" path="res://src/items/accessory/Accessory.tscn" id="4_oqm6k"]
[ext_resource type="PackedScene" uid="uid://1fl6s352e2ej" path="res://src/items/throwable/ThrowableItem.tscn" id="5_l0fpl"]
[ext_resource type="PackedScene" uid="uid://c6w7dpk0hurj0" path="res://src/items/consumable/ConsumableItem.tscn" id="6_51k8r"]
[ext_resource type="PackedScene" uid="uid://db206brufi83s" path="res://src/items/weapons/Weapon.tscn" id="2_wq002"]
[ext_resource type="PackedScene" uid="uid://dorr7v1tkeiy0" path="res://src/items/armor/Armor.tscn" id="3_8wlg5"]
[ext_resource type="PackedScene" uid="uid://b07srt3lckt4e" path="res://src/items/accessory/Accessory.tscn" id="4_pr7ub"]
[ext_resource type="PackedScene" uid="uid://1fl6s352e2ej" path="res://src/items/throwable/ThrowableItem.tscn" id="5_r5y4t"]
[ext_resource type="PackedScene" uid="uid://c6w7dpk0hurj0" path="res://src/items/consumable/ConsumableItem.tscn" id="6_yvger"]
[node name="ItemDatabase" type="Node"]
script = ExtResource("1_7b315")
WeaponScene = ExtResource("2_14w53")
ArmorScene = ExtResource("3_p6rkn")
AccessoryScene = ExtResource("4_oqm6k")
ThrowableItemScene = ExtResource("5_l0fpl")
ConsumableItemScene = ExtResource("6_51k8r")
WeaponScene = ExtResource("2_wq002")
ArmorScene = ExtResource("3_8wlg5")
AccessoryScene = ExtResource("4_pr7ub")
ThrowableItemScene = ExtResource("5_r5y4t")
ConsumableItemScene = ExtResource("6_yvger")

View File

@@ -11,14 +11,12 @@ public partial class Accessory : Node3D, IInventoryItem, IEquipable
{
public override void _Notification(int what) => this.Notify(what);
public Guid ID { get; } = new Guid();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
public InventoryItemInfo Info => AccessoryInfo;
public InventoryItemStats Info => AccessoryInfo;
[Export]
public AccessoryInfo AccessoryInfo { get; set; } = new AccessoryInfo();
public AccessoryStats AccessoryInfo { get; set; } = new AccessoryStats();
[Node] public Sprite3D Sprite { get; set; } = default!;
@@ -32,21 +30,18 @@ public partial class Accessory : Node3D, IInventoryItem, IEquipable
public void Throw()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void Drop()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void OnEntered(Node3D body)
{
if (GameRepo.InventoryItems.Value.Count() >= GameRepo.MaxItemSize)
return;
var inventoryList = GameRepo.InventoryItems.Value.Append(this).ToList();
GameRepo.InventoryItems.OnNext(inventoryList);
QueueFree();
var isAdded = GameRepo.PlayerData.Inventory.TryAdd(this);
if (isAdded)
QueueFree();
}
}

View File

@@ -4,7 +4,7 @@ using System;
namespace GameJamDungeon;
[GlobalClass]
public partial class AccessoryInfo : InventoryItemInfo
public partial class AccessoryStats : InventoryItemStats
{
[Export]
public int ATKUp { get; set; } = 0;

View File

@@ -1,10 +1,10 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://cvkwmart5y51r"]
[gd_resource type="Resource" script_class="AccessoryStats" load_steps=3 format=3 uid="uid://cvkwmart5y51r"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_578a0"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_sjkji"]
[ext_resource type="Texture2D" uid="uid://hjyk3j24o48b" path="res://src/items/accessory/textures/MASK 03.PNG" id="1_q42cv"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_xqaot"]
[resource]
script = ExtResource("1_sjkji")
script = ExtResource("1_xqaot")
ATKUp = 0
DEFUp = 0
LUCKUp = 0.15
@@ -12,6 +12,6 @@ MaxHPUp = 0
MaxVTUp = 0
AccessoryTags = []
Name = "Mask of the Goddess of Avarice"
Description = "Raises LUCK."
Texture = ExtResource("1_578a0")
Description = "Raises Luck"
Texture = ExtResource("1_q42cv")
SpawnRate = 0.5

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://d4bcem2nup7ef"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_0p1ot"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_vef66"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_vef66"]
[resource]
script = ExtResource("1_vef66")

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://bejy3lpudgawg"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_0k42r"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_cgxkh"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_cgxkh"]
[resource]
script = ExtResource("1_cgxkh")

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://ddwyaxxqvk52h"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_1uw37"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_kuyyj"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_kuyyj"]
[resource]
script = ExtResource("1_kuyyj")

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://c3v6r8s8yruag"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_co7sc"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_co7sc"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_uwbei"]
[resource]

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://ct8iply3dwssv"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_t16cd"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_vdb56"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_vdb56"]
[resource]
script = ExtResource("1_vdb56")

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://d02kuxaus43mk"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_3iw2y"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_3iw2y"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_vc77e"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="AccessoryInfo" load_steps=3 format=3 uid="uid://b0bxwp55mcyyp"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryInfo.cs" id="1_0u4rq"]
[ext_resource type="Script" path="res://src/items/accessory/AccessoryStats.cs" id="1_0u4rq"]
[ext_resource type="Texture2D" uid="uid://db7i7iy5gagae" path="res://src/items/accessory/textures/MASK 02.PNG" id="1_ggv41"]
[resource]

View File

@@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://hjyk3j24o48b"
path="res://.godot/imported/MASK 03.PNG-9ab390330efa1f35084ad56075377b4d.ctex"
path.s3tc="res://.godot/imported/MASK 03.PNG-9ab390330efa1f35084ad56075377b4d.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://src/items/accessory/textures/MASK 03.PNG"
dest_files=["res://.godot/imported/MASK 03.PNG-9ab390330efa1f35084ad56075377b4d.ctex"]
dest_files=["res://.godot/imported/MASK 03.PNG-9ab390330efa1f35084ad56075377b4d.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
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/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@@ -3,22 +3,18 @@ using Chickensoft.Introspection;
using GameJamDungeon;
using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
[Meta(typeof(IAutoNode))]
public partial class Armor : Node3D, IInventoryItem, IEquipable
{
public override void _Notification(int what) => this.Notify(what);
public Guid ID { get; } = new Guid();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
public InventoryItemInfo Info => ArmorInfo;
public InventoryItemStats Info => ArmorStats;
[Export]
public ArmorInfo ArmorInfo { get; set; } = new ArmorInfo();
public ArmorStats ArmorStats { get; set; } = new ArmorStats();
[Node] public Sprite3D Sprite { get; set; } = default!;
@@ -26,27 +22,24 @@ public partial class Armor : Node3D, IInventoryItem, IEquipable
public void OnReady()
{
Sprite.Texture = ArmorInfo.Texture;
Sprite.Texture = ArmorStats.Texture;
Pickup.BodyEntered += OnEntered;
}
public void Throw()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void Drop()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void OnEntered(Node3D body)
{
if (GameRepo.InventoryItems.Value.Count() >= GameRepo.MaxItemSize)
return;
var inventoryList = GameRepo.InventoryItems.Value.Append(this).ToList();
GameRepo.InventoryItems.OnNext(inventoryList);
QueueFree();
var isAdded = GameRepo.PlayerData.Inventory.TryAdd(this);
if (isAdded)
QueueFree();
}
}

View File

@@ -3,7 +3,7 @@
namespace GameJamDungeon;
[GlobalClass]
public partial class ArmorInfo : InventoryItemInfo
public partial class ArmorStats : InventoryItemStats
{
[Export]
public int Defense { get; set; } = 0;

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://b8mjje06x6dl1"]
[ext_resource type="Texture2D" uid="uid://dbb3x4cbo8jc1" path="res://src/items/armor/textures/ACCEPTANCE.PNG" id="1_p85jd"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_si4wu"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_si4wu"]
[resource]
script = ExtResource("1_si4wu")

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://ce2vfa2t3io67"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_6r2bl"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_6r2bl"]
[ext_resource type="Texture2D" uid="uid://ckcn67d64mgke" path="res://src/items/armor/textures/atoners adornment.PNG" id="1_588l8"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://dnu241lh47oqd"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_0qtvf"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_0qtvf"]
[ext_resource type="Texture2D" uid="uid://vvhbibkslh57" path="res://src/items/armor/textures/CEREMONIAL.PNG" id="1_s4gpg"]
[resource]

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://4s7wjsb7eb6e"]
[ext_resource type="Texture2D" uid="uid://381ddynsa3gc" path="res://src/items/armor/textures/DEVIC.PNG" id="1_5ik54"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_w3lql"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_w3lql"]
[resource]
script = ExtResource("1_w3lql")

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://dc0qjer88chme"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_3mc7x"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_3mc7x"]
[ext_resource type="Texture2D" uid="uid://c57kuugsc2lti" path="res://src/items/armor/textures/GODDESS.PNG" id="1_5vleh"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://ceqnyutl7y7t4"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_iqj2w"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_iqj2w"]
[ext_resource type="Texture2D" uid="uid://cj5m8qkpqrcx4" path="res://src/items/armor/textures/IRON.PNG" id="1_jyoar"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://chhxktntl4k8r"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_frqfh"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_frqfh"]
[ext_resource type="Texture2D" uid="uid://2qvbtq2obsac" path="res://src/items/armor/textures/LOGISTIAN.PNG" id="1_kh3n2"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://d3l8aa87tevgt"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_dh6tr"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_dh6tr"]
[ext_resource type="Texture2D" uid="uid://ddtscpfj6nf6i" path="res://src/items/armor/textures/STOIC.PNG" id="1_xpphu"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ArmorInfo" load_steps=3 format=3 uid="uid://dq4c6an78qa4q"]
[ext_resource type="Script" path="res://src/items/armor/ArmorInfo.cs" id="1_bkpin"]
[ext_resource type="Script" path="res://src/items/armor/ArmorStats.cs" id="1_bkpin"]
[ext_resource type="Texture2D" uid="uid://dghvd33w32q63" path="res://src/items/armor/textures/WOODEN.PNG" id="1_vs6ua"]
[resource]

View File

@@ -10,14 +10,12 @@ public partial class ConsumableItem : Node3D, IInventoryItem
{
public override void _Notification(int what) => this.Notify(what);
public Guid ID { get; } = new Guid();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
public InventoryItemInfo Info => ConsumableItemInfo;
public InventoryItemStats Info => ConsumableItemInfo;
[Export]
public ConsumableItemInfo ConsumableItemInfo { get; set; }
public ConsumableItemStats ConsumableItemInfo { get; set; }
[Node] public Sprite3D Sprite { get; set; } = default!;
@@ -40,54 +38,51 @@ public partial class ConsumableItem : Node3D, IInventoryItem
if (ConsumableItemInfo.HealVTAmount != 0)
HealVT();
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
private void RaiseHP()
{
if (GameRepo.PlayerStatInfo.Value.CurrentHP == GameRepo.PlayerStatInfo.Value.MaximumHP)
if (GameRepo.PlayerData.CurrentHP == GameRepo.PlayerData.MaximumHP)
{
GameRepo.PlayerStatInfo.Value.MaximumHP += ConsumableItemInfo.RaiseHPAmount;
GameRepo.PlayerStatInfo.Value.CurrentHP = GameRepo.PlayerStatInfo.Value.MaximumHP;
GameRepo.PlayerData.MaximumHP.OnNext(GameRepo.PlayerData.MaximumHP.Value + ConsumableItemInfo.RaiseHPAmount);
GameRepo.PlayerData.CurrentHP.OnNext(GameRepo.PlayerData.MaximumHP.Value);
}
}
private void HealHP()
{
GameRepo.PlayerStatInfo.Value.CurrentHP += ConsumableItemInfo.HealHPAmount;
GameRepo.PlayerData.CurrentHP.OnNext(GameRepo.PlayerData.CurrentHP.Value + ConsumableItemInfo.HealHPAmount);
}
private void RaiseVT()
{
if (GameRepo.PlayerStatInfo.Value.CurrentVT == GameRepo.PlayerStatInfo.Value.MaximumVT)
if (GameRepo.PlayerData.CurrentVT == GameRepo.PlayerData.MaximumVT)
{
GameRepo.PlayerStatInfo.Value.MaximumVT += ConsumableItemInfo.RaiseVTAmount;
GameRepo.PlayerStatInfo.Value.CurrentVT = GameRepo.PlayerStatInfo.Value.MaximumVT;
GameRepo.PlayerData.MaximumVT.OnNext(GameRepo.PlayerData.MaximumVT.Value + ConsumableItemInfo.RaiseVTAmount);
GameRepo.PlayerData.CurrentVT.OnNext(GameRepo.PlayerData.MaximumVT.Value);
}
}
private void HealVT()
{
GameRepo.PlayerStatInfo.Value.CurrentVT += ConsumableItemInfo.HealVTAmount;
GameRepo.PlayerData.CurrentVT.OnNext(GameRepo.PlayerData.CurrentVT.Value + ConsumableItemInfo.HealVTAmount);
}
public void Throw()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void Drop()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void OnEntered(Node3D body)
{
if (GameRepo.InventoryItems.Value.Count() >= GameRepo.MaxItemSize)
return;
var inventoryList = GameRepo.InventoryItems.Value.Append(this).ToList();
GameRepo.InventoryItems.OnNext(inventoryList);
QueueFree();
var isAdded = GameRepo.PlayerData.Inventory.TryAdd(this);
if (isAdded)
QueueFree();
}
}

View File

@@ -1,12 +1,17 @@
[gd_scene load_steps=5 format=3 uid="uid://c6w7dpk0hurj0"]
[ext_resource type="Script" path="res://src/items/consumable/ConsumableItem.cs" id="1_26bad"]
[ext_resource type="Script" path="res://src/items/consumable/ConsumableItemInfo.cs" id="2_g3oo3"]
[ext_resource type="Script" path="res://src/items/consumable/ConsumableItemStats.cs" id="2_g3oo3"]
[sub_resource type="Resource" id="Resource_33w5s"]
script = ExtResource("2_g3oo3")
HealHPAmount = 0
RaiseHPAmount = 0
HealVTAmount = 0
RaiseVTAmount = 0
Name = ""
Description = ""
SpawnRate = 0.5
[sub_resource type="BoxShape3D" id="BoxShape3D_7mh0f"]
size = Vector3(0.778381, 0.929947, 0.731567)

View File

@@ -3,7 +3,7 @@
namespace GameJamDungeon;
[GlobalClass]
public partial class ConsumableItemInfo : InventoryItemInfo
public partial class ConsumableItemStats : InventoryItemStats
{
[Export]
public int HealHPAmount { get; set; } = 0;

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ConsumableItemInfo" load_steps=3 format=3 uid="uid://75fpkwfp0t0k"]
[ext_resource type="Script" path="res://src/items/consumable/ConsumableItemInfo.cs" id="1_f8ogj"]
[ext_resource type="Script" path="res://src/items/consumable/ConsumableItemStats.cs" id="1_f8ogj"]
[ext_resource type="Texture2D" uid="uid://dbl5v5i1s3m2u" path="res://src/items/consumable/textures/stelo fragment.PNG" id="1_ic5xm"]
[resource]

View File

@@ -11,18 +11,18 @@ public partial class ThrowableItem : Node3D, IInventoryItem
{
public override void _Notification(int what) => this.Notify(what);
public Guid ID { get; } = new Guid();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public IHitbox Hitbox { get; set; } = default!;
public InventoryItemInfo Info => ThrowableItemInfo;
public InventoryItemStats Info => ThrowableItemInfo;
public int Count { get; }
[Export]
public ThrowableItemInfo ThrowableItemInfo { get; set; }
public ThrowableItemStats ThrowableItemInfo { get; set; }
[Node] public Sprite3D Sprite { get; set; } = default!;
@@ -37,22 +37,19 @@ public partial class ThrowableItem : Node3D, IInventoryItem
public void Throw()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void Drop()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void OnEntered(Node3D body)
{
if (GameRepo.InventoryItems.Value.Count() >= GameRepo.MaxItemSize)
return;
var inventoryList = GameRepo.InventoryItems.Value.Append(this).ToList();
GameRepo.InventoryItems.OnNext(inventoryList);
QueueFree();
var isAdded = GameRepo.PlayerData.Inventory.TryAdd(this);
if (isAdded)
QueueFree();
}
private void OnAnimationFinished(StringName animName)

View File

@@ -3,7 +3,7 @@
namespace GameJamDungeon;
[GlobalClass]
public partial class ThrowableItemInfo : InventoryItemInfo
public partial class ThrowableItemStats : InventoryItemStats
{
[Export]
public Godot.Collections.Array<ThrowableItemTag> ThrowableItemTags { get; set; } = new Godot.Collections.Array<ThrowableItemTag>();

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ThrowableItemInfo" load_steps=3 format=3 uid="uid://bph8c6by4s047"]
[gd_resource type="Resource" script_class="ThrowableItemStats" load_steps=3 format=3 uid="uid://bph8c6by4s047"]
[ext_resource type="Script" path="res://src/items/throwable/ThrowableItemInfo.cs" id="1_ewck5"]
[ext_resource type="Script" path="res://src/items/throwable/ThrowableItemStats.cs" id="1_ewck5"]
[ext_resource type="Texture2D" uid="uid://mi70lolgtf3n" path="res://src/items/throwable/textures/GEOMANCER-DICE.png" id="1_jhits"]
[resource]

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="ThrowableItemInfo" load_steps=3 format=3 uid="uid://qqg0gdcb8fwg"]
[ext_resource type="Texture2D" uid="uid://dhfn51smm818x" path="res://src/items/throwable/textures/spell sign - luck.PNG" id="1_3605p"]
[ext_resource type="Script" path="res://src/items/throwable/ThrowableItemInfo.cs" id="1_s3pq7"]
[ext_resource type="Script" path="res://src/items/throwable/ThrowableItemStats.cs" id="1_s3pq7"]
[resource]
script = ExtResource("1_s3pq7")

View File

@@ -3,21 +3,18 @@ using Chickensoft.Introspection;
using GameJamDungeon;
using Godot;
using System;
using System.Linq;
[Meta(typeof(IAutoNode))]
public partial class Weapon : Node3D, IInventoryItem, IEquipable
{
public override void _Notification(int what) => this.Notify(what);
public Guid ID { get; } = new Guid();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
public InventoryItemInfo Info => WeaponInfo;
public InventoryItemStats Info => WeaponStats;
[Export]
public WeaponInfo WeaponInfo { get; set; } = new WeaponInfo();
public WeaponStats WeaponStats { get; set; } = new WeaponStats();
[Node] public Sprite3D Sprite { get; set; } = default!;
@@ -25,27 +22,24 @@ public partial class Weapon : Node3D, IInventoryItem, IEquipable
public void OnReady()
{
Sprite.Texture = WeaponInfo.Texture;
Sprite.Texture = WeaponStats.Texture;
Pickup.BodyEntered += OnEntered;
}
public void Throw()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void Drop()
{
GameRepo.InventoryItems.Value.Remove(this);
GameRepo.PlayerData.Inventory.Remove(this);
}
public void OnEntered(Node3D body)
{
if (GameRepo.InventoryItems.Value.Count() >= GameRepo.MaxItemSize)
return;
var inventoryList = GameRepo.InventoryItems.Value.Append(this).ToList();
GameRepo.InventoryItems.OnNext(inventoryList);
QueueFree();
var isAdded = GameRepo.PlayerData.Inventory.TryAdd(this);
if (isAdded)
QueueFree();
}
}

View File

@@ -2,7 +2,7 @@ using GameJamDungeon;
using Godot;
[GlobalClass]
public partial class WeaponInfo : InventoryItemInfo
public partial class WeaponStats : InventoryItemStats
{
[Export]
public int Damage { get; set; } = 0;

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://c1bg0o7nmu2xw"]
[ext_resource type="Texture2D" uid="uid://cil3xe3jq82r6" path="res://src/items/weapons/textures/JIBLETT.PNG" id="1_ifm43"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_re512"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_re512"]
[resource]
script = ExtResource("1_re512")

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://db075qhmlmrcu"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_kbje7"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_kbje7"]
[ext_resource type="Texture2D" uid="uid://bkntmni5jxfpk" path="res://src/items/weapons/textures/KUBEL.PNG" id="1_kwtbu"]
[resource]

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://cfr100khjkloh"]
[ext_resource type="Texture2D" uid="uid://blq3nnyostunl" path="res://src/items/weapons/textures/LOVE JUDGEMENT.PNG" id="1_ivlxj"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_vroib"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_vroib"]
[resource]
script = ExtResource("1_vroib")

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://ckj1m4iv4m02r"]
[ext_resource type="Texture2D" uid="uid://740syoj0w14p" path="res://src/items/weapons/textures/PALM OF HEAVEN.PNG" id="1_hi6xm"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_pwwg7"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_pwwg7"]
[resource]
script = ExtResource("1_pwwg7")

View File

@@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://gebgo2x6nr3t"]
[ext_resource type="Texture2D" uid="uid://b8c7kd436tg4" path="res://src/items/weapons/textures/RONDO.PNG" id="1_cvwbh"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_xfb0x"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_xfb0x"]
[resource]
script = ExtResource("1_xfb0x")

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://b7xr0l4a8g1gk"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_40b5j"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_40b5j"]
[ext_resource type="Texture2D" uid="uid://b1qbho30vnuxf" path="res://src/items/weapons/textures/sealing rod.PNG" id="1_wiylj"]
[resource]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponInfo" load_steps=3 format=3 uid="uid://bpdbuf0k0exb5"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponInfo.cs" id="1_cik6n"]
[ext_resource type="Script" path="res://src/items/weapons/WeaponStats.cs" id="1_cik6n"]
[ext_resource type="Texture2D" uid="uid://cvtcsi2sagfwm" path="res://src/items/weapons/textures/SWAN SWORD.PNG" id="1_qc4eu"]
[resource]