/// <summary>
        /// Create a new physical sprite from data
        /// </summary>
        /// <param name="pd">data from which to construct unit</param>
        protected PhysicalUnit(PhysicalData pd)
        {
            _unitName = pd.Name;
            _sprite   = new Sprite(_unitName);

            if (pd.MovementParticleEffectName != null)
            {
                _movementParticleEffect = new ParticleEffect(pd.MovementParticleEffectName);
            }
            _burningParticleEffect = new ParticleEffect("Burning");

            _mass               = pd.Mass;
            _moveForce          = pd.MoveForce;
            _maxSpeed           = pd.MaxSpeed;
            _maxHealth          = pd.Health;
            _health             = _maxHealth;
            _decelerationFactor = pd.DecelerationFactor;

            _lifeState = LifeState.Dormant;     //not yet spawned
            _hitRect   = new Rectangle(0, 0, (int)_sprite.Width, (int)_sprite.Height);

            Position      = Vector2.Zero;
            MoveDirection = Vector2.Zero;
            LookDirection = Vector2.Zero;

            _statusEffects = new StatEffect(0, 0, 0);
            _statusResist  = new StatEffect(pd.FireResist, pd.CryoResist, pd.ShockResist);

            _fragments = new IceFragment[ICE_DIVISIONS, ICE_DIVISIONS];
        }
        TimeSpan _panicTimer; //time till next direction switch

        #endregion Fields

        #region Constructors

        /// <summary>
        /// Create a new physical sprite from data
        /// </summary>
        /// <param name="pd">data from which to construct unit</param>
        protected PhysicalUnit(PhysicalData pd)
            : base(pd, Sprite.SpriteType.Unit)
        {
            MoveDirection = Vector2.Zero;
            LookDirection = Vector2.Zero;
            if (pd.MovementParticleEffectName != null)
                _movementParticleEffect = new ParticleEffect(pd.MovementParticleEffectName);
        }
        /// <summary>
        /// Create a new physical sprite from data
        /// </summary>
        /// <param name="pd">data from which to construct unit</param>
        protected PhysicalUnit(PhysicalData pd)
        {
            _unitName = pd.Name;
            _sprite = new Sprite(_unitName);

            if (pd.MovementParticleEffectName != null)
                _movementParticleEffect = new ParticleEffect(pd.MovementParticleEffectName);
            _burningParticleEffect = new ParticleEffect("Burning");

            _mass = pd.Mass;
            _moveForce = pd.MoveForce;
            _maxSpeed = pd.MaxSpeed;
            _maxHealth = pd.Health;
            _health = _maxHealth;
            _decelerationFactor = pd.DecelerationFactor;

            _lifeState = LifeState.Dormant;     //not yet spawned
            _hitRect = new Rectangle(0, 0, (int)_sprite.Width, (int)_sprite.Height);

            Position = Vector2.Zero;
            MoveDirection = Vector2.Zero;
            LookDirection = Vector2.Zero;

            _statusEffects = new StatEffect(0, 0, 0);
            _statusResist = new StatEffect(pd.FireResist, pd.CryoResist, pd.ShockResist);

            _fragments = new IceFragment[ICE_DIVISIONS, ICE_DIVISIONS];
        }
        /// <summary>
        /// Create a new physical sprite from data
        /// </summary>
        /// <param name="pd">data from which to construct unit</param>
        protected PhysicalBody(PhysicalData pd, Sprite.SpriteType spriteType)
        {
            _unitName = pd.Name;

            if (spriteType == Sprite.SpriteType.Unit)
            {
                _sprite = new UnitSprite(pd.Name, (PhysicalUnit)this);
            }
            else
            {
                _sprite = new Sprite(pd.Name, spriteType);
            }

            _burningParticleEffect = new ParticleEffect("Burning");

            _mass = pd.Mass;
            _gravitySensitivity = pd.GravitySensitivity;
            _moveForce = pd.MoveForce;
            _maxSpeed = pd.MaxSpeed;
            _maxHealth = pd.Health;
            _health = _maxHealth;
            _decelerationFactor = pd.DecelerationFactor;

            _lifeState = LifeState.Dormant;     //not yet spawned
            _hitRect = new Rectangle(0, 0, (int)_sprite.Width, (int)_sprite.Height);

            Position = Vector2.Zero;

            _statusEffects = new StatEffect(0, 0, 0);
            _statusResist = new StatEffect(pd.FireResist, pd.CryoResist, pd.ShockResist);

            _fragments = new IceFragment[c_shatterDivisions, c_shatterDivisions];
        }