Mystery item implementation

This commit is contained in:
2025-03-26 23:13:01 -07:00
parent 114ff35630
commit 9d3621dd2c
58 changed files with 860 additions and 309 deletions

View File

@@ -35,13 +35,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<ISaveChunk<Play
public IInventory Inventory { get; private set; } = default!;
public IAutoProp<EquipableItem> EquippedWeapon => _equippedWeapon;
public AutoProp<EquipableItem> EquippedWeapon => _equippedWeapon;
private AutoProp<EquipableItem> _equippedWeapon { get; set; } = new AutoProp<EquipableItem>(new Weapon());
public IAutoProp<EquipableItem> EquippedArmor => _equippedArmor;
public AutoProp<EquipableItem> EquippedArmor => _equippedArmor;
private AutoProp<EquipableItem> _equippedArmor { get; set; } = new AutoProp<EquipableItem>(new Armor());
public IAutoProp<EquipableItem> EquippedAccessory => _equippedAccessory;
public AutoProp<EquipableItem> EquippedAccessory => _equippedAccessory;
private AutoProp<EquipableItem> _equippedAccessory { get; set; } = new AutoProp<EquipableItem>(new Accessory());
private PlayerLogic.Settings Settings { get; set; } = default!;
@@ -385,6 +385,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<ISaveChunk<Play
public void Equip(EquipableItem equipable)
{
if (equipable.ItemTag == ItemTag.MysteryItem)
{
var rerolledItem = Game.RerollItem(equipable) as EquipableItem;
Equip(rerolledItem);
return;
}
if (equipable is Weapon weapon)
{
Unequip(_equippedWeapon.Value);
@@ -433,9 +440,6 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<ISaveChunk<Play
}
else
throw new NotImplementedException("Item type is not supported.");
if (equipable.ItemTag == ItemTag.BreaksOnChange)
Inventory.Remove(equipable);
}
private static Vector3 GlobalInputVector
@@ -592,6 +596,11 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<ISaveChunk<Play
else
_gameRepo.AnnounceMessageOnMainScreen($"Could not pick up {droppedItem.Item.ItemName}.");
}
if (area.GetParent() is Restorative restorative)
{
_gameRepo.OnRestorativePickedUp(restorative);
restorative.QueueFree();
}
}
private bool PlayerIsHittingGeometry()