ShanxiKnowledgeBase/SXElectricityFaultA&E/Assets/Screwdriver.cs

533 lines
17 KiB
C#

using DefaultNamespace.ProcessMode;
using DG.Tweening;
using MotionFramework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 螺丝刀
/// </summary>
public class Screwdriver : MonoBehaviour
{
/// <summary>
/// 螺丝刀坐标
/// </summary>
public Transform ScrewdriverTrans;
/// <summary>
/// 接线盒右边螺丝
/// </summary>
public GameObject ScrewR;
/// <summary>
/// 接线盒左边螺丝
/// </summary>
public GameObject ScrewL;
/// <summary>
/// 集中器左侧螺丝
/// </summary>
public GameObject LconcentratorScrew;
/// <summary>
/// 集中器右侧螺丝
/// </summary>
public GameObject RconcentratorScrew;
/// <summary>
/// 集线器外壳螺丝和封印
/// </summary>
public GameObject[] concentratorScrew;
/// <summary>
/// 旧集中器下端螺丝
/// </summary>
public GameObject[] ScrewObj;
/// <summary>
/// 集线盒电线动画
/// </summary>
public SkinnedMeshRenderer ElectricWireSMR;
/// <summary>
/// 电线碰撞
/// </summary>
public BoxCollider ElectricWireBcr;
/// <summary>
/// 集中器盖子
/// </summary>
public GameObject HubCoverObj;
/// <summary>
/// 集中器后边螺丝
/// </summary>
public GameObject[] ConcentratorScrewObj;
/// <summary>
/// 跟换下来的集中器
/// </summary>
public Transform ConcentratorObj;
/// <summary>
/// 电线前段胶带
/// </summary>
public Material TapeMar;
/// <summary>
/// 螺丝刀钳拧开开每个螺丝位置
/// </summary>
public Transform[] OpenScrewScrewdriverTrans;
public InteractiveObjects[] interactiveObjects;
/// <summary>
/// 拆完旧集中器下端螺丝后
/// </summary>
bool issplit =true;
/// <summary>
/// 螺丝刀的原始位置
/// </summary>
private Vector3 originalPosition;
/// <summary>
/// 螺丝刀的原始旋转
/// </summary>
private Quaternion originalRotation;
/// <summary>
/// 工具解绑的父物体
/// </summary>
public GameObject PlayerCamera;
// Start is called before the first frame update
void Start()
{
Init();
}
/// <summary>
/// 初始化
/// </summary>
void Init()
{
ElectricWireBcr.enabled = false;
//ElectricWireSMR.SetBlendShapeWeight(0, 0);
//ElectricWireSMR.SetBlendShapeWeight(1, 0);
//ElectricWireSMR.SetBlendShapeWeight(2, 0);
//ElectricWireSMR.SetBlendShapeWeight(3, 0);
//ElectricWireSMR.SetBlendShapeWeight(4, 0);
ElectricWireSMR.SetBlendShapeWeight(5, 0);
TapeMar.SetFloat("_step_p1", 0);
TapeMar.SetFloat("_step_p2", 0);
TapeMar.SetFloat("_step_p3", 0);
TapeMar.SetFloat("_step_p4", 0);
TapeMar.SetFloat("_step_p5", 0);
TapeMar.SetFloat("_step_p6", 0);
//TapeMar.SetFloat("_step_p1", 1);
originalPosition = ScrewdriverTrans.transform.localPosition;
originalRotation = ScrewdriverTrans.transform.localRotation;
}
float weight;
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{//Camera.transform.forward
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool raycast = Physics.Raycast(ray, out hit);
if (raycast)
{
if (hit.collider.gameObject.name == "盖_固定螺丝_Rup")
{
ScrewdriverTrans.gameObject.transform.SetParent(null);
StartCoroutine(Rscrew());
Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
if (hit.collider.gameObject.name == "固定螺丝_Ldown")
{
ScrewdriverTrans.gameObject.transform.SetParent(null);
StartCoroutine(Lscrew());
Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
if (hit.collider.gameObject.name == "壳固定螺丝_R")
{
ScrewdriverTrans.gameObject.transform.SetParent(null);
Debug.Log(hit.collider.gameObject.name);
StartCoroutine(IERconcentratorScrew()); MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
if (hit.collider.gameObject.name == "壳固定螺丝_L")
{
ScrewdriverTrans.gameObject.transform.SetParent(null);
Debug.Log(hit.collider.gameObject.name);
StartCoroutine(IELconcentratorScrew()); MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
for (int i = 0; i < ScrewObj.Length; i++)
{
if (hit.collider.gameObject.name == ScrewObj[i].name)
{
ScrewdriverTrans.gameObject.transform.SetPositionAndRotation(OpenScrewScrewdriverTrans[4].gameObject.transform.position, OpenScrewScrewdriverTrans[4].gameObject.transform.rotation);
ScrewdriverTrans.gameObject.transform.SetParent(null);
Debug.Log(hit.collider.gameObject.name);
ScrewObj[i].gameObject.SetActive(false);
switch (hit.collider.gameObject.name)
{
case "JZQ_螺丝001":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝0011":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝002":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝0022":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝003":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝0033":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝004":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝0044":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝005":
ScrewObj[i].gameObject.SetActive(false);
break;
case "JZQ_螺丝006":
ScrewObj[i].gameObject.SetActive(false);
break;
}
MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
}
if (hit.collider.gameObject.name == "固定螺丝_Rdown")
{
ScrewdriverTrans.gameObject.transform.SetParent(null);
Debug.Log(hit.collider.gameObject.name);
StartCoroutine(right());
MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
if (hit.collider.gameObject.name == "集电器固定螺丝_Ldown")
{
ScrewdriverTrans.gameObject.transform.SetParent(null);
Debug.Log(hit.collider.gameObject.name);
StartCoroutine(left());
MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject.name);
}
}
}
chaiwan();
if (ConcentratorScrew())
{
StartCoroutine(IEConcentratorScrew());
}
//集中器螺丝全隐藏后播放电线动画
if (AreAllObjectsHidden()&& concentrator.isPlayAni)
{
StartCoroutine(ScrewdriverBack());
ElectricWireBcr.enabled = true;
//StartCoroutine(IEElectricWire());
// Debug.Log("所有螺丝都已隐藏");
}
//集中器外壳上的封印和螺丝
if (AllHubOfHubs())
{
HubCoverObj.gameObject.transform.DOLocalMove(new Vector3(0, 0.0167f, -0.2387f),1);
// Debug.Log("所有集线器盖子螺丝都已隐藏");
}
}
public void chaiwan()
{
if (!issplit)
{
//判断上下两颗螺丝是否全部取下
if (!ScrewObj[0].activeInHierarchy && !ScrewObj[1].activeInHierarchy)
{
StartCoroutine(Frist());
issplit = true;
}
if (!ScrewObj[2].activeInHierarchy && !ScrewObj[3].activeInHierarchy)
{
StartCoroutine(Second());
issplit = true;
}
if (!ScrewObj[4].activeInHierarchy && !ScrewObj[5].activeInHierarchy)
{
StartCoroutine(Thrid());
issplit = true;
}
if (!ScrewObj[6].activeInHierarchy && !ScrewObj[7].activeInHierarchy)
{
StartCoroutine(Fourth());
issplit = true;
}
if (!ScrewObj[9].activeInHierarchy)
{
StartCoroutine(Sixth());
issplit = true;
}
if (!ScrewObj[8].activeInHierarchy)
{
StartCoroutine(Fivth());
issplit = true;
}
}
}
/// <summary>
/// 判断集中器螺丝
/// </summary>
/// <returns></returns>
public bool AreAllObjectsHidden()
{
foreach (GameObject obj in ScrewObj)
{
if (obj.activeInHierarchy)
{
return false;
}
}
return true;
}
/// <summary>
/// 判断集中器外壳上的封印和螺丝
/// </summary>
/// <returns></returns>
public bool AllHubOfHubs()
{
foreach (GameObject obj in concentratorScrew)
{
if (obj.activeInHierarchy)
{
return false;
}
}
return true;
}
/// <summary>
/// 判断集中器后部四颗螺丝
/// </summary>
/// <returns></returns>
public bool ConcentratorScrew()
{
foreach (GameObject obj in ConcentratorScrewObj)
{
if (obj.activeInHierarchy)
{
issplit = false;
return false;
}
}
return true;
}
/// <summary>
/// 螺丝刀返回动画
/// </summary>
/// <returns></returns>
IEnumerator ScrewdriverBack()
{
ScrewdriverTrans.gameObject.transform.SetParent(PlayerCamera.transform);
yield return new WaitForSeconds(0.5f);
ScrewdriverTrans.gameObject.transform.localPosition = originalPosition;
ScrewdriverTrans.gameObject.transform.localRotation = originalRotation;
}
/// <summary>
/// 接线盒右边螺丝
/// </summary>
/// <returns></returns>
IEnumerator Rscrew()
{
//ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 0.5f);
//yield return new WaitForSeconds(0.6f);
//ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2373f, 1.8549f, -1.244f), 1f);
ScrewdriverTrans.transform.position = OpenScrewScrewdriverTrans[0].transform.position;
yield return new WaitForSeconds(1);
//ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
//yield return new WaitForSeconds(1.2f);
//ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.191f, 1.831f, -1.158f), 1f);
//yield return new WaitForSeconds(1.5f);
ScrewR.transform.DOLocalMove(new Vector3(0.1316f, 0.036f, 0.0034f), 1f);
yield return new WaitForSeconds(1.2f);
StartCoroutine(ScrewdriverBack());
ScrewR.gameObject.SetActive(false);
}
/// <summary>
/// 接线盒左边螺丝
/// </summary>
/// <returns></returns>
IEnumerator Lscrew()
{
//ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2373f, 1.8284f, -1.3885f), 0.5f);
//yield return new WaitForSeconds(0.6f);
//ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
ScrewdriverTrans.transform.position = OpenScrewScrewdriverTrans[1].transform.position;
yield return new WaitForSeconds(1f);
//ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 1f);
//yield return new WaitForSeconds(1.5f);
ScrewL.transform.DOLocalMove(new Vector3(-0.07357633f, -0.01137948f, -0.0366f), 1f);
yield return new WaitForSeconds(1.2f);
StartCoroutine(ScrewdriverBack());
ScrewL.gameObject.SetActive(false);
}
/// <summary>
/// 集中器右侧螺丝
/// </summary>
/// <returns></returns>
IEnumerator IERconcentratorScrew()
{
ScrewdriverTrans.transform.position = OpenScrewScrewdriverTrans[2].transform.position;
yield return new WaitForSeconds(1.5f);
RconcentratorScrew.transform.DOLocalMove(new Vector3(0.1143f, 0.0216f, -0.1031f), 0.5f);
yield return new WaitForSeconds(1f);
StartCoroutine(ScrewdriverBack());
RconcentratorScrew.gameObject.SetActive(false);
}
/// <summary>
/// 集中器左侧螺丝
/// </summary>
/// <returns></returns>
IEnumerator IELconcentratorScrew()
{
//ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2669f, 2.0962f, -1.4616f), 1f);
//yield return new WaitForSeconds(1.5f);
//ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
//yield return new WaitForSeconds(1.5f);
//ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 1f);
ScrewdriverTrans.transform.position = OpenScrewScrewdriverTrans[3].transform.position;
yield return new WaitForSeconds(1.5f);
LconcentratorScrew.transform.DOLocalMove(new Vector3(-0.1188f, 0.0216f, -0.1031f), 0.5f);
yield return new WaitForSeconds(1f);
StartCoroutine(ScrewdriverBack());
LconcentratorScrew.gameObject.SetActive(false);
}
/// <summary>
/// 集线器螺丝拆完后电线动画
/// </summary>
/// <returns></returns>
IEnumerator IEElectricWire(string name ,GameObject[] Screw)
{
for (int a = 0; a < Screw.Length; a++)
{
if (Screw[a].gameObject.activeInHierarchy)
{
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.001f);
ElectricWireSMR.SetBlendShapeWeight(0, i);
}
}
}
}
#region 线
IEnumerator Frist()
{
//yield return new WaitForSeconds(1f);
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.001f);
ElectricWireSMR.SetBlendShapeWeight(0, i);
}
}
IEnumerator Second()
{
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.002f);
ElectricWireSMR.SetBlendShapeWeight(1, i);
}
}
IEnumerator Thrid()
{
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.002f);
ElectricWireSMR.SetBlendShapeWeight(2, i);
}
}
IEnumerator Fourth()
{
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.002f);
ElectricWireSMR.SetBlendShapeWeight(3, i);
}
}
IEnumerator Fivth()
{
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.002f);
ElectricWireSMR.SetBlendShapeWeight(4, i);
}
}
IEnumerator Sixth()
{
for (int i = 0; i <= 100; i++)
{
yield return new WaitForSeconds(0.002f);
ElectricWireSMR.SetBlendShapeWeight(5, i);
}
}
#endregion
/// <summary>
/// 集中器背后螺丝全部拆完集中器动画
/// </summary>
/// <returns></returns>
IEnumerator IEConcentratorScrew()
{
ConcentratorObj.gameObject.transform.DOLocalMove(new Vector3(-0.2719f, 2.24768f, -0.0772f), 0.5f);
yield return new WaitForSeconds(1f);
ConcentratorObj.gameObject.SetActive(false);
}
/// <summary>
/// 旧的集线器背后右边螺丝
/// </summary>
/// <returns></returns>
IEnumerator right()
{
ScrewdriverTrans.transform.position = OpenScrewScrewdriverTrans[4].transform.position;
yield return new WaitForSeconds(0.5f);
ConcentratorScrewObj[0].SetActive(false);
ConcentratorScrewObj[1].SetActive(false);
}
IEnumerator left()
{
ScrewdriverTrans.transform.position = OpenScrewScrewdriverTrans[4].transform.position;
yield return new WaitForSeconds(0.5f);
ConcentratorScrewObj[2].SetActive(false);
ConcentratorScrewObj[3].SetActive(false);
}
}