// 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; using System.Collections.Generic; using System.Text.RegularExpressions; 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.UIElements; using PlayMode = Doozy.Runtime.Reactor.PlayMode; // ReSharper disable MemberCanBePrivate.Global namespace Doozy.Editor.Signals.Layouts { public class SignalsConsoleRow : PoolableElement { private const string NONE = "---"; public static SignalsConsoleRow Get(Signal targetSignal) => Get().SetSignal(targetSignal); public Signal signal { get; private set; } private TemplateContainer templateContainer { get; } public VisualElement layoutContainer { get; } public Label timestampLabel { get; } public Image signalIcon { get; } public Image streamIcon { get; } public VisualElement detailsContainer { get; } public VisualElement signalInfoContainer { get; } public VisualElement messageContainer { get; } public VisualElement sourceGameObjectContainer { get; } public VisualElement signalProviderContainer { get; } public VisualElement signalSenderObjectContainer { get; } public VisualElement signalValueTypeContainer { get; } public VisualElement signalValueContainer { get; } public VisualElement streamInfoContainer { get; } public VisualElement streamSignalProviderContainer { get; } public VisualElement streamSignalProviderGameObjectContainer { get; } public VisualElement streamCategoryContainer { get; } public VisualElement streamNameContainer { get; } public VisualElement streamReceiversCountContainer { get; } public VisualElement streamInfoMessageContainer { get; } public VisualElement streamGuidContainer { get; } public Label messageLabel { get; } public Label sourceGameObjectLabel { get; } public Label signalProviderLabel { get; } public Label signalSenderObjectLabel { get; } public Label signalValueTypeLabel { get; } public Label signalValueLabel { 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 buttonPingSignalProvider { get; } public FluidButton buttonPingSenderObject { get; } public FluidButton buttonPingSourceGameObject { get; } public FluidButton buttonPingStreamProvider { get; } private Texture2DReaction signalIconReaction { get; set; } private Texture2DReaction streamIconReaction { get; set; } private ColorReaction colorReaction { get; set; } private static IEnumerable signalTextures => EditorSpriteSheets.Signals.Icons.Signal; private static IEnumerable metaSignalTextures => EditorSpriteSheets.Signals.Icons.MetaSignal; private static IEnumerable streamTextures => EditorSpriteSheets.Signals.Icons.SignalStream; private static IEnumerable locationTextures => EditorSpriteSheets.EditorUI.Icons.Location; private static Color layoutContainerNormalColor => EditorColors.Default.FieldBackground; private static Color layoutContainerHoverColor => EditorColors.Default.WindowHeaderBackground; private static Color initialContainerColor => EditorGUIUtility.isProSkin ? layoutContainerNormalColor * signalColor : layoutContainerNormalColor + signalColor * 0.3f; 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 SignalsConsoleRow() { this.SetStyleFlexGrow(1); Add(templateContainer = EditorLayouts.Signals.SignalsConsoleRow.CloneTree()); templateContainer .SetStyleFlexGrow(1) .AddStyle(EditorUI.EditorStyles.Signals.SignalsConsoleRow); layoutContainer = templateContainer.Q(nameof(layoutContainer)); timestampLabel = layoutContainer.Q