139 lines
3.8 KiB
C#
139 lines
3.8 KiB
C#
using Studio.VirtualFactory;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Studio.VirtualFactory.Info;
|
|
|
|
namespace Studio.Dynamic.TwinObject
|
|
{
|
|
public class AGV : MonoBehaviour, IInfo
|
|
{
|
|
float dp;
|
|
Vector3 nextPos;
|
|
float startX;
|
|
float endX;
|
|
float startY;
|
|
float endY;
|
|
float rotSpeed;
|
|
float moveSpeed;
|
|
float xp;
|
|
float yp;
|
|
|
|
Vector3 endPos;
|
|
Quaternion startRot;
|
|
Quaternion endRot;
|
|
|
|
public Dictionary<string, string> CurrentEntity;
|
|
|
|
private bool isPlay = false;
|
|
|
|
public Dictionary<string, string> Info {
|
|
get
|
|
{
|
|
//ToDo 보고싶은 정보 나열한.. 리스트 목록 가져온다..
|
|
return CurrentEntity;
|
|
}
|
|
}
|
|
|
|
public Dictionary<string, string> Label {
|
|
get
|
|
{
|
|
//ToDo 보고싶은 정보 나열한.. 리스트 목록 가져온다..
|
|
return CurrentEntity;
|
|
}
|
|
}
|
|
|
|
public void Init(string type,Vector3 pos)
|
|
{
|
|
transform.position = pos;
|
|
startX = transform.position.x;
|
|
startY = transform.position.z;
|
|
endX = transform.position.x;
|
|
endY = transform.position.z;
|
|
startRot = Quaternion.identity;
|
|
endRot = Quaternion.identity;
|
|
isPlay = true;
|
|
StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData);
|
|
}
|
|
|
|
internal void OnUpdateData(object sender, StudioServiceIdEventArgs e)
|
|
{
|
|
CurrentEntity = e.Entity;
|
|
var s = "{";
|
|
foreach(var t in e.Entity)
|
|
{
|
|
s += $"{t.Key}: {t.Value},";
|
|
}
|
|
s += "}";
|
|
//Debug.Log(s);
|
|
SetPos();
|
|
}
|
|
|
|
|
|
private void SetPos()
|
|
{
|
|
dp = 0f;
|
|
xp = 0f;
|
|
yp = 0f;
|
|
|
|
var xpos = CurrentEntity.FirstOrDefault(x => x.Key.Equals("x", StringComparison.OrdinalIgnoreCase));
|
|
var ypos = CurrentEntity.FirstOrDefault(x => x.Key.Equals("y", StringComparison.OrdinalIgnoreCase));
|
|
|
|
|
|
var x = float.Parse(xpos.Value) * 0.001f;
|
|
var z = float.Parse(ypos.Value) * 0.001f;
|
|
endPos = new Vector3(x, transform.position.y, z);
|
|
startX = transform.position.x;
|
|
startY = transform.position.z;
|
|
endX = endPos.x;
|
|
endY = endPos.z;
|
|
|
|
//노드방향으로 회전값알기
|
|
|
|
var degree =CurrentEntity.FirstOrDefault(x => x.Key.Equals("DEGREE", StringComparison.OrdinalIgnoreCase));
|
|
|
|
var deg = float.Parse(degree.Value);
|
|
deg = 360f - deg;
|
|
startRot = transform.rotation;
|
|
endRot = Quaternion.AngleAxis(deg, Vector3.up);
|
|
}
|
|
|
|
void PerforcedRotation()
|
|
{
|
|
if (dp >= 1f)
|
|
return;
|
|
dp += Time.deltaTime * rotSpeed;
|
|
transform.rotation = Quaternion.Lerp(startRot, endRot, dp);
|
|
}
|
|
private void Update()
|
|
{
|
|
if (isPlay == false)
|
|
return;
|
|
PerforcedMovement();
|
|
PerforcedRotation();
|
|
}
|
|
void PerforcedMovement()
|
|
{
|
|
|
|
xp += Time.deltaTime * moveSpeed;
|
|
yp += Time.deltaTime * moveSpeed;
|
|
|
|
var nx = Mathf.Lerp(startX, endX, xp);
|
|
var ny = Mathf.Lerp(startY, endY, yp);
|
|
nextPos = new Vector3(nx, 0, ny);
|
|
transform.position = nextPos;
|
|
}
|
|
|
|
public void SetMoveSpeed(float speed)
|
|
{
|
|
moveSpeed = speed;
|
|
}
|
|
|
|
public void SetRotateSpeed(float aGVRotateSpeed)
|
|
{
|
|
rotSpeed = aGVRotateSpeed;
|
|
}
|
|
}
|
|
}
|