U3D_TobaccoWarehouseISMDTSy.../Assets/Scripts/Machine.cs

417 lines
14 KiB
C#

using Cysharp.Threading.Tasks;
using DefaultNamespace;
using DG.Tweening;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.Remoting.Messaging;
using UnityEngine;
public class Machine : MonoBehaviour
{
[Header("机械手臂ID")]
public string Id;
[Header("机械手臂动画")]
public Animation animations;
[Header("机械手臂箱子生成位置")]
public Transform points;
[Header("箱子")]
public GameObject Box;
[Header("箱子2")]
public GameObject Box2;
[Header("位移的速度")]
public float speed = 3.5f;
/// <summary>
/// 接收执行的动画
/// </summary>
private GameObject boxdata;
private int Number = 0;
private int Number2 = 0;
/// <summary>
/// 初始化判断
/// </summary>
private bool ispcon = false;
/// <summary>
/// 特殊实箱
/// </summary>
public Material Specialkernelbox;
private void Awake()
{
}
void Update()
{
}
public void Getarm(Roboticarm roboticarm)
{
if (roboticarm.Jobcontent != "0" && roboticarm.Workstation != "0")
{
int worksta = int.Parse(roboticarm.Workstation);
int index = int.Parse(roboticarm.Jobcontent);
if (index != Number && worksta != Number2)
{
//Debug.Log("进来了调用步骤" + index);
Motionexecution(roboticarm.Jobcontent, roboticarm);
Number2 = worksta;
}
}
if (!ispcon)
{
int index = int.Parse(roboticarm.Jobcontent);
if (index > 1)
{
Init();
//Debug.Log("机械手臂初始化" + roboticarm.Jobcontent);
}
ispcon = true;
}
}
private void Init()
{
if (points.childCount == 0)
{
GameObject box = Instantiate(Box, points);
Renderer renderer = box.GetComponent<Renderer>();
if (renderer)
{
renderer.material = Specialkernelbox;
}
box.transform.SetParent(points);
}
}
/// <summary>
/// 先判断步骤运动到指定位置再执行动画
/// </summary>
/// <param name="procedurem"></param>
/// <param name="roboticarm"></param>
public async UniTask Motionexecution(string procedurem, Roboticarm roboticarm)
{
switch (procedurem)
{
case "1":
if (roboticarm.Workstation.Length > 0)
{
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Number = 1;
//Debug.Log("取箱子");
Transform point = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(point.position, (Vector3.Distance(transform.position, point.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("take");
StartCoroutine(Judgmentbox(roboticarm.Workstation));
});
}
}
break;
case "2":
if (roboticarm.Workstation == "10" || roboticarm.Workstation == "9")
{
//Debug.Log("读箱子信息");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform box = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(box.position, (Vector3.Distance(transform.position, box.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("read");
Number = 2;
Number2 = 666;
});
}
}
else
{
Number = 3;
Number2 = 991;
}
break;
case "3":
if (roboticarm.Workstation == "10" || roboticarm.Workstation == "9")
{
//Debug.Log("去盖");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform box = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(box.position, (Vector3.Distance(transform.position, box.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("To");
Number = 3;
});
}
}
else
{
Number = 4;
Number2 = 992;
}
break;
case "4":
if (roboticarm.Workstation != "10" || roboticarm.Workstation != "9")
{
//Debug.Log("喂料");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform box = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(box.position, (Vector3.Distance(transform.position, box.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("hello");
Number = 4;
});
}
}
else
{
Number = 5;
Number2 = 993;
}
break;
case "5":
if (roboticarm.Workstation == "10" || roboticarm.Workstation == "9")
{
//Debug.Log("清扫");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform box = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(box.position, (Vector3.Distance(transform.position, box.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("qing");
Number = 5;
Number2 = 888;
});
}
}
else
{
Number = 6;
Number2 = 994;
}
break;
case "6":
if (roboticarm.Workstation == "10" || roboticarm.Workstation == "9")
{
//Debug.Log("拍照");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform box = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(box.position, (Vector3.Distance(transform.position, box.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
Number = 6;
Number2 = 777;
});
}
}
else
{
Number = 7;
Number2 = 995;
}
break;
case "7":
if (roboticarm.Workstation == "10" || roboticarm.Workstation == "9")
{
//Debug.Log("加盖");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform box = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(box.position, (Vector3.Distance(transform.position, box.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("qinghou");
Number = 7;
});
}
}
else
{
Number = 8;
Number2 = 996;
}
break;
case "8":
if (roboticarm.Workstation.Length > 2)
{
//Debug.Log("放箱子");
if (MqttManager.Instance.Mechanicalarm(roboticarm.Workstation))
{
Transform point = MqttManager.Instance.Mechanicalarm(roboticarm.Workstation);
transform.DOMove(point.position, (Vector3.Distance(transform.position, point.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
{
animations.Play("put");
Invoke("Laydown", 1f);
StartCoroutine(Judgmentbox2(roboticarm.Workstation));
Number = 8;
});
}
}
else
{
Number = 9;
Number2 = 997;
}
break;
default:
//Debug.Log("没有满足条件");
break;
}
}
/// <summary>
/// 查找箱子点位
/// </summary>
/// <param name="point"></param>
IEnumerator Judgmentbox(string box)
{
yield return new WaitForSeconds(0.95f);
switch (box)
{
case "11":
Deletebox("5402");
break;
case "12":
Deletebox("5402");
break;
case "21":
Deletebox("5406");
break;
case "22":
Deletebox("5406");
break;
case "31":
Deletebox("5408");
break;
case "32":
Deletebox("5408");
break;
case "41":
Deletebox("5410");
break;
case "42":
Deletebox("5410");
break;
case "51":
Deletebox("5414");
break;
case "52":
Deletebox("5414");
break;
case "61":
Deletebox("5416");
break;
case "62":
Deletebox("5416");
break;
case "71":
Deletebox("5418");
break;
case "72":
Deletebox("5418");
break;
default:
break;
}
}
/// <summary>
/// 放下箱子
/// </summary>
/// <param name="box"></param>
IEnumerator Judgmentbox2(string box)
{
yield return new WaitForSeconds(1.03f);
switch (box)
{
case "111":
Addbox("5404");
break;
case "112":
Addbox("5404");
break;
case "121":
Addbox("5410");
break;
case "122":
Addbox("5410");
break;
case "131":
Addbox("5412");
break;
case "132":
Addbox("5412");
break;
default:
break;
}
}
/// <summary>
/// 删除对应点位箱子
/// </summary>
public void Deletebox(string point)
{
if (MqttManager.Instance.GetTransformByName(point))
{
Transform points = MqttManager.Instance.GetTransformByName(point);
if (points.GetChild(0).transform.childCount == 1)
{
GameObject box = points.transform.GetChild(0).GetChild(0).gameObject;
box.transform.SetParent(null);
box.transform.position = this.points.transform.position;
box.transform.localEulerAngles = new Vector3(0, 0, 0);
box.transform.SetParent(this.points);
//Debug.Log("删除第一个对应箱子");
}
else if (points.childCount == 1)
{
GameObject box = points.transform.GetChild(0).gameObject;
box.transform.SetParent(null);
box.transform.position = this.points.transform.position;
box.transform.localEulerAngles = new Vector3(0, 0, 0);
box.transform.SetParent(this.points);
//Debug.Log("删除第二个对应箱子");
}
else
{
//Debug.Log("找不到删除对象");
}
}
}
/// <summary>
/// 增加对应箱子
/// </summary>
public void Addbox(string point)
{
if (MqttManager.Instance.GetTransformByName(point))
{
Transform points = MqttManager.Instance.GetTransformByName(point);
if (points.childCount == 0)
{
//Debug.Log("添加第一个箱子");
boxdata = Instantiate(Box, points.transform);
}
else if (points.childCount == 1)
{
//Debug.Log("添加第二个箱子");
GameObject box = points.GetChild(0).gameObject;
if (box)
{
Destroy(box);
}
GameObject game = Instantiate(Box2, points.transform);
}
}
}
/// <summary>
/// 删除手臂的箱子
/// </summary>
public void Laydown()
{
if (points.transform.childCount > 0)
{
GameObject game = points.transform.GetChild(0).gameObject;
//Destroy(game);
}
}
}