public virtual void Update(IMap map, float seconds) { if (changed > 0) changed--; _map = map; _lastlastSpeed = _lastSpeed; _lastSpeed = Speed; if (_moveSet) { Move(_moveVector.X, _moveVector.Y, true); } if (!wallCollision) _speed.Y += gravity * seconds; if (_speed.X < 0) Left = true; else if (_speed.X > 0) Left = false; //Making sure we don't glitch through walls //_lastlastSpeed = _lastSpeed; //_lastPosition = _position; _body.Update(seconds * 1000f); wallCollision = false; TryMove(_speed * seconds); if (wallCollision) _speed.Y = 0; if (!map.MapBoundaries.Contains((int)MidPosition.X, (int)MidPosition.Y)) { GetDamage(10); } _map.DoPlayerEvents(this); _invincibleTime -= seconds; _speed.X = 0; attackCooldown -= seconds; if (attackerTimeout > -1) { attackerTimeout -= seconds; if (attackerTimeout < 0) attackerID = -1; } else if (attackerTimeout < -1) { attackerTimeout = 0; if (_hp < _maxhp) { //this.GetDamage(-1); } } if (_onGround || wallCollision) airstun = false; if (stunTimeout <= 0 && !airstun) stunned = false; stunTimeout -= seconds; //Make sure that hasStoppedMoving is only set for one frame //when this guy stops moving if (wasMoving > 0) { hasStoppedMoving = false; wasMoving--; } else if (wasMoving == 0) { hasStoppedMoving = true; _moveVector = Vector2.Zero; wasMoving--; } else hasStoppedMoving = false; }