public override void OnFlowWindowLayoutGUI(Rect rect, FD.FlowWindow window) { if (window.isVisibleState == false) return; if (window.IsContainer() == true) return; if (window.IsSmall() == true && window.IsFunction() == true) return; if (window.IsShowDefault() == true) return; if (Heatmap.settings == null) Heatmap.settings = Heatmap.GetSettingsFile(); var settings = Heatmap.settings; if (settings != null) { var data = settings.data.Get(window); if (data == null) return; LayoutWindowType screen; var layout = HeatmapSystem.GetLayout(window.id, out screen); if (layout == null) return; var targetScreenSize = new Vector2(layout.root.editorRect.width, layout.root.editorRect.height); foreach (var item in settings.items) { if (item.show == true && item.enabled == true) { foreach (var serviceBase in this.editor.services) { var service = serviceBase as IAnalyticsService; if (service.GetServiceName() == item.serviceName) { var key = string.Format("{0}_{1}", item.serviceName, window.id); HeatmapResult result; if (this.heatmapResultsCache.TryGetValue(key, out result) == true) { if (result != null) { var texture = this.heatmapTexturesCache[key]; if (texture != null) { var scaleFactor = HeatmapSystem.GetFactor(targetScreenSize, rect.size); //var scaleFactorCanvas = layout.editorScale > 0f ? 1f / layout.editorScale : 1f; //scaleFactor *= scaleFactorCanvas; var r = layout.root.editorRect; r.x *= scaleFactor; r.y *= scaleFactor; r.x += rect.x + rect.width * 0.5f; r.y += rect.y + rect.height * 0.5f; r.width *= scaleFactor; r.height *= scaleFactor; var c = Color.white; GUI.color = c; GUI.DrawTexture(r, texture, ScaleMode.StretchToFill, alphaBlend: true); GUI.color = Color.white; } else { if (this.noDataTexture != null) GUI.DrawTexture(rect, this.noDataTexture, ScaleMode.ScaleToFit, alphaBlend: true); } } else { // still loading... } } else { if (Event.current.type == EventType.Repaint) { var rectSize = targetScreenSize;//rect.size; var rootRect = layout.root.editorRect; this.heatmapResultsCache.Add(key, null); this.heatmapTexturesCache.Add(key, null); service.GetHeatmapData(window.id, (int)targetScreenSize.x, (int)targetScreenSize.y, item.userFilter, (_result) => { var heatmapResult = _result as HeatmapResult; // Convert normalized points to real points for (int i = 0; i < heatmapResult.points.Length; ++i) { var root = layout.GetRootByTag((LayoutTag)heatmapResult.points[i].tag); if (root != null) { var xn = heatmapResult.points[i].x; var yn = heatmapResult.points[i].y; var sourceRect = root.editorRect; var radius = (float)HeatmapVisualizer.GetRadius(); sourceRect.x += radius; sourceRect.y += radius; sourceRect.width -= radius * 2f; sourceRect.height -= radius * 2f; var scaleFactor = HeatmapSystem.GetFactor(targetScreenSize, rectSize); var r = sourceRect; r.x *= scaleFactor; r.y *= scaleFactor; r.x += rootRect.width * 0.5f; r.y = rootRect.height * 0.5f - r.y; r.width *= scaleFactor; r.height *= scaleFactor; heatmapResult.points[i].realPoint = new Vector2(r.x + xn * r.width, r.y - yn * r.height); } } this.heatmapResultsCache[key] = heatmapResult; HeatmapSystem.GenerateTextureFromData((int)targetScreenSize.x, (int)targetScreenSize.y, this.heatmapResultsCache[key], (texture) => { this.heatmapTexturesCache[key] = texture; }); }); } } } } } } } }
public void DrawTransitionChooser(AttachItem attach, FD.FlowWindow fromWindow, FD.FlowWindow toWindow, bool doubleSided) { if (this.drawWindowContent == false) return; if (toWindow.IsEnabled() == false) return; if (toWindow.IsContainer() == true) return; var factor = 0.5f; var transitionsContainer = fromWindow; var namePrefix = string.Empty; if (fromWindow.IsSmall() == true && fromWindow.IsABTest() == true) { // is ABTest //Debug.Log(fromWindow.id + " => " + toWindow.id + " :: " + attach.index + " :: " + doubleSided); transitionsContainer = FlowSystem.GetWindow(fromWindow.abTests.sourceWindowId); if (transitionsContainer == null) return; namePrefix = string.Format("Variant{0}", attach.index.ToString()); factor = 0.2f; } else { if (toWindow.IsSmall() == true) { if (toWindow.IsFunction() == false) return; } } if (FlowSystem.GetData().modeLayer == ModeLayer.Audio) { if (FlowSystem.GetData().HasView(FlowView.AudioTransitions) == false) return; } else { if (FlowSystem.GetData().HasView(FlowView.VideoTransitions) == false) return; } const float size = 32f; const float offset = size * 0.5f + 5f; Vector2 centerOffset = Flow.OnDrawNodeCurveOffset(this, attach, fromWindow, toWindow, doubleSided); if (doubleSided == true) { var q = Quaternion.LookRotation(toWindow.rect.center - fromWindow.rect.center, Vector3.back); var attachRevert = FlowSystem.GetAttachItem(toWindow.id, fromWindow.id); this.DrawTransitionChooser(attachRevert, toWindow, toWindow, fromWindow, centerOffset, q * Vector2.left * offset, size, factor, namePrefix); this.DrawTransitionChooser(attach, fromWindow, fromWindow, toWindow, centerOffset, q * Vector2.right * offset, size, factor, namePrefix); } else { this.DrawTransitionChooser(attach, transitionsContainer, fromWindow, toWindow, centerOffset, Vector2.zero, size, factor, namePrefix); } }
public override void OnFlowWindow(FD.FlowWindow window) { if (window.isVisibleState == false) return; if (window.IsContainer() == true) return; if (window.IsSmall() == true && window.IsFunction() == true) return; if (window.IsShowDefault() == true) return; if (Heatmap.settings == null) Heatmap.settings = Heatmap.GetSettingsFile(); var settings = Heatmap.settings; if (settings != null) { var result = new ScreenResult(); foreach (var item in settings.items) { if (item.show == true && item.enabled == true) { foreach (var serviceBase in this.editor.services) { var service = serviceBase as IAnalyticsService; if (service.GetServiceName() == item.serviceName) { var rect = window.rect; this.DrawBubble(new Rect(new Vector2(rect.x + rect.width * 0.5f, rect.y), Vector2.zero), 0, window.id, -1, Vector2.zero, "LabelGreen"); int value; var keyTransition = string.Format("{0}_{1}", item.serviceName, window.id); if (this.resultsTransitionCache.TryGetValue(keyTransition, out value) == true) { result.uniqueCount = value; } if (result.uniqueCount > 0 && result.popup == false) { // Draw exit bubble this.DrawBubble(new Vector2(rect.x + rect.width * 0.5f, rect.y + rect.height), result, Vector2.zero, "LabelRed", "{1}"); } } } } } } }
public override void OnFlowWindowScreenMenuGUI(FD.FlowWindow window, GenericMenu menu) { if (window.isVisibleState == false) return; if (window.IsContainer() == true) return; if (window.IsSmall() == true && window.IsFunction() == true) return; if (window.IsShowDefault() == true) return; if (Heatmap.settings == null) Heatmap.settings = Heatmap.GetSettingsFile(); var settings = Heatmap.settings; if (settings != null) { var data = settings.data.Get(window); if (data == null) return; foreach (var item in settings.items) { if (item.show == true && item.enabled == true) { foreach (var serviceBase in this.editor.services) { var service = serviceBase as IAnalyticsService; if (service.GetServiceName() == item.serviceName) { var key = string.Format("{0}_{1}", item.serviceName, window.id); var windowId = window.id; menu.AddItem(new GUIContent("Open Heatmap..."), false, () => { //this.fullScreenData = this.heatmapResultsCache[key]; this.fullScreenTexture = this.heatmapTexturesCache[key]; this.fullScreenWindowId = windowId; this.fullScreenEditor = null; this.openFullScreen = true; this.flowEditor.SetDisabled(); }); } } } } } }
public override void OnFlowWindowGUI(FD.FlowWindow window) { var data = FlowSystem.GetData(); if (data == null) return; if (data.modeLayer == ModeLayer.Audio) { if (window.IsContainer() == true || window.IsSmall() == true || window.IsShowDefault() == true) return; var screen = window.GetScreen(); if (screen != null) { GUILayout.BeginHorizontal(); { var playType = (int)screen.audio.playType; playType = GUILayoutExt.Popup(playType, new string[2] { "Keep Current", "Restart If Equals" }, FlowSystemEditorWindow.defaultSkin.label, GUILayout.Width(EditorGUIUtility.labelWidth)); screen.audio.playType = (UnityEngine.UI.Windows.Audio.Window.PlayType)playType; var rect = GUILayoutUtility.GetLastRect(); /*var newId = */AudioPopupEditor.Draw(new Rect(rect.x + rect.width, rect.y, window.rect.width - EditorGUIUtility.labelWidth - 10f, rect.height), screen.audio.id, (result) => { screen.audio.id = result; window.audioEditor = null; }, screen.audio.clipType, screen.audio.flowData.audio, null); /*if (newId != screen.audio.id) { screen.audio.id = newId; window.audioEditor = null; }*/ } GUILayout.EndHorizontal(); var state = data.audio.GetState(screen.audio.clipType, screen.audio.id); if (state != null && state.clip != null) { GUILayout.BeginVertical(); { GUILayout.Box(string.Empty, FlowSystemEditorWindow.styles.layoutBoxStyle, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); var rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.MouseDown && rect.Contains(Event.current.mousePosition) == true) { window.audioEditor = null; } if (window.audioEditor == null) { EditorPrefs.SetBool("AutoPlayAudio", false); window.audioEditor = Editor.CreateEditor(state.clip); //System.Type.GetType("AudioUtil").InvokeMember("StopClip", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public, null, null, new object[] { state.clip }); } if (Event.current.type != EventType.MouseDrag && Event.current.type != EventType.DragPerform) { window.audioEditor.OnPreviewGUI(rect, EditorStyles.helpBox); GUILayout.BeginHorizontal(); window.audioEditor.OnPreviewSettings(); GUILayout.EndHorizontal(); } } GUILayout.EndVertical(); } } } }
public void DrawTransitionChooser(FD.FlowWindow.AttachItem attach, FD.FlowWindow fromWindow, FD.FlowWindow toWindow, bool doubleSided) { if (toWindow.IsEnabled() == false) return; if (toWindow.IsContainer() == true) return; if (toWindow.IsSmall() == true) { if (toWindow.IsFunction() == false) return; } const float size = 32f; const float offset = size * 0.5f + 5f; if (doubleSided == true) { var q = Quaternion.LookRotation(toWindow.rect.center - fromWindow.rect.center, Vector3.back); var attachRevert = FlowSystem.GetAttachItem(toWindow.id, fromWindow.id); this.DrawTransitionChooser(attachRevert, toWindow, fromWindow, q * Vector2.left * offset, size); this.DrawTransitionChooser(attach, fromWindow, toWindow, q * Vector2.right * offset, size); } else { this.DrawTransitionChooser(attach, fromWindow, toWindow, Vector2.zero, size); } }
/*public override string OnCompilerTransitionTypedAttachedGeneration(FD.FlowWindow windowFrom, FD.FlowWindow windowTo, bool everyPlatformHasUniqueName, System.Type[] types, string[] names) { if (windowTo.IsLinker() == true && windowTo.GetLinkerId() > 0) { var result = string.Empty; var window = FlowSystem.GetWindow(windowTo.GetLinkerId()); var className = window.directory; var classNameWithNamespace = Tpl.GetNamespace(window) + "." + Tpl.GetDerivedClassName(window); result += TemplateGenerator.GenerateWindowLayoutTransitionMethod(windowFrom, window, className, classNameWithNamespace); WindowSystem.CollectCallVariations(windowTo.GetScreen(), (listTypes, listNames) => { result += TemplateGenerator.GenerateWindowLayoutTransitionTypedMethod(windowFrom, window, className, classNameWithNamespace, listTypes, listNames); }); Debug.Log(className + " :: " + classNameWithNamespace + " == " + result); return result; } return base.OnCompilerTransitionTypedAttachedGeneration(windowFrom, windowTo, everyPlatformHasUniqueName, types, names); }*/ public override void OnFlowWindowGUI(FD.FlowWindow window) { var data = FlowSystem.GetData(); if (data == null) return; var flag = (window.IsLinker() == true && window.IsSmall() == true && window.IsContainer() == false); if (flag == true) { var alreadyConnectedFunctionIds = new List<int>(); // Find caller window var windowFrom = data.windowAssets.FirstOrDefault((item) => item.HasAttach(window.id)); if (windowFrom != null) { var attaches = windowFrom.GetAttachedWindows(); foreach (var attachWindow in attaches) { if (attachWindow.IsLinker() == true) { alreadyConnectedFunctionIds.Add(attachWindow.GetLinkerId()); } } } foreach (var win in data.windowAssets) { if (win.CanDirectCall() == true) { var count = alreadyConnectedFunctionIds.Count((e) => e == win.id); if ((window.GetLinkerId() == win.id && count == 1) || count == 0) { } else { if (win.id == window.GetLinkerId()) window.linkerId = 0; alreadyConnectedFunctionIds.Remove(win.id); } } } var linkerId = window.GetLinkerId(); var linker = linkerId == 0 ? null : data.GetWindow(linkerId); var isActiveSelected = true; var oldColor = GUI.color; GUI.color = isActiveSelected ? Color.white : Color.grey; var result = GUILayout.Button(linker != null ? linker.title : "None", FlowSystemEditorWindow.defaultSkin.button, GUILayout.ExpandHeight(true)); GUI.color = oldColor; var rect = GUILayoutUtility.GetLastRect(); rect.y += rect.height; if (result == true) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("None"), window.linkerId == 0, () => { window.linkerId = 0; }); if (windowFrom != null) { alreadyConnectedFunctionIds.Clear(); var attaches = windowFrom.GetAttachedWindows(); foreach (var attachWindow in attaches) { if (attachWindow.IsLinker() == true) { alreadyConnectedFunctionIds.Add(attachWindow.GetLinkerId()); } } } foreach (var win in data.windowAssets) { if (win.CanDirectCall() == true) { var count = alreadyConnectedFunctionIds.Count((e) => e == win.id); if ((window.GetLinkerId() == win.id && count == 1) || count == 0) { var id = win.id; menu.AddItem(new GUIContent(win.title), win.id == window.GetLinkerId(), () => { window.linkerId = id; }); } else { if (win.id == window.GetLinkerId()) window.linkerId = 0; alreadyConnectedFunctionIds.Remove(win.id); menu.AddDisabledItem(new GUIContent(win.title)); } } } menu.DropDown(rect); } } }
public override string OnCompilerTransitionTypedAttachedGeneration(FD.FlowWindow windowFrom, FD.FlowWindow windowTo, bool everyPlatformHasUniqueName, System.Type[] types, string[] names) { if (windowTo.IsFunction() == true && windowTo.IsSmall() == true && windowTo.IsContainer() == false && windowTo.GetFunctionId() > 0) { return FlowFunctionsTemplateGenerator.GenerateTransitionTypedMethod(this.flowEditor, windowFrom, windowTo, types, names); } return base.OnCompilerTransitionTypedAttachedGeneration(windowFrom, windowTo, everyPlatformHasUniqueName, types, names); }
public override bool IsCompilerTransitionAttachedGeneration(FD.FlowWindow windowFrom, FD.FlowWindow windowTo) { return windowTo.IsFunction() == true && windowTo.IsSmall() == true && windowTo.IsContainer() == false && windowTo.GetFunctionId() > 0; }