The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.
Направляемые предметы +
Делаем предметы направляемыми куда угодно
Просто реализуйте интерфейс IItemTargetableAnywhere
в классе вашего предмета:
MyTargetableAnywhereItem.cs
public class MyTargetableAnywhereItem : CustomItem, IItemTargetableAnywhere
{
public bool TargetFilter(Vector2 position) { /* ... */ }
public bool TargetPosition(Vector2 position) { /* ... */ }
public CustomTooltip TargetCursorText(Vector2 position) { /* ... */ }
}
TargetFilter
определяет где курсор должен быть подсвеченным, при использовании текущего предмета.
TargetPosition
использует текущий предмет на выбранном месте. Возвращаемое значение определяет успешно ли он был использован или нет. Если предмет нельзя использовать, вы можете проиграть звук "CantDo"
и заставить игрока сказать что-нибудь. Возврат true
также проиграет анимацию.
TargetCursorText
определяет текст возле курсора над выбранным местом. Text
выставленный на null
определится как "Использовать", и Color
выставленный на null
определится как
#FFFFFF
Примеры
- Используемый телепортатор
Простой направляемый куда угодно предмет. Телепортирует игрока в указанное место.
using UnityEngine;
namespace RogueLibsCore.Test
{
[ItemCategories(RogueCategories.Usable, RogueCategories.Technology, RogueCategories.Stealth)]
public class UsableTeleporter : CustomItem, IItemTargetableAnywhere
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomItem<UsableTeleporter>()
.WithName(new CustomNameInfo("Usable Teleporter"))
.WithDescription(new CustomNameInfo("Teleports you somewhere. Has limited uses."))
.WithSprite(Properties.Resources.UsableTeleporter)
.WithUnlock(new ItemUnlock
{
UnlockCost = 10,
LoadoutCost = 9,
CharacterCreationCost = 5,
Prerequisites = { VanillaItems.QuickEscapeTeleporter, nameof(WildBypasser) },
});
TeleportCursorText = RogueLibs.CreateCustomName("TeleportHere", NameTypes.Interface, new CustomNameInfo("Teleport here"));
}
private static CustomName TeleportCursorText = null!;
public override void SetupDetails()
{
Item.itemType = ItemTypes.Tool;
Item.itemValue = 80;
Item.initCount = 2;
Item.rewardCount = 3;
Item.stackable = true;
Item.goesInToolbar = true;
}
public bool TargetFilter(Vector2 position)
{
TileData tileData = gc.tileInfo.GetTileData(position);
return !gc.tileInfo.IsOverlapping(position, "Anything") && tileData.wallMaterial == wallMaterialType.None;
}
public bool TargetPosition(Vector2 position)
{
if (!TargetFilter(position)) return false;
Owner!.SpawnParticleEffect("Spawn", Owner.tr.position);
Owner.Teleport(position, false, true);
Owner.rb.velocity = Vector2.zero;
Owner.SpawnParticleEffect("Spawn", Owner.tr.position, false);
gc.audioHandler.Play(Owner, VanillaAudio.Spawn);
Count--;
return true;
}
public CustomTooltip TargetCursorText(Vector2 position) => TeleportCursorText;
}
}
The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.