using UnityEngine; using UnityEngine.AI; namespace ET { [FriendClass(typeof(Gather))] [FriendClass(typeof(ResourceViewComponent))] [FriendClass(typeof(ResourcePoint))] [FriendClass(typeof(Construct))] [FriendClass(typeof(PeopleViewComponent))] [FriendClass(typeof(People))] public static class PeopleViewHelper { public static string GetHeadIconUrlByGender(int gender) { var iconName = gender == 0? "Head_M" : "Head_F"; var url = $"ui://{FUIPackage.Common}/{iconName}"; return url; } public static void CheckWork(People people) { // 检查是否在采集资源的路上 Unit unit = UnitHelper.GetMyUnitFromZoneScene(people.ZoneScene()); PeopleViewComponent pView = people.GetComponent(); int behave = people.GetBehaveType(); long targetId = people.GetTargetId(); switch (behave) { case ConstBehaveType.BEHAVE_IDLE: break; case ConstBehaveType.BEHAVE_PREPARE_GATHER: GatherComponent gc = unit.GetComponent(); Gather gather = gc?.GetGatherByPeopleId(people.Id); if (gather != null && gather.PreparePeopleIdList.Contains(people.Id)) { ResourcePointComponent rc = unit.GetComponent(); var resource = rc.GetChild(gather.ResPointId); var resourceViewComp = resource.GetComponent(); if (resourceViewComp == null) { Log.Error($"Can't find resourceViewComp of {resource.Id} : {resource.ConfigId}"); } pView.MoveToPos(resourceViewComp.GetWorkerPos()); } break; case ConstBehaveType.BEHAVE_PREPARE_CONSTRUCT: ConstructComponent cc = unit.GetComponent(); if (cc != null) { Construct c = cc.GetChild(targetId); if (c != null) { if (c.PreparePeopleIdList.Contains(people.Id)) { var cView = c.GetComponent(); pView.MoveToPos(cView.GetWorkerPos(people.Id)); } } } break; } } public static string GetPeopleStateMsg(int behaveType) { string msg = "未知"; switch (behaveType) { case ConstBehaveType.BEHAVE_IDLE: msg = "空闲"; break; case ConstBehaveType.BEHAVE_PREPARE_GATHER: msg = "去采集的路上"; break; case ConstBehaveType.BEHAVE_GATHER: msg = "正在采集"; break; case ConstBehaveType.BEHAVE_PREPARE_CONSTRUCT: msg = "在去建造的路上"; break; case ConstBehaveType.BEHAVE_CONSTRUCT: msg = "正在建造"; break; default: Log.Error($"Unkown behaviour type:{behaveType}"); break; } return msg; } public static void UpdateAnimatorByBehave(People people) { var pAnimator = people.GetComponent(); int behave = people.GetBehaveType(); switch (behave) { case ConstBehaveType.BEHAVE_IDLE: pAnimator.StopAll(); pAnimator.PlayAnimation(PeopleAnimEnum.Idle); break; case ConstBehaveType.BEHAVE_PREPARE_GATHER: case ConstBehaveType.BEHAVE_PREPARE_CONSTRUCT: pAnimator.StopAll(); pAnimator.PlayAnimation(PeopleAnimEnum.Run); break; case ConstBehaveType.BEHAVE_GATHER: pAnimator.StopAll(); pAnimator.PlayAnimation(PeopleAnimEnum.Gather); break; case ConstBehaveType.BEHAVE_CONSTRUCT: pAnimator.StopAll(); pAnimator.PlayAnimation(PeopleAnimEnum.Construct); break; default: Debug.LogWarning("Unhandled behave type:" + behave); break; } } public static Vector3 GetRandomMovePos(PeopleViewComponent peopleViewComponent, float radius) { var navAgent = peopleViewComponent.Agent; var path = new NavMeshPath(); Vector3 newDest = peopleViewComponent.PeopleRoot.transform.position; int count = 0; do { Vector3 randomDir = Random.insideUnitCircle * radius; newDest = randomDir + peopleViewComponent.PeopleRoot.transform.position; navAgent.CalculatePath(newDest, path); count++; if (count > 10) { break; } } while (path.status != NavMeshPathStatus.PathComplete); return newDest; } } }