2024-10-20 02:35:37 -04:00

105 lines
3.3 KiB
C#

using NewHorizons.Builder.Props;
using NewHorizons.Handlers;
using UnityEngine;
namespace NewHorizons.Components.Props
{
public class NHItem : OWItem
{
public string DisplayName;
public bool Droppable;
public AudioType PickupAudio;
public AudioType DropAudio;
public AudioType SocketAudio;
public AudioType UnsocketAudio;
public Vector3 HoldOffset;
public Vector3 HoldRotation;
public Vector3 SocketOffset;
public Vector3 SocketRotation;
public string PickupCondition;
public bool ClearPickupConditionOnDrop;
public string PickupFact;
public ItemType ItemType
{
get => _type;
set => _type = value;
}
public override string GetDisplayName()
{
return TranslationHandler.GetTranslation(DisplayName, TranslationHandler.TextType.UI);
}
public override bool CheckIsDroppable()
{
return Droppable;
}
public override void PickUpItem(Transform holdTranform)
{
base.PickUpItem(holdTranform);
transform.localPosition = HoldOffset;
transform.localEulerAngles = HoldRotation;
TriggerPickupConditions();
PlayCustomSound(PickupAudio);
}
public override void DropItem(Vector3 position, Vector3 normal, Transform parent, Sector sector, IItemDropTarget customDropTarget)
{
base.DropItem(position, normal, parent, sector, customDropTarget);
TriggerDropConditions();
PlayCustomSound(DropAudio);
}
public override void SocketItem(Transform socketTransform, Sector sector)
{
base.SocketItem(socketTransform, sector);
transform.localPosition = SocketOffset;
transform.localEulerAngles = SocketRotation;
TriggerDropConditions();
PlayCustomSound(SocketAudio);
}
public override void OnCompleteUnsocket()
{
base.OnCompleteUnsocket();
TriggerPickupConditions();
PlayCustomSound(UnsocketAudio);
}
internal void TriggerPickupConditions()
{
if (!string.IsNullOrEmpty(PickupCondition))
{
DialogueConditionManager.SharedInstance.SetConditionState(PickupCondition, true);
}
if (!string.IsNullOrEmpty(PickupFact))
{
Locator.GetShipLogManager().RevealFact(PickupFact);
}
}
internal void TriggerDropConditions()
{
if (ClearPickupConditionOnDrop && !string.IsNullOrEmpty(PickupCondition))
{
DialogueConditionManager.SharedInstance.SetConditionState(PickupCondition, false);
}
}
void PlayCustomSound(AudioType audioType)
{
if (ItemBuilder.IsCustomItemType(ItemType))
{
Locator.GetPlayerAudioController()._oneShotExternalSource.PlayOneShot(audioType);
}
else
{
// Vanilla items play sounds via hard-coded ItemType switch statements
// in the PlayerAudioController code, so there's no clean way to override them
}
}
}
}