public MoveToFollowTargetNode(FollowTargetType FollowTargetType, float SearchRange, float StartDistance, float StopDistance) { this.followTargetType = FollowTargetType; this.searchRange = SearchRange; this.startDistance = StartDistance; this.stopDistance = StopDistance; }
public bool MoveToFollowTarget(FollowTargetType followTargetType, float searchRange, float startDistance, float stopDistance) { if (this.owner.IsWeak) { return(false); } if (!this.ownerActor) { return(false); } float hitRadius = XUtility.GetHitRadius(this.ownerActor.FixTransform); if (this.owner.FollowTarget == null) { List <EntityParent> list = new List <EntityParent>(); switch (followTargetType) { case FollowTargetType.Self: list.Add(EntityWorld.Instance.EntSelf); break; case FollowTargetType.OtherPlayer: list.AddRange(EntityWorld.Instance.GetEntities <EntityPlayer>().Values); break; case FollowTargetType.Boss: { List <EntityParent> values = EntityWorld.Instance.GetEntities <EntityMonster>().Values; for (int i = 0; i < values.get_Count(); i++) { if (values.get_Item(i).IsLogicBoss) { list.Add(values.get_Item(i)); } } break; } } EntityParent followTarget = null; float num = 3.40282347E+38f; for (int j = 0; j < list.get_Count(); j++) { if (list.get_Item(j).Actor) { if (list.get_Item(j).Actor.FixTransform) { float num2 = XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), list.get_Item(j).Actor.FixTransform.get_position()) - hitRadius - XUtility.GetHitRadius(list.get_Item(j).Actor.FixTransform); if (num2 < searchRange && num2 < num) { followTarget = list.get_Item(j); num = num2; } } } } this.owner.FollowTarget = followTarget; } if (this.owner.FollowTarget == null) { return(false); } if (!this.owner.FollowTarget.Actor) { this.owner.FollowTarget = null; return(false); } float num3 = XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.FollowTarget.Actor.FixTransform.get_position()) - hitRadius - XUtility.GetHitRadius(this.owner.FollowTarget.Actor.FixTransform); if (num3 < stopDistance) { this.ownerActor.StopMoveToPoint(); } else if (num3 > startDistance) { this.ownerActor.MoveToPoint(this.owner.FollowTarget.Actor.FixTransform.get_position(), 0f, null); } return(true); }