网上演练贵港万达广场(人员密集)
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

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;
}
}