using ET.PeopleBehave; 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(this People self) { PeopleBehaveComponent.Instance?.HandlePeopleBehave(self); } public static void UpdateAnimatorByBehave(People people) { var pAnimator = people.GetComponent(); if (pAnimator == null) { return; } 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; } } }