Merge pull request '완료 시간 알람 기능 복원 및 카메라 시점 기능 개발' (#21) from dev/jym/240312_04 into main

Reviewed-on: http://220.90.135.190:3000/UVCXR/ChunilENG/pulls/21
This commit was merged in pull request #21.
This commit is contained in:
jym
2025-03-12 18:56:41 +09:00
14 changed files with 22465 additions and 531 deletions

View File

@@ -26,18 +26,18 @@ MonoBehaviour:
_elevationRotateLimit: 0
_isFirstPersonView: 0
originElevation: 28.5
currentElevation: 28.5
currentElevation: 90
elevationSensivity: 15
minElevation: 5
maxElevation: 90
originAzimuth: 133
currentAzimuth: 133
currentAzimuth: 89.75
azimuthSensivity: 15
maxDistance: 150
minDistance: 5
moveClamper: 0.5334569
moveClamper: 0.033333335
originDistance: 120
originTargetPos: {x: -37.685005, y: 27, z: 29.893412}
originTargetRot: {x: -0, y: 0, z: 0}
currentDistance: 120.02781
currentDistance: 115.012886
target: {fileID: 0}

View File

@@ -161,8 +161,6 @@ namespace WI
moveVector *= option.moveClamper * option.moveSpeed * option.moveSensivity;
nextPosition = option.target.position - moveVector;
}
}
Vector3 CalculateMovePosition(Vector3 origPos, Vector3 moveVec)
@@ -277,6 +275,7 @@ namespace WI
var distPos = Quaternion.Euler(option.currentElevation, option.currentAzimuth, 0f) * dist;
cameraPosition = nextPosition + distPos;
camera.transform.position = cameraPosition;
camera.orthographicSize = Mathf.Clamp(option.currentDistance, option.minDistance, option.maxDistance);
if (option.currentElevation <= 90f)
{
@@ -378,22 +377,14 @@ namespace WI
break;
}
}
public void ChangeCameraView()
{
if (!option.isFirstPersonView)
{
SetViewMode(ViewMode.FirstPersonView);
}
else
{
SetViewMode(ViewMode.PerspectiveView);
}
}
public void CameraTopView()
{
option.maxDistance = 35f;
option.currentElevation = 90f;
CameraFix();
option.currentDistance = 35f;
option.currentAzimuth = 0f;
LastPositioning(true);
}
public void CameraFirstPersonView()
{
@@ -406,6 +397,7 @@ namespace WI
}
public void CameraPerspectiveView()
{
option.maxDistance = 150f;
option.currentDistance = option.originDistance;
option.currentAzimuth = option.originAzimuth;
option.currentElevation = option.originElevation;
@@ -417,14 +409,6 @@ namespace WI
nextPosition = pos;
LastPositioning(true);
}
public void SetTargetYUpPos(Vector3 pos)
{
var targetPos = pos;
targetPos.y += yUpPos;
nextPosition = targetPos;
LastPositioning(true);
}
private void FindLookAtObject()
{
switch(viewMode)

File diff suppressed because it is too large Load Diff

View File

@@ -63,7 +63,7 @@ namespace CHN
var pos = controller.option.target.position;
pos.y = currentFloor.StartPoint.position.y;
controller.SetTargetYUpPos(pos);
controller.SetTargetPos(pos);
if (currentFloor.isEmptyFloor)
{
@@ -82,6 +82,7 @@ namespace CHN
}
}
}
SetAllFloorExternalState();
if (!controller.option.isFirstPersonView)

View File

@@ -34,16 +34,18 @@ namespace CHN
//building.onSettingBuildingComplete += topCanvas.panel_toptoolbar.SetChangeViewState;
topCanvas.panel_toolbar.onClickDashBoard += popupCanvas.panel_dashboard.Open;
topCanvas.panel_toolbar.onClickCameraView += ChangeCameraView;
topCanvas.panel_toptoolbar.GetFloor = building.GetFloor;
//topCanvas.panel_toptoolbar.onChangeView += ChangeCameraView;
topCanvas.panel_toptoolbar.onClickAlarms += popupCanvas.panel_completealramhistory.SetActive;
topCanvas.panel_toptoolbar.onClickScreenInitialization += SceneReLoad;
topCanvas.panel_toptoolbar.onClickProductionProgress += popupCanvas.panel_injectionproduction.Open;
topCanvas.panel_toptoolbar.onClickAssemblyProgress += popupCanvas.panel_assemblyproduction.Open;
topCanvas.panel_toptoolbar.onClickSetting += popupCanvas.panel_menu.Open;
rightCanvas.panel_floorcontrol.onValueChanged += building.SetTopFloor;
//rightCanvas.panel_floorcontrol.onValueChanged += topCanvas.panel_toptoolbar.SetChangeViewState;
topCanvas.panel_toolbar.onClickDashBoard += popupCanvas.panel_dashboard.Open;
popupCanvas.panel_library.onClickLabelButton += libraryManager.LibraryFiltering;
popupCanvas.panel_protocolsetting.onUpdateMachine += libraryManager.MatchingMachine;
@@ -58,6 +60,8 @@ namespace CHN
popupCanvas.onClickDetail += datamanager.GetCompleteInfo;
popupCanvas.panel_completealramhistory.onCheckAlarmData += completeTimeManager.CheckCompleteTimeAlarm;
popupCanvas.panel_completealramhistory.onCheckAlarm += topCanvas.panel_toptoolbar.SetAlarmCount;
popupCanvas.panel_completealramhistory.onOpen += popupCanvas.panel_dashboard.dashBoardCheckListBox.OnOpenDashboardItem;
popupCanvas.panel_completealramhistory.onClose += popupCanvas.panel_dashboard.dashBoardCheckListBox.OnCloseDashbordItem;
popupCanvas.panel_workconditionanalysis.onSearchData += httpManager.SearchWorkConditions;
@@ -91,7 +95,6 @@ namespace CHN
httpManager.onSendWorkConditionsData += workConditionsManager.SetWorkConditionsData;
httpManager.onSendWorkTimeData += workTimeManager.SetWorkTimeData;
//workConditionsManager.onSendChartLabels += popupCanvas.panel_workconditionanalysis.SetChartLabels;
workConditionsManager.onCompleteLoadData += popupCanvas.panel_workconditionanalysis.SetWorkConditionsData;
workConditionsManager.onSendMainChartData += popupCanvas.panel_workconditionanalysis.SetChartData;
workConditionsManager.onSendSubChartData += popupCanvas.panel_workconditionanalysis.SetSubChartDatas;
@@ -132,14 +135,13 @@ namespace CHN
var raycaster = FindSingle<CHNRaycaster>();
if (raycaster.hitFloorIndex != building.currentFloor.floorIndex)
{
var slider = FindSingle<Canvas_Right>().panel_floorcontrol;
slider.ChangeValueFromOutside(raycaster.hitFloorIndex);
}
//if (raycaster.hitFloorIndex != building.currentFloor.floorIndex)
//{
// var slider = FindSingle<Canvas_Right>().panel_floorcontrol;
// slider.ChangeValueFromOutside(raycaster.hitFloorIndex);
//}
var pos = controller.option.target.position;
pos.y -= controller.yUpPos;
if (building.currentFloor.FloorContainsPoint(pos))
break;

View File

@@ -9,11 +9,12 @@ namespace CHN
public int floorIndex;
public List<Machine> machines = new();
public bool isEmptyFloor => machines.Count == 0;
public bool isEmptyFloor;
public Transform StartPoint;
public GameObject Outer;
public GameObject TopSurfaces;
public GameObject FloorGroundCollider;
//public GameObject Ceiling;
public GameObject VisualizationAreas;
Transform CeilingQuad;
@@ -29,6 +30,9 @@ namespace CHN
case nameof(Outer):
Outer = transform.GetChild(i).gameObject;
break;
case nameof(FloorGroundCollider):
FloorGroundCollider = transform.GetChild(i).gameObject;
break;
//case nameof(Ceiling):
// Ceiling = transform.GetChild(i).gameObject;
// break;
@@ -44,7 +48,7 @@ namespace CHN
public bool FloorContainsPoint(Vector3 pos)
{
var floorColliders = transform.GetComponents<BoxCollider>();
var floorColliders = FloorGroundCollider.GetComponentsInChildren<BoxCollider>();
foreach(var collider in floorColliders)
{

View File

@@ -15,8 +15,9 @@ namespace CHN
public Dictionary<string, UI_CompleteTimeAlarmInfo> completeInfoList = new();
public List<UI_CompleteTimeAlarmInfo> notCheckAlramList = new();
//public Action<int> onCheckAlarm;
public Action<int> onCheckAlarm;
public Action<CompleteInfo, bool> onCheckAlarmData;
public Action<string> onOpen;
public Action<string> onClose;
public override void AfterAwake()
@@ -26,9 +27,24 @@ namespace CHN
completeInfoList.Clear();
SetActive(false);
}
public void SetActive()
{
var isActive = rectTransform.gameObject.activeSelf;
var active = isActive ? false : true;
if (active)
{
Open();
}
else
{
Close();
}
}
public void Open()
{
SetActive(true);
onOpen?.Invoke("완료 시간 알람");
}
public void Close()
{
@@ -51,24 +67,24 @@ namespace CHN
completeInfoList.Add(infos[i].completeInfo.worknm, infoItem);
//if (!infoItem.isCheck)
//{
// notCheckAlramList.Add(infoItem);
//}
if (!infoItem.isCheck)
{
notCheckAlramList.Add(infoItem);
}
}
}
//BlinkAlarmItems();
BlinkAlarmItems();
}
private void BlinkAlarmItems()
{
onCheckAlarm?.Invoke(notCheckAlramList.Count);
}
//private void BlinkAlarmItems()
//{
// onCheckAlarm?.Invoke(notCheckAlramList.Count);
//}
private void CheckAlram(UI_CompleteTimeAlarmInfo completeTimeAlarmInfo)
{
onCheckAlarmData?.Invoke(completeTimeAlarmInfo.completeInfo, completeTimeAlarmInfo.isCheck);
//notCheckAlramList.Remove(completeTimeAlarmInfo);
//onCheckAlarm?.Invoke(notCheckAlramList.Count);
notCheckAlramList.Remove(completeTimeAlarmInfo);
onCheckAlarm?.Invoke(notCheckAlramList.Count);
}
}
}

View File

@@ -13,6 +13,7 @@ namespace CHN
public Button Button_WorkProgress;
public Button Button_ProductionProgress;
public Button Button_AssemblyProgress;
public Button Button_Alrams;
public Button Button_Setting;
public Button Button_Exit;
@@ -20,11 +21,12 @@ namespace CHN
public Action onClickWorkProgress;
public Action onClickProductionProgress;
public Action onClickAssemblyProgress;
public Action onClickAlarms;
public Action onClickSetting;
public Action onClickExit;
//public Action onClickCompleteTimeAlarm;
//public Action<ViewMode> onChangeView;
public Action onClickCompleteTimeAlarm;
public Action<ViewMode> onChangeView;
//public Image Image_Alarm;
@@ -34,6 +36,7 @@ namespace CHN
Button_WorkProgress.onClick.AddListener(OnClickWorkProgress);
Button_ProductionProgress.onClick.AddListener(OnClickProductionProgress);
Button_AssemblyProgress.onClick.AddListener(OnClickAssemblyProgress);
Button_Alrams.onClick.AddListener(OnClickAlrams);
Button_Setting.onClick.AddListener(OnClickSetting);
Button_Exit.onClick.AddListener(OnClickExit);
@@ -58,6 +61,10 @@ namespace CHN
{
onClickAssemblyProgress?.Invoke();
}
private void OnClickAlrams()
{
onClickAlarms?.Invoke();
}
private void OnClickSetting()
{
onClickSetting?.Invoke();
@@ -67,11 +74,11 @@ namespace CHN
onClickExit?.Invoke();
}
//public void SetAlarmCount(int count)
//{
// var text = Button_Alarms.GetComponentInChildren<TMP_Text>();
// text.SetText(count.ToString());
//}
public void SetAlarmCount(int count)
{
var text = Button_Alrams.GetComponentInChildren<TMP_Text>();
text.SetText(count.ToString());
}
//private void OnClickCompleteTimeAlarm()
//{

View File

@@ -126,7 +126,10 @@ namespace CHN
foreach (var machine in matchingMachines)
{
if (machine.GetComponentInParent<Floor>() != currentFloor)
{
machine.machineKPI.SetActive(false);
continue;
}
MachineKPIsActive(machine, layerMask);
@@ -134,6 +137,16 @@ namespace CHN
machineKPI.transform.localScale = originScale * distanceScale;
}
}
bool IsScreenRange(Machine machine)
{
Vector3 viewPos = cam.camera.WorldToViewportPoint(machine.centerPos);
if (viewPos.x >= 0 && viewPos.x <= 1 && viewPos.y >= 0 && viewPos.y <= 1 && viewPos.z > 0)
{
return true;
}
return false;
}
void MachineKPIsActive(Machine machine, LayerMask layerMask)
{
var dir = cam.camera.transform.localPosition - machine.centerPos;
@@ -145,6 +158,9 @@ namespace CHN
if (hitCameraLayer)
{
if (!IsScreenRange(machine))
return;
machine.machineKPI.Active();
}
else

View File

@@ -32,7 +32,7 @@ namespace CHN
{
var dic = new Dictionary<string, GameObject>();
dic.Add("완료 알람 시간", completeAlramHistory.gameObject);
dic.Add("완료 시간 알람", completeAlramHistory.gameObject);
dic.Add("라이브러리", library.gameObject);
dic.Add("작업 조건 분석", workConditionAnalysis.gameObject);
dic.Add("작업 시간 분석", workTimeAnalysis.gameObject);

View File

@@ -24,6 +24,7 @@ public class Panel_ToolBar : PanelBase
private CaptureBase capture;
public Action onClickDashBoard;
public Action<ViewMode> onClickCameraView;
public override void AfterAwake()
{
Button_TopView.onClick.AddListener(OnClickTopView);
@@ -130,16 +131,16 @@ public class Panel_ToolBar : PanelBase
private void OnClickShoulderView()
{
Debug.Log("ShoulderView");
onClickCameraView?.Invoke(ViewMode.FirstPersonView);
}
private void OnClickQuaterView()
{
Debug.Log("QuaterView");
onClickCameraView?.Invoke(ViewMode.PerspectiveView);
}
private void OnClickTopView()
{
Debug.Log("TopView");
onClickCameraView?.Invoke(ViewMode.TopView);
}
}

View File

@@ -13,12 +13,13 @@ namespace CHN
public UI_DashboardCheckListItem prf_item;
private Dictionary<string, GameObject> originDashBoardItems = new();
private Dictionary<string, UI_DashboardCheckListItem> dashboardItemList = new();
public SDictionary<string, UI_DashboardCheckListItem> dashboardItemList = new();
public void Init(Dictionary<string, GameObject> items)
{
prf_item = Resources.Load<UI_DashboardCheckListItem>("Prefabs/UI/UI_DashboardCheckListItem");
originDashBoardItems.Clear();
dashboardItemList.Clear();
foreach (var item in items)
{
var dashboardItem = CreateItem();
@@ -35,9 +36,13 @@ namespace CHN
}
}
public void OnCloseDashbordItem(string dahboardKey)
public void OnOpenDashboardItem(string dashboardKey)
{
dashboardItemList[dahboardKey].ToggleOffItem();
dashboardItemList[dashboardKey].ToggleOnItem();
}
public void OnCloseDashbordItem(string dashboardKey)
{
dashboardItemList[dashboardKey].ToggleOffItem();
}
private UI_DashboardCheckListItem CreateItem()
{

View File

@@ -48,6 +48,10 @@ namespace CHN
toggleText.SetText(keyName);
}
public void ToggleOnItem()
{
toggle.isOn = true;
}
public void ToggleOffItem()
{
toggle.isOn = false;

View File

@@ -33,7 +33,7 @@
"ptotm": "2025-03-12 19:50:37",
"psttm": "2025-03-11 08:01:16"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -68,7 +68,7 @@
"ptotm": "2025-03-12 19:49:40",
"psttm": "2025-03-11 08:01:21"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -103,7 +103,7 @@
"ptotm": "2025-03-13 07:50:45",
"psttm": "2025-03-11 08:01:26"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -138,7 +138,7 @@
"ptotm": "2025-03-13 07:50:48",
"psttm": "2025-03-11 08:01:31"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -173,7 +173,7 @@
"ptotm": "2025-03-13 07:50:51",
"psttm": "2025-03-11 08:01:52"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -208,7 +208,7 @@
"ptotm": "2025-03-12 19:50:55",
"psttm": "2025-03-11 08:01:57"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -243,7 +243,7 @@
"ptotm": "2025-03-12 19:49:58",
"psttm": "2025-03-11 08:02:03"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -278,7 +278,7 @@
"ptotm": "2025-03-12 19:51:01",
"psttm": "2025-03-11 08:02:08"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -313,7 +313,7 @@
"ptotm": "2025-03-13 07:51:08",
"psttm": "2025-03-11 08:02:14"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -348,7 +348,7 @@
"ptotm": "2025-03-12 19:51:12",
"psttm": "2025-03-11 08:02:19"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -383,7 +383,7 @@
"ptotm": "2025-03-13 07:52:15",
"psttm": "2025-03-11 08:02:23"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -397,7 +397,7 @@
"worknm": "Injector No.12",
"workseq": "1",
"status": "2",
"statusnm": "가동",
"statusnm": "가동",
"itemcd": "C10036",
"itemdesc": "SCOOP-DRV LINK LUB_BODY",
"pjtcd": "GF9",
@@ -415,7 +415,7 @@
"sttm": "0802",
"totm": "",
"goaltime": "1439",
"ptotm": "2025-03-12 07:52:21",
"ptotm": "2025-03-13 18:48:36",
"psttm": "2025-03-11 08:02:28"
},
"isCheck": false
@@ -453,7 +453,7 @@
"ptotm": "2025-03-14 07:51:26",
"psttm": "2025-03-11 07:59:22"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -558,7 +558,7 @@
"ptotm": "2025-03-13 07:52:35",
"psttm": "2025-03-11 08:02:46"
},
"isCheck": false
"isCheck": true
},
{
"completeInfo": {
@@ -642,7 +642,7 @@
"worknm": "Injector No.19",
"workseq": "1",
"status": "1",
"statusnm": "가동",
"statusnm": "가동",
"itemcd": "55511445-1",
"itemdesc": "PIPE-O/PMP SUC (UPPER)",
"pjtcd": "CSS 50V LM2",
@@ -1395,7 +1395,7 @@
"sttm": "0759",
"totm": "",
"goaltime": "560",
"ptotm": "2025-03-12 16:51:22",
"ptotm": "2025-03-12 17:20:22",
"psttm": "2025-03-11 07:59:34"
},
"isCheck": false
@@ -1430,7 +1430,7 @@
"sttm": "0757",
"totm": "",
"goaltime": "199",
"ptotm": "2025-03-12 11:29:45",
"ptotm": "2025-03-12 17:18:39",
"psttm": "2025-03-11 07:57:03"
},
"isCheck": false
@@ -1465,7 +1465,7 @@
"sttm": "1229",
"totm": "",
"goaltime": "133",
"ptotm": "2025-03-12 17:08:45",
"ptotm": "2025-03-12 18:26:01",
"psttm": "2025-03-11 12:29:20"
},
"isCheck": false
@@ -1714,6 +1714,41 @@
"psttm": "2025-03-12 07:57:02"
},
"isCheck": false
},
{
"completeInfo": {
"datagbn": "D",
"wordno": "WO202503120080",
"workdt": "20250312",
"daynight": "1",
"sitecd": "1",
"wccd": "W30",
"workcd": "GP-8",
"worknm": "최종검사-08",
"workseq": "1",
"status": "1",
"statusnm": "가동중",
"itemcd": "24298738-SGM",
"itemdesc": "BAFFLE ASM-FRT DIFF CARR",
"pjtcd": "GF9",
"matcd": "",
"cycletime": "10.00",
"cavity": "1",
"planqty": "552.00000",
"goalqty": "6.00000",
"workqty": "0.00000",
"goodqty": "0.00000",
"badqty": "0.00000",
"adrate": "",
"efficiency": "0.00000",
"progressrate": "0.00000",
"sttm": "1524",
"totm": "",
"goaltime": "91",
"ptotm": "2025-03-12 16:55:58",
"psttm": "2025-03-12 15:24:58"
},
"isCheck": false
}
]
}