You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
339 lines
12 KiB
339 lines
12 KiB
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; |
|
} |
|
}
|
|
|