300 lines
10 KiB
C#
300 lines
10 KiB
C#
using Cysharp.Threading.Tasks;
|
|
using DefaultNamespace;
|
|
using DG.Tweening;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public enum Batterytoggle
|
|
{
|
|
None,
|
|
movement1,
|
|
movement2,
|
|
movement3,
|
|
movement4,
|
|
movement5,
|
|
movement6,
|
|
movement7,
|
|
movement8,
|
|
}
|
|
public class Batteryanimation : MonoBehaviour
|
|
{
|
|
[Header("电池id")]
|
|
public string ID;
|
|
[Header("所有电池所位移的点位和需要初始化设备点位")]
|
|
public Transform point1, point2, point3, point4, point5, point6, point7, point8;
|
|
[Header("电池需要初始化")]
|
|
public GameObject battery;
|
|
[Header("电池爪子")]
|
|
public Transform paw;
|
|
[Header("判断是否有电池")]
|
|
public Transform Batspoint;
|
|
/// <summary>
|
|
/// 初始化判断
|
|
/// </summary>
|
|
private bool ispcon = false;
|
|
private float speed = 1f;
|
|
private Batterytoggle batterytoggle = Batterytoggle.None;
|
|
private Batterytoggle battery2;
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
/// <summary>
|
|
/// 接收电池数据
|
|
/// </summary>
|
|
/// <param name="qcbd"></param>
|
|
public void Batterydata(Qcbd qcbd)
|
|
{
|
|
if (!ispcon)
|
|
{
|
|
if (qcbd.BatteryStatus1 != "0")
|
|
{
|
|
Initbattery(point6);
|
|
}
|
|
if (qcbd.BatteryStatus2 != "0")
|
|
{
|
|
Initbattery(point7);
|
|
}
|
|
if (qcbd.BatteryStatus3 != "0")
|
|
{
|
|
Initbattery(point8);
|
|
}
|
|
ispcon = true;
|
|
}
|
|
if (qcbd.Take0Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement1;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作1");
|
|
}
|
|
//Takebattery(point1, point5);
|
|
}
|
|
else if (qcbd.Put0Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement2;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作2");
|
|
}
|
|
// Putbattery(point1, point5);
|
|
}
|
|
else if (qcbd.Take1Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement3;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作3");
|
|
}
|
|
//Batterywithdrawal(point2, point6);
|
|
}
|
|
else if (qcbd.Put1Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement4;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作4");
|
|
}
|
|
//Dischargecell(point2, point6);
|
|
}
|
|
else if (qcbd.Take2Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement5;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作5");
|
|
}
|
|
//Batterywithdrawal(point3, point7);
|
|
}
|
|
else if (qcbd.Put2Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement6;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作6");
|
|
}
|
|
//Dischargecell(point3, point7);
|
|
}
|
|
else if (qcbd.Take3Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement7;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作7");
|
|
}
|
|
//Batterywithdrawal(point4, point8);
|
|
}
|
|
else if (qcbd.Put3Battery == "True")
|
|
{
|
|
batterytoggle = Batterytoggle.movement8;
|
|
if (batterytoggle != battery2)
|
|
{
|
|
Switchanimation(batterytoggle);
|
|
//Debug.Log("电池操作8");
|
|
}
|
|
//Dischargecell(point4, point8);
|
|
}
|
|
}
|
|
public async UniTask Switchanimation(Batterytoggle batterytoggle)
|
|
{
|
|
switch (batterytoggle)
|
|
{
|
|
case Batterytoggle.None:
|
|
break;
|
|
case Batterytoggle.movement1:
|
|
Takebattery(point1, point5);
|
|
battery2 = Batterytoggle.movement1;
|
|
break;
|
|
case Batterytoggle.movement2:
|
|
Putbattery(point1, point5);
|
|
battery2 = Batterytoggle.movement2;
|
|
break;
|
|
case Batterytoggle.movement3:
|
|
Batterywithdrawal(point2, point6);
|
|
battery2 = Batterytoggle.movement3;
|
|
break;
|
|
case Batterytoggle.movement4:
|
|
Dischargecell(point2, point6);
|
|
battery2 = Batterytoggle.movement4;
|
|
break;
|
|
case Batterytoggle.movement5:
|
|
Batterywithdrawal(point3, point7);
|
|
battery2 = Batterytoggle.movement5;
|
|
break;
|
|
case Batterytoggle.movement6:
|
|
Dischargecell(point3, point7);
|
|
battery2 = Batterytoggle.movement6;
|
|
break;
|
|
case Batterytoggle.movement7:
|
|
Batterywithdrawal(point4, point8);
|
|
battery2 = Batterytoggle.movement7;
|
|
break;
|
|
case Batterytoggle.movement8:
|
|
Dischargecell(point4, point8);
|
|
battery2 = Batterytoggle.movement8;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 电池初始化
|
|
/// </summary>
|
|
/// <param name="pos"></param>
|
|
public void Initbattery(Transform pos)
|
|
{
|
|
if (pos)
|
|
{
|
|
GameObject battery = Instantiate(this.battery, pos);
|
|
battery.transform.SetParent(pos);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 取小车电池
|
|
/// </summary>
|
|
public async UniTask Takebattery(Transform pos, Transform pos2)
|
|
{
|
|
if (pos && pos2)
|
|
{
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
paw.transform.DOMove(pos2.position, (Vector3.Distance(paw.transform.position, pos2.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
GameObject battery = Instantiate(this.battery, Batspoint);
|
|
battery.transform.SetParent(Batspoint);
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 给小车装电池
|
|
/// </summary>
|
|
/// <param name="pos"></param>
|
|
/// <param name="pos2"></param>
|
|
public async UniTask Putbattery(Transform pos, Transform pos2)
|
|
{
|
|
if (pos && pos2)
|
|
{
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
paw.transform.DOMove(pos2.position, (Vector3.Distance(paw.transform.position, pos2.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
if (Batspoint.childCount > 0)
|
|
{
|
|
GameObject battery = Batspoint.transform.GetChild(0).gameObject;
|
|
if (battery != null)
|
|
{
|
|
Destroy(battery);
|
|
}
|
|
}
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 放电池
|
|
/// </summary>
|
|
public async UniTask Dischargecell(Transform pos, Transform pos2)
|
|
{
|
|
if (pos && pos2)
|
|
{
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
paw.transform.DOMove(pos2.position, (Vector3.Distance(paw.transform.position, pos2.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
if (Batspoint.childCount > 0 && pos2.childCount == 0)
|
|
{
|
|
GameObject bat = Batspoint.transform.GetChild(0).gameObject;
|
|
bat.transform.SetParent(null);
|
|
bat.transform.position = pos2.position;
|
|
bat.transform.SetParent(pos2);
|
|
}
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 取电池
|
|
/// </summary>
|
|
/// <param name="pos"></param>
|
|
/// <param name="pos2"></param>
|
|
public async UniTask Batterywithdrawal(Transform pos, Transform pos2)
|
|
{
|
|
if (pos && pos2)
|
|
{
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
paw.transform.DOMove(pos2.position, (Vector3.Distance(paw.transform.position, pos2.position) / speed)).SetEase(Ease.InOutQuad).OnComplete(() =>
|
|
{
|
|
if (pos2.childCount > 0 && Batspoint.childCount == 0)
|
|
{
|
|
GameObject bat = pos2.transform.GetChild(0).gameObject;
|
|
if (bat != null)
|
|
{
|
|
bat.transform.SetParent(null);
|
|
bat.transform.position = Batspoint.position;
|
|
bat.transform.SetParent(Batspoint);
|
|
}
|
|
}
|
|
paw.transform.DOMove(pos.position, (Vector3.Distance(paw.transform.position, pos.position) / speed)).SetEase(Ease.InOutQuad);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|