add copy to clipboard

This commit is contained in:
Mikhail 2024-11-08 17:17:41 +08:00
parent 5bc8e9f0a5
commit 1ec556d8e4
3 changed files with 222 additions and 1 deletions

View File

@ -19,6 +19,8 @@ namespace DCFApixels.DragonECS.Unity.Editors
private void CopyToClipboard() private void CopyToClipboard()
{ {
const char SEPARATOR = '\t';
var all = Target.Pipeline.AllSystems; var all = Target.Pipeline.AllSystems;
string[] names = new string[all.Length]; string[] names = new string[all.Length];
for (int i = 0; i < all.Length; i++) for (int i = 0; i < all.Length; i++)
@ -41,7 +43,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
{ {
color = EcsGUI.SelectPanelColor(meta, i, -1).ToMetaColor(); color = EcsGUI.SelectPanelColor(meta, i, -1).ToMetaColor();
} }
name = $"{meta.Name} : {meta.TypeName} : {meta.MetaID} : {color.colorCode:X8}"; name = $"{meta.Name}{SEPARATOR}{meta.TypeName}{SEPARATOR}{meta.MetaID}{SEPARATOR}{color.colorCode:X8}";
} }
names[i] = name; names[i] = name;
} }

View File

@ -1,14 +1,122 @@
#if UNITY_EDITOR #if UNITY_EDITOR
using DCFApixels.DragonECS.UncheckedCore;
using DCFApixels.DragonECS.Unity.Internal; using DCFApixels.DragonECS.Unity.Internal;
using System.Text;
using UnityEditor; using UnityEditor;
using UnityEngine;
namespace DCFApixels.DragonECS.Unity.Editors namespace DCFApixels.DragonECS.Unity.Editors
{ {
[CustomEditor(typeof(WorldMonitor))] [CustomEditor(typeof(WorldMonitor))]
internal class WorldMonitorEditor : ExtendedEditor<WorldMonitor> internal class WorldMonitorEditor : ExtendedEditor<WorldMonitor>
{ {
private GUIStyle _headerStyle;
private void CopyToClipboard()
{
const char SEPARATOR = '\t';
var world = Target.World;
EntitesMatrix mtrx = new EntitesMatrix(world);
var allpools = world.AllPools.Slice(0, world.PoolsCount);
StringBuilder sb = new StringBuilder();
int i = -1;
int entitiesCount = world.Entities.Count;
//numbers
sb.Append($"{SEPARATOR}{SEPARATOR}№");
i = -1;
foreach (var pool in allpools)
{
i++;
sb.Append($"{SEPARATOR}{i}");
}
sb.Append("\r\n");
//numbers end
//chunks
sb.Append($"{SEPARATOR}{SEPARATOR}Chunks");
i = -1;
foreach (var pool in allpools)
{
i++;
sb.Append($"{SEPARATOR}{i >> 5}");
}
sb.Append("\r\n");
//chunks end
//header
sb.Append($"Entity{SEPARATOR}Gen{SEPARATOR}Count");
//pools
foreach (var pool in allpools)
{
sb.Append($"{SEPARATOR}");
if (pool.IsNullOrDummy() == false)
{
sb.Append(pool.ComponentType.ToMeta().TypeName);
}
else
{
sb.Append("NULL");
}
}
sb.Append("\r\n");
//header end
//content
for (i = 0; i < mtrx.EntitesCount; i++)
{
if (mtrx.IsEntityUsed(i))
{
sb.Append($"{i}{SEPARATOR}{mtrx.GetEntityGen(i)}{SEPARATOR}{mtrx.GetEntityComponentsCount(i)}");
for (int j = 0; j < mtrx.PoolsCount; j++)
{
if (mtrx[i, j])
{
sb.Append($"{SEPARATOR}+");
}
else
{
sb.Append($"{SEPARATOR}");
}
}
sb.Append("\r\n");
entitiesCount--;
}
if (entitiesCount <= 0)
{
break;
}
}
//end
GUIUtility.systemCopyBuffer = sb.ToString();
}
protected override void DrawCustom() protected override void DrawCustom()
{ {
if (_headerStyle == null)
{
_headerStyle = new GUIStyle(EditorStyles.boldLabel);
_headerStyle.fontSize = 28;
}
using (EcsGUI.Layout.BeginHorizontal())
{
GUILayout.Label("[World]", _headerStyle, GUILayout.ExpandWidth(true));
if (GUILayout.Button("Copy to Clipboard", GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
{
CopyToClipboard();
}
}
EcsGUI.Layout.DrawWorldBaseInfo(Target.World); EcsGUI.Layout.DrawWorldBaseInfo(Target.World);
} }
} }

View File

@ -2,6 +2,7 @@
using DCFApixels.DragonECS.Core; using DCFApixels.DragonECS.Core;
using DCFApixels.DragonECS.Unity.Internal; using DCFApixels.DragonECS.Unity.Internal;
using System; using System;
using System.Text;
using UnityEditor; using UnityEditor;
using UnityEngine; using UnityEngine;
@ -10,10 +11,120 @@ namespace DCFApixels.DragonECS.Unity.Editors
[CustomEditor(typeof(WorldQueriesMonitor))] [CustomEditor(typeof(WorldQueriesMonitor))]
internal class WorldQueriesMonitorEditor : ExtendedEditor<WorldQueriesMonitor> internal class WorldQueriesMonitorEditor : ExtendedEditor<WorldQueriesMonitor>
{ {
private GUIStyle _headerStyle;
private void CopyToClipboard()
{
const char SEPARATOR = '\t';
var allqueries = Target.MaskQueryExecutors;
var allpools = Target.World.AllPools.Slice(0, Target.World.PoolsCount);
StringBuilder sb = new StringBuilder();
int i = -1;
//numbers
sb.Append($"{SEPARATOR}{SEPARATOR}№");
i = -1;
foreach (var pool in allpools)
{
i++;
sb.Append($"{SEPARATOR}{i}");
}
sb.Append("\r\n");
//numbers end
//chunks
sb.Append($"{SEPARATOR}{SEPARATOR}Chunks");
i = -1;
foreach (var pool in allpools)
{
i++;
sb.Append($"{SEPARATOR}{i >> 5}");
}
sb.Append("\r\n");
//chunks end
//header
sb.Append($"№{SEPARATOR}Version{SEPARATOR}Count");
//pools
foreach (var pool in allpools)
{
sb.Append($"{SEPARATOR}");
if (pool.IsNullOrDummy() == false)
{
sb.Append(pool.ComponentType.ToMeta().TypeName);
}
else
{
sb.Append("NULL");
}
}
sb.Append("\r\n");
//header end
//content
i = -1;
foreach (var query in allqueries)
{
i++;
sb.Append($"{i}{SEPARATOR}{query.Version}{SEPARATOR}{query.LastCachedCount}");
var incs = query.Mask.Incs;
var excs = query.Mask.Excs;
var incsI = 0;
var excsI = 0;
for (int j = 0; j < allpools.Length; j++)
{
var pool = allpools[j];
sb.Append($"{SEPARATOR}");
if (pool.IsNullOrDummy() == false)
{
if (incsI < incs.Length && incs[incsI] == j)
{
sb.Append($"+");
incsI++;
continue;
}
if (excsI < excs.Length && excs[excsI] == j)
{
sb.Append($"-");
excsI++;
continue;
}
}
}
sb.Append("\r\n");
}
//end
GUIUtility.systemCopyBuffer = sb.ToString();
}
protected override void DrawCustom() protected override void DrawCustom()
{ {
if (_headerStyle == null)
{
_headerStyle = new GUIStyle(EditorStyles.boldLabel);
_headerStyle.fontSize = 28;
}
var executors = Target.MaskQueryExecutors; var executors = Target.MaskQueryExecutors;
using (EcsGUI.Layout.BeginHorizontal())
{
GUILayout.Label("[Queries]", _headerStyle, GUILayout.ExpandWidth(true));
if (GUILayout.Button("Copy to Clipboard", GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
{
CopyToClipboard();
}
}
EditorGUILayout.IntField("Count: ", executors.Count); EditorGUILayout.IntField("Count: ", executors.Count);
GUILayout.Space(20); GUILayout.Space(20);