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; /// /// 初始化判断 /// private bool ispcon = false; private float speed = 1f; private Batterytoggle batterytoggle = Batterytoggle.None; private Batterytoggle battery2; void Start() { } void Update() { } /// /// 接收电池数据 /// /// 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; } } /// /// 电池初始化 /// /// public void Initbattery(Transform pos) { if (pos) { GameObject battery = Instantiate(this.battery, pos); battery.transform.SetParent(pos); } } /// /// 取小车电池 /// 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); }); }); } } /// /// 给小车装电池 /// /// /// 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); }); }); } } /// /// 放电池 /// 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); }); }); } } /// /// 取电池 /// /// /// 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); }); }); } } }