Exemple #1
0
 public MoveToFollowTargetNode(FollowTargetType FollowTargetType, float SearchRange, float StartDistance, float StopDistance)
 {
     this.followTargetType = FollowTargetType;
     this.searchRange      = SearchRange;
     this.startDistance    = StartDistance;
     this.stopDistance     = StopDistance;
 }
Exemple #2
0
        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);
        }