Перейти к основному содержимому
The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.

Перезаряжаемые предметы

Делаем предметы перезаряжаемыми

Если хотите сделать перезаряжаемый предмет, воспользуйтесь интерфейсом IDoUpdate:

MyRechargeableItem.cs
public class MyRechargeableItem : CustomItem, IDoUpdate
{
/* ... */
}

Шаблоны

Вот парочка полезных шаблонов:

Cooldown представляет из себя количество секунд до полной перезарядки.

    public float Cooldown { get; private set; }
public void Update() => Cooldown = Mathf.Max(Cooldown - Time.deltaTime, 0f);

С настраиваемой скоростью перезарядки:

    public float RechargeSpeed = 1f;

public float Cooldown { get; private set; }
public void Update() => Cooldown = Mathf.Max(Cooldown - Time.deltaTime * RechargeSpeed, 0f);

Использование:

    public bool UseItem()
{
if (Cooldown != 0f) return false;
/* ... */
Cooldown = 1.5f;
return true;
}
к сведению

Вы можете использовать другие методы активации тоже, например CombineItems, TargetObject, TargetPosition и др.

Если хотите отображать Cooldown вместо количества предмета, то перегрузите метод GetCountString:

    public override CustomTooltip GetCountString()
{
if (Cooldown != 0f) return new CustomTooltip(Cooldown, Color.red);
return base.GetCountString(); // отобразить количество по умолчанию
}

примечание

Также существует ванильный способ перезарядки, но он крайне нелогичный и ненадёжный.

Примеры

using UnityEngine;

namespace RogueLibsCore.Test
{
[ItemCategories(RogueCategories.Food, RogueCategories.Technology)]
public class QuantumFud : CustomItem, IItemUsable, IDoUpdate
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomItem<QuantumFud>()
.WithName(new CustomNameInfo("Quantum Fud"))
.WithDescription(new CustomNameInfo("A very complicated piece of quantum technology. When you eat it, its quantum equivalent clone is consumed, while the original thing remains intact."))
.WithSprite(Properties.Resources.QuantumFud)
.WithUnlock(new ItemUnlock
{
UnlockCost = 10,
LoadoutCost = 15,
CharacterCreationCost = 10,
Prerequisites = { VanillaItems.FoodProcessor },
});
}

public override void SetupDetails()
{
Item.itemType = ItemTypes.Food;
Item.itemValue = 180;
Item.healthChange = 1;
Item.cantBeCloned = true;
Item.goesInToolbar = true;
}

public float Cooldown { get; set; }
public void Update() => Cooldown = Mathf.Max(Cooldown - Time.deltaTime, 0f);

public bool UseItem()
{
if (Cooldown != 0f) return false;

int heal = new ItemFunctions().DetermineHealthChange(Item, Owner);
Owner!.statusEffects.ChangeHealth(heal);

if (Owner.HasTrait(VanillaTraits.ShareTheHealth)
|| Owner.HasTrait(VanillaTraits.ShareTheHealth2))
new ItemFunctions().GiveFollowersHealth(Owner, heal);

gc.audioHandler.Play(Owner, VanillaAudio.UseFood);
Cooldown = 0.5f;
return true;
}
}
}

The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.