Пример #1
0
        public void MoveToHome()
        {
            if (DebugMove)
            {
                Console.WriteLine($"{Name}.MoveToHome()");
            }

            MonsterState = State.Return;
            AttackTarget = null;

            var home = GetPosition(PositionType.Home);

            if (Location.Equals(home))
            {
                Sleep();
                return;
            }

            NextCancelTime = Timers.RunningTime + 5.0f;

            MoveTo(home, RunRate);

            var mvp = GetMovementParameters();

            mvp.DistanceToObject = 0.6f;

            PhysicsObj.MoveToPosition(new Physics.Common.Position(home), mvp);
            IsMoving = true;
        }
Пример #2
0
        public void MoveWeenie(Position to, float distanceToObject, bool finalHeading)
        {
            if (MoveSpeed == 0.0f)
            {
                GetMovementSpeed();
            }

            var moveToPosition = new Motion(this, to);

            moveToPosition.MoveToParameters.DistanceToObject    = distanceToObject;
            moveToPosition.MoveToParameters.MovementParameters |= MovementParams.StopCompletely;
            moveToPosition.MoveToParameters.MovementParameters &= ~MovementParams.UseSpheres;

            if (finalHeading)
            {
                moveToPosition.MoveToParameters.MovementParameters |= MovementParams.UseFinalHeading;
            }

            var physPos = new Physics.Common.Position(to);

            moveToPosition.MoveToParameters.DesiredHeading = physPos.Frame.get_heading();

            SetWalkRunThreshold(moveToPosition, to);

            if (!InitSticky)
            {
                PhysicsObj.add_moveto_listener(OnMoveComplete);

                PhysicsObj.add_sticky_listener(OnSticky);
                PhysicsObj.add_unsticky_listener(OnUnsticky);
                InitSticky = true;
            }

            var mvp = GetMovementParameters();

            mvp.CanWalk          = true;
            mvp.StopCompletely   = true;
            mvp.UseSpheres       = false;
            mvp.DistanceToObject = distanceToObject;
            mvp.UseFinalHeading  = finalHeading;
            mvp.DesiredHeading   = physPos.Frame.get_heading();

            PhysicsObj.MoveToPosition(physPos, mvp);
            IsMoving     = true;
            MonsterState = State.Awake;
            IsAwake      = true;

            EnqueueBroadcastMotion(moveToPosition);
        }
Пример #3
0
        public void MoveToHome()
        {
            MonsterState = State.Return;
            AttackTarget = null;

            var home = GetPosition(PositionType.Home);

            if (Location.Equals(home))
            {
                return;
            }

            MoveTo(home, RunRate);

            PhysicsObj.MoveToPosition(new Physics.Common.Position(home), GetMovementParameters());
            IsMoving = true;
        }
Пример #4
0
        /// <summary>
        /// Sends a network message for moving a creature to a new position
        /// </summary>
        public void MoveTo(Position position, float runRate = 1.0f, bool setLoc = true, float?walkRunThreshold = null, float?speed = null)
        {
            // build and send MoveToPosition message to client
            var motion = GetMoveToPosition(position, runRate, walkRunThreshold, speed);

            EnqueueBroadcastMotion(motion);

            if (!setLoc)
            {
                return;
            }

            // start executing MoveTo iterator on server
            if (!PhysicsObj.IsMovingOrAnimating)
            {
                PhysicsObj.UpdateTime = Physics.Common.PhysicsTimer.CurrentTime;
            }

            var mvp = new MovementParameters(motion.MoveToParameters);

            PhysicsObj.MoveToPosition(new Physics.Common.Position(position), mvp);

            AddMoveToTick();
        }