@@@@@@@@@@@@@@@@@전체 코드@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@전체 코드@@@@@@@@@@@@@@@@@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using System;
//SLAB소재에 대한 클래스
//디스플레이할 다른데이터도 추가 해야함
//아니면 따로 빼야하나??일단 보류
/// <summary>
/// 슬라브 생성 이벤트
/// 1. 형상화 정보 요청
/// 2. UI 표현? (일단 추가 안함)
/// </summary>
public class CreateSlabEventArgs : EventArgs
{
public string slabNo;
public int fceNo;
}
/// <summary>
/// 사이즈 데이터 전송 이벤트
/// 1.개별 FCE_NO에 따라 데이터 전송
/// </summary>
public class SizeEventArgs : EventArgs
{
public TBL_FUR_SLAB_INF slabData;
}
/// <summary>
/// 트레킹정보 이벤트
/// 1.개별 FCE_NO에 따라 데이터 전송
/// </summary>
public class TRKEventArgs : EventArgs
{
public TBL_FUR_SLAB_TRK slabTRKData;
}
public class FCE_JOB : MonoBehaviour {
public static EventHandler<CreateSlabEventArgs> CreateSlabEventHandler; //소재생성
public static EventHandler<SizeEventArgs> SizeEvnetHandler; //사이즈데이터
public static EventHandler<TRKEventArgs> TRKEventHandler; //트레킹데이터
//동작 로직의 순서는
//1. 위치이동
//2. 추출,장입
//public delegate SLABDATA[] GetFceSlabDatas(SLABDATA[] datas);
//public GetFceSlabDatas del_GetFceSlabDatas;
public FCE_INFO[] fce_Infos;
public TBL_FUR_SLAB_INF slabSizeData;
//public SLABDATA c_LastData;//트레킹 데이터와 마지막 데이터 비교
//public SLABDATA c_FirstData;
//추출
//TB_TRK 에 올라온 코일ID기반으로 SLAB번호 추적하여 비교
//장입
//slab01에 데이터가 처음 들어왔을때 & CS의 slab01데이터가 다를때
//위치이동(순간이동,로직이동)
//업데이트 주기마다 위치값 비교하여 로직이동
//장입시 로직이 완료된 다음 위치 순간이동
int checkTime = 1;//데이터업데이트 주기용
private void Start()
{
StartDataUpdate();
CreateSlabEventHandler += OnCreateSlabEvent;
SizeEvnetHandler += OnSizeEvent;
TRKEventHandler += OnTRKEvent;
}
public void OnCreateSlabEvent(object sender, CreateSlabEventArgs eventArgs)
{
//사이즈 데이터 요청..
WebSocket.reqSizeData(eventArgs.slabNo);
}
public void OnSizeEvent(object sender, SizeEventArgs items)
{
if (items.slabData._TBL_FUR_SLAB_INF_ITEM.SLAB_NO == null)
{
Debug.Log("형상화 데이터가 없습니다");
return;
}
for (int i = 0; i < fce_Infos.Length; i++)
{
if (fce_Infos[i].fce_No == items.slabData._TBL_FUR_SLAB_INF_ITEM.FCE_NO)
{
fce_Infos[i].mySizeInfo.Enqueue(items.slabData._TBL_FUR_SLAB_INF_ITEM);
}
}
}
public void OnTRKEvent(object sender, TRKEventArgs eventArgs)
{
for (int i = 0; i < fce_Infos.Length; i++)
{
for (int j = 0; j < eventArgs.slabTRKData._TBL_FUR_SLAB_TRK_ITEM.Length; j++)
{
if (fce_Infos[i].fce_No == eventArgs.slabTRKData._TBL_FUR_SLAB_TRK_ITEM[j].FCE_NO)
{
fce_Infos[i].DataBinding(eventArgs.slabTRKData._TBL_FUR_SLAB_TRK_ITEM[j]);
}
}
}
}
public void StartDataUpdate()
{
StartCoroutine(DataUpdate());
}
private void Update()
{
//업데이트에서 돌리기
if (WebSocket.cue_TBL_FUR_SLAB_INF.Count != 0)
{
SizeEvnetHandler(this, new SizeEventArgs() { slabData = WebSocket.cue_TBL_FUR_SLAB_INF.Dequeue()});
}
}
public IEnumerator DataUpdate()
{
while (true)
{
if (WebSocket.cue_TBL_FUR_SLAB_TRKs.Count != 0)
{
TRKEventHandler(this, new TRKEventArgs() { slabTRKData = WebSocket.cue_TBL_FUR_SLAB_TRKs.Dequeue() });
//더 간단하게 만들어보기
if (checkTime != 3)
checkTime = 3;
}
yield return new WaitForSeconds(checkTime);
Debug.Log("DataUpdate!!!");
}
}
}
@@@@@@@@@@@@@@@@@전체 코드@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@전체 코드@@@@@@@@@@@@@@@@@