protected ProjectileWeapon(ProjectileWeaponData data, PhysicalUnit owner) : base(TimeSpan.FromSeconds(1.0 / data.FireRate), owner) { _name = data.Name; _projectilesPerFire = data.ProjectilesPerFire; _projectileInfo = data.ProjectileInfo; _spread = data.Spread; _contactEffect = _projectileInfo.ContactEffect == null ? ProjectileEffect.NullEffect : new ProjectileEffect(_projectileInfo.ContactEffect); _proximityEffect = _projectileInfo.ProximityEffect == null ? ProjectileEffect.NullEffect : new ProjectileEffect(_projectileInfo.ProximityEffect); _destinationEffect = _projectileInfo.DestinationEffect == null ? ProjectileEffect.NullEffect : new ProjectileEffect(_projectileInfo.DestinationEffect); _fireParticleEffect = data.FireParticleEffectName == null ? null : new ParticleEffect(data.FireParticleEffectName); float maxProjLife = data.ProjectileInfo.SecondsToLive + Math.Max((float)_contactEffect.Duration.TotalSeconds, (float)_destinationEffect.Duration.TotalSeconds); float maxProjectiles = data.FireRate * maxProjLife * data.ProjectilesPerFire; maxProjectiles = Math.Max(maxProjectiles, _projectilesPerFire); _projectiles = new Projectile[(int)maxProjectiles + 1]; for (int i = 0; i < _projectiles.Length; i++) { _projectiles[i] = new Projectile(data.ProjectileInfo.SpriteName); } }
protected ProjectileWeapon(ProjectileWeaponData data, PhysicalUnit owner) : base(TimeSpan.FromSeconds(1.0 / data.FireRate), data.MaxAmmo, data.AmmoConsumption, owner) { _maxProjectiles = data.MaxProjectiles; _projectiles = new Projectile[_maxProjectiles]; for (int i = 0; i < _maxProjectiles; i++) { _projectiles[i] = new Projectile(); _projectiles[i].ProjectileSprite = new Sprite(data.ProjectileSpriteName); } _projectileDamage = data.Damage; _projectileForce = data.ProjectileForce; _recoilForce = data.Recoil; _projectileSpeed = data.ProjectileSpeed; _projectileAcceleration = data.ProjectileAcceleration; _dissipateOnHit = data.DissipateOnHit; _projectileSpread = MathHelper.ToRadians(data.ProjectileSpread); _projectilesPerFire = data.ProjectilesPerFire; _projectileLife = data.ProjectileLife; _splashDamage = data.SplashDamage; _splashRadius = data.SplashRadius; _splashForce = data.SplashForce; Sprite projectileSprite = _projectiles[0].ProjectileSprite; if (projectileSprite.Width <= _splashRadius * 2) { _splashScaleRate = (projectileSprite.Width / _splashRadius); _splashScaleRate /= (float)projectileSprite.FullAnimationTime.TotalSeconds; } _hitDetectionRect = new Rectangle(0,0, (int)(projectileSprite.Width), (int)projectileSprite.Height); if (data.MovementParticleEffect != null) _movementParticleEffect = new ParticleEffect(data.MovementParticleEffect); if (data.SplashParticleEffect != null) _splashParticleEffect = new ParticleEffect(data.SplashParticleEffect); }