|
|
|
using AX.MessageSystem;
|
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.UI;
|
|
|
|
using System;
|
|
|
|
using AX.NetworkSystem;
|
|
|
|
using UnityEngine.AI;
|
|
|
|
using AX.NetworkSystem;
|
|
|
|
|
|
|
|
public class HaemalStrand : MonoBehaviour
|
|
|
|
{
|
|
|
|
|
|
|
|
private bool DrillBegin;
|
|
|
|
/// <summary>
|
|
|
|
/// 跟随目标物体
|
|
|
|
/// </summary>
|
|
|
|
public GameObject TargetObj;
|
|
|
|
/// <summary>
|
|
|
|
/// 当前血量
|
|
|
|
/// </summary>
|
|
|
|
public float Haemal;
|
|
|
|
/// <summary>
|
|
|
|
/// 最大血量
|
|
|
|
/// </summary>
|
|
|
|
public float MaxHaemal;
|
|
|
|
/// <summary>
|
|
|
|
/// 被使用的技能显示
|
|
|
|
/// </summary>
|
|
|
|
private string showSkill;
|
|
|
|
protected AroundState around;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 是否带了面具或者其他需要显示图片的东西
|
|
|
|
/// </summary>
|
|
|
|
private Transform gasMask;
|
|
|
|
/// <summary>
|
|
|
|
/// 被使用的技能或者其他说明
|
|
|
|
/// </summary>
|
|
|
|
private Transform skill;
|
|
|
|
private Transform progress;
|
|
|
|
private Transform showHaemal;
|
|
|
|
private Transform HaemalText;
|
|
|
|
private Slider progressslider;
|
|
|
|
|
|
|
|
public Vector3 offest;
|
|
|
|
private Transform P_SafeArea;
|
|
|
|
|
|
|
|
// Use this for initialization
|
|
|
|
void Start()
|
|
|
|
{
|
|
|
|
DrillBegin = GameSettings.othersSettings.isStartDrill;
|
|
|
|
showHaemal = transform.Find("ShowHaemal");
|
|
|
|
gasMask = transform.Find("GasMask");
|
|
|
|
progress = transform.Find("Progress");
|
|
|
|
skill = progress.transform.Find("Skill");
|
|
|
|
progressslider = progress.GetComponent<Slider>();
|
|
|
|
HaemalText = transform.Find("HaemalText");
|
|
|
|
P_SafeArea = GameObject.Find("P_AllParent/P_Tools/P_SafeArea").transform;
|
|
|
|
//DrillBegin = EventReportController.Instance.DrillBegin;
|
|
|
|
HaemalShow();
|
|
|
|
}
|
|
|
|
void Update()
|
|
|
|
{
|
|
|
|
|
|
|
|
HaemalShow();
|
|
|
|
FollowTarget();
|
|
|
|
}
|
|
|
|
public void FollowTarget()
|
|
|
|
{
|
|
|
|
if (!IsInView(TargetObj.transform.position))
|
|
|
|
{
|
|
|
|
GetComponent<RectTransform>().transform.position = new Vector2(10000, 10000);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Vector3 point = TargetObj.transform.position + offest;
|
|
|
|
Vector3 Targetscreenpos = Camera.main.WorldToScreenPoint(point);
|
|
|
|
Vector3 viewpos = GameObject.Find("UICamera").GetComponent<Camera>().ScreenToWorldPoint(Targetscreenpos);
|
|
|
|
viewpos.z = 0;
|
|
|
|
|
|
|
|
GetComponent<RectTransform>().transform.position = viewpos;
|
|
|
|
//if (gameObject.activeInHierarchy == true)
|
|
|
|
//{
|
|
|
|
// Vector3 Targetscreenpos = Camera.main.WorldToScreenPoint(TargetObj.transform.position);
|
|
|
|
// GetComponent<RectTransform>().transform.position = Targetscreenpos;
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 血量显示
|
|
|
|
/// </summary>
|
|
|
|
void HaemalShow()
|
|
|
|
{
|
|
|
|
Haemal = TargetObj.GetComponent<BaseHaemalController>().Haemal;
|
|
|
|
if (Haemal <= 0)
|
|
|
|
{
|
|
|
|
Haemal = 0;
|
|
|
|
}
|
|
|
|
showHaemal.GetComponent<Image>().fillAmount = Haemal / MaxHaemal;
|
|
|
|
HaemalText.GetComponent<Text>().text = Mathf.Ceil(Haemal) + "/" + MaxHaemal;
|
|
|
|
}
|
|
|
|
public bool IsInView(Vector3 worldPos)
|
|
|
|
{
|
|
|
|
Transform camTransform = Camera.main.transform;
|
|
|
|
Vector2 viewPos = Camera.main.WorldToViewportPoint(worldPos);
|
|
|
|
Vector3 dir = (worldPos - camTransform.position).normalized;
|
|
|
|
float dot = Vector3.Dot(camTransform.forward, dir);//判断物体是否在相机前面
|
|
|
|
|
|
|
|
if (dot > 0 && viewPos.x >= 0 && viewPos.x <= 1 && viewPos.y >= 0 && viewPos.y <= 1)
|
|
|
|
return true;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 急救或者移动重伤员时进度条显示
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="fireskill"></param>
|
|
|
|
public void FirstAir(GameObject fireman)
|
|
|
|
{
|
|
|
|
progress.gameObject.SetActive(true);
|
|
|
|
|
|
|
|
skill.GetComponent<Text>().text = "急救中";
|
|
|
|
|
|
|
|
// skill.GetComponent<Text>().text = fireskill.ToString() + "中";
|
|
|
|
showSkill = skill.GetComponent<Text>().text;
|
|
|
|
if (TargetObj.GetComponent<WoundedSave>())
|
|
|
|
{
|
|
|
|
if (!TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving)
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
if (TargetObj.GetComponent<TrappedMoveFree>())
|
|
|
|
{
|
|
|
|
if (!TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving)
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
StartCoroutine(FirstAirprogressloading(fireman));
|
|
|
|
fireman.GetComponent<FireManControl>().IsFirstAirOrMoving = true;
|
|
|
|
}
|
|
|
|
IEnumerator FirstAirprogressloading(GameObject fireman)
|
|
|
|
{
|
|
|
|
while (progressslider.value<1)
|
|
|
|
{
|
|
|
|
yield return new WaitForSeconds(1f);
|
|
|
|
progressslider.value += 0.1f;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (progressslider.value>=1)
|
|
|
|
{
|
|
|
|
EndProgress(fireman,null);
|
|
|
|
}
|
|
|
|
if(TargetObj.GetComponent<BaseHaemalController>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<BaseHaemalController>().BeFristAid = true;
|
|
|
|
LoadPromptWin.Instance.LoadTextPromptWindow("急救完成",1f);
|
|
|
|
}
|
|
|
|
if (TargetObj.GetComponent<TrappedMoveFree>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving = false;
|
|
|
|
}
|
|
|
|
if (TargetObj.GetComponent<WoundedSave>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void EndProgress(GameObject fireman1,GameObject fireman2)
|
|
|
|
{
|
|
|
|
// MessageDispatcher.SendMessage("End_Firstair_Or_Moving",fireskill);
|
|
|
|
progressslider.value = 0;
|
|
|
|
showSkill = "";
|
|
|
|
skill.GetComponent<Text>().text = "";
|
|
|
|
progress.gameObject.SetActive(false);
|
|
|
|
//if (TargetObj.GetComponent<TrappedMoveFree>())
|
|
|
|
//{
|
|
|
|
// TargetObj. GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving = false;
|
|
|
|
//}
|
|
|
|
//if (TargetObj.GetComponent<WoundedSave>())
|
|
|
|
//{
|
|
|
|
// TargetObj. GetComponent<WoundedSave>().IsBefirstAirOrMoving = false;
|
|
|
|
//}
|
|
|
|
if (TargetObj.GetComponent<BaseHaemalController>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<BaseHaemalController>().IsMoving = false;
|
|
|
|
}
|
|
|
|
fireman1.GetComponent<FireManControl>().IsFirstAirOrMoving = false;
|
|
|
|
if (fireman2!=null)
|
|
|
|
{
|
|
|
|
fireman2.GetComponent<FireManControl>().IsFirstAirOrMoving = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Moving(GameObject fireman1,GameObject fireman2)
|
|
|
|
{
|
|
|
|
progress.gameObject.SetActive(true);
|
|
|
|
|
|
|
|
skill.GetComponent<Text>().text = "移动中";
|
|
|
|
|
|
|
|
// skill.GetComponent<Text>().text = fireskill.ToString() + "中";
|
|
|
|
showSkill = skill.GetComponent<Text>().text;
|
|
|
|
if (TargetObj.GetComponent<WoundedSave>())
|
|
|
|
{
|
|
|
|
if (!TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving)
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
if (TargetObj.GetComponent<TrappedMoveFree>())
|
|
|
|
{
|
|
|
|
if (!TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving)
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
StartCoroutine(Movingprogressloading(fireman1,fireman2));
|
|
|
|
fireman1.GetComponent<FireManControl>().IsFirstAirOrMoving = true;
|
|
|
|
fireman2.GetComponent<FireManControl>().IsFirstAirOrMoving = true;
|
|
|
|
}
|
|
|
|
IEnumerator Movingprogressloading(GameObject fireman1, GameObject fireman2)
|
|
|
|
{
|
|
|
|
//WounderMoveSyncData arg1 = new WounderMoveSyncData()
|
|
|
|
//{
|
|
|
|
// SendUserID = CurrentUserInfo.mySelf.Id,
|
|
|
|
// WounderId = TargetObj.GetComponent<BaseGameObjInfo>().gameObjID,
|
|
|
|
// IsBegianMove = true
|
|
|
|
//};
|
|
|
|
//NetworkManager.Default.SendAsync("WOUNDER_MOVE_SYNC", arg1);
|
|
|
|
while (progressslider.value < 1)
|
|
|
|
{
|
|
|
|
yield return new WaitForSeconds(1f);
|
|
|
|
progressslider.value += (1f/30f);
|
|
|
|
|
|
|
|
}
|
|
|
|
if (progressslider.value >= 1)
|
|
|
|
{
|
|
|
|
EndProgress(fireman1, fireman2);
|
|
|
|
}
|
|
|
|
//读条结束
|
|
|
|
if (P_SafeArea.childCount < 1)
|
|
|
|
{
|
|
|
|
LoadPromptWin.Instance.LoadTextPromptWindow("尚未设置安全区,请重新移动", 2f);
|
|
|
|
if (TargetObj.GetComponent<TrappedMoveFree>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (TargetObj.GetComponent<WoundedSave>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SafeAreaMessage safearea = P_SafeArea.GetChild(0).GetComponent<SafeAreaMessage>();
|
|
|
|
Debug.Log(safearea.transform.position+"安全区位置");
|
|
|
|
Vector3 offpos = safearea.transform.position + safearea.GetoffestPos(safearea.HasWounderNum);
|
|
|
|
|
|
|
|
|
|
|
|
fireman1.transform.position = offpos + new Vector3(0.3f, 0.25f, 0.5f);
|
|
|
|
fireman1.GetComponent<AgentController>().StopAllCoroutines();
|
|
|
|
fireman1.GetComponent<AgentController>().enabled = false;
|
|
|
|
fireman1.GetComponent<NavMeshAgent>().enabled = false;
|
|
|
|
|
|
|
|
fireman2.transform.position = offpos + new Vector3(-0.3f, 0.25f, -0.5f);
|
|
|
|
|
|
|
|
fireman2.GetComponent<AgentController>().StopAllCoroutines();
|
|
|
|
fireman2.GetComponent<AgentController>().enabled = false;
|
|
|
|
fireman2.GetComponent<NavMeshAgent>().enabled = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (TargetObj.GetComponent<NavMeshAgent>())
|
|
|
|
{
|
|
|
|
|
|
|
|
TargetObj.transform.position = offpos;
|
|
|
|
|
|
|
|
TargetObj.GetComponent<TrappedPathFind>().StopAllCoroutines();
|
|
|
|
TargetObj.GetComponent<TrappedPathFind>().enabled = false;
|
|
|
|
TargetObj.GetComponent<NavMeshAgent>().enabled = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
TargetObj.transform.position = offpos;
|
|
|
|
}
|
|
|
|
|
|
|
|
StartCoroutine(OpenNav(fireman1,fireman2,TargetObj));
|
|
|
|
|
|
|
|
fireman1.GetComponent<FireManControl>().IsFirstAirOrMoving = false;
|
|
|
|
fireman2.GetComponent<FireManControl>().IsFirstAirOrMoving = false;
|
|
|
|
safearea.HasWounderNum= safearea.HasWounderNum+1;
|
|
|
|
if (TargetObj.GetComponent<TrappedMoveFree>())
|
|
|
|
{
|
|
|
|
//TargetObj.GetComponent<NavMeshAgent>().SetDestination(TargetObj.transform.position);
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().TargetPosition = TargetObj.transform.position;
|
|
|
|
TargetObj.GetComponent<TrappedPathFind>().pathFindEnable = false;
|
|
|
|
//TargetObj.GetComponent<NavMeshAgent>().baseOffset = 0.2f;
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().IsBefirstAirOrMoving = false;
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().OverMoveOrGuidance = true;
|
|
|
|
TargetObj.GetComponent<TrappedMoveFree>().SaveFrirmanUserId = fireman1.GetComponent<BaseGameObjInfo>().UserID;
|
|
|
|
TrappedTime.CheckStopTime();
|
|
|
|
}
|
|
|
|
if (TargetObj.GetComponent<WoundedSave>())
|
|
|
|
{
|
|
|
|
TargetObj.GetComponent<WoundedSave>().IsBefirstAirOrMoving = false;
|
|
|
|
TargetObj.GetComponent<WoundedSave>().OverMoveOrGuidance = true;
|
|
|
|
TargetObj.GetComponent<WoundedSave>().SaveFrirmanUserId = fireman1.GetComponent<BaseGameObjInfo>().UserID;
|
|
|
|
TrappedTime.CheckStopTime();
|
|
|
|
}
|
|
|
|
WounderMoveSyncData arg = new WounderMoveSyncData()
|
|
|
|
{
|
|
|
|
SendUserID = CurrentUserInfo.mySelf.Id,
|
|
|
|
WounderId = TargetObj.GetComponent<BaseGameObjInfo>().gameObjID,
|
|
|
|
Fireman1Id = fireman1.GetComponent<BaseGameObjInfo>().gameObjID,
|
|
|
|
Fireman2Id = fireman2.GetComponent<BaseGameObjInfo>().gameObjID,
|
|
|
|
WounderPos = TargetObj.transform.position,
|
|
|
|
Fireman1Pos = fireman1.transform.position,
|
|
|
|
Fireman2Pos = fireman2.transform.position,
|
|
|
|
IsBegianMove = false
|
|
|
|
};
|
|
|
|
NetworkManager.Default.SendAsync("WOUNDER_MOVE_SYNC",arg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
IEnumerator OpenNav(GameObject fire1,GameObject fire2,GameObject target)
|
|
|
|
{
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
|
|
fire1.GetComponent<NavMeshAgent>().enabled = true;
|
|
|
|
fire1.GetComponent<AgentController>().enabled = true;
|
|
|
|
|
|
|
|
fire2.GetComponent<NavMeshAgent>().enabled = true;
|
|
|
|
fire2.GetComponent<AgentController>().enabled = true;
|
|
|
|
}
|
|
|
|
}
|