Compare commits

...

56 Commits

Author SHA1 Message Date
geondo55
cef08df8e0 LoadFile Command 추가 2025-04-21 15:26:04 +09:00
geondo55
7cb9a08144 Merge branch 'main' into pgd/20250417 2025-04-17 18:05:40 +09:00
geondo55
99c6a0f6f1 Camera, Gizmo, Project Command 추가 2025-04-17 18:01:53 +09:00
c27db88402 Merge pull request 'UI 기능 분리' (#49) from pgd/20250417 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/49
2025-04-17 10:29:23 +09:00
geondo55
5cfad8eab4 UI 기능 분리 2025-04-17 10:24:12 +09:00
a24205d929 Merge pull request 'UserInputManager 로직 수정, UpdateRunner 제거' (#48) from pgd/20250416 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/48
2025-04-16 16:27:36 +09:00
geondo55
7c958faa42 씬 수정 2025-04-16 16:18:29 +09:00
geondo55
e4344e538b Merge branch 'main' into pgd/20250416 2025-04-16 16:10:00 +09:00
geondo55
1f525994d0 UserInputManager 수정, UpdateRunner 제거 2025-04-16 16:09:12 +09:00
geondo55
d4ead516d2 CursorManager 수정 2025-04-16 14:50:20 +09:00
6bf31ac71c Merge pull request 'AGV, Wall 그리기 Manager 리팩토링' (#47) from pgd/20250416 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/47
2025-04-16 11:36:42 +09:00
geondo55
1cd614a45d Wall 그리기 기능 리팩토링 2025-04-16 11:14:53 +09:00
geondo55
2c3f69b0b8 AGV 관련 Manager 리팩토링 2025-04-16 10:49:50 +09:00
beaf61b399 Merge pull request 'Cursor, Camera Manager 리팩토링' (#46) from pgd/20250414_2 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/46
2025-04-15 17:45:36 +09:00
geondo55
1ce63b9870 Cursor, Camera Manager 리팩토링 2025-04-14 18:09:28 +09:00
geondo55
7c24cb0cc3 Merge branch 'main' into pgd/20250414_2 2025-04-14 15:49:32 +09:00
geondo55
410a3a5bb4 백업 2025-04-14 15:46:40 +09:00
afe8652786 Merge pull request '썸네일, 속성 팝업 복구, 로컬 파일 부모 수정' (#45) from pgd/20250414 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/45
2025-04-14 15:17:49 +09:00
geondo55
516412f585 썸네일 패널 살리기, 로드 로컬 파일 부모 수정 2025-04-14 15:03:14 +09:00
wsh
981a1685f5 이벤트 누락 수정 2025-04-14 12:01:53 +09:00
wsh
92c7655ecb eventConnector 정리 2025-04-14 11:55:27 +09:00
62f019c256 Merge pull request '기모지 버그 수정, 간섭 객체 목록 기능 복구' (#44) from pgd/20250410 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/44
2025-04-14 09:22:48 +09:00
geondo55
b962d25930 UpdateRunner 수정 2025-04-10 09:47:29 +09:00
geondo55
b87ea36afb Merge branch 'main' into pgd/20250409_2 2025-04-10 09:25:04 +09:00
geondo55
f28d0a09a2 씬 수정 2025-04-09 16:12:29 +09:00
geondo55
16fe55edc6 간섭 객체 목록 기능 복구 2025-04-09 16:11:58 +09:00
67fd6739ec Merge pull request '자산 목록창 살리기 , Input이벤트 살리기(select,drag 등)' (#43) from pgd/20250409 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/43
2025-04-09 16:07:19 +09:00
geondo55
807ec619e4 기지모 버그 수정 2025-04-09 14:33:39 +09:00
geondo55
a63c42e968 drag 버그, toolbar 복사 버그 수정 2025-04-09 11:50:57 +09:00
geondo55
92e3b0ce9a 씬 스크립트 추가 2025-04-09 09:28:10 +09:00
geondo55
bc48d7e7e1 UserInputManager 수정 2025-04-09 09:10:58 +09:00
geondo55
57fa1f08b6 마우스 클릭 이벤트 살리기 2025-04-08 17:34:30 +09:00
geondo55
d5ea8b03c5 객체라이브러리 정상동장 수정
1. 객체 아이템 로드 수정
2. drag&drop 수정
2025-04-08 14:50:28 +09:00
geondo55
514d9f2937 백업 2025-04-08 11:40:28 +09:00
wsh
df6077e260 merge 2025-04-08 09:40:22 +09:00
wsh
b36ea4f93c merge 2025-04-08 09:34:37 +09:00
wsh
e448686a61 1 2025-04-08 09:29:22 +09:00
abbe0cc807 Merge pull request '리펙토링 완' (#41) from sjm/250407 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/41
2025-04-08 09:24:02 +09:00
jmaniuvc
ea774416f8 복사 시 자식 오브젝트 Render 다르게 바뀌는 버그 수정 2025-04-07 14:36:31 +09:00
jmaniuvc
6e1fb78966 Select 리펙토링 2025-04-07 10:42:59 +09:00
jmaniuvc
9ac2fa3807 클릭된 오브젝트가 없을때, 오브젝트 삭제됐을 때 null로 변경 2025-04-04 12:19:58 +09:00
wsh
02f318c548 중간 저장 2025-04-04 11:41:23 +09:00
jmaniuvc
7005d76198 거리 측정 Linerenderer 사용으로 변경 2025-04-03 18:24:58 +09:00
jmaniuvc
7f98e1a06c Merge branch 'sjm/250402' into sjm/250403 2025-04-03 15:47:10 +09:00
jmaniuvc
98d2b9cc95 이름 변경 2025-04-03 15:45:50 +09:00
jmaniuvc
f8878387f8 간섭 목록 리펙토링 2025-04-03 15:41:42 +09:00
wsh
7769886bad ManagerHub 추가 및 abstract Manager class 추가. 2025-04-03 15:04:11 +09:00
wsh
e7630541dc PopupCanvasHandler(임시)추가 2025-04-03 14:12:41 +09:00
wsh
222bfc347b StaticCanvasHandler 추가(임시) 2025-04-03 14:10:21 +09:00
wsh
21277cbc22 1 2025-04-03 12:08:03 +09:00
wsh
a1d9ff9da4 1 2025-04-03 12:02:32 +09:00
wsh
0f57e1cb24 1 2025-04-03 11:57:17 +09:00
wsh
70c2b7ae57 1 2025-04-03 11:56:48 +09:00
64ac9c0755 Merge pull request 'ProjectManager 리팩토링' (#39) from pgd/20250403 into main
Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/39
2025-04-03 11:56:13 +09:00
wsh
86157ee5d8 1 2025-04-03 11:41:16 +09:00
wsh
53abd9a361 정리 2025-04-02 17:39:37 +09:00
115 changed files with 1988 additions and 1875 deletions

71
.cursorignore Normal file
View File

@@ -0,0 +1,71 @@
# Unity 생성 디렉토리
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
# Unity 자동 생성 파일
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D 충돌 파일
sysinfo.txt
# 빌드 결과물
*.apk
*.aab
*.unitypackage
*.app
# VS/VS Code 설정
.vs/
.vscode/
*.csproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.lock
*.ide
*.ide-shm
*.ide-wal
# OS 생성 파일
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# 로그 파일
*.log
# 임시 파일
*.tmp
*.temp
*~
# Unity 에셋 파일
*.fbx
*.obj
*.max
*.blend
*.dae
*.mb
*.ma
# 프로젝트 특정 설정
/Assets/SpecialAssets/
/Assets/Plugins/ThirdParty/
/Assets/StreamingAssets/Config/
# 임시 작업 디렉토리
_temp/
_backup/

View File

@@ -1,5 +1,6 @@
using NUnit.Framework;
using System.Collections.Generic;
using XED.Manage;
namespace XED.VirtualFactory
{

View File

@@ -0,0 +1,214 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;
namespace XED
{
//TODO::areabox가 아니라 TwinObject를 대상으로 동작하도록 수정
public class ObjectDistanceLine : MonoBehaviour
{
private Vector3 centerPoint = new();
private Vector3[] edges = new Vector3[4];
private LineRenderer[] lineRenderers = new LineRenderer[4];
private int[] distances = new int[4];
private Vector3[] hits = new Vector3[4];
[SerializeField]
private float thickness;
private int rot;
private Dictionary<Vector3, Vector3> dirTable = new();
TwinObject target;
HashSet<TwinObject> targets = new();
public event Action onTargetEvent;
public event Action onTargetMissing;
public event Action<Vector3, int, int> onLineUpdate;
public override void AfterAwake()
{
//var labelCanvas;
var lineMat = Resources.Load<Material>("Materials/Mat_LineRender");
for (int i = 0; i < lineRenderers.Length; i++)
{
lineRenderers[i] = new GameObject("DistanceLine").AddComponent<LineRenderer>();
lineRenderers[i].transform.SetParent(transform, true);
lineRenderers[i].material = lineMat;
lineRenderers[i].positionCount = 2;
lineRenderers[i].startWidth = thickness;
lineRenderers[i].endWidth = thickness;
}
//onTargetEvent += ()=>labelCanvas.panel_objectdistancelabellist.SetActive(true);
//onTargetMissing += ()=>labelCanvas.panel_objectdistancelabellist.SetActive(false);
//onLineUpdate += labelCanvas.panel_objectdistancelabellist.DistanceLabelsSetting;
}
public void SetTarget(TwinObject target)
{
if (target is Wall || target is WallGroup)
return;
this.target = target;
targets.Add(target);
gameObject.SetActive(true);
onTargetEvent?.Invoke();
}
private void EdgePoints()
{
var size = target.physics.areabox.bounds.size;
edges[0] = centerPoint + EdgePointCalculate(-size.x, -size.z, centerPoint);
edges[1] = centerPoint + EdgePointCalculate(size.x, -size.z, centerPoint);
edges[2] = centerPoint + EdgePointCalculate(size.x, size.z, centerPoint);
edges[3] = centerPoint + EdgePointCalculate(-size.x, size.z, centerPoint);
}
private void CenterPoints()
{
var size = target.physics.areabox.bounds.size;
edges[0] = centerPoint + EdgePointCalculate(-size.x, 0f, centerPoint);
edges[1] = centerPoint + EdgePointCalculate(size.x, 0f, centerPoint);
edges[2] = centerPoint + EdgePointCalculate(0f, -size.z, centerPoint);
edges[3] = centerPoint + EdgePointCalculate(0f, size.z, centerPoint);
}
private Vector3 EdgePointCalculate(float xValue, float zValue, Vector3 center)
{
//대각선의 길이,
//중점길이
var point = center + (new Vector3(xValue, 0, zValue) * 0.5f);
var length = Vector3.Distance(point, center);
var dir = (point - center).normalized * length;
//var pos = RotateVector3(dir, rot);
var pos = Quaternion.AngleAxis(rot, Vector3.up) * dir;
return pos;
}
public void Off()
{
targets.Clear();
onTargetMissing?.Invoke();
}
void LineRenderSetActive(bool isActive)
{
foreach(var line in lineRenderers)
{
line.enabled = isActive;
}
}
private void Update()
{
if (target == null || targets.Count >1)
{
Off();
LineRenderSetActive(false);
return;
}
//if (areabox == null)
// return;
//Distance가 4개 모두 0이면 return?
LineRenderSetActive(true);
rot = Mathf.RoundToInt(target.physics.areabox.transform.localEulerAngles.y);
centerPoint = new Vector3(target.physics.areabox.bounds.center.x, 0, target.physics.areabox.bounds.center.z);
var angle = rot % 90f;
if (Mathf.Approximately(angle, 0f))
CenterPoints();
else
EdgePoints();
var xOrder = edges.OrderBy(l => l.x);
var zOrder = edges.OrderBy(l => l.z);
dirTable.Clear();
dirTable.TryAdd(xOrder.ElementAt(0), Vector3.left);
dirTable.TryAdd(xOrder.ElementAt(3), Vector3.right);
dirTable.TryAdd(zOrder.ElementAt(0), Vector3.back);
dirTable.TryAdd(zOrder.ElementAt(3), Vector3.forward);
for (int i = 0; i < edges.Length; i++)
{
//var dir = Dir(dirTable[edges[i]]);
var dir = dirTable[edges[i]];
if (Physics.Raycast(edges[i], dir, out RaycastHit hit, Mathf.Infinity))
{
hits[i] = hit.point;
}
else
{
hits[i] = edges[i];
}
distances[i] = Mathf.RoundToInt(Vector3.Distance(hits[i], edges[i]) * 1000f);
lineRenderers[i].SetPosition(0, edges[i]);
lineRenderers[i].SetPosition(1, hits[i]);
//3방향중 점중 가장 짧은거
var pos = DistanceTextPos(edges[i], hits[i]);
if (Mathf.Abs(pos.y) == Mathf.Infinity || float.IsNaN(pos.y))
continue;
onLineUpdate?.Invoke(pos, i, distances[i]);
}
}
private Vector3 DistanceTextPos(Vector3 edge, Vector3 hit)
{
var x = Screen.width;
var y = Screen.height;
var hitpoint = Camera.main.WorldToScreenPoint(hit);
var edgePoint = Camera.main.WorldToScreenPoint(edge);
//카메라 끝점 edge와 hit 사이;
//기울기 가져온다
var m = (hitpoint.y - edgePoint.y) / (hitpoint.x - edgePoint.x);
if (hitpoint.y > y)
{
var yPos = y;
var xPos = ((yPos - edgePoint.y) / m) + edgePoint.x;
hitpoint = new Vector3(xPos, yPos);
}
else if (hitpoint.y < 0)
{
var yPos = 0;
var xPos = ((yPos - edgePoint.y) / m) + edgePoint.x;
hitpoint = new Vector3(xPos, yPos);
}
if (hitpoint.x > x)
{
var xPos = x;
var yPos = (m * (xPos - edgePoint.x)) + edgePoint.y;
hitpoint = new Vector3(xPos, yPos);
}
else if (hitpoint.x < 0)
{
var xPos = 0;
var yPos = (m * (xPos - edgePoint.x)) + edgePoint.y;
hitpoint = new Vector3(xPos, yPos);
}
var center = (hitpoint + edgePoint) * 0.5f;
return center;
}
void Gizmo()
{
#if UNITY_EDITOR
// for (int i = 0; i < edges.Length; ++i)
// {
// Gizmos.DrawSphere(edges[i].pos, 0.1f);
// }
// for (int i = 0; i < hits.Length; ++i)
// {
// var dir = Dir(dirTable[edges[i]]);
// Handles.color = Color.yellow;
// Handles.DrawLine(edges[i].pos, hits[i], 1);
// Gizmos.DrawRay(edges[i].pos, dir * 10f);
// }
#endif
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bfac6b2ea97a0274787f0bf0d086a76d

View File

@@ -1,172 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6403074468239445253
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 13273118576283872}
- component: {fileID: 538649878903734265}
m_Layer: 0
m_Name: CustomAssetConnector
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &13273118576283872
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6403074468239445253}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4978247003912376479}
- {fileID: 1000793883570924469}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &538649878903734265
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6403074468239445253}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 33f84af3802526548befd3c6e68f67d8, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &3956852705411700500
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 13273118576283872}
m_Modifications:
- target: {fileID: 2048176525751629727, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_Name
value: RenderObjectHandler
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
--- !u!4 &1000793883570924469 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4254239384611290273, guid: 2d670e3279ac3324bba323ab3ed2bef9, type: 3}
m_PrefabInstance: {fileID: 3956852705411700500}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6247234762045722773
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 13273118576283872}
m_Modifications:
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7695058519597474191, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
propertyPath: m_Name
value: SaveLoadFBXData
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
--- !u!4 &4978247003912376479 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1415515309089783818, guid: 20880f5e11bf5724b82b2b3ebd3de3db, type: 3}
m_PrefabInstance: {fileID: 6247234762045722773}
m_PrefabAsset: {fileID: 0}

View File

@@ -9,8 +9,6 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1821569750776054505}
- component: {fileID: 7245323945551537659}
- component: {fileID: 2051839441129491893}
- component: {fileID: 4636811485307056759}
- component: {fileID: 8127948644408097011}
m_Layer: 0
@@ -35,43 +33,6 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7245323945551537659
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1409607586026230811}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2bb472437f31bb444ac3a380ebdd2f3f, type: 3}
m_Name:
m_EditorClassIdentifier:
nodePrefab: {fileID: 2579942234611465176, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
markerPrefab: {fileID: 2579942234611465176, guid: f2ef013240a7d2548b78c9434734181a, type: 3}
nodeSelectMode: 2
currentlySelectedNode: {fileID: 0}
agvNodeMap:
maxid: 0
agvNodeData: []
--- !u!114 &2051839441129491893
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1409607586026230811}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a6552f9ab96d944459a5e5a6f3eb6463, type: 3}
m_Name:
m_EditorClassIdentifier:
moveGizmo:
_settings:
_canBeDisplayed: 1
_isExpanded: 1
_transformableLayers: -1
target: {fileID: 0}
--- !u!114 &4636811485307056759
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -98,6 +59,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 43c2fa2860dfa344d856558ec881bb8a, type: 3}
m_Name:
m_EditorClassIdentifier:
agvPrefab: {fileID: 1505508720499862715, guid: 03eb7e95fc0cb334d848d40c49b4110e, type: 3}
agvs: []
fileName: Assets/AGVsLog.csv
prf_AGV: {fileID: 0}
prf_Spec: {fileID: 0}
autoIndexing: 0

View File

@@ -1,46 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2048176525751629727
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4254239384611290273}
- component: {fileID: 6125667014742207553}
m_Layer: 0
m_Name: RenderObjectHandler
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4254239384611290273
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2048176525751629727}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6125667014742207553
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2048176525751629727}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 23bf878a8d76f9f4d9514e7c393cf926, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@@ -59,7 +59,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.39215687}
m_RaycastTarget: 1
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:

View File

@@ -211,6 +211,7 @@ GameObject:
- component: {fileID: 7194822588214921878}
- component: {fileID: 3097470657670304171}
- component: {fileID: 5078274965939298063}
- component: {fileID: 7525121242705956087}
m_Layer: 0
m_Name: Distance_right
m_TagString: Untagged
@@ -276,6 +277,18 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &7525121242705956087
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1824088583583508963}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &2075515304005455769
GameObject:
m_ObjectHideFlags: 0
@@ -695,6 +708,7 @@ GameObject:
- component: {fileID: 1400843724585282578}
- component: {fileID: 2061718949882192120}
- component: {fileID: 4022013656138835912}
- component: {fileID: 4248166134889511194}
m_Layer: 0
m_Name: Distance_left
m_TagString: Untagged
@@ -760,6 +774,18 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &4248166134889511194
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5461546370723553429}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &7125163854521808529
GameObject:
m_ObjectHideFlags: 0
@@ -771,6 +797,7 @@ GameObject:
- component: {fileID: 6571488781575170805}
- component: {fileID: 2889234264731888109}
- component: {fileID: 5311912601517734047}
- component: {fileID: 9121733989934958637}
m_Layer: 0
m_Name: Distance_back
m_TagString: Untagged
@@ -836,6 +863,18 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &9121733989934958637
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7125163854521808529}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &7135956063028507155
GameObject:
m_ObjectHideFlags: 0
@@ -847,6 +886,7 @@ GameObject:
- component: {fileID: 18596219730868912}
- component: {fileID: 7819340452723330143}
- component: {fileID: 2211566357908769342}
- component: {fileID: 2122022514441583782}
m_Layer: 0
m_Name: Distance_foward
m_TagString: Untagged
@@ -912,6 +952,18 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &2122022514441583782
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7135956063028507155}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &7452555945768904036
GameObject:
m_ObjectHideFlags: 0
@@ -1195,6 +1247,7 @@ GameObject:
- component: {fileID: 8107414850933273690}
- component: {fileID: 9125045971131934483}
- component: {fileID: 4508713210993668394}
- component: {fileID: 553392137018333697}
m_Layer: 0
m_Name: Distance_up
m_TagString: Untagged
@@ -1260,6 +1313,18 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &553392137018333697
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8057416366647402832}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &8838398484417968805
GameObject:
m_ObjectHideFlags: 0
@@ -1271,6 +1336,7 @@ GameObject:
- component: {fileID: 6902250168712616153}
- component: {fileID: 5227252712573134147}
- component: {fileID: 1079209328243914300}
- component: {fileID: 4065362264821389741}
m_Layer: 0
m_Name: Distance_down
m_TagString: Untagged
@@ -1336,3 +1402,15 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &4065362264821389741
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8838398484417968805}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@@ -255,6 +255,52 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 88186217}
m_CullTransparentMesh: 0
--- !u!1 &121134311
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 121134312}
- component: {fileID: 121134313}
m_Layer: 0
m_Name: LinkDataUIManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &121134312
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 121134311}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &121134313
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 121134311}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: beaea798e37c61142a62ba5cecd426f2, type: 3}
m_Name:
m_EditorClassIdentifier:
prf_LinkDataUI: {fileID: 3588877776299194241, guid: 9f62a52c6a3d48947b57fdd4f941a260, type: 3}
body: {fileID: 1617081465}
--- !u!1 &157533902
GameObject:
m_ObjectHideFlags: 0
@@ -965,7 +1011,8 @@ PrefabInstance:
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedComponents:
- {fileID: 7997719753715833387, guid: 82511e73cbe6181438fd98254170e476, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
@@ -1264,6 +1311,51 @@ Transform:
- {fileID: 741022416}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &391151067
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 391151068}
- component: {fileID: 391151069}
m_Layer: 0
m_Name: Raycaster
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &391151068
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 391151067}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &391151069
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 391151067}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 73c8199685949fb4eb02e83a235ec68b, type: 3}
m_Name:
m_EditorClassIdentifier:
uiHoverTime: 0
--- !u!1 &394283229
GameObject:
m_ObjectHideFlags: 0
@@ -2265,51 +2357,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 502356474}
m_CullTransparentMesh: 0
--- !u!1 &503307893
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 503307894}
- component: {fileID: 503307895}
m_Layer: 0
m_Name: Raycaster
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &503307894
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 503307893}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &503307895
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 503307893}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 73c8199685949fb4eb02e83a235ec68b, type: 3}
m_Name:
m_EditorClassIdentifier:
uiHoverTime: 0
--- !u!1 &535540530
GameObject:
m_ObjectHideFlags: 0
@@ -2481,7 +2528,6 @@ MonoBehaviour:
agvnodemodepopup: {fileID: 0}
panel_tooltip: {fileID: 0}
panel_propertyviewer: {fileID: 0}
panel_draghandler: {fileID: 0}
panel_assetedit: {fileID: 0}
panel_thumbnail: {fileID: 0}
panel_objectdistance: {fileID: 0}
@@ -2786,6 +2832,50 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 1670299614426086028, guid: db3e2e7e03663874a9b223063e7ea2d9, type: 3}
m_PrefabInstance: {fileID: 1976685923}
m_PrefabAsset: {fileID: 0}
--- !u!1 &671739450
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 671739451}
- component: {fileID: 671739452}
m_Layer: 0
m_Name: UserInputManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &671739451
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 671739450}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &671739452
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 671739450}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6b37771737b0e1c45aa27bf9a659ee88, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &712266949
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -2892,6 +2982,50 @@ Transform:
m_CorrespondingSourceObject: {fileID: 101037460302490810, guid: e31a50ed45dd7404a9ff21df4f503810, type: 3}
m_PrefabInstance: {fileID: 741022415}
m_PrefabAsset: {fileID: 0}
--- !u!1 &749092879
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 749092880}
- component: {fileID: 749092881}
m_Layer: 0
m_Name: ManagerHub
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &749092880
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 749092879}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &749092881
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 749092879}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 729a2ee4bef76d34aa641f7254b67f3b, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &759321982
GameObject:
m_ObjectHideFlags: 0
@@ -2975,68 +3109,6 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 4, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1001 &812349387
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1093055756}
m_Modifications:
- target: {fileID: 3963811325703941763, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_Name
value: WallBuilder
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalPosition.x
value: 1.3484559
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalPosition.y
value: 3.002852
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalPosition.z
value: -2.1850286
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
--- !u!4 &812349388 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7756644939596186566, guid: a906cd4ab09260143b9d87e622d9e458, type: 3}
m_PrefabInstance: {fileID: 812349387}
m_PrefabAsset: {fileID: 0}
--- !u!1 &827571245
GameObject:
m_ObjectHideFlags: 0
@@ -3112,32 +3184,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 827571245}
m_CullTransparentMesh: 1
--- !u!1 &833546890 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4357501051956785434, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
m_PrefabInstance: {fileID: 1319277344}
m_PrefabAsset: {fileID: 0}
--- !u!114 &833546892
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 833546890}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8d1f9c7add0ac3345ac4cc9e8c59084a, type: 3}
m_Name:
m_EditorClassIdentifier:
identifier:
password:
onLoadFbxFile:
m_PersistentCalls:
m_Calls: []
onRemoveFbxFile:
m_PersistentCalls:
m_Calls: []
isLoadTaskComplete: 1
--- !u!1 &837752632
GameObject:
m_ObjectHideFlags: 0
@@ -4121,6 +4167,26 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4062748835041242030, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4062748835041242030, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4062748835041242030, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5808496954263173159, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5808496954263173159, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7484356029459005624, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3}
propertyPath: m_Name
value: Panel_AssetLibrary
@@ -4224,6 +4290,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1093055756}
- component: {fileID: 1093055757}
m_Layer: 0
m_Name: System
m_TagString: Untagged
@@ -4246,20 +4313,27 @@ Transform:
m_Children:
- {fileID: 1149817090}
- {fileID: 636283413}
- {fileID: 1437072834}
- {fileID: 1451571416}
- {fileID: 1552320077}
- {fileID: 2021424132}
- {fileID: 1123988285}
- {fileID: 812349388}
- {fileID: 503307894}
- {fileID: 1805249248}
- {fileID: 2057021881}
- {fileID: 538683123}
- {fileID: 617235297}
- {fileID: 1801579273}
- {fileID: 749092880}
- {fileID: 671739451}
- {fileID: 391151068}
- {fileID: 121134312}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1093055757
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1093055755}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2778cc56cc78c8a46846112e3aad69d2, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1096619401
GameObject:
m_ObjectHideFlags: 0
@@ -4687,50 +4761,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1111664869}
m_CullTransparentMesh: 1
--- !u!1 &1123988284
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1123988285}
- component: {fileID: 1123988286}
m_Layer: 0
m_Name: CommandManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1123988285
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1123988284}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1123988286
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1123988284}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 476f4f09271b1e141a85ed6cff471f5e, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1149817088
GameObject:
m_ObjectHideFlags: 0
@@ -8628,67 +8658,6 @@ MonoBehaviour:
_gradientOffset: 0
_isVisible: 0
_renderIgnoreCameras: []
--- !u!1001 &1319277344
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1093055756}
m_Modifications:
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6403074468239445253, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
propertyPath: m_Name
value: CustomAssetConnector
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 7645908678807808531, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 4357501051956785434, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
insertIndex: -1
addedObject: {fileID: 833546892}
m_SourcePrefab: {fileID: 100100000, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
--- !u!1 &1321269470
GameObject:
m_ObjectHideFlags: 0
@@ -8764,50 +8733,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1321269470}
m_CullTransparentMesh: 0
--- !u!1 &1437072833
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1437072834}
- component: {fileID: 1437072835}
m_Layer: 0
m_Name: UserInputManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1437072834
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1437072833}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1437072835
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1437072833}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6b37771737b0e1c45aa27bf9a659ee88, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &1439596646
PrefabInstance:
m_ObjectHideFlags: 0
@@ -9030,52 +8955,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1441967167}
m_CullTransparentMesh: 1
--- !u!1 &1451571415
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1451571416}
- component: {fileID: 1451571417}
m_Layer: 0
m_Name: CameraManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1451571416
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1451571415}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1451571417
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1451571415}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d2be0153517c66d468b831d2f067af0f, type: 3}
m_Name:
m_EditorClassIdentifier:
objectViewDistance: 25
objectViewRotation: {x: 45, y: 145, z: 0}
--- !u!1 &1464917248
GameObject:
m_ObjectHideFlags: 0
@@ -9240,51 +9119,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7e770d58ca963cd42a42328ab60b8216, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1552320075
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1552320077}
- component: {fileID: 1552320076}
m_Layer: 0
m_Name: CursorManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1552320076
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1552320075}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 23783baffd622ff438e68f32651014a5, type: 3}
m_Name:
m_EditorClassIdentifier:
currentUseGUIWindow: {fileID: 0}
--- !u!4 &1552320077
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1552320075}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 1244.8824, y: 617.2903, z: -1.7088666}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1558737740
GameObject:
m_ObjectHideFlags: 0
@@ -9805,6 +9639,11 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 2186512387788540450, guid: 985020025db5cc04da0f50eaa5351616, type: 3}
m_PrefabInstance: {fileID: 1615364366}
m_PrefabAsset: {fileID: 0}
--- !u!224 &1617081465 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 940260026812176822, guid: 82511e73cbe6181438fd98254170e476, type: 3}
m_PrefabInstance: {fileID: 297039007}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1647579088
GameObject:
m_ObjectHideFlags: 0
@@ -10346,68 +10185,6 @@ MonoBehaviour:
panel_topbar: {fileID: 0}
panel_toolbar: {fileID: 0}
panel_modecontrol: {fileID: 0}
--- !u!1 &1801579272
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1801579273}
- component: {fileID: 1801579275}
- component: {fileID: 1801579274}
m_Layer: 0
m_Name: ProjectManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1801579273
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1801579272}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1093055756}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1801579274
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1801579272}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d3b7eb8ddaf6a2c4a94629439aa5654f, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &1801579275
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1801579272}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c5052381a5a4ad84385f60d56ad223fa, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!4 &1805249248 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 13273118576283872, guid: 2c4ff86506de88747baaf66d9d637c5b, type: 3}
m_PrefabInstance: {fileID: 1319277344}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1809156807
GameObject:
m_ObjectHideFlags: 0
@@ -11482,68 +11259,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
currentMode: 0
--- !u!1001 &2057021880
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1093055756}
m_Modifications:
- target: {fileID: 1409607586026230811, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_Name
value: AGVNodeManager
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
--- !u!4 &2057021881 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1821569750776054505, guid: 2e1f6b521b86f624a9e2eba79ecb0de5, type: 3}
m_PrefabInstance: {fileID: 2057021880}
m_PrefabAsset: {fileID: 0}
--- !u!224 &34056510312835704
RectTransform:
m_ObjectHideFlags: 0

View File

@@ -1,6 +1,7 @@
using RTG;
using System.Collections.Generic;
using UnityEngine;
using XED.Command;
using XED.Core;
using XED.Manage;
@@ -107,6 +108,8 @@ namespace XED.RuntimeGizmo
objectRotationGizmo.SetTargetObjects(selectedObjects);
objectScaleGizmo.SetTargetObjects(selectedObjects);
objectUniversalGizmo.SetTargetObjects(selectedObjects);
workGizmo.Gizmo.SetEnabled(selectedObjects.Count != 0);
}
private void OnGizmoDragBegin(Gizmo gizmo, int t)
{
@@ -135,7 +138,7 @@ namespace XED.RuntimeGizmo
RTUndoRedo.Get.Undo();
onTransformChanged?.Invoke(transformObjects);
});
CommandManager.I.AddCommand(command);
CommandInvoker.instance.Invoke(command);
}
}
}

View File

@@ -4,6 +4,7 @@ using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UI.Extensions;
using XED.Manage;
using XRLib.UI;
namespace XED.UI
@@ -27,6 +28,8 @@ namespace XED.UI
List<(ConnectionHandlePoint, ConnectionHandlePoint)> connections = new();
List<ConnectionHandlePoint> connection = new();
internal void Connect(ConnectionHandlePoint connectionHandlePoint)
{
connection.Add(connectionHandlePoint);

View File

@@ -0,0 +1,30 @@
using UnityEngine;
using XED.Asset;
using XED.Command;
namespace XED.Command
{
public class CreateInterferedObjectButtonCommand : IReversibleCommand
{
public CreateInterferedObjectButtonCommand()
{
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
}
public void Undo()
{
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 57aaa2e5b1c74a74b955b7cdc045e483

View File

@@ -9,71 +9,62 @@ using XED.HierarchyTree;
using System.Linq;
using UnityEditor;
using System;
using XED.Core;
using System.Collections;
namespace XED.Asset
{
public class CustomAssetConnector : MonoBehaviour, ISingle
public class CustomAssetConnector : Manager
{
public PooledScrollView assetScrollView;
public CustomScrollRect assetScrollRect;
public PooledScrollView componentScrollView;
public PooledScrollView InterworkingDataScrollView;
public Panel_ObjectDistance panel_ObjectDistance;
public GameObject renderObjectPrefab;
public float objectShowDistance = 1000.0f;
public InterferedObjectManager interferedObjectManager;
public List<ConnectedAsset> connectedAssets = new List<ConnectedAsset>();
public List<CustomAssetData> selectedAssetDatas = new List<CustomAssetData>();
public CustomAssetData selectedAssetData;
public GameObject selectedItem;
public CustomAssetRenderObject selectRenderObject;
public FBXFileManager saveLoadFBXData;
public RenderObjectHandler renderObjectHandler;
public System.Action<string, List<GameObject>> onSelectObjects;
public System.Action onDeselectObjects;
public System.Action onRemoveObjects;
public System.Action onAssetDropped;
public CustomAssetDataHandler assetDataHandler;
public CustomAssetEventHandler assetEventHandler;
ProjectManager projectManager;
void Awake()
public CustomAssetConnector()
{
saveLoadFBXData = FindFirstObjectByType<FBXFileManager>();
renderObjectHandler = FindFirstObjectByType<RenderObjectHandler>();
assetDataHandler = new CustomAssetDataHandler(this);
assetEventHandler = new CustomAssetEventHandler(this);
projectManager = FindSingle<ProjectManager>();
assetDataHandler = new CustomAssetDataHandler();
assetEventHandler = new CustomAssetEventHandler();
}
void Start()
public override void Init()
{
assetScrollRect = FindSingle<Canvas_Popup>().panel_assetlibrary.scrollRect;
assetScrollView = FindSingle<Canvas_Popup>().panel_assetlibrary.scrollView;
componentScrollView = FindSingle<Canvas_Popup>().panel_hierarchy.scrollView;
InterworkingDataScrollView = FindSingle<Canvas_Popup>().panel_interworkingdatalist.scrollView;
renderObjectPrefab = Resources.Load<GameObject>("Prefabs/PRF_RenderObject");
interferedObjectManager = ManagerHub.instance.Get<InterferedObjectManager>();
assetScrollRect = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollRect;
assetScrollRect.onDragBegin.AddListener(OnAssetSelected);
assetScrollRect.onDragAndDrop.AddListener(OnAssetDropped);
assetScrollView.onSelect.AddListener(assetEventHandler.OnSelectAssetFromHierarchy);
InterworkingDataScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_interworkingdatalist.scrollView;
InterworkingDataScrollView.onSelect.AddListener(assetEventHandler.OnSelectDataFromHierarchy);
assetScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollView;
assetScrollView.onSelect.AddListener(assetEventHandler.OnSelectAssetFromHierarchy);
componentScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_hierarchy.scrollView;
componentScrollView.onSelect.AddListener(assetEventHandler.OnSelectObjectFromHierarchy);
componentScrollView.onParentChanged.AddListener(OnParentChanged);
saveLoadFBXData.onLoadFbxFile.AddListener(assetDataHandler.OnLoadFbxFile);
saveLoadFBXData.onRemoveFbxFile.AddListener(assetDataHandler.OnRemoveFbxFile);
renderObjectHandler.onSelectObject.AddListener(assetEventHandler.OnSelectObjectFromObjectHandler);
renderObjectHandler.onCopyObject.AddListener(OnCopyObject);
renderObjectHandler.onRemoveObject.AddListener(OnRemoveObject);
renderObjectHandler.onOrderByHierachy.AddListener(OrderByHierarchy);
renderObjectHandler.onDeselectAll += OnDeselectAll;
projectManager.onRemoveAsset += OnRemoveObject;
panel_ObjectDistance = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectdistance;
renderObjectPrefab = Resources.Load<GameObject>("Prefabs/PRF_RenderObject");
}
private void OnRemoveObject(List<CustomAssetRenderObject> objects)
public void OnRemoveObject(List<CustomAssetRenderObject> objects)
{
if (objects.Count == 0)
{
@@ -88,10 +79,11 @@ namespace XED.Asset
siblingIndex.Add(searchAsset.hierarchyItem.GetSiblingIndex());
}
var command = new RemoveObjectCommand(removeList, siblingIndex, this);
CommandManager.I.ExecuteCommand(command);
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.ResetObjectInfo();
CommandInvoker.instance.Invoke(command);
}
private void OnCopyObject(List<CustomAssetRenderObject> objects)
public void OnCopyObject(List<CustomAssetRenderObject> objects)
{
if (objects.Count == 0)
{
@@ -108,14 +100,12 @@ namespace XED.Asset
connectedAssets.Add(copyAsset);
}
var command = new CopyObjectCommand(copySources, copyList, this);
CommandManager.I.ExecuteCommand(command);
CommandInvoker.instance.Invoke(command);
}
// Update is called once per frame
void Update()
IEnumerator ChangeSelectedAssetTransform()
{
if (selectedAssetData != null)
while (selectedAssetData != null)
{
Vector3? pos = GetMousePointOnYPlane(objectShowDistance);
if (pos.HasValue)
@@ -123,10 +113,10 @@ namespace XED.Asset
selectedItem.transform.position = pos.Value;
selectedAssetData.OnTransformDataChanged();
}
yield return null;
}
}
public void OnAssetSelected(HierarchyItem item)
{
if (item == null || item.linkedObject == null)
@@ -140,13 +130,17 @@ namespace XED.Asset
selectedAssetData = null;
return;
}
selectedItem = Instantiate(renderObjectPrefab);
selectedItem = UnityEngine.GameObject.Instantiate(renderObjectPrefab);
selectRenderObject = selectedItem.GetComponent<CustomAssetRenderObject>();
selectRenderObject.OnOverlabBegin += interferedObjectManager.AddInterferedPair;
selectRenderObject.OnOverlabEnd += interferedObjectManager.RemoveInterferedPair;
selectRenderObject.OnSelected += panel_ObjectDistance.SelectObjectFromCreate;
selectRenderObject.instantiateObject = selectedAssetData.InstantiateLoadedObject;
selectRenderObject.getBounds = selectedAssetData.GetCombinedBoundary;
selectRenderObject.CreateRenderObject();
selectRenderObject.Select();
selectedAssetData.AddTransformToRender(selectedItem.transform);
CoroutineRunner.instance.StartCoroutine(ChangeSelectedAssetTransform());
}
public void OnAssetDropped(HierarchyItem item)
{
@@ -160,7 +154,7 @@ namespace XED.Asset
else
{
selectedAssetData.RemoveTransform(selectedItem.transform);
Destroy(selectedItem);
UnityEngine.GameObject.Destroy(selectedItem);
}
selectRenderObject.Deselect();
selectedAssetData = null;
@@ -177,7 +171,7 @@ namespace XED.Asset
};
connectedAsset.renderObject.onTransformChanged = connectedAsset.assetData.OnTransformDataChanged;
var command = new CreateConnectedAssetCommand(connectedAsset, this);
CommandManager.I.ExecuteCommand(command);
CommandInvoker.instance.Invoke(command);
}
public void OnParentChanged(HierarchyItem parentItem, HierarchyItem childItem)
{
@@ -211,7 +205,8 @@ namespace XED.Asset
}
public void OnDeselectAll()
{
onDeselectObjects?.Invoke();
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
canvas_Popup.panel_objectinfo.gameObject.SetActive(false);
componentScrollView.DeselectAll();
}
public void OrderByHierarchy(List<CustomAssetRenderObject> objectsToOrder)
@@ -238,6 +233,20 @@ namespace XED.Asset
}
return null;
}
internal void ClearObjects()
{
List<CustomAssetRenderObject> objects = connectedAssets.Select(x => x.renderObject).ToList();
OnRemoveObject(objects);
}
internal void OnSelectObjects(string name, List<GameObject> selectedObjects)
{
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
canvas_Popup.panel_objectinfo.gameObject.SetActive(true);
canvas_Popup.panel_objectinfo.SetObjectInfo(name, selectedObjects);
canvas_Popup.panel_objectdistance.SelectObjectFromClick(name, selectedObjects);
}
}
public class ConnectedAsset
{

View File

@@ -1,20 +1,15 @@
using XED.Asset;
using XED.HierarchyTree;
using XED.Manage;
using XED.Util;
namespace XED
{
public class CustomAssetDataHandler
{
private CustomAssetConnector connector;
public CustomAssetDataHandler(CustomAssetConnector connector)
{
this.connector = connector;
}
public void OnLoadFbxFile(string objectName, string folderName, CustomAssetData assetData)
{
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
HierarchyItem parent = connector.assetScrollView.FindItem(folderName, HierarchyItemType.folder) ?? connector.assetScrollView.AddItem(folderName, null, HierarchyItemType.folder);
HierarchyItem item = connector.assetScrollView.AddItem(objectName, assetData.gameObject, HierarchyItemType.file, parent);
assetData.onLoadProgress.RemoveAllListeners();
@@ -23,17 +18,21 @@ namespace XED
public void OnRemoveFbxFile(string objectName)
{
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
connector.assetScrollView.RemoveItem(objectName, HierarchyItemType.file);
}
public void SaveSelectedAssetDatasToLocal()
{
connector.saveLoadFBXData.SaveToLocalData(connector.selectedAssetDatas);
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
fbxFileManager.SaveToLocalData(connector.selectedAssetDatas);
}
public void LoadLocalAssetDatas()
{
connector.saveLoadFBXData.LoadLocalData();
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
// fbxFileManager.LoadLocalData();
}
}
}

View File

@@ -41,7 +41,7 @@ namespace XED.Repositories
return p != null;
}
private CustomAssetData FindFromName(string name)
public CustomAssetData FindFromName(string name)
{
return assetDatas.Find(data => data.assetName == name);
}

View File

@@ -3,19 +3,13 @@ using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using XED.HierarchyTree;
using XED.Manage;
using XED.Util;
namespace XED.Asset
{
public class CustomAssetEventHandler
{
private CustomAssetConnector connector;
public CustomAssetEventHandler(CustomAssetConnector connector)
{
this.connector = connector;
}
public void OnSelectObjectFromHierarchy(List<HierarchyItem> selectedItems)
{
if (selectedItems.Count == 0)
@@ -23,25 +17,28 @@ namespace XED.Asset
return;
}
string name = "";
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
List<GameObject> selectedObjects = new List<GameObject>();
foreach (ConnectedAsset connectedAsset in connector.connectedAssets)
{
connectedAsset.renderObject.Deselect();
}
connector.renderObjectHandler.RemoveAllSelections();
renderObjectHandler.RemoveAllSelections();
for (int i = 0; i < selectedItems.Count; i++)
{
ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.hierarchyItem == selectedItems[i]);
name = i == 0 ? searchAsset.hierarchyItem.name : name.Equals(searchAsset.hierarchyItem.name) ? searchAsset.hierarchyItem.name : "-";
selectedObjects.Add(searchAsset.renderObject.gameObject);
connector.renderObjectHandler.AddSelection(searchAsset.renderObject);
renderObjectHandler.AddSelection(searchAsset.renderObject);
}
connector.renderObjectHandler.ResetGizmoTargetObjects();
connector.onSelectObjects?.Invoke(name, selectedObjects);
renderObjectHandler.ResetGizmoTargetObjects();
connector.OnSelectObjects(name, selectedObjects);
}
public void OnSelectAssetFromHierarchy(List<HierarchyItem> selectedItems)
{
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
connector.selectedAssetDatas.Clear();
if (selectedItems.Count == 0)
{
@@ -76,6 +73,8 @@ namespace XED.Asset
string name = "";
List<GameObject> selectedObjects = new List<GameObject>();
List<HierarchyItem> selectedItems = new List<HierarchyItem>();
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
for (int i = 0; i < objects.Count; i++)
{
ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == objects[i]);
@@ -84,20 +83,24 @@ namespace XED.Asset
selectedObjects.Add(searchAsset.renderObject.gameObject);
}
connector.componentScrollView.OnSelect(selectedItems);
connector.onSelectObjects?.Invoke(name, selectedObjects);
connector.OnSelectObjects(name, selectedObjects);
}
public void OnDragBoxSelect(Rect selectionBoxRect)
{
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
List<ConnectedAsset> activeAssets = connector.connectedAssets.FindAll(x => x.renderObject != null && x.renderObject.gameObject.activeSelf);
if (activeAssets.Count == 0)
{
return;
}
string name = "";
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
List<HierarchyItem> selectedItems = new List<HierarchyItem>();
List<CustomAssetRenderObject> selectedRenderObjects = new List<CustomAssetRenderObject>();
connector.renderObjectHandler.RemoveAllSelections();
renderObjectHandler.RemoveAllSelections();
for (int i = 0; i < activeAssets.Count; i++)
{
ConnectedAsset activeAsset = activeAssets[i];
@@ -108,9 +111,9 @@ namespace XED.Asset
selectedRenderObjects.Add(activeAsset.renderObject);
}
}
connector.renderObjectHandler.AddSelection(selectedRenderObjects);
renderObjectHandler.AddSelection(selectedRenderObjects);
connector.componentScrollView.OnSelect(selectedItems);
connector.onSelectObjects?.Invoke(name, selectedRenderObjects.Select(x => x.gameObject).ToList());
connector.OnSelectObjects(name, selectedRenderObjects.Select(x => x.gameObject).ToList());
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
@@ -28,6 +29,10 @@ namespace XED.Util
LayerMask twinObjectMask;
public event Action<TwinObject, TwinObject> OnOverlabBegin;
public event Action<TwinObject, TwinObject> OnOverlabEnd;
public event Action<CustomAssetRenderObject> OnSelected;
private void Awake()
{
objectRenderer = GetComponentInChildren<MeshRenderer>();
@@ -67,6 +72,8 @@ namespace XED.Util
}
Show();
}
OnOverlabBegin?.Invoke(GetComponent<TwinObject>(), other.gameObject.GetComponent<TwinObject>());
}
private void OnTriggerExit(Collider other)
{
@@ -83,6 +90,8 @@ namespace XED.Util
Hide();
}
}
OnOverlabEnd?.Invoke(GetComponent<TwinObject>(), other.gameObject.GetComponent<TwinObject>());
}
public void OnPointerEnter(PointerEventData eventData)
{
@@ -181,7 +190,7 @@ namespace XED.Util
public void Select()
{
//ResizeBoundary();
FindSingle<Panel_ObjectDistance>().SelectObjectFromCreate(this);
OnSelected?.Invoke(this);
isSelected = true;
objectRenderer.material = matCubeSelected;
Show();

View File

@@ -9,18 +9,19 @@ using System.Threading.Tasks;
using System;
using System.Linq;
using XED.Repositories;
using XED.Asset;
using Ookii.Dialogs;
using XED.Command;
namespace XED.Manage
{
public class FBXFileManager : MonoBehaviour
public class FBXFileManager : Manager
{
CustomAssetDataRepository dataRepo;
public string identifier;
public string password;
public UnityEvent<string, string, CustomAssetData> onLoadFbxFile;
public UnityEvent<string> onRemoveFbxFile;
public event System.Action onBeginLoadAsset;
private SaveData saveData;
private Queue<string> loadFilePath = new Queue<string>();
@@ -28,8 +29,9 @@ namespace XED.Manage
private MessagePackFileManager<SaveData> messagePacker;
private bool isSaveTaskComplete = true;
public bool isLoadTaskComplete = true;
private Transform fbxAnchor;
void Start()
public FBXFileManager()
{
dataRepo = new CustomAssetDataRepository();
saveData = new SaveData();
@@ -37,10 +39,12 @@ namespace XED.Manage
messagePacker = new MessagePackFileManager<SaveData>();
messagePacker.Initialize();
identifier = identifier.Length == 0 ? "defaultAssetData" : identifier;
StartCoroutine(CoroutineLoadLocalFiles());
string baseDataPath = Application.streamingAssetsPath + "/baseAssetData";
LoadLocalData(baseDataPath);
identifier = string.IsNullOrEmpty(identifier) ? "defaultAssetData" : identifier;
fbxAnchor = new GameObject("LocalAssetDataAnchor").transform;
}
public override void Init()
{
}
public void LoadLocalFBXDirectory()
@@ -50,23 +54,23 @@ namespace XED.Manage
private void OnLoadLocalFBXDirectory(IList<ItemWithStream> list)
{
for (int i = 0; i < list.Count; i++)
{
if (!list[i].HasData)
continue;
//for (int i = 0; i < list.Count; i++)
//{
// if (!list[i].HasData)
// continue;
var path = list[i].Name;
Debug.Log("path " + path);
var files = Directory.GetFiles(path, "*.fbx", SearchOption.AllDirectories);
// var path = list[i].Name;
// Debug.Log("path " + path);
// var files = Directory.GetFiles(path, "*.fbx", SearchOption.AllDirectories);
if (dataRepo.TryGetDataFromPath(path, out var p))
return;
// if (dataRepo.TryGetDataFromPath(path, out var p))
// return;
foreach (var file in files)
{
loadFilePath.Enqueue(file);
}
}
// foreach (var file in files)
// {
// loadFilePath.Enqueue(file);
// }
//}
}
public void SaveToLocalData(List<CustomAssetData> assetDatas, string path = "")
@@ -75,143 +79,36 @@ namespace XED.Manage
{
return;
}
StartCoroutine(CoroutineSaveToLocalData(assetDatas, path));
//StartCoroutine(CoroutineSaveToLocalData(assetDatas, path));
}
public void LoadLocalData(string path = "")
public void LoadLocalData()
{
if (isLoadTaskComplete == false)
{
return;
}
onBeginLoadAsset?.Invoke();
StartCoroutine(CoroutineLoadFromLocalData(path));
string path = Application.streamingAssetsPath + "/baseAssetData";
string filePath = GetLocalPath(path);
if (!CheckFilePathExists(filePath))
{
isLoadTaskComplete = true;
return;
}
// var command = new ActivateMoveGizmoCommand(rtgController);
//CommandInvoker.instance.Invoke(command);
CoroutineRunner.instance.StartCoroutine(CoroutineLoadFromLocalData(filePath));
}
public CustomAssetData GetCustomAssetData(string name)
{
return dataRepo.FindFromPath(name);
return dataRepo.FindFromName(name);
//return listAssets.FirstOrDefault(x => x.name == name);
}
IEnumerator CoroutineLoadLocalFiles()
{
while (true)
{
yield return new WaitUntil(() => loadFilePath.Count > 0);
string path = loadFilePath.Dequeue();
string name = System.IO.Path.GetFileNameWithoutExtension(path);
//if (listAssets.Find(x => x.name == name) != null)
//{
// yield return null;
// continue;
//}
if (dataRepo.TryGetDataFromName(name, out var p))
{
yield return null;
continue;
}
string directoryPath = Path.GetDirectoryName(path);
string lastFolderName = Path.GetFileName(directoryPath);
string createDate = File.GetCreationTime(path).ToShortDateString();
string lastRevisionDate = File.GetLastAccessTime(path).ToShortDateString();
string uploadDate = DateTime.Now.ToShortDateString();
GameObject newObject = new GameObject(name);
newObject.transform.parent = transform;
CustomAssetData assetData = newObject.AddComponent<CustomAssetData>();
assetData.assetName = name;
assetData.folderName = lastFolderName;
assetData.createDate = createDate;
assetData.LastRevisionDate = lastRevisionDate;
assetData.UploadDate = uploadDate;
assetData.Creator = "xr@uvc.co.kr";
assetData.Manager = "xr@uvc.co.kr";
assetData.LoadLocalFBX(path);
dataRepo.Add(assetData);
onLoadFbxFile?.Invoke(name, lastFolderName, assetData);
yield return new WaitUntil(() => (assetData.isLoadComplete == true && assetData.progress == 1) || assetData.isLoadError == true);
if (assetData.isLoadError)
{
dataRepo.Remove(assetData);
onRemoveFbxFile?.Invoke(name);
}
yield return null;
}
}
IEnumerator CoroutineSaveToLocalData(List<CustomAssetData> assetDatas, string path)
{
//if (assetDatas == null || assetDatas.Count == 0)
//{
// assetDatas = listAssets;
//}
//if (assetDatas.Count == 0)
//{
// Debug.Log("No AssetDatas to Save");
// isSaveTaskComplete = true;
// yield break;
//}
if (dataRepo.isEmpty)
{
dataRepo.AddRange(assetDatas);
}
if (dataRepo.isEmpty)
{
Debug.Log("No AssetDatas to Save");
isSaveTaskComplete = true;
yield break;
}
isSaveTaskComplete = false;
List<SavedModelData> savedModels = new List<SavedModelData>();
List<ThumbnailData> thumbnails = new List<ThumbnailData>();
RuntimePreviewGenerator.BackgroundColor = Color.clear;
RuntimePreviewGenerator.OrthographicMode = true;
for (int i = 0; i < assetDatas.Count; i++)
{
var modelData = ConvertToSaveData(assetDatas[i]);
Texture2D thumbnail = RuntimePreviewGenerator.GenerateModelPreview(assetDatas[i].loadedObject.transform, 320, 200);
thumbnail = thumbnail.MakeReadableTexture();
thumbnails.Add(new ThumbnailData(thumbnail.EncodeToPNG()));
savedModels.Add(modelData);
}
saveData.modelDatas = savedModels.ToArray();
saveData.textureDatas = sharedMaterial.textureDatas.ToArray();
saveData.thumbnailDatas = thumbnails.ToArray();
yield return null;
//Task task = SaveAsync(identifier, saveData);
string filePath = string.IsNullOrEmpty(path) ? Path.Combine(Application.persistentDataPath, identifier) : path;
Task task = Task.Run(() => messagePacker.SaveAsync(filePath, saveData));
yield return new WaitUntil(() => task.IsCompleted);
isSaveTaskComplete = true;
yield return null;
}
SavedModelData ConvertToSaveData(CustomAssetData assetData)
{
SavedModelData modelData = new SavedModelData();
modelData.SaveData(assetData.loadedObject, sharedMaterial);
//갯수 제한 없음 원하는 만큼 조절 가능. 테스트로 10개만 지정
modelData.attributes = new string[7][];
modelData.attributes[0] = new string[] { "assetName", assetData.assetName };
modelData.attributes[1] = new string[] { "folderName", assetData.folderName };
modelData.attributes[2] = new string[] { "createDate", assetData.createDate };
modelData.attributes[3] = new string[] { "LastRevisionDate", assetData.LastRevisionDate };
modelData.attributes[4] = new string[] { "UploadDate", assetData.UploadDate };
modelData.attributes[5] = new string[] { "Creator", assetData.createDate };
modelData.attributes[6] = new string[] { "Manager", assetData.Manager };
return modelData;
}
string GetLocalPath(string path)
{
if (string.IsNullOrEmpty(path))
@@ -233,25 +130,9 @@ namespace XED.Manage
return true;
}
IEnumerator CoroutineLoadFromLocalData(string path)
IEnumerator CoroutineLoadFromLocalData(string filePath)
{
isLoadTaskComplete = false;
float loadTime = 0;
//string filePath = string.IsNullOrEmpty(path) ? Path.Combine(Application.persistentDataPath, identifier) : path;
string filePath = GetLocalPath(path);
if (!CheckFilePathExists(filePath))
{
isLoadTaskComplete = true;
yield break;
}
//if (!System.IO.File.Exists(filePath))
//{
// Debug.Log("No File Found At : " + filePath);
// isLoadTaskComplete = true;
// yield break;
//}
Task<SaveData> task = Task<SaveData>.Run(() => messagePacker.LoadAsync(filePath));
yield return new WaitUntil(() => task.IsCompleted);
@@ -263,70 +144,19 @@ namespace XED.Manage
isLoadTaskComplete = true;
yield break;
}
saveData = task.Result;
for (int i = 0; i < saveData.textureDatas.Length; i++)
{
TextureData texData = saveData.textureDatas[i];
sharedMaterial.AddTextureData(texData);
loadTime += Time.deltaTime;
if (loadTime > 1.0f / 30.0f)
{
loadTime = 0;
yield return null;
}
}
for (int i = 0; i < saveData.modelDatas.Length; i++)
{
if (!LoadSaveData(saveData, i))
{
continue;
}
loadTime += Time.deltaTime;
if (loadTime > 1.0f / 30.0f)
{
loadTime = 0;
yield return null;
}
}
// float loadTime = 0f;
var command = new LoadLocalTextureDataCommand(sharedMaterial, saveData.textureDatas);
CommandInvoker.instance.Invoke(command);
var command2 = new LoadLocalModelDataCommand(saveData, dataRepo, fbxAnchor, sharedMaterial);
CommandInvoker.instance.Invoke(command2);
isLoadTaskComplete = true;
yield return null;
}
bool LoadSaveData(SaveData saveData, int index)
{
var modelData = saveData.modelDatas[index];
string assetName = modelData.attributes.FirstOrDefault(x => x[0].Equals("assetName"))?[1];
if (dataRepo.TryGetDataFromName(assetName, out var p))
return false;
string folderName = modelData.attributes.FirstOrDefault(x => x[0].Equals("folderName"))?[1];
string createDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("createDate"))?[1];
string lastRevisionDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("lastRevisionDate"))?[1];
string uploadDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("uploadDate"))?[1];
string creator = modelData.attributes.FirstOrDefault(x => x[0].Equals("creator"))?[1];
string manager = modelData.attributes.FirstOrDefault(x => x[0].Equals("manager"))?[1];
Texture2D thumbnail = new Texture2D(1, 1);
thumbnail.LoadImage(saveData.thumbnailDatas[index].data);
GameObject newObject = new GameObject(assetName);
newObject.transform.parent = transform;
CustomAssetData assetData = newObject.AddComponent<CustomAssetData>();
assetData.assetName = assetName;
assetData.folderName = folderName;
assetData.createDate = createDate;
assetData.LastRevisionDate = lastRevisionDate;
assetData.UploadDate = uploadDate;
assetData.Creator = creator;
assetData.Manager = manager;
assetData.loadedObject = modelData.LoadModelData(sharedMaterial);
assetData.thumbnail = thumbnail;
assetData.OnLoadComplete();
dataRepo.Add(assetData);
//listAssets.Add(assetData);
onLoadFbxFile?.Invoke(assetData.assetName, assetData.folderName, assetData);
return true;
}
}
}

View File

@@ -3,17 +3,17 @@ using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using XED.Asset;
using XED.Command;
using XED.DataStructures;
using XED.Interfaces;
using XED.Manage;
using XED.RuntimeGizmo;
using XED.RuntimeGizmo;
namespace XED.Util
{
public class RenderObjectHandler : MonoBehaviour, IModeController, IInputHandler
public class RenderObjectHandler : Manager, IModeController, IInputHandler
{
public ModePanel.ProgramMode mode => ModePanel.ProgramMode.ObjectLayout;
List<CustomAssetRenderObject> selectedRenderObjects = new List<CustomAssetRenderObject>();
@@ -22,33 +22,24 @@ namespace XED.Util
CustomAssetRenderObject prevSelectedObject;
RTGController rtgController;
ConvexHullCalculator convexHullCalculator = new ConvexHullCalculator();
UserInputManager userInputManager;
Vector3 clickBeginPos;
float clickLengthThreshold = 5.0f;
int uiLayer;
int selectIndex;
bool lockHandler = false;
public event System.Action<Vector3> onDragBegin;
public event System.Action<Vector3> onDragEnd;
public event System.Action onDragForceEnd;
public UnityEvent<List<CustomAssetRenderObject>> onSelectObject;
public UnityEvent<List<CustomAssetRenderObject>> onRemoveObject;
public UnityEvent<List<CustomAssetRenderObject>> onCopyObject;
public UnityEvent<List<CustomAssetRenderObject>> onOrderByHierachy;
public event System.Action onDeselectAll;
public event System.Action<List<GameObject>> onTransformChanged;
void Awake()
public override void Init()
{
myHandler = GetInputHandler();
}
private void Start()
{
rtgController = new RTGController();
rtgController.onTransformBegin = OnTransformBegin;
rtgController.onTransformChanged = OnTransformChangedFromRTG;
uiLayer = LayerMask.NameToLayer("UI");
//var inputManager = FindSingle<UserInputManager>();
userInputManager = GameObject.FindAnyObjectByType<UserInputManager>();
var statusPanel = GameObject.FindFirstObjectByType<ModePanel>();
statusPanel.AddController(this);
selectIndex = 0;
}
@@ -66,7 +57,7 @@ namespace XED.Util
{
return;
}
onDragBegin?.Invoke(clickBeginPos);
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.OnBeginDrag(clickBeginPos);
}
private void OnMousePointerUp()
{
@@ -86,14 +77,14 @@ namespace XED.Util
EventSystem.current.RaycastAll(pointerData, raycastResults);
if (raycastResults.Any(x => x.gameObject.layer == uiLayer))
{
onDragForceEnd?.Invoke();
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.ForceEndDrag();
return;
}
//포인터 업 위치가 포인터 다운 위치에서 크게 벗어났을 경우는 클릭을 무시한다.
if ((clickBeginPos - Input.mousePosition).magnitude > clickLengthThreshold)
{
DeselectAll();
onDragEnd?.Invoke(Input.mousePosition);
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.OnEndDrag(Input.mousePosition);
return;
}
List<CustomAssetRenderObject> raycastedTarget = new List<CustomAssetRenderObject>();
@@ -149,7 +140,8 @@ namespace XED.Util
ResetRTG();
DeselectAll();
}
onDragForceEnd?.Invoke();
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.ForceEndDrag();
}
public void DeselectAll()
{
@@ -158,13 +150,11 @@ namespace XED.Util
return;
}
RemoveAllSelections();
onDeselectAll?.Invoke();
}
public void RemoveAll(List<ConnectedAsset> removeList)
{
CompletelyRemoveAllSelections(removeList);
onDeselectAll?.Invoke();
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
canvas_Popup.panel_objectinfo.ResetObjectInfo();
ManagerHub.instance.Get<CustomAssetConnector>().OnDeselectAll();
}
public void AddSelection(CustomAssetRenderObject item)
@@ -207,7 +197,7 @@ namespace XED.Util
{
for (int i = 0; i < removeList.Count; i++)
{
Destroy(removeList[i].renderObject.gameObject);
UnityEngine.GameObject.Destroy(removeList[i].renderObject.gameObject);
}
selectedRenderObjects.Clear();
selectedGameObjects.Clear();
@@ -221,24 +211,28 @@ namespace XED.Util
}
private void OnSelect()
{
onSelectObject?.Invoke(selectedRenderObjects);
ManagerHub.instance.Get<CustomAssetConnector>().assetEventHandler.OnSelectObjectFromObjectHandler(selectedRenderObjects);
rtgController.SetGizmoTargetObjects(selectedGameObjects);
}
public void ResetRTG()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.None);
var command = new ResetGizmoCommand(rtgController);
CommandInvoker.instance.Invoke(command);
}
public void SetRTGMove()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.Move);
var command = new ActivateMoveGizmoCommand(rtgController);
CommandInvoker.instance.Invoke(command);
}
public void SetRTGScale()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.Scale);
var command = new ActivateScaleGizmoCommand(rtgController);
CommandInvoker.instance.Invoke(command);
}
public void SetRTGRotate()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.Rotate);
var command = new ActivateRotateGizmoCommand(rtgController);
CommandInvoker.instance.Invoke(command);
}
public void OnTransformBegin()
{
@@ -247,8 +241,8 @@ namespace XED.Util
public void OnTransformChangedFromRTG(List<GameObject> transformObjects)
{
OnTransformChanged(transformObjects);
onTransformChanged?.Invoke(selectedGameObjects);
onDragForceEnd?.Invoke();
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.OnTransformChanged(transformObjects);
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.ForceEndDrag();
}
public void OnTransformChanged(List<GameObject> transformObjects)
{
@@ -264,14 +258,15 @@ namespace XED.Util
public void RemoveItem()
{
if (selectedRenderObjects.Count == 0) return;
onRemoveObject?.Invoke(selectedRenderObjects);
ManagerHub.instance.Get<CustomAssetConnector>().OnRemoveObject(selectedRenderObjects);
}
public void CopyItem()
{
if (selectedRenderObjects.Count == 0)
return;
onCopyObject?.Invoke(selectedRenderObjects);
ManagerHub.instance.Get<CustomAssetConnector>().OnCopyObject(selectedRenderObjects);
}
public void SaveItemsToCopy()
{
@@ -280,8 +275,9 @@ namespace XED.Util
}
public void CopySavedItems()
{
if (copyRenderObjects.Count == 0) return;
onCopyObject?.Invoke(copyRenderObjects);
if (copyRenderObjects.Count == 0)
return;
ManagerHub.instance.Get<CustomAssetConnector>().OnCopyObject(copyRenderObjects);
}
public void ResetGizmoTargetObjects()
{
@@ -293,7 +289,7 @@ namespace XED.Util
{
return;
}
onOrderByHierachy?.Invoke(selectedRenderObjects);
ManagerHub.instance.Get<CustomAssetConnector>().OrderByHierarchy(selectedRenderObjects);
List<CustomAssetRenderObject> objectsToAlign = new List<CustomAssetRenderObject>(selectedRenderObjects);
List<Vector3> originalPos = objectsToAlign.Select(x => x.transform.position).ToList();
@@ -311,7 +307,7 @@ namespace XED.Util
ActionCommand command = new ActionCommand(
() => Align(objectsToAlign, primary, primaryDir, secondaryDir),
() => UndoAlign(objectsToAlign, originalPos));
CommandManager.I.ExecuteCommand(command);
CommandInvoker.instance.Invoke(command);
}
@@ -335,7 +331,8 @@ namespace XED.Util
renderObject.transform.position = referencePoint + primaryDir * countP + secondaryDir * countS;
renderObject.onTransformChanged?.Invoke();
}
onTransformChanged?.Invoke(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.OnTransformChanged(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
}
private void UndoAlign(List<CustomAssetRenderObject> objectsToAlign, List<Vector3> originalPos)
@@ -346,7 +343,7 @@ namespace XED.Util
renderObject.transform.position = originalPos[i];
renderObject.onTransformChanged?.Invoke();
}
onTransformChanged?.Invoke(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.OnTransformChanged(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
}
public void VertexSnap()
{
@@ -419,7 +416,7 @@ namespace XED.Util
{
fromObject.transform.position -= dir[0];
});
CommandManager.I.ExecuteCommand(command);
CommandInvoker.instance.Invoke(command);
}
}
}
@@ -428,12 +425,12 @@ namespace XED.Util
public void StatusEnterEvent()
{
FindSingle<UserInputManager>().SetHandler(myHandler);
userInputManager.SetHandler(myHandler);
}
public void StatusExitEvent()
{
FindSingle<UserInputManager>().RemoveHandler(myHandler);
userInputManager .RemoveHandler(myHandler);
}
public InputHandler GetInputHandler()

View File

@@ -1,6 +1,7 @@
fileFormatVersion: 2
guid: 2c4ff86506de88747baaf66d9d637c5b
PrefabImporter:
guid: 553a24c445d45734e93db3694688a065
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:

View File

@@ -0,0 +1,35 @@
using System.IO;
using UnityEngine;
using XED.Command;
namespace XED
{
public class MoveToTargetCommand : IIrreversibleCommand
{
private Transform target;
private Vector3 viewAngle;
private float cameraDistance;
public MoveToTargetCommand(Transform target, Vector3 viewAngle, float cameraDistance)
{
this.target = target;
this.viewAngle = viewAngle;
this.cameraDistance = cameraDistance;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
Camera.main.transform.rotation = Quaternion.Euler(viewAngle);
Camera.main.transform.position = target.position;
Camera.main.transform.position += -Camera.main.transform.forward * cameraDistance;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: af71595b728196a4391585fa1be345c8

View File

@@ -2,6 +2,7 @@ using System.Collections.Generic;
using UnityEngine;
using XED.Asset;
using XED.HierarchyTree;
using XED.Manage;
using XED.Util;
namespace XED.Command
@@ -45,8 +46,10 @@ namespace XED.Command
copyAsset.renderObject.transform.position = copySource.renderObject.transform.position;
copyAsset.renderObject.transform.rotation = copySource.renderObject.transform.rotation;
copyAsset.renderObject.transform.localScale = copySource.renderObject.transform.localScale;
copyAsset.renderObject.OnOverlabBegin += connector.interferedObjectManager.AddInterferedPair;
copyAsset.renderObject.OnOverlabEnd += connector.interferedObjectManager.RemoveInterferedPair;
List<Transform> lastParent = new List<Transform>();
List <Transform> lastParent = new List<Transform>();
for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++)
{
lastParent.Add(copyAsset.renderObject.transform);
@@ -64,12 +67,15 @@ namespace XED.Command
childAsset.renderObject = copyChildObject.GetComponent<CustomAssetRenderObject>();
childAsset.renderObject.getBounds = childAsset.assetData.GetCombinedBoundary;
childAsset.renderObject.onTransformChanged = childAsset.assetData.OnTransformDataChanged;
childAsset.renderObject.instantiateObject = copySource.assetData.InstantiateLoadedObject;
childAsset.renderObject.instantiateObject = childSource.assetData.InstantiateLoadedObject;
childAsset.renderObject.CreateRenderObject();
childAsset.renderObject.transform.position = childSource.renderObject.transform.position;
childAsset.renderObject.transform.rotation = childSource.renderObject.transform.rotation;
childAsset.renderObject.transform.localScale = childSource.renderObject.transform.localScale;
childAsset.renderObject.transform.parent = lastParent[childAsset.hierarchyItem.layerNum - 1];
childAsset.renderObject.OnOverlabBegin += connector.interferedObjectManager.AddInterferedPair;
childAsset.renderObject.OnOverlabEnd += connector.interferedObjectManager.RemoveInterferedPair;
if (lastParent.Count <= childAsset.hierarchyItem.layerNum)
{
lastParent.Add(childAsset.renderObject.transform);
@@ -116,7 +122,10 @@ namespace XED.Command
searchAsset.renderObject.gameObject.SetActive(false);
}
}
connector.onRemoveObjects?.Invoke();
ManagerHub.instance.Get<RenderObjectHandler>().DeselectAll();
var canvas = EventConnector.instance.GetCanvas<Canvas_Popup>();
canvas.panel_objectinfo.ResetObjectInfo();
//connector.onRemoveObjects?.Invoke();
connector.componentScrollView.DeselectAll();
}
}

View File

@@ -1,6 +1,7 @@
fileFormatVersion: 2
guid: 2d670e3279ac3324bba323ab3ed2bef9
PrefabImporter:
guid: 0344068c97e98f2499c3ef328e804d1c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:

View File

@@ -0,0 +1,94 @@
using System.Collections;
using System.Linq;
using UnityEngine;
using XED.Asset;
using XED.Manage;
using XED.Repositories;
using XED.Util;
namespace XED.Command
{
public class LoadLocalModelDataCommand : IIrreversibleCommand
{
private SaveData saveData;
private CustomAssetDataRepository dataRepo;
private Transform fbxAnchor;
private SharedMaterial sharedMaterial;
float loadTime = 0f;
public LoadLocalModelDataCommand(SaveData saveData, CustomAssetDataRepository dataRepo, Transform fbxAnchor, SharedMaterial sharedMaterial)
{
this.saveData = saveData;
this.dataRepo = dataRepo;
this.fbxAnchor = fbxAnchor;
this.sharedMaterial = sharedMaterial;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
for (int i = 0; i < saveData.modelDatas.Length; i++)
{
CoroutineRunner.instance.StartCoroutine(LoadModelData(i));
}
}
IEnumerator LoadModelData(int index)
{
if (!LoadSaveData(saveData, index))
yield break;
loadTime += Time.deltaTime;
if (loadTime > 1f / 30f)
{
loadTime = 0f;
yield return null;
}
}
bool LoadSaveData(SaveData saveData, int index)
{
var modelData = saveData.modelDatas[index];
string assetName = modelData.attributes.FirstOrDefault(x => x[0].Equals("assetName"))?[1];
if (dataRepo.TryGetDataFromName(assetName, out var p))
return false;
string folderName = modelData.attributes.FirstOrDefault(x => x[0].Equals("folderName"))?[1];
string createDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("createDate"))?[1];
string lastRevisionDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("lastRevisionDate"))?[1];
string uploadDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("uploadDate"))?[1];
string creator = modelData.attributes.FirstOrDefault(x => x[0].Equals("creator"))?[1];
string manager = modelData.attributes.FirstOrDefault(x => x[0].Equals("manager"))?[1];
Texture2D thumbnail = new Texture2D(1, 1);
thumbnail.LoadImage(saveData.thumbnailDatas[index].data);
GameObject newObject = new GameObject(assetName);
newObject.transform.parent = fbxAnchor;
CustomAssetData assetData = newObject.AddComponent<CustomAssetData>();
assetData.assetName = assetName;
assetData.folderName = folderName;
assetData.createDate = createDate;
assetData.LastRevisionDate = lastRevisionDate;
assetData.UploadDate = uploadDate;
assetData.Creator = creator;
assetData.Manager = manager;
assetData.loadedObject = modelData.LoadModelData(sharedMaterial);
assetData.thumbnail = thumbnail;
assetData.OnLoadComplete();
dataRepo.Add(assetData);
//listAssets.Add(assetData);
ManagerHub.instance.Get<CustomAssetConnector>().assetDataHandler.OnLoadFbxFile(assetData.assetName, assetData.folderName, assetData);
return true;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 34c7091e151c4654f80f16448c43f36d

View File

@@ -0,0 +1,50 @@
using System.Collections;
using UnityEngine;
using XED.Manage;
namespace XED.Command
{
public class LoadLocalTextureDataCommand : IIrreversibleCommand
{
private SharedMaterial sharedMaterial;
private TextureData[] textureData;
float loadTime = 0f;
public LoadLocalTextureDataCommand(SharedMaterial sharedMaterial, TextureData[] textureData)
{
this.sharedMaterial = sharedMaterial;
this.textureData = textureData;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
foreach (var tex in textureData)
{
CoroutineRunner.instance.StartCoroutine(LoadTextureData(tex));
}
}
IEnumerator LoadTextureData(TextureData texData)
{
sharedMaterial.AddTextureData(texData);
loadTime += Time.deltaTime;
if (loadTime > 1f / 30f)
{
loadTime = 0f;
yield return null;
}
// yield return null;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 243104ea078b0364e811f6803ef3b3b2

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 58c7bd081b97acf42a09b5b4ef1d3fad
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,26 @@
using XED.RuntimeGizmo;
namespace XED.Command
{
public class ActivateMoveGizmoCommand : IIrreversibleCommand
{
private RTGController rtgController;
public ActivateMoveGizmoCommand(RTGController rtgController)
{
this.rtgController = rtgController;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.Move);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 96806282dbad1954fb33e13354823e92

View File

@@ -0,0 +1,26 @@
using XED.RuntimeGizmo;
namespace XED.Command
{
public class ActivateRotateGizmoCommand : IIrreversibleCommand
{
private RTGController rtgController;
public ActivateRotateGizmoCommand(RTGController rtgController)
{
this.rtgController = rtgController;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.Rotate);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b70e099d374f64847834ff12c191bd91

View File

@@ -0,0 +1,26 @@
using XED.RuntimeGizmo;
namespace XED.Command
{
public class ActivateScaleGizmoCommand : IIrreversibleCommand
{
private RTGController rtgController;
public ActivateScaleGizmoCommand(RTGController rtgController)
{
this.rtgController = rtgController;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.Scale);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8959657a6330abd448297620191164d5

View File

@@ -0,0 +1,26 @@
using XED.RuntimeGizmo;
namespace XED.Command
{
public class ResetGizmoCommand : IIrreversibleCommand
{
private RTGController rtgController;
public ResetGizmoCommand(RTGController rtgController)
{
this.rtgController = rtgController;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
rtgController.SetWorkGizmoId(RTGController.GizmoId.None);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6d2c3f6f335592d4e888a96dbd9903d3

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cee17c4be8819da47a5eb95110ec3455
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,62 @@
using System.Collections.Generic;
using System.Linq;
using XED.Asset;
using XED.HierarchyTree;
using XED.Util;
namespace XED.Command
{
public class LoadProjectCommand : IIrreversibleCommand
{
private List<AssetData> assets;
private CustomAssetConnector connector;
Dictionary<int, HierarchyItem> itemDict = new Dictionary<int, HierarchyItem>();
public LoadProjectCommand(List<AssetData> assets, CustomAssetConnector connector)
{
this.assets = assets;
this.connector = connector;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
foreach (AssetData asset in assets)
{
LoadAsset(asset);
}
foreach (AssetData asset in assets)
{
RestoreHierarchy(asset);
}
}
private void LoadAsset(AssetData asset)
{
connector.OnLoadAsset(asset);
itemDict.Add(asset.id, connector.connectedAssets.Last().hierarchyItem);
}
private void RestoreHierarchy(AssetData asset)
{
foreach (int id in asset.children)
{
HierarchyItem parent = itemDict[asset.id];
HierarchyItem child = itemDict[id];
if (parent == null || child == null)
continue;
connector.OnRestoreHierarchy(parent, child);
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 58dff3fed88a2eb4fab1bc8116f0c170

View File

@@ -0,0 +1,27 @@
using XED.Asset;
namespace XED.Command
{
public class NewProjectCommand : IIrreversibleCommand
{
CustomAssetConnector connector;
public NewProjectCommand(CustomAssetConnector connector)
{
this.connector = connector;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
connector.ClearObjects();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 16f7564790f59584283a83911585ada8

View File

@@ -0,0 +1,36 @@
using Newtonsoft.Json;
using System.IO;
using XED.Command;
using XED.Util;
namespace XED
{
public class SaveProjectCommand : IIrreversibleCommand
{
private string projectPath;
private ProjectData projectData;
public SaveProjectCommand(string projectPath, ProjectData projectData)
{
this.projectPath = projectPath;
this.projectData = projectData;
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
string json = JsonConvert.SerializeObject(projectData);
FileStream fs = new FileStream(projectPath, FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.Unicode);
writer.Write(json);
writer.Close();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 91703b89f5f43354d9d896c2f4b8dcde

View File

@@ -1,6 +1,8 @@
using System.Collections.Generic;
using XED.Asset;
using XED.HierarchyTree;
using XED.Manage;
using XED.Util;
namespace XED.Command
{
@@ -10,7 +12,11 @@ namespace XED.Command
private List<int> siblingIndex;
private CustomAssetConnector connector;
public RemoveObjectCommand(List<ConnectedAsset> removeList, List<int> siblingIndex, CustomAssetConnector connector)
public RemoveObjectCommand(
List<ConnectedAsset> removeList,
List<int> siblingIndex,
CustomAssetConnector connector
)
{
this.removeList = removeList;
this.siblingIndex = siblingIndex;
@@ -40,7 +46,11 @@ namespace XED.Command
searchAsset.renderObject.gameObject.SetActive(false);
}
}
connector.onRemoveObjects?.Invoke();
//connector.onRemoveObjects?.Invoke();
ManagerHub.instance.Get<RenderObjectHandler>().DeselectAll();
var canvas = EventConnector.instance.GetCanvas<Canvas_Popup>();
canvas.panel_objectinfo.ResetObjectInfo();
connector.componentScrollView.DeselectAll();
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: eefa95bccca3b324db3ce4c6b1d4ee44
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using XED.Core;
using XED.Interfaces;
using XED.Manage;
namespace XED.Command
{
public class CommandInvoker: IInputHandler
{
public static CommandInvoker instance => SystemMain.instance.commandInvoker;
Stack<ICommand> commandStack = new();
Stack<IReversibleCommand> undoableStack = new ();
public void Invoke(IReversibleCommand command)
{
command.Execute();
commandStack.Push(command);
undoableStack.Push(command);
}
public void Invoke(IIrreversibleCommand command)
{
command.Execute();
commandStack.Push(command);
}
public void Undo()
{
if (undoableStack.Count == 0)
{
return;
}
var command = undoableStack.Pop();
command.Undo();
}
public void Redo()
{
}
public InputHandler GetInputHandler()
{
var shortcutTable = new Dictionary<KeyCode, Dictionary<KeyCode, Action>>();
shortcutTable.Add(KeyCode.LeftControl, new Dictionary<KeyCode, Action>());
shortcutTable[KeyCode.LeftControl].Add(KeyCode.Z, Undo);
shortcutTable[KeyCode.LeftControl].Add(KeyCode.X, Redo);
var handler = new InputHandler(null, null, null, shortcutTable);
return handler;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 460b7535dba2a4347a78cc24adcdee96

View File

@@ -0,0 +1,21 @@
using XED.Asset;
using XED.Command;
using XED.Manage;
namespace XED.Core
{
public class SystemMain : UnitySingleton<SystemMain>
{
public CommandInvoker commandInvoker
{
get;
private set;
} = new CommandInvoker();
private void Awake()
{
ManagerHub.instance.Init();
EventConnector.instance.Init();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2778cc56cc78c8a46846112e3aad69d2

View File

@@ -5,7 +5,7 @@ namespace XED.Core
{
public abstract class UnitySingleton<T> : UnityEngine.MonoBehaviour where T : UnitySingleton<T>
{
private static T instance;
private static T _instance;
private static object _lock = new object();
protected static bool applicationIsQuitting = false;
public static bool IsApplicationQuitting
@@ -16,7 +16,7 @@ namespace XED.Core
}
}
public static T I
public static T instance
{
get
{
@@ -30,19 +30,19 @@ namespace XED.Core
lock (_lock)
{
if (instance == null)
if (_instance == null)
{
instance = FindFirstObjectByType(typeof(T)) as T;
if (instance == null)
_instance = FindFirstObjectByType(typeof(T)) as T;
if (_instance == null)
{
GameObject singleton = new GameObject(typeof(T).Name);
instance = singleton.AddComponent<T>();
instance.Init();
instance.name = typeof(T).ToString();
DontDestroyOnLoad(instance.gameObject);
_instance = singleton.AddComponent<T>();
//_instance.Init();
_instance.name = typeof(T).ToString();
DontDestroyOnLoad(_instance.gameObject);
}
}
return instance;
return _instance;
}
}
}
@@ -51,12 +51,12 @@ namespace XED.Core
{
lock (_lock)
{
if (instance == null)
if (_instance == null)
{
instance = this as T;
_instance = this as T;
}
else if (instance != this)
else if (_instance != this)
{
Debug.LogError(this.name + " Destroy !!!");
Destroy(this.gameObject);
@@ -65,10 +65,6 @@ namespace XED.Core
}
}
protected virtual void Init()
{
}
protected virtual void OnApplicationQuit()
{
#if UNITY_EDITOR
@@ -77,29 +73,4 @@ namespace XED.Core
#endif
}
}
public abstract class ISingleton<T> where T : class, new()
{
static volatile T instance = default(T);
static readonly object padlock = new object();
protected ISingleton()
{
}
public static T I
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new T();
(instance as ISingleton<T>).Init();
}
return instance;
}
}
}
public virtual void Init() { }
}
}

View File

@@ -0,0 +1,34 @@
using UnityEngine;
namespace XED
{
public static class Enums
{
public enum NodeSelectMode
{
Idle,
Draw,
SelectRunNode,
Select,
Setting
}
public enum VirtualPoint
{
LeftTop,
LeftBottom,
RightTop,
RightBottom,
LeftCenter,
RightCenter,
}
public enum BuilderState
{
None,
PointModfiy,
PointRemove,
Drawing
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ca60beab57bc28c4ba8d59f3593937b2

View File

@@ -5,9 +5,9 @@ using TriLibCore.Dae.Schema;
using UnityEngine;
using XRLib;
namespace XED
namespace XED.Manage
{
public class MeshCreator : MonoBehaviour,ISingle
public class MeshCreator : Manager
{
Vector3[] vertices;
int[] triangles;
@@ -15,6 +15,11 @@ namespace XED
private MeshFilter meshfilter;
//private Vector3 offset = Vector3.zero;
public override void Init()
{
}
public void MeshDeformer<T>(HashSet<T> type)
{
if(type is HashSet<Floor>)

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Security.Cryptography;
using UnityEngine;
using XRLib;
using static XED.WallBuilder;
using static XED.Enums;
using Color = UnityEngine.Color;
namespace XED

View File

@@ -9,28 +9,13 @@ using XRLib;
using XED.Interfaces;
using XED.Manage;
using XED.RuntimeGizmo;
using Object = UnityEngine.Object;
using static XED.Enums;
namespace XED
namespace XED.Manage
{
public class WallBuilder : MonoBehaviour, ISingle, IInputHandler, IModeController
public class WallBuilder : Manager, IInputHandler, IModeController
{
public enum VirtualPoint
{
LeftTop,
LeftBottom,
RightTop,
RightBottom,
LeftCenter,
RightCenter,
}
public enum BuilderState
{
None,
PointModfiy,
PointRemove,
Drawing
}
public float thickness;
private GameObject renderParent;
private Material lineMat;
@@ -69,6 +54,9 @@ namespace XED
internal event Action onDrawStart;
private MeshCreator meshCreator;
private UserInputManager userInputManager;
private Raycaster raycaster;
public class Group
{
public List<LinePoint> points = new();
@@ -81,7 +69,8 @@ namespace XED
wallLines.Add(wallLine);
}
}
public override void AfterAwake()
public override void Init()
{
renderParent = new GameObject("LineRenderParent");
lineMat = Resources.Load<Material>("Materials/Mat_LineRender");
@@ -90,7 +79,9 @@ namespace XED
prf_Wall = Resources.Load<Wall>("Prefabs/PRF_Wall");
prf_WallGroup = Resources.Load<WallGroup>("Prefabs/PRF_WallGroup");
meshCreator = FindSingle<MeshCreator>();
meshCreator = ManagerHub.instance.Get<MeshCreator>();
userInputManager = GameObject.FindAnyObjectByType<UserInputManager>();
raycaster = GameObject.FindAnyObjectByType<Raycaster>();
handler = GetInputHandler();
}
@@ -146,14 +137,14 @@ namespace XED
{
//ToDo..연결된 포인트가 없는 Point찾아서 제거
DisconnectLine(removeWalls[i]);
Destroy(removeWalls[i].gameObject);
Object.Destroy(removeWalls[i].gameObject);
}
Remove(lp);
}
public LinePoint CreateLinePoint(Vector3 pos)
{
var result = Instantiate(prf_LinePoint);
var result = Object.Instantiate(prf_LinePoint);
result.transform.SetParent(renderParent.transform);
result.name = cc++.ToString();
result.transform.position = pos;
@@ -175,7 +166,7 @@ namespace XED
private Wall CreateWall(LinePoint lcp, LinePoint rcp)
{
var result = Instantiate(prf_Wall);
var result = Object.Instantiate(prf_Wall);
result.Generate(lcp, rcp, lineMat, thickness);
result.name = "WallLine" + index++;
walls.Add(result);
@@ -339,7 +330,7 @@ namespace XED
{
linePoints.Remove(lp);
pointToWall.Remove(lp);
Destroy(lp.gameObject);
Object.Destroy(lp.gameObject);
}
void BuildWall(Vector3 endPos)
@@ -426,7 +417,7 @@ namespace XED
pointToWall.Remove(rcp);
}
wall.Deselect();
Destroy(wall.gameObject);
Object.Destroy(wall.gameObject);
}
Wall BuildContinuesWall(Vector3 p)
@@ -684,7 +675,7 @@ namespace XED
private WallGroup CreateWallGroup()
{
var group = Instantiate(prf_WallGroup);
var group = Object.Instantiate(prf_WallGroup);
groupTable.Add(group, new());
wallgroups.Add(group);
@@ -996,21 +987,19 @@ namespace XED
public void StatusEnterEvent()
{
var raycaster = FindSingle<Raycaster>();
raycaster.AddEvent(Raycaster.EventType.FirstStay, typeof (Map), OnStayMap);
raycaster.AddEvent(Raycaster.EventType.FirstClick, typeof(Map), OnClickMap);
raycaster.AddEvent(Raycaster.EventType.FirstClick, typeof(LinePoint), OnClickLinePoint);
raycaster.AddEvent(Raycaster.EventType.FirstClick, typeof(LinePoint), OnClickLinePoint);
FindSingle<UserInputManager>().SetHandler(handler);
userInputManager.SetHandler(handler);
}
public void StatusExitEvent()
{
var raycaster = FindSingle<Raycaster>();
raycaster.RemoveEvent(Raycaster.EventType.FirstStay, typeof(Map), OnStayMap);
raycaster.RemoveEvent(Raycaster.EventType.FirstClick, typeof(Map), OnClickMap);
raycaster.RemoveEvent(Raycaster.EventType.FirstClick, typeof(LinePoint), OnClickLinePoint);
FindSingle<UserInputManager>().RemoveHandler(handler);
userInputManager.RemoveHandler(handler);
}
void Pointing()
@@ -1026,7 +1015,7 @@ namespace XED
linePoints.Remove(handlePoint);
pointToWall.Remove(handlePoint);
handlePoint.Release();
Destroy(handlePoint.gameObject);
Object.Destroy(handlePoint.gameObject);
}
if (pilePoint != null)
@@ -1044,7 +1033,7 @@ namespace XED
{
walls.Remove(tempWall);
tempWall.Release();
Destroy(tempWall.gameObject);
Object.Destroy(tempWall.gameObject);
}
tempWall = null;

View File

@@ -1,16 +1,23 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using XED.VirtualFactory;
using XRLib;
namespace XED.VirtualFactory
namespace XED.Manage
{
public class AGVManager : MonoBehaviour, ISingle
public class AGVManager : Manager
{
public AGV prf_AGV;
public AGVSpec prf_Spec;
public HashSet<AGV> agvs = new();
public bool autoIndexing;
public override void Init()
{
}
public bool TryGetIdleAGV(out AGV result)
{
//Debug.Log($"Try Get Idle AGV");
@@ -30,7 +37,7 @@ namespace XED.VirtualFactory
public AGV CreateEmptyAGV()
{
var agv = Instantiate(prf_AGV);
var agv = UnityEngine.Object.Instantiate(prf_AGV);
agvs.Add(agv);
if (autoIndexing)

View File

@@ -1,10 +1,10 @@
using System.Collections.Generic;
using UnityEngine;
using XRLib;
using XED.VirtualFactory;
namespace XED.VirtualFactory
namespace XED.Manage
{
public class AGVNodeLinkManager : MonoBehaviour,ISingle
public class AGVNodeLinkManager : Manager
{
public HashSet<Pair<AGVNode>> linkedNode = new HashSet<Pair<AGVNode>>();
private Dictionary<Pair<AGVNode>, GameObject> lineObjects = new Dictionary<Pair<AGVNode>, GameObject>();
@@ -14,6 +14,11 @@ namespace XED.VirtualFactory
[SerializeField]
Material lineMat;
public override void Init()
{
}
public void AddLines(List<AGVNode> nodeList)
{
for (int i = 0; i < nodeList.Count; i++)
@@ -100,7 +105,7 @@ namespace XED.VirtualFactory
{
if (lineObjects.ContainsKey(pair))
{
Destroy(lineObjects[pair]);
Object.Destroy(lineObjects[pair]);
lineObjects.Remove(pair);
}
else

View File

@@ -1,27 +1,20 @@
using Newtonsoft.Json;
using Ookii.Dialogs;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using TriLibCore.SFB;
using UnityEngine;
using UnityEngine.EventSystems;
using XRLib;
using XED.Interfaces;
using XED.Manage;
using XED.VirtualFactory;
using XED.Asset;
using Object = UnityEngine.Object;
using static XED.Enums;
namespace XED.VirtualFactory
namespace XED.Manage
{
public enum NodeSelectMode
{
Idle,
Draw,
SelectRunNode,
Select,
Setting
}
public class AGVNodeManager : MonoBehaviour, ISingle, IModeController, IInputHandler
public class AGVNodeManager : Manager, IModeController, IInputHandler
{
[SerializeField]
GameObject nodePrefab;
@@ -50,14 +43,18 @@ namespace XED.VirtualFactory
List<AGVNode> selectedNodeSequence = new List<AGVNode>();
InputHandler myHandler;
NodeGizmoController nodeGizmoController;
UserInputManager userInputManager;
Raycaster raycaster;
public ModePanel.ProgramMode mode => ModePanel.ProgramMode.AGVPathDrawing;
public override void AfterStart()
public override void Init()
{
agvNodeMap = new AGVNodeMap();
myHandler = GetInputHandler();
nodeGizmoController = FindSingle<NodeGizmoController>();
nodeGizmoController = ManagerHub.instance.Get<NodeGizmoController>();
userInputManager = GameObject.FindAnyObjectByType<UserInputManager>();
raycaster = GameObject.FindAnyObjectByType<Raycaster>();
}
private void Update()
@@ -200,13 +197,13 @@ namespace XED.VirtualFactory
{
if (flag)
{
nodeTarget = Instantiate(markerPrefab);
nodeTarget = Object.Instantiate(markerPrefab);
}
else
{
if (nodeTarget)
{
Destroy(nodeTarget);
Object.Destroy(nodeTarget);
}
}
}
@@ -226,7 +223,7 @@ namespace XED.VirtualFactory
return;
}
GameObject go = Instantiate(nodePrefab);
GameObject go = Object.Instantiate(nodePrefab);
var objNode = go.GetComponent<AGVNode>();
nodeTable.Add(nodedata.id, objNode);
objNode.Initialize(nodedata);
@@ -257,7 +254,7 @@ namespace XED.VirtualFactory
DeselectNode();
if (nodeSelectMode == NodeSelectMode.Draw)
{
GameObject go = Instantiate(nodePrefab);
GameObject go = Object.Instantiate(nodePrefab);
go.transform.position = hit.point;
var objNode = go.GetComponent<AGVNode>();
int maxid = int.Parse(agvNodeMap.maxid);
@@ -281,7 +278,7 @@ namespace XED.VirtualFactory
{
return;
}
GameObject NewNode = Instantiate(nodePrefab, currentlySelectedNode.transform.position + Vector3.right, Quaternion.identity);
GameObject NewNode = Object.Instantiate(nodePrefab, currentlySelectedNode.transform.position + Vector3.right, Quaternion.identity);
AGVNode node = NewNode.GetComponent<AGVNode>();
int maxid = int.Parse(agvNodeMap.maxid);
maxid++;
@@ -322,7 +319,7 @@ namespace XED.VirtualFactory
n.linkedNodID.Remove(currentlySelectedNode.nodeClass.id);
}
Destroy(currentlySelectedNode.gameObject);
Object.Destroy(currentlySelectedNode.gameObject);
DeselectNode();
}
@@ -356,7 +353,7 @@ namespace XED.VirtualFactory
n.linkedNodID.Remove(node.nodeClass.id);
}
Destroy(node.gameObject);
Object.Destroy(node.gameObject);
DeselectNode();
}
@@ -404,8 +401,7 @@ namespace XED.VirtualFactory
public void StatusEnterEvent()
{
var raycaster = FindSingle<Raycaster>();
FindSingle<UserInputManager>().SetHandler(myHandler);
userInputManager.SetHandler(myHandler);
raycaster.AddEvent(Raycaster.EventType.FirstLeftClickOnly, typeof(AGVNode), OnClickAGVNode);
raycaster.AddEvent(Raycaster.EventType.Stay, typeof(Map), MoveDrawTarget);
raycaster.AddEvent(Raycaster.EventType.FirstLeftClickOnly, typeof(Map), ONClickGround);
@@ -413,8 +409,7 @@ namespace XED.VirtualFactory
public void StatusExitEvent()
{
var raycaster = FindSingle<Raycaster>();
FindSingle<UserInputManager>().RemoveHandler(myHandler);
userInputManager.RemoveHandler(myHandler);
raycaster.RemoveEvent(Raycaster.EventType.FirstLeftClickOnly, typeof(AGVNode), OnClickAGVNode);
raycaster.RemoveEvent(Raycaster.EventType.Stay, typeof(Map), MoveDrawTarget);
raycaster.RemoveEvent(Raycaster.EventType.FirstLeftClickOnly, typeof(Map), ONClickGround);
@@ -438,10 +433,10 @@ namespace XED.VirtualFactory
return handler;
}
protected override void OnDestroy()
{
//vistaOpenFileDialog.Dispose();
//saveFileDialog.Dispose();
}
//protected override void OnDestroy()
//{
// //vistaOpenFileDialog.Dispose();
// //saveFileDialog.Dispose();
//}
}
}

View File

@@ -4,6 +4,7 @@ using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
using static XED.Enums;
namespace XED.VirtualFactory
{

View File

@@ -1,19 +1,17 @@
using RTG;
using UnityEngine;
using XRLib;
namespace XED.VirtualFactory
namespace XED.Manage
{
public class NodeGizmoController : MonoBehaviour,ISingle
public class NodeGizmoController : Manager
{
public ObjectTransformGizmo moveGizmo;
public GameObject target;
// Start is called before the first frame update
void Awake()
public override void Init()
{
moveGizmo = RTGizmosEngine.Get.CreateObjectMoveGizmo();
moveGizmo.Gizmo.SetEnabled(false);
//moveGizmo = RTGizmosEngine.Get.CreateObjectMoveGizmo();
//moveGizmo.Gizmo.SetEnabled(false);
}
public void Attach(GameObject target)

View File

@@ -1,21 +1,23 @@
using UnityEngine;
using XRLib;
using XED.Command;
namespace XED
namespace XED.Manage
{
public class CameraManager : MonoBehaviour, ISingle
public class CameraManager : Manager
{
[SerializeField]
float objectViewDistance = 25f;
[SerializeField]
Vector3 objectViewRotation = new Vector3(45, 145, 0);
private float cameraDistance;
private Vector3 viewAngle;
public void MoveToTwinObjectPos(TwinObject twinObject)
public override void Init()
{
Camera.main.transform.rotation = Quaternion.Euler(objectViewRotation);
cameraDistance = 25f;
viewAngle = new Vector3(45, 145, 0);
}
Camera.main.transform.position = twinObject.transform.position;
Camera.main.transform.position += -Camera.main.transform.forward * objectViewDistance;
public void MoveToTwinObjectPos(TwinObject target)
{
var command = new MoveToTargetCommand(target.transform, viewAngle, cameraDistance);
CommandInvoker.instance.Invoke(command);
}
}
}

View File

@@ -0,0 +1,8 @@
using XRLib.UI;
namespace XED.Manage
{
public class CanvasEventHandler
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 30f7d996e8a681f4bba90651ceba8259

View File

@@ -1,69 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XED.Core;
using XED.Interfaces;
using XED.Command;
namespace XED.Manage
{
public class CommandManager : UnitySingleton<CommandManager>, IInputHandler
{
private Stack<IReversibleCommand> _undoStack = new ();
private Stack<IReversibleCommand> _redoStack = new ();
public void Clear()
{
_undoStack.Clear();
_redoStack.Clear();
}
public void AddCommand(ICommand command)
{
if (command is IReversibleCommand rc)
{
_undoStack.Push(rc);
_redoStack.Clear(); // Clear redo stack when a new action is made
}
}
public void ExecuteCommand(ICommand command)
{
if (command is IReversibleCommand rc)
{
AddCommand(rc);
}
command.Execute();
}
public void Undo()
{
if (_undoStack.Count > 0)
{
IReversibleCommand command = _undoStack.Pop();
command.Undo();
_redoStack.Push(command);
}
}
public void Redo()
{
if (_redoStack.Count > 0)
{
IReversibleCommand command = _redoStack.Pop();
command.Execute();
_undoStack.Push(command);
}
}
public InputHandler GetInputHandler()
{
var shortcutTable = new Dictionary<KeyCode, Dictionary<KeyCode, Action>>();
shortcutTable.Add(KeyCode.LeftControl, new Dictionary<KeyCode, Action>());
shortcutTable[KeyCode.LeftControl].Add(KeyCode.Z, Undo);
shortcutTable[KeyCode.LeftControl].Add(KeyCode.X, Redo);
var handler = new InputHandler(null, null, null, shortcutTable);
return handler;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 476f4f09271b1e141a85ed6cff471f5e

View File

@@ -0,0 +1,19 @@
using System.Collections;
using UnityEngine;
using XED.Core;
namespace XED
{
public class CoroutineRunner : UnitySingleton<SystemMain>
{
public new Coroutine StartCoroutine(IEnumerator coroutine)
{
return StartCoroutine(coroutine);
}
public new void StopCoroutine(Coroutine coroutine)
{
StopCoroutine(coroutine);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 55535e3d1a759a84e8d5bf93efe35f63

View File

@@ -1,12 +1,10 @@
using System;
using System.Drawing.Printing;
using UnityEngine;
using UnityEngine.UI;
using XED.UI;
using XRLib;
namespace XED
namespace XED.Manage
{
public class CursorManager : MonoBehaviour, ISingle
public class CursorManager : Manager
{
Texture2D cursor_Up;
Texture2D cursor_Down;
@@ -19,7 +17,7 @@ namespace XED
public UI_GUIWindow currentUseGUIWindow;
public override void AfterAwake()
public override void Init()
{
cursor_Up = Resources.Load<Texture2D>("Images/cursor_vertical");
cursor_Down = Resources.Load<Texture2D>("Images/cursor_vertical");
@@ -31,22 +29,7 @@ namespace XED
cursor_DownRight = Resources.Load<Texture2D>("Images/cursor_diag_a");
}
private void Update()
{
if (currentUseGUIWindow == null)
return;
if (currentUseGUIWindow.state == GUIState.Resize)
{
ChangeMouseCursor(currentUseGUIWindow.resizeDirection);
}
else
{
ChangeMouseCursor(currentUseGUIWindow.GetHandleDirection());
}
}
void ChangeMouseCursor(ResizeDirection dir)
public void ChangeMouseCursor(ResizeDirection dir)
{
switch (dir)
{

View File

@@ -1,148 +1,48 @@
using UnityEngine;
using XRLib;
using XED.UI;
using XRLib.UI;
using XED.Util;
using XED.Manage;
using XED.Asset;
using XED.VirtualFactory;
using System.Collections.Generic;
using System;
using XED.Core;
using XED.Command;
using XRLib.UI;
namespace XED.Manage
{
[DefaultExecutionOrder(int.MaxValue)]
public class EventConnector : MonoBehaviour, ISingle
public class EventConnector : UnitySingleton<EventConnector>
{
public override void AfterAwake()
HashSet<CanvasBase> canvases = new();
public T GetCanvas<T>() where T : CanvasBase
{
var rayCaster = FindSingle<Raycaster>();
var statusPanel = FindSingle<ModePanel>();
var canvas_static = FindSingle<Canvas_Static>();
var canvas_Popup = FindSingle<Canvas_Popup>();
var canvas_DragArea = FindSingle<Canvas_DragArea>();
var agvManager = FindSingle<AGVManager>();
var wallBuilder = FindSingle<WallBuilder>();
var agvNodeManager = FindSingle<AGVNodeManager>();
var userInputManager = FindSingle<UserInputManager>();
var agvNodeLinkManager = FindSingle<AGVNodeLinkManager>();
var nodeGizmoController = FindSingle<NodeGizmoController>();
var customAssetConnector = FindSingle<CustomAssetConnector>();
var renderObjectHandler = FindFirstObjectByType<RenderObjectHandler>();
var projectManager = FindSingle<ProjectManager>();
GameObject assetWindow = canvas_Popup.panel_assetlibrary.gameObject;
FBXFileManager saveLoadFBXData = customAssetConnector.saveLoadFBXData;
GameObject componentWindow = canvas_Popup.panel_hierarchy.gameObject;
GameObject interferedobjectlistWindow = canvas_Popup.panel_interferedobjectlist.gameObject;
UIConnection();
StatusConnection();
ManagerConnection();
DefaultActionSetting();
void ManagerConnection()
foreach (var canvas in canvases)
{
customAssetConnector.onRemoveObjects += renderObjectHandler.DeselectAll;
customAssetConnector.onSelectObjects += ((name, objects) => { canvas_Popup.panel_objectinfo.gameObject.SetActive(true); });
customAssetConnector.onSelectObjects += canvas_Popup.panel_objectinfo.SetObjectInfo;
customAssetConnector.onSelectObjects += canvas_Popup.panel_objectdistance.SelectObjectFromClick;
customAssetConnector.onRemoveObjects += canvas_Popup.panel_objectinfo.ResetObjectInfo;
customAssetConnector.onDeselectObjects += (() => { canvas_Popup.panel_objectinfo.gameObject.SetActive(false); });
renderObjectHandler.onDeselectAll += canvas_Popup.panel_objectinfo.ResetObjectInfo;
renderObjectHandler.onTransformChanged += canvas_Popup.panel_objectinfo.OnTransformChanged;
renderObjectHandler.onDragBegin += canvas_DragArea.panel_draghandler.OnBeginDrag;
renderObjectHandler.onDragEnd += canvas_DragArea.panel_draghandler.OnEndDrag;
renderObjectHandler.onDragForceEnd += canvas_DragArea.panel_draghandler.ForceEndDrag;
saveLoadFBXData.onBeginLoadAsset += (() => assetWindow.SetActive(true));
canvas_Popup.panel_objectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged;
agvNodeManager.onNodeConnectionAdded += agvNodeLinkManager.AddLine;
agvNodeManager.onNodeConnectionUpdated += agvNodeLinkManager.UpdateLine;
agvNodeManager.onNodeConnectionRemoved += agvNodeLinkManager.RemoveLine;
agvNodeManager.onNodeGizmoSelected += nodeGizmoController.Attach;
agvNodeManager.onNodeDeselected += nodeGizmoController.Detach;
agvNodeManager.onNodeSettingSelected += canvas_Popup.agvnodepopup.Popup;
agvNodeManager.onNodeDeselected += canvas_Popup.agvnodepopup.Popdown;
agvNodeManager.onNodeSequenceUpdated += canvas_Popup.agvnodemodepopup.UpdateTextSelectedAGVNode;
projectManager.onLoadAsset += customAssetConnector.OnLoadAsset;
projectManager.onRestoreHierarchy += customAssetConnector.OnRestoreHierarchy;
if (canvas is T)
{
return (T)canvas;
}
}
void UIConnection()
var a = FindAnyObjectByType<T>();
if (a == null)
return default;
else
{
//Panel_ShortCut
canvas_static.panel_shortcuts.onClickOpenAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf));
canvas_static.panel_shortcuts.onClickOpenComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf));
canvas_static.panel_shortcuts.onClickUndo += CommandManager.I.Undo;
canvas_static.panel_shortcuts.onClickRedo += CommandManager.I.Redo;
canvas_static.panel_shortcuts.onclickSave += projectManager.SaveProject;
//Panel Header
canvas_static.panel_topbar.onClickSaveProject += projectManager.SaveProject;
canvas_static.panel_topbar.onClickLoadProject += projectManager.LoadProject;
canvas_static.panel_topbar.onClickNewProject += projectManager.NewProject;
canvas_static.panel_topbar.onClickLoadAssets += saveLoadFBXData.LoadLocalFBXDirectory;
canvas_static.panel_topbar.onClickAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf));
canvas_static.panel_topbar.onClickComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf));
canvas_static.panel_topbar.onClickInterferedListWindow += (() => interferedobjectlistWindow.SetActive(!interferedobjectlistWindow.activeSelf));
//Panel Toolbar
canvas_static.panel_toolbar.onClickMove += renderObjectHandler.SetRTGMove;
canvas_static.panel_toolbar.onClickExpand += renderObjectHandler.SetRTGScale;
canvas_static.panel_toolbar.onClickRotate += renderObjectHandler.SetRTGRotate;
canvas_static.panel_toolbar.onClickRemove += renderObjectHandler.RemoveItem;
canvas_static.panel_toolbar.onClickCopy += renderObjectHandler.CopyItem;
canvas_Popup.agvnodepopup.Button_Plus.onClick.AddListener(agvNodeManager.AddNode);
canvas_Popup.agvnodepopup.Button_Minus.onClick.AddListener(agvNodeManager.RemoveNode);
canvas_Popup.agvnodepopup.DropDown_AGVNodeType.onValueChanged.AddListener(agvNodeManager.NodeTypeChange);
canvas_Popup.agvnodemodepopup.Button_AGVPlay.onClick.AddListener(agvNodeManager.ordertoAGV);
canvas_Popup.agvnodemodepopup.Button_AGVNodeLoad.onClick.AddListener(agvNodeManager.Load);
canvas_Popup.agvnodemodepopup.Button_AGVNodeSave.onClick.AddListener(agvNodeManager.Save);
canvas_Popup.agvnodemodepopup.onAGVNodeModeChanged += agvNodeManager.ChangeSelectMode;
canvas_Popup.panel_assetlibrary.scrollView.onSelect.AddListener(canvas_Popup.panel_assetproperties.Open);
canvas_Popup.panel_assetlibrary.scrollView.onHover.AddListener(canvas_Popup.panel_thumbnail.HandleOpenClose);
canvas_Popup.panel_assetlibrary.scrollRect.onExit.AddListener(canvas_Popup.panel_thumbnail.HandleOpenClose);
canvas_Popup.panel_assetproperties.onClickPreview += canvas_Popup.panel_predefinedtype.Open;
canvas_Popup.panel_assetproperties.onOpen += saveLoadFBXData.GetCustomAssetData;
canvas_Popup.panel_thumbnail.onOpen += saveLoadFBXData.GetCustomAssetData;
canvas_Popup.panel_thumbnail.onGetPosition += canvas_Popup.panel_assetlibrary.GetPositionX;
canvas_DragArea.panel_draghandler.onDragBoxSelect += customAssetConnector.assetEventHandler.OnDragBoxSelect;
canvases.Add(a);
return a;
}
}
void StatusConnection()
{
statusPanel.AddController(renderObjectHandler);
statusPanel.AddController(wallBuilder);
statusPanel.AddController(agvNodeManager);
statusPanel.AddModeEnterEvent(ModePanel.ProgramMode.AGVPathDrawing, canvas_Popup.agvnodemodepopup.Open);
statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
}
public void Init()
{
var userInputManager = GameObject.FindAnyObjectByType<UserInputManager>();
void DefaultActionSetting()
{
var commandHandler = CommandManager.I.GetInputHandler();
userInputManager.SetHandler(GetDefaultInputHandler());
userInputManager.SetHandler(commandHandler);
canvas_static.panel_modecontrol.onClickObjectMode += () => statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
//canvas_static.panel_modecontrol.onClickPropertyMode += () => statusPanel.SetMode(ModePanel.ProgramMode.None);
rayCaster.onUIHoverEvent += canvas_Popup.panel_tooltip.ActivateTooltip;
rayCaster.onUIHoverExitEvent += canvas_Popup.panel_tooltip.DeactivateTooltip;
//rayCaster.AddEvent(Raycaster.EventType.FirstRightClickOnly, typeof(TwinObject), canvas_Popup.panel_propertyviewer.Activate);
}
var commandHandler = CommandInvoker.instance.GetInputHandler();
userInputManager.SetHandler(GetDefaultInputHandler());
userInputManager.SetHandler(commandHandler);
}
InputHandler defaultInputHandler;

View File

@@ -1,61 +0,0 @@
using Newtonsoft.Json;
using System;
using System.IO;
using TriLibCore.SFB;
using UnityEngine;
using XRLib;
namespace XED.Manage
{
public class FileBrowserHandler : MonoBehaviour, ISingle
{
private string lastOpenFilePath;
public void SaveFileBrowser<T>(T saveData, string title, string defaultfileName = "", string directory = "", string extension = "json")
{
var data = StandaloneFileBrowser.SaveFilePanel(title, directory, defaultfileName, extension);
SaveFile(saveData, data.Name);
}
public void SaveFile<T>(T saveData, string path)
{
if (string.IsNullOrEmpty(path))
return;
string json = JsonConvert.SerializeObject(saveData);
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.Unicode);
lastOpenFilePath = path;
writer.Write(json);
writer.Close();
}
public T OpenFileBrowser<T>(string title, string directory = "", string extension = "json")
{
var data = StandaloneFileBrowser.OpenFilePanel(title, directory, extension, false);
if (data.Count >= 1 && !string.IsNullOrEmpty(data[0].Name))
{
string json = File.ReadAllText(data[0].Name);
try
{
lastOpenFilePath = data[0].Name;
return JsonConvert.DeserializeObject<T>(json);
}
catch (Exception ex)
{
Debug.Log(ex.Message);
}
}
else
{
Debug.Log("File not found!");
}
return default(T);
}
public string GetLastOpenFilePath()
{
return lastOpenFilePath;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: d3b7eb8ddaf6a2c4a94629439aa5654f

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using TriLibCore.Interfaces;
using UnityEngine;
using XED.Util;
using XRLib;
namespace XED.Manage
{
public class InterferedObjectManager : Manager
{
HashSet<(TwinObject, TwinObject)> interferedPairs = new();
public event Action<(TwinObject, TwinObject)> OnAddInterferedPair;
public event Action<(TwinObject, TwinObject)> OnRemoveInterferedPair;
public override void Init()
{
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
OnAddInterferedPair += canvas_Popup.panel_interferedobjectlist.CreateContentButton;
OnRemoveInterferedPair += canvas_Popup.panel_interferedobjectlist.RemoveContentButton;
}
public void AddInterferedPair(TwinObject obj1, TwinObject obj2)
{
var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1);
if (interferedPairs.Contains(pair))
return;
interferedPairs.Add(pair);
OnAddInterferedPair?.Invoke(pair);
}
public void RemoveInterferedPair(TwinObject obj1, TwinObject obj2)
{
var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1);
if (!interferedPairs.Contains(pair))
return;
interferedPairs.Remove(pair);
OnRemoveInterferedPair?.Invoke(pair);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0c728344b2bbf5746b1a41daa8ff51b0

View File

@@ -0,0 +1,7 @@
namespace XED.Manage
{
public abstract class Manager
{
public abstract void Init();
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 4add833e71d3a9e4b9ac21468cd4ed86

View File

@@ -0,0 +1,56 @@
using System.Collections.Generic;
using UnityEngine;
using XED.Asset;
using XED.Core;
using XED.Util;
namespace XED.Manage
{
public class ManagerHub : UnitySingleton<ManagerHub>
{
HashSet<Manager> managers = new HashSet<Manager>();
public void Init()
{
Join(new ProjectManager());
Join(new FBXFileManager());
Join(new CustomAssetConnector());
Join(new RenderObjectHandler());
Join(new InterferedObjectManager());
Join(new CursorManager());
Join(new CameraManager());
Join(new AGVNodeManager());
Join(new NodeGizmoController());
Join(new AGVNodeLinkManager());
Join(new AGVManager());
Join(new WallBuilder());
Join(new MeshCreator());
foreach(var m in managers)
{
m.Init();
}
}
void Join(Manager newManager)
{
if (!managers.Add(newManager))
{
Debug.LogError($"Manager {newManager} already exists in the hub.");
}
}
public T Get<T>() where T : Manager
{
var manager = default(T);
foreach (var m in managers)
{
if (m is T)
{
manager = m as T;
break;
}
}
return manager;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 729a2ee4bef76d34aa641f7254b67f3b

View File

@@ -0,0 +1,14 @@
namespace XED.Manage
{
public class PopupCanvasHandler : CanvasEventHandler
{
public PopupCanvasHandler(Canvas_Popup canvas_Popup)
{
canvas_Popup.panel_assetlibrary.scrollView.onSelect.AddListener(canvas_Popup.panel_assetproperties.Open);
canvas_Popup.panel_assetlibrary.scrollView.onHover.AddListener(canvas_Popup.panel_thumbnail.HandleOpenClose);
canvas_Popup.panel_assetlibrary.scrollRect.onExit.AddListener(canvas_Popup.panel_thumbnail.HandleOpenClose);
canvas_Popup.panel_assetproperties.onClickPreview += canvas_Popup.panel_predefinedtype.Open;
canvas_Popup.panel_thumbnail.onGetPosition += canvas_Popup.panel_assetlibrary.GetPositionX;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: aaa286d5a9a27024ca13ea7830339928

View File

@@ -3,9 +3,11 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using TriLibCore.Dae.Schema;
using TriLibCore.SFB;
using UnityEditor;
using XED.Asset;
using XED.Command;
using XED.HierarchyTree;
using XED.Service;
using XED.Util;
@@ -13,23 +15,24 @@ using XRLib;
namespace XED.Manage
{
public class ProjectManager : MonoBehaviour, ISingle
public class ProjectManager : Manager
{
private AssetDataService assetDataService;
private CustomAssetConnector connector;
private string curProjectPath;
private ProjectData curProjectData;
Dictionary<int, HierarchyItem> itemDict = new Dictionary<int, HierarchyItem>();
public event Action<AssetData> onLoadAsset;
public event Action<HierarchyItem, HierarchyItem> onRestoreHierarchy;
public event Action<List<CustomAssetRenderObject>> onRemoveAsset;
public override void AfterAwake()
public ProjectManager()
{
assetDataService = new AssetDataService();
connector = FindSingle<CustomAssetConnector>();
assetDataService = new AssetDataService();
connector = ManagerHub.instance.Get<CustomAssetConnector>();
}
public override void Init()
{
curProjectPath = string.Empty;
curProjectData = null;
}
public void SaveProject()
@@ -47,13 +50,14 @@ namespace XED.Manage
curProjectPath = path;
curProjectData = projectData;
SaveFile();
var command = new SaveProjectCommand(curProjectPath, curProjectData);
CommandInvoker.instance.Invoke(command);
}
public void LoadProject()
{
if (!FindAnyObjectByType<FBXFileManager>().isLoadTaskComplete)
return;
//if (!FindAnyObjectByType<FBXFileManager>().isLoadTaskComplete)
// return;
string path = GetOpenFilePath();
@@ -65,21 +69,23 @@ namespace XED.Manage
if (projectData == null)
return;
RemoveObject();
connector.ClearObjects();
Init();
LoadAssets(projectData.assetDatas);
RestoreHierarchys(projectData.assetDatas);
CommandManager.I.Clear();
curProjectPath = path;
curProjectData = projectData;
var command = new LoadProjectCommand(curProjectData.assetDatas, connector);
CommandInvoker.instance.Invoke(command);
}
public void NewProject()
{
RemoveObject();
Init();
var command = new NewProjectCommand(connector);
CommandInvoker.instance.Invoke(command);
}
private ProjectData CreateProjectData(string path, List<AssetData> assetDatas)
@@ -92,57 +98,6 @@ namespace XED.Manage
};
}
private void LoadAssets(List<AssetData> assets)
{
foreach (AssetData asset in assets)
{
LoadAsset(asset);
}
}
private void LoadAsset(AssetData asset)
{
onLoadAsset?.Invoke(asset);
itemDict.Add(asset.id, connector.connectedAssets.Last().hierarchyItem);
}
private void RestoreHierarchys(List<AssetData> assets)
{
foreach (AssetData asset in assets)
{
RestoreHierarchy(asset);
}
}
private void RestoreHierarchy(AssetData asset)
{
foreach (int id in asset.children)
{
HierarchyItem parent = itemDict[asset.id];
HierarchyItem child = itemDict[id];
if (parent == null || child == null)
continue;
onRestoreHierarchy?.Invoke(parent, child);
}
}
private void RemoveObject()
{
List<CustomAssetRenderObject> objects = connector.connectedAssets.Select(x => x.renderObject).ToList();
onRemoveAsset?.Invoke(objects);
}
private void Init()
{
curProjectPath = string.Empty;
curProjectData = null;
connector.connectedAssets.Clear();
CommandManager.I.Clear();
itemDict.Clear();
}
private string GetSaveFilePath()
{
var data = StandaloneFileBrowser.SaveFilePanel("SaveProject", "", "", "json");
@@ -155,19 +110,12 @@ namespace XED.Manage
return data.Count >= 1 ? data[0].Name : "";
}
private void SaveFile()
{
string json = JsonConvert.SerializeObject(curProjectData);
FileStream fs = new FileStream(curProjectPath, FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.Unicode);
writer.Write(json);
writer.Close();
}
private ProjectData GetFileData(string path)
{
string json = File.ReadAllText(path);
return JsonConvert.DeserializeObject<ProjectData>(json);
}
}
}

View File

@@ -1,142 +0,0 @@
using MessagePack;
using System.Collections.Generic;
using System.IO;
namespace XED
{
[MessagePackObject]
public class Position
{
[Key("PostionX")]
public float x;
[Key("PostionY")]
public float y;
[Key("PostionZ")]
public float z;
}
[MessagePackObject]
public class Rotation
{
[Key("RotationX")]
public float x;
[Key("RotationY")]
public float y;
[Key("RotationZ")]
public float z;
}
[MessagePackObject]
public class TwinObjectData
{
[Key("ObjectInfors")]
public List<ObjectInfor> objectInfors;
[Key("WallInfors")]
public List<WallInfor> wallInfors;
}
[MessagePackObject]
public class ObjectInfor
{
[Key("Position")]
public Position position { get; set; }
[Key("Rotaion")]
public Rotation rotation { get; set; }
[Key("AssetType")]
public AssetLabel assetLabel { get; set; }
[Key("ObjectName")]
public string address;
}
[MessagePackObject]
public class WallInfor
{
[Key("LinePoints")]
public Position[] points;
}
public class SaveLoadManager
{
public void SaveData(HashSet<TwinObject> twinObjects, string filePath)
{
var twinData = new TwinObjectData();
var facilitys = new List<ObjectInfor>();
var walls = new List<WallInfor>();
foreach (TwinObject twinObject in twinObjects)
{
if (twinObject.GetType() == typeof(WallGroup))
{
var wallgroup = twinObject as WallGroup;
foreach (var wallLine in wallgroup.groupWalls)
{
var leftPoint = wallLine.leftCenterPoint;
var rightPoint = wallLine.rightCenterPoint;
Position[] points = new Position[2];
var leftPos = new Position { x = leftPoint.position.x, y = leftPoint.position.y, z = leftPoint.position.z };
var rightPos = new Position { x = rightPoint.position.x, y = rightPoint.position.y, z = rightPoint.position.z };
points[0] = leftPos;
points[1] = rightPos;
WallInfor wallinfor = new WallInfor { points = points };
walls.Add(wallinfor);
}
}
else
{
var position = ObjectPos(twinObject);
var rotation = ObjectRot(twinObject);
var objname = twinObject.name.Replace("(Clone)", "");
ObjectInfor facilityInfor = new ObjectInfor
{
position = position,
rotation = rotation,
assetLabel = twinObject.assetLabel,
address = twinObject.metaData.address
};
facilitys.Add(facilityInfor);
}
}
twinData.objectInfors = facilitys;
twinData.wallInfors = walls;
//Serialize<List<ObjectInfor>>(facilitys, twinFilePath);
//Serialize<List<WallInfor>>(walls, wallFilePath);
Serialize<TwinObjectData>(twinData, filePath);
}
private Position ObjectPos(TwinObject twin)
{
Position pos = new Position();
pos.x = twin.transform.position.x;
pos.y = twin.transform.position.y;
pos.z = twin.transform.position.z;
return pos;
}
private Rotation ObjectRot(TwinObject twin)
{
Rotation rot = new Rotation();
rot.x = twin.transform.eulerAngles.x;
rot.y = twin.transform.eulerAngles.y;
rot.z = twin.transform.eulerAngles.z;
return rot;
}
public void Serialize<T>(T type, string filepath)
{
var lz4Option = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4Block);
var bytes = MessagePackSerializer.Serialize<T>(type, lz4Option);
File.WriteAllBytes(filepath, bytes);
}
public T Deserialize<T>(string filepath)
{
var lz4Option = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4Block);
var readByte = File.ReadAllBytes(filepath);
var deserailze = MessagePackSerializer.Deserialize<T>(readByte, lz4Option);
return deserailze;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: c891f0436f0449743b7ed983f101b6ae

View File

@@ -0,0 +1,26 @@
using UnityEngine;
using XED.Command;
using XED.UI;
using XED.Util;
namespace XED.Manage
{
public class StaticCanvasHandler : CanvasEventHandler
{
public StaticCanvasHandler(Canvas_Static canvas_static)
{
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
GameObject componentWindow = canvas_Popup.panel_hierarchy.gameObject;
GameObject interferedobjectlistWindow = canvas_Popup.panel_interferedobjectlist.gameObject;
GameObject assetWindow = canvas_Popup.panel_assetlibrary.gameObject;
canvas_static.panel_shortcuts.onClickOpenAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf));
canvas_static.panel_shortcuts.onClickOpenComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf));
canvas_static.panel_topbar.onClickAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf));
canvas_static.panel_topbar.onClickComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf));
canvas_static.panel_topbar.onClickInterferedListWindow += (() => interferedobjectlistWindow.SetActive(!interferedobjectlistWindow.activeSelf));
//canvas_static.panel_modecontrol.onClickObjectMode += () => statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: df5f8c274ab79df44b8434bd12d83b34

View File

@@ -0,0 +1,13 @@
using System.Collections.Generic;
using UnityEngine;
using XED.Core;
using XRLib.UI;
namespace XED.Manage
{
public class UIManager : UnitySingleton<UIManager>
{
HashSet<CanvasBase> canvases = new();
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 02d3bbdaee00e134285162a93672e0fd

View File

@@ -1,11 +1,12 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XRLib;
namespace XED.Manage
{
public class UserInputManager : MonoBehaviour, ISingle
public class UserInputManager : MonoBehaviour
{
Dictionary<KeyCode, Action> getKeyActionTable = new Dictionary<KeyCode, Action>();
Dictionary<KeyCode, Action> upKeyActionTable = new Dictionary<KeyCode, Action>();
@@ -105,7 +106,6 @@ namespace XED.Manage
}
void Update()
{
foreach (var key in downKeyActionTable.Keys)
{
if (Input.GetKeyDown(key))

View File

@@ -20,16 +20,12 @@ namespace XED
[PropertyVisible, Tooltip("µÎ ¹øÂ° info")]
public bool IsInteractible;
Panel_InterferedObjectList panel_InterferedObjectList;
public override void AfterAwake()
{
IsDisplayable = true;
IsInteractible = true;
physics.Init(this);
metaData.Init(this);
panel_InterferedObjectList = FindSingle<Panel_InterferedObjectList>();
}
public void Binding(IEntity entity)
@@ -64,21 +60,5 @@ namespace XED
{
return JsonConvert.SerializeObject(entity);
}
private void OnTriggerEnter(Collider other)
{
if (!other.TryGetComponent<TwinObject>(out TwinObject contracter))
return;
panel_InterferedObjectList.CreateContentButton(this, contracter);
}
private void OnTriggerExit(Collider other)
{
if (!other.TryGetComponent<TwinObject>(out TwinObject contracter))
return;
panel_InterferedObjectList.RemoveContentButton(this, contracter);
}
}
}

View File

@@ -1,4 +1,6 @@
using UnityEngine;
using XED.Asset;
using XED.Manage;
using XED.UI;
using XRLib.UI;
@@ -10,6 +12,7 @@ namespace XED
public override void AfterAwake()
{
GetComponent<Canvas>().sortingOrder = 1;
panel_draghandler.onDragBoxSelect += ManagerHub.instance.Get<CustomAssetConnector>().assetEventHandler.OnDragBoxSelect;
}
}
}

View File

@@ -1,13 +1,14 @@
using UnityEngine;
using UnityEngine.EventSystems;
using XED.Manage;
using XED.UI;
using XED.Util;
using XED.VirtualFactory;
using XRLib;
using XRLib.UI;
using XED.UI;
using XED.VirtualFactory;
namespace XED
{
public class Canvas_Popup : CanvasBase
public class Canvas_Popup : CanvasBase, ISingle
{
public Panel_AccessibilitySettings panel_accessibilitysettings;
public Panel_ColorPicker panel_colorpicker;
@@ -23,19 +24,37 @@ namespace XED
public AGVNodeModePopup agvnodemodepopup;
public Panel_Tooltip panel_tooltip;
public Panel_PropertyViewer panel_propertyviewer;
public Panel_DragHandler panel_draghandler;
//public Panel_DragHandler panel_draghandler;
public Panel_AssetEdit panel_assetedit;
public Panel_Thumbnail panel_thumbnail;
public Panel_ObjectDistance panel_objectdistance;
private void Awake()
{
canvasHandler = new PopupCanvasHandler(this);
}
public override void AfterAwake()
{
GetComponent<Canvas>().sortingOrder = 1;
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
panel_objectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged;
var raycaster = GameObject.FindAnyObjectByType<Raycaster>();
raycaster.onUIHoverEvent += panel_tooltip.ActivateTooltip;
raycaster.onUIHoverExitEvent += panel_tooltip.DeactivateTooltip;
foreach (var panel in GetComponentsInChildren<PanelBase>(true))
{
panel.onEnableEvent += SetPanelAsLastSibling;
}
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
panel_assetproperties.onOpen += fbxFileManager.GetCustomAssetData;
panel_thumbnail.onOpen += fbxFileManager.GetCustomAssetData;
var linkDataUIManager = GameObject.FindAnyObjectByType<LinkDataUIManager>();
linkDataUIManager.onUISelected += panel_assetedit.SetAssetData;
}
void SetPanelAsLastSibling(UIBase panel)

View File

@@ -2,6 +2,8 @@ using XRLib;
using XRLib.UI;
using UnityEngine;
using XED.Manage;
using XED.Util;
using XED.Command;
namespace XED.UI
{
@@ -11,5 +13,37 @@ namespace XED.UI
public Panel_TopBar panel_topbar;
public Panel_Toolbar panel_toolbar;
public Panel_ModeControl panel_modecontrol;
private void Awake()
{
canvasHandler = new StaticCanvasHandler(this);
}
public override void AfterAwake()
{
var statusPanel = FindSingle<ModePanel>();
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
var projectManager = ManagerHub.instance.Get<ProjectManager>();
panel_modecontrol.onClickObjectMode += () => statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
panel_shortcuts.onClickUndo += CommandInvoker.instance.Undo;
panel_shortcuts.onClickRedo += CommandInvoker.instance.Redo;
panel_shortcuts.onclickSave += projectManager.SaveProject;
panel_topbar.onClickSaveProject += projectManager.SaveProject;
panel_topbar.onClickLoadProject += projectManager.LoadProject;
panel_topbar.onClickNewProject += projectManager.NewProject;
//panel_topbar.onClickLoadAssets += fbxFileManager.LoadLocalFBXDirectory;
panel_topbar.onClickAssetWindow += fbxFileManager.LoadLocalData;
panel_toolbar.onClickMove += renderObjectHandler.SetRTGMove;
panel_toolbar.onClickExpand += renderObjectHandler.SetRTGScale;
panel_toolbar.onClickRotate += renderObjectHandler.SetRTGRotate;
panel_toolbar.onClickRemove += renderObjectHandler.RemoveItem;
panel_toolbar.onClickCopy += renderObjectHandler.CopyItem;
}
}
}

View File

@@ -2,6 +2,7 @@ using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XED.Util;
using XRLib.UI;
namespace XED.UI
@@ -22,8 +23,6 @@ namespace XED.UI
{
Button_Object1.onClick.AddListener(() => OnButtonClick(interferedTwinObject1));
Button_Object2.onClick.AddListener(() => OnButtonClick(interferedTwinObject2));
OnClickButton += FindSingle<CameraManager>().MoveToTwinObjectPos;
}
public void Initialize(TwinObject obj1, TwinObject obj2)

Some files were not shown because too many files have changed in this diff Show More