using Simulator.Data; using Simulator.Data.Transport; using System; using TMPro; using UnityEngine; using UVC.Data.Core; public class StackerCrane : ComponentBase { [SerializeField] GameObject horizonObject; [SerializeField] GameObject verticalObject; [SerializeField] GameObject forkObject; bool horizontalPosition = false; bool verticalPosition = false; bool forkPosition = false; bool operationflag = false; bool operationcounting = false; Vector3 horizontalTarget; Vector3 verticalTarget; Vector3 forkTarget; Vector3 horizontalStart; Vector3 verticalStart; Vector3 forkStart; Vector3 startposition; string entityId; float horizontalTime; float verticalTime; float forkTime; float ht; float vt; float ft; public void SetPosition(rack_layout layout) { horizonObject.transform.localPosition = new Vector3(layout.x_length * -0.55f, layout.z_length * 0, layout.y_length * -0.5f); startposition = new Vector3(layout.x_length * -0.55f, layout.z_length * 0, layout.y_length * -0.5f); forkStart = new Vector3(0, 0, 0.3f); } public void SetTargetPosition(DataObject agvData, RackComponent rack) { var datas = agvData.GetDataObject("data"); var crane_movement = datas.GetDataObject("crane_movement"); horizontalTime = (float)crane_movement.GetFloat("horizontal_time"); horizontalTime = horizontalTime / 10f; verticalTime = (float)crane_movement.GetFloat("vertical_time"); verticalTime = verticalTime / 10f; var from = crane_movement.GetDataObject("from_position"); var fx = (int)from.GetInt("x"); var fy = (int)from.GetInt("y"); var fz = (int)from.GetInt("z"); horizontalStart = new Vector3(horizonObject.transform.position.x, 0, startposition.z); verticalStart = new Vector3(-0.03920534f, -0.2531985f, verticalObject.transform.position.z); var to = crane_movement.GetDataObject("to_position"); var tx = (int)to.GetInt("x"); var ty = (int)to.GetInt("y"); var tz = (int)to.GetInt("z"); var rackp = rack.cellComponents[(tx, tz, ty)].transform.position; //Debug.Log($"{tx},{ty},{tz}"); horizontalTarget = new Vector3(rackp.x, 0, startposition.z); verticalTarget = new Vector3(-0.03920534f, -0.2531985f, rackp.y); ht = 0f; vt = 0f; horizontalPosition = true; verticalPosition = true; } public void SetForkPosition(DataObject agvData, RackComponent rack) { var datas = agvData.GetDataObject("data"); entityId = datas.GetString("entity_id"); var operation = datas.GetString("operation"); if (string.Equals(operation, "up")) { operationflag = true; } else { operationflag = false; } operationcounting = true; var timing = datas.GetDataObject("timing"); forkTime = (float)timing.GetFloat("total"); var position = datas.GetDataObject("position"); var x = (int)position.GetInt("x"); var y = (int)position.GetInt("y"); var z = (int)position.GetInt("z"); var rackp = rack.cellComponents[(x, z, y)].transform.position; ft = 0f; forkTarget = new Vector3(-rackp.z+startposition.x,0, 0.3f); Debug.Log($"t{forkTarget}"); Debug.Log($"s{forkStart}"); forkPosition = true; } void Update() { if (horizontalPosition) { if (horizontalTime >= 0f) { ht += Time.deltaTime / horizontalTime; // 위치 업데이트 if (ht <= 1f) { horizonObject.transform.localPosition = Vector3.Lerp(horizontalStart, horizontalTarget, ht); } else { horizonObject.transform.localPosition = horizontalTarget; horizontalPosition = false; } } } if (verticalPosition) { if (verticalTime >= 0f) { vt += Time.deltaTime / verticalTime; // 위치 업데이트 if (vt <= 1f) { verticalObject.transform.localPosition = Vector3.Lerp(verticalStart, verticalTarget, vt); } else { verticalObject.transform.localPosition = verticalTarget; verticalPosition = false; } } } if (forkPosition) { if (forkTime >= 0f) { ft += Time.deltaTime / forkTime; // 위치 업데이트 if (ft <= 0.5f) { forkObject.transform.localPosition = Vector3.Lerp(forkStart, forkTarget, ft); } else if (ft >= 0.5f && ft <= 1f) { if (operationcounting) { if (operationflag) { var entity = EntityManager.Instance.GetEntity(entityId,this); entity.transform.parent = forkObject.transform; entity.transform.localPosition = new Vector3(0, 0, 0); } operationcounting = false; } forkObject.transform.localPosition = Vector3.Lerp(forkTarget, forkStart, ft); } else { forkObject.transform.localPosition = forkStart; forkPosition = false; } } } } }