// 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 System.Collections.Generic; using Doozy.Editor.EditorUI; using Doozy.Editor.EditorUI.Components; using Doozy.Editor.EditorUI.ScriptableObjects.Colors; using Doozy.Editor.Reactor.Internal; using Doozy.Runtime.Common.Extensions; using Doozy.Runtime.Reactor.Easings; using Doozy.Runtime.Reactor.Internal; using Doozy.Runtime.Reactor.Reactions; using Doozy.Runtime.Signals; using Doozy.Runtime.UIElements.Extensions; using UnityEditor; using UnityEngine; using UnityEngine.Events; using UnityEngine.UIElements; using PlayMode = Doozy.Runtime.Reactor.PlayMode; // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedMember.Local namespace Doozy.Editor.Signals.Layouts { public class StreamsConsoleRow : PoolableElement { private const string NONE = "---"; public static StreamsConsoleRow Get(SignalStream targetStream) => Get().SetStream(targetStream); public bool isHiddenByFilter { get; private set; } public SignalStream stream { get; private set; } private TemplateContainer templateContainer { get; } public VisualElement layoutContainer { get; } public Image signalIcon { get; } public Image streamIcon { get; } public VisualElement detailsContainer { get; } public VisualElement detailsTopRow { get; } public VisualElement streamSignalProviderContainer { get; } public VisualElement streamSignalProviderGameObjectContainer { get; } public VisualElement streamCategoryContainer { get; } public VisualElement streamNameContainer { get; } public VisualElement detailsBottomRow { get; } public VisualElement streamReceiversCountContainer { get; } public VisualElement streamInfoMessageContainer { get; } public VisualElement streamGuidContainer { get; } public Label signalsCounterLabel { get; } public Label streamSignalProviderLabel { get; } public Label streamSignalProviderGameObjectLabel { get; } public Label streamCategoryLabel { get; } public Label streamNameLabel { get; } public Label streamReceiversCountLabel { get; } public Label streamInfoMessageLabel { get; } public Label streamGuidLabel { get; } public FluidButton buttonPingStreamProvider { get; } private Texture2DReaction signalIconSignalReaction { get; set; } private Texture2DReaction signalIconMetaSignalReaction { get; set; } private Texture2DReaction streamIconReaction { get; set; } private ColorReaction colorReaction { get; set; } private static IEnumerable signalTextures => EditorSpriteSheets.Signals.Icons.SignalOnOff; private static IEnumerable metaSignalTextures => EditorSpriteSheets.Signals.Icons.MetaSignalOnOff; private static IEnumerable streamTextures => EditorSpriteSheets.Signals.Icons.SignalStream; private static IEnumerable locationTextures => EditorSpriteSheets.EditorUI.Icons.Location; public bool pinned { get; set; } public UnityAction OnPinned; private static Color layoutContainerNormalColor => EditorColors.Default.FieldBackground; private static Color layoutContainerHoverColor => EditorColors.Default.WindowHeaderBackground; private static Color signalColor => EditorColors.Signals.Signal; private static EditorSelectableColorInfo signalSelectableColor => EditorSelectableColors.Signals.Signal; private static Color streamColor => EditorColors.Signals.Stream; private static EditorSelectableColorInfo streamSelectableColor => EditorSelectableColors.Signals.Stream; private static Color infoLabelColor => EditorColors.Default.TextTitle; private static Font infoLabelFont => EditorFonts.Ubuntu.Light; private static Color titleLabelColor => EditorColors.Default.TextDescription; private static Font titleLabelFont => EditorFonts.Ubuntu.Light; public StreamsConsoleRow() { this.SetStyleFlexGrow(1); Add(templateContainer = EditorLayouts.Signals.StreamsConsoleRow.CloneTree()); templateContainer .SetStyleFlexGrow(1) .AddStyle(EditorUI.EditorStyles.Signals.StreamsConsoleRow); layoutContainer = templateContainer.Q(nameof(layoutContainer)); //ICONS signalIcon = layoutContainer.Q(nameof(signalIcon)); streamIcon = layoutContainer.Q(nameof(streamIcon)); //CONTAINERS detailsContainer = layoutContainer.Q(nameof(detailsContainer)); detailsTopRow = layoutContainer.Q(nameof(detailsTopRow)); streamSignalProviderContainer = layoutContainer.Q(nameof(streamSignalProviderContainer)); streamSignalProviderGameObjectContainer = layoutContainer.Q(nameof(streamSignalProviderGameObjectContainer)); streamCategoryContainer = layoutContainer.Q(nameof(streamCategoryContainer)); streamNameContainer = layoutContainer.Q(nameof(streamNameContainer)); streamReceiversCountContainer = layoutContainer.Q(nameof(streamReceiversCountContainer)); detailsBottomRow = layoutContainer.Q(nameof(detailsBottomRow)); streamInfoMessageContainer = layoutContainer.Q(nameof(streamInfoMessageContainer)); streamGuidContainer = layoutContainer.Q(nameof(streamGuidContainer)); //INFO LABELS var infoLabels = new List