97 lines
3.0 KiB
C#
97 lines
3.0 KiB
C#
// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved.
|
|
// This code can only be used under the standard Unity Asset Store End User License Agreement
|
|
// A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms
|
|
|
|
using Doozy.Runtime.Common.Utils;
|
|
using Doozy.Runtime.Reactor.Targets;
|
|
using Doozy.Runtime.Signals;
|
|
using UnityEngine;
|
|
// ReSharper disable MemberCanBePrivate.Global
|
|
|
|
namespace Doozy.Runtime.UIManager.Visual
|
|
{
|
|
/// <summary>
|
|
/// Connects to a specific stream and reacts to signals, sent through said stream, that have a Sprite value payload.
|
|
/// The signal's Sprite value will be assigned to the target SpriteTarget.
|
|
/// </summary>
|
|
[AddComponentMenu("Doozy/Signals/Signal To SpriteTarget")]
|
|
public class SignalToSpriteTarget : BaseStreamListener
|
|
{
|
|
#if UNITY_EDITOR
|
|
[UnityEditor.MenuItem("GameObject/Doozy/Signals/Signal To SpriteTarget", false, 8)]
|
|
private static void CreateComponent(UnityEditor.MenuCommand menuCommand)
|
|
{
|
|
GameObjectUtils.AddToScene<SignalToSpriteTarget>("Signal To SpriteTarget", false, true);
|
|
}
|
|
#endif
|
|
|
|
[SerializeField] private StreamId StreamId;
|
|
/// <summary> Stream Id </summary>
|
|
public StreamId streamId => StreamId;
|
|
|
|
[SerializeField] private ReactorSpriteTarget SpriteTarget;
|
|
/// <summary> Reference to a sprite target component </summary>
|
|
public ReactorSpriteTarget spriteTarget => SpriteTarget;
|
|
|
|
/// <summary> Check if a sprite target is referenced or not </summary>
|
|
public bool hasSpriteTarget => SpriteTarget != null;
|
|
|
|
public SignalStream stream { get; private set; }
|
|
|
|
#if UNITY_EDITOR
|
|
private void Reset()
|
|
{
|
|
FindTarget();
|
|
}
|
|
#endif
|
|
|
|
public void FindTarget()
|
|
{
|
|
if (SpriteTarget != null)
|
|
return;
|
|
|
|
SpriteTarget = ReactorSpriteTarget.FindTarget(gameObject);
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
FindTarget();
|
|
}
|
|
|
|
private void OnEnable() =>
|
|
ConnectReceiver();
|
|
|
|
private void OnDisable() =>
|
|
DisconnectReceiver();
|
|
|
|
protected override void ConnectReceiver() =>
|
|
stream = SignalStream.Get(streamId.Category, streamId.Name).ConnectReceiver(receiver);
|
|
|
|
protected override void DisconnectReceiver() =>
|
|
stream.DisconnectReceiver(receiver);
|
|
|
|
protected override void ProcessSignal(Signal signal)
|
|
{
|
|
if (!hasSpriteTarget)
|
|
return;
|
|
|
|
if (signal == null)
|
|
return;
|
|
|
|
if (!signal.hasValue)
|
|
return;
|
|
|
|
if (signal.valueType != typeof(Sprite))
|
|
return;
|
|
|
|
SetSprite(signal.GetValueUnsafe<Sprite>());
|
|
}
|
|
|
|
public void SetSprite(Sprite sprite)
|
|
{
|
|
if (SpriteTarget != null)
|
|
SpriteTarget.SetSprite(sprite);
|
|
}
|
|
}
|
|
}
|