Перейти к основному содержимому
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.