Exemplo n.º 1
0
        public override void Update(GameTime gameTime)
        {
            if (_explosion != null)
            {
                _explosion.Update(gameTime);

                if (_explosion.Dispose)
                {
                    _explosion = null;
                }
            }

            //handle particle Updates
            foreach (TextParticle particle in _textParticles)
            {
                particle.Update(gameTime);

                if (particle.Dispose)
                {
                    _disposeParticles.AddLast(particle);
                }
            }

            foreach (TextParticle particle in _disposeParticles)
            {
                _textParticles.Remove(particle);
            }
            _disposeParticles.Clear();


            //handle person update
            if (!IsEnabled)
            {
                return;
            }

            if (!IsInElevator)
            {
                //doesn't know where to go
                if (IsExploring)
                {
                    if (RoomPosition.X < RoomHeading.X)
                    {
                        _direction = TravelDirection.Right;
                    }
                    else
                    {
                        _direction = TravelDirection.Left;
                    }
                    _isTraveling = true;

                    if (_isTraveling)
                    {
                        Travel(gameTime);
                        CheckRoom(RoomHeading);
                    }
                }
                else //knows where he wants to go
                {
                    if (IsWaitingForElevator)
                    {
                        StressLevel  -= 1 * (float)gameTime.ElapsedGameTime.TotalSeconds;
                        _currentTime += gameTime.ElapsedGameTime;

                        if (_currentTime > _refreshStressTime)
                        {
                            _hp += 1;
                            _textParticles.Add(new TextParticle(_game, "+" + "1", Color.Yellow, this));
                            _currentTime = TimeSpan.Zero;
                        }
                    }
                    else if (!_isTraveling && RoomPosition != RoomHeading)
                    {
                        if (RoomPosition.Y == RoomHeading.Y)
                        {
                            if (RoomPosition.X < RoomHeading.X)
                            {
                                _direction = TravelDirection.Right;
                            }
                            else
                            {
                                _direction = TravelDirection.Left;
                            }
                            _isTraveling = true;
                        }
                        else
                        {
                            if (RoomPosition.X < _building.ShaftPosition)
                            {
                                _direction = TravelDirection.Right;
                            }
                            else
                            {
                                _direction = TravelDirection.Left;
                            }
                            _isTraveling = true;
                        }
                    }

                    if (_isTraveling)
                    {
                        _currentTime = TimeSpan.Zero;
                        Travel(gameTime);

                        if (IsOnRightFloor) //check for correct Room
                        {
                            CheckRoom(RoomHeading);
                        }
                        else //check for elevator
                        {
                            CheckRoom(new Point(_building.ShaftPosition, RoomHeading.Y));
                        }
                    }
                }
            }

            RoomPosition = _building.GetRoomFromPosition(Position);
            base.Update(gameTime);
        }