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