Пример #1
0
 private void UpdateArea(MapArea area, DynamicUpdateState gameTime)
 {
     foreach (var entity in area.Enumerate())
     {
         entity.Update(gameTime);
     }
 }
Пример #2
0
        /// <summary>
        /// Perform AI operations...
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Update(DynamicUpdateState gameTime)
        {
            lock (_syncRoot)
            {
                if (gameTime.ElapsedTime.TotalSeconds < 2)
                {
                    return;
                }
                if (gameTime.ElapsedTime.TotalSeconds > 100)
                {
                    return;
                }

                Movement.Update(gameTime);
                Focus.Update(gameTime);

                if (GeneralAI == null)
                {
                    return;
                }

                GeneralAI.AISelect();
                GeneralAI.DoAction();
            }
        }
Пример #3
0
        // update dynamic entities
        private void UpdateDynamic(object o)
        {
            if (Monitor.TryEnter(_areaManagerSyncRoot))
            {
                try
                {
                    var state = new DynamicUpdateState
                    {
                        ElapsedTime = _lastUpdate == new UtopiaTime() ? UtopiaTimeSpan.Zero : _server.Clock.Now - _lastUpdate,
                        CurrentTime = _server.Clock.Now
                    };

                    state.RealTime = _server.Clock.GameToReal(state.ElapsedTime);

                    _lastUpdate = _server.Clock.Now;

                    Update(state);
                }
                finally
                {
                    Monitor.Exit(_areaManagerSyncRoot);
                }
            }
            else
            {
                logger.Warn("Warning! Server is overloaded. Try to decrease dynamic entities count");
            }
        }
Пример #4
0
        public void Update(DynamicUpdateState gameTime)
        {
            var elapsedS = (float)gameTime.RealTime.TotalSeconds;

            Vector3D newPos;

            VerletSimulator.Simulate(elapsedS, out newPos);
            Npc.DynamicEntity.Position = newPos;

            VerletSimulator.CurPosition = Npc.DynamicEntity.Position;

            if (IsMoving)
            {
                if (Vector3D.DistanceSquared(_pathTargetPoint, Npc.DynamicEntity.Position) < 0.1d)
                {
                    FollowNextPoint();
                }

                _moveDirection = _pathTargetPoint - Npc.DynamicEntity.Position;

                _jump            = _moveDirection.Y > 0;
                _moveDirection.Y = 0;

                //if (Vector3D.DistanceSquared(VerletSimulator.PrevPosition, VerletSimulator.CurPosition) < 0.01f)
                //{
                //    if (Math.Abs(_moveDirection.X) < Math.Abs(_moveDirection.Z))
                //        _moveDirection.Z = 0.1f * Math.Sign(_moveDirection.Z);
                //    else
                //        _moveDirection.X = 0.1f * Math.Sign(_moveDirection.X);
                //}

                _moveDirection.Normalize();

                VerletSimulator.Impulses.Add(new Impulse(elapsedS)
                {
                    ForceApplied = _moveDirection.AsVector3() * Npc.DynamicEntity.MoveSpeed * (_runAway ? 2f : 1f)
                });

                if (_jump && VerletSimulator.OnGround)
                {
                    VerletSimulator.Impulses.Add(new Impulse(elapsedS)
                    {
                        ForceApplied = Vector3.UnitY * 22
                    });
                }
            }

            if (_leader != null && Vector3D.Distance(_leader.Position, Npc.DynamicEntity.Position) > FollowStayDistance)
            {
                if (IsMoving && Vector3D.Distance(new Vector3D(_path.Goal) + CubeCenter, _leader.Position) < FollowStayDistance)
                {
                    return;
                }

                MoveTo(_leader.Position.ToCubePosition());
            }
        }
Пример #5
0
 public void Update(DynamicUpdateState gameTime)
 {
     {
         if (Target != null)
         {
             var lookDirection = Target.Position - Npc.DynamicEntity.Position;
             lookDirection.Normalize();
             Npc.DynamicEntity.HeadRotation = Quaternion.RotationMatrix(Matrix.LookAtLH(Npc.DynamicEntity.Position.AsVector3(), Npc.DynamicEntity.Position.AsVector3() + lookDirection.AsVector3(), Vector3D.Up.AsVector3()));
         }
     }
 }
Пример #6
0
        public void Update(DynamicUpdateState gameTime)
        {
            OnBeforeUpdate();

            //foreach (var mapArea in _areas)
            //{
            //    UpdateArea(mapArea.Value, gameTime);
            //}

            Parallel.ForEach(_areas, a => UpdateArea(a.Value, gameTime));
            OnAfterUpdate();
        }
Пример #7
0
 /// <summary>
 /// Perform dynamic update (AI logic)
 /// </summary>
 public virtual void Update(DynamicUpdateState gameTime)
 {
 }