public Bullet(GunPowerup gunPowerup, string textureName, PrebuiltEmitter trailEmitterType, Color emitterColor, Direction dir, float distanceLimit, int damage, bool phasing = false) : base(new Vector2(0, 0), new Hitbox(0, 0)) { this.gunPowerup = gunPowerup; this.textureName = textureName; this.setTexture(textureName); this.damage = damage; this.distanceLimit = distanceLimit; this.phasing = phasing; float emitterAngle = 0; switch (dir) { case Direction.Up: velocity = new Vector2(0, -MOVE_SPEED); emitterAngle = (float)Math.PI / 2; rotation = 0; break; case Direction.Down: velocity = new Vector2(0, MOVE_SPEED); emitterAngle = (float)Math.PI * 3 / 2; rotation = (float)Math.PI; break; case Direction.Left: velocity = new Vector2(-MOVE_SPEED, 0); emitterAngle = 0; rotation = (float)Math.PI * 3 / 2; break; case Direction.Right: velocity = new Vector2(MOVE_SPEED, 0); emitterAngle = (float)Math.PI; rotation = (float)Math.PI / 2; break; } trailEmitter = Emitter.getPrebuiltEmitter(trailEmitterType); //trailEmitter.targetAngle = emitterAngle; trailEmitter.angle = emitterAngle; trailEmitter.startColor = emitterColor; emitterColor.A = 0; trailEmitter.endColor = emitterColor; explosionEmitter = Emitter.getPrebuiltEmitter(PrebuiltEmitter.BulletHitExplosion); emitterColor = new Color(emitterColor.R / 2, emitterColor.G / 2, emitterColor.B / 2, 255); explosionEmitter.startColor = emitterColor; emitterColor.A = 0; explosionEmitter.endColor = emitterColor; explosionEmitter.active = false; }
//public float targetAngle; //public float ANGULAR_VELOCITY = (float)Math.PI * 8; /* Hard coded emitter temples to use... get the particle emitter using this function instead of building your own.*/ public static Emitter getPrebuiltEmitter(PrebuiltEmitter prebuiltEmitter) #region Prebuilt Emitter Declarations { Emitter e = null; switch (prebuiltEmitter) { case PrebuiltEmitter.BulletHitExplosion: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Distance , 32 , 0 , 0.4f , 0.4f , new Color(255, 0, 0, 255) , new Color(255, 0, 0, 0) , ParticleRandType.Uniform , 0.1f , 0.05f , 5 , 50 , 0 , 0 , (float)(Math.PI * 2) , 10 , -1 , 10 , false , true ); break; case PrebuiltEmitter.BurstBoostFire: break; case PrebuiltEmitter.ChargingSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 40 , 0 , ParticleDeathMode.Seconds , 0.3f , 16 , 0.3f , -1 , new Color(255, 215, 0, 255) , new Color(255, 215, 0, 0) , ParticleRandType.Uniform , 0 , 0 , 0.1f , 20 , 0 , 0 , (float)(Math.PI * 2) , 35 , 35 , -1 , false , false ); break; case PrebuiltEmitter.BlinkEndSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 40 , 0 , ParticleDeathMode.Seconds , 0.3f , 16 , 0.3f , -1 , new Color(255, 215, 0, 255) , new Color(255, 215, 0, 0) , ParticleRandType.Uniform , 0 , 0 , 0.1f , 20 , 0 , 0 , (float)(Math.PI * 2) , 50 , 50 , 50 , false , false ); break; case PrebuiltEmitter.CollectedSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 75 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.3f , 0.7f , new Color(111, 176, 172, 255) , new Color(111, 176, 172, 0) , ParticleRandType.Uniform , 0.1f , 0.2f , 0 , 100 , 0 , 0 , (float)(Math.PI * 2) , 100 , -1 , 20 , false , false ); break; case PrebuiltEmitter.BlinkOriginSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 75 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.3f , 0.7f , new Color(111, 176, 172, 255) , new Color(111, 176, 172, 0) , ParticleRandType.Uniform , 0.1f , 0.2f , 0 , 100 , 0 , 0 , (float)(Math.PI * 2) , 100 , -1 , 20 , false , false ); break; case PrebuiltEmitter.DrillSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Seconds , 0.5f , 0 , 0.8f , -1 , new Color(30, 30, 30, 128) , new Color(30, 30, 30, 20) , ParticleRandType.Uniform , 0.2f , 0.2f , 0 , 50 , 0 , 0 , (float)(Math.PI * 2) , 100 , 20 , -1 , false , true ); break; case PrebuiltEmitter.EnemyDeathExplosion: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Distance , 48 , 0 , 0.5f , 0.5f , new Color(71, 93, 65, 255) , new Color(71, 93, 65, 0) , ParticleRandType.Uniform , 0 , 0 , 0 , 0 , 0 , 0 , (float)(Math.PI * 2) , 50 , -1 , 50 , false , true ); break; case PrebuiltEmitter.IdleBoostFire: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 30 , 0 , ParticleDeathMode.Distance , 12 , 0 , 0.3f , 0.1f , Color.White , new Color(0, 200, 100, 50) , ParticleRandType.Gaussian , 0.1f , 0.05f , 3 , 15 , 0.25f , 0 , (float)(Math.PI / 2) , 100 , 30 , -1 , true , true ); break; case PrebuiltEmitter.LargeBulletSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 80 , 0 , ParticleDeathMode.Seconds , 0.75f , 24 , 0.8f , 0.3f , new Color(0, 0, 0, 255) , new Color(0, 0, 0, 0) , ParticleRandType.Uniform , 0.2f , 0.1f , 0.1f , 75 , 0 , 0 , (float)(Math.PI) , 100 , 70 , -1 , true , true ); break; case PrebuiltEmitter.MediumBulletSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 125 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.6f , 0.2f , new Color(0, 0, 0, 255) , new Color(0, 0, 0, 0) , ParticleRandType.Uniform , 0.2f , 0.1f , 0.2f , 50 , 0 , 0 , (float)(Math.PI) / 3 , 75 , 40 , -1 , true , true ); break; case PrebuiltEmitter.PrisonerSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 75 , 0 , ParticleDeathMode.Seconds , 3 , 0 , 0.5f , 0.5f , Color.White , Color.White , ParticleRandType.Uniform , 0 , 0 , 0 , 0 , 0 , 0 , (float)(Math.PI * 2) , 75 , -1 , 75 , false , false ); break; case PrebuiltEmitter.RocketBoostFire: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 60 , 0 , ParticleDeathMode.Distance , 20 , 0 , 0.5f , 0.1f , new Color(255, 0, 0, 255) , new Color(255, 160, 0, 50) , ParticleRandType.Gaussian , 0.2f , 0.05f , 5 , 15 , 0.25f , 0 , (float)(Math.PI / 2) , 100 , 50 , -1 , true , true ); break; case PrebuiltEmitter.SmallBulletSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.4f , 0.2f , new Color(0, 0, 0, 255) , new Color(0, 0, 0, 0) , ParticleRandType.Uniform , 0.2f , 0.1f , 0.2f , 50 , 0 , 0 , (float)(Math.PI / 8) , 50 , 30 , -1 , true , true ); break; case PrebuiltEmitter.FlameFire: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 40 , 0 , ParticleDeathMode.Distance , 12 , 0 , 0.1f , 0.9f , new Color(255, 0, 0, 255) , new Color(255, 70, 0, 0) , ParticleRandType.Uniform , 0.1f , 0.2f , 4f , 0 , 0.25f , 0.25f , (float)(2 * Math.PI) , 400 , 500 , -1 , true , true ); break; } return(e); }
//public float targetAngle; //public float ANGULAR_VELOCITY = (float)Math.PI * 8; /* Hard coded emitter temples to use... get the particle emitter using this function instead of building your own.*/ public static Emitter getPrebuiltEmitter(PrebuiltEmitter prebuiltEmitter) #region Prebuilt Emitter Declarations { Emitter e = null; switch (prebuiltEmitter) { case PrebuiltEmitter.BulletHitExplosion: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Distance , 32 , 0 , 0.4f , 0.4f , new Color(255, 0, 0, 255) , new Color(255, 0, 0, 0) , ParticleRandType.Uniform , 0.1f , 0.05f , 5 , 50 , 0 , 0 , (float)(Math.PI * 2) , 10 , -1 , 10 , false , true ); break; case PrebuiltEmitter.BurstBoostFire: break; case PrebuiltEmitter.ChargingSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 40 , 0 , ParticleDeathMode.Seconds , 0.3f , 16 , 0.3f , -1 , new Color(255, 215, 0, 255) , new Color(255, 215, 0, 0) , ParticleRandType.Uniform , 0 , 0 , 0.1f , 20 , 0 , 0 , (float)(Math.PI * 2) , 35 , 35 , -1 , false , false ); break; case PrebuiltEmitter.BlinkEndSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 40 , 0 , ParticleDeathMode.Seconds , 0.3f , 16 , 0.3f , -1 , new Color(255, 215, 0, 255) , new Color(255, 215, 0, 0) , ParticleRandType.Uniform , 0 , 0 , 0.1f , 20 , 0 , 0 , (float)(Math.PI * 2) , 50 , 50 , 50 , false , false ); break; case PrebuiltEmitter.CollectedSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 75 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.3f , 0.7f , new Color(111, 176, 172, 255) , new Color(111, 176, 172, 0) , ParticleRandType.Uniform , 0.1f , 0.2f , 0 , 100 , 0 , 0 , (float)(Math.PI * 2) , 100 , -1 , 20 , false , false ); break; case PrebuiltEmitter.BlinkOriginSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 75 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.3f , 0.7f , new Color(111, 176, 172, 255) , new Color(111, 176, 172, 0) , ParticleRandType.Uniform , 0.1f , 0.2f , 0 , 100 , 0 , 0 , (float)(Math.PI * 2) , 100 , -1 , 20 , false , false ); break; case PrebuiltEmitter.DrillSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Seconds , 0.5f , 0 , 0.8f , -1 , new Color(30, 30, 30, 128) , new Color(30, 30, 30, 20) , ParticleRandType.Uniform , 0.2f , 0.2f , 0 , 50 , 0 , 0 , (float)(Math.PI * 2) , 100 , 20 , -1 , false , true ); break; case PrebuiltEmitter.EnemyDeathExplosion: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Distance , 48 , 0 , 0.5f , 0.5f , new Color(71, 93, 65, 255) , new Color(71, 93, 65, 0) , ParticleRandType.Uniform , 0 , 0 , 0 , 0 , 0 , 0 , (float)(Math.PI * 2) , 50 , -1 , 50 , false , true ); break; case PrebuiltEmitter.IdleBoostFire: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 30 , 0 , ParticleDeathMode.Distance , 12 , 0 , 0.3f , 0.1f , Color.White , new Color(0, 200, 100, 50) , ParticleRandType.Gaussian , 0.1f , 0.05f , 3 , 15 , 0.25f , 0 , (float)(Math.PI / 2) , 100 , 30 , -1 , true , true ); break; case PrebuiltEmitter.LargeBulletSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 80 , 0 , ParticleDeathMode.Seconds , 0.75f , 24 , 0.8f , 0.3f , new Color(0, 0, 0, 255) , new Color(0, 0, 0, 0) , ParticleRandType.Uniform , 0.2f , 0.1f , 0.1f , 75 , 0 , 0 , (float)(Math.PI) , 100 , 70 , -1 , true , true ); break; case PrebuiltEmitter.MediumBulletSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 125 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.6f , 0.2f , new Color(0, 0, 0, 255) , new Color(0, 0, 0, 0) , ParticleRandType.Uniform , 0.2f , 0.1f , 0.2f , 50 , 0 , 0 , (float)(Math.PI) / 3 , 75 , 40 , -1 , true , true ); break; case PrebuiltEmitter.PrisonerSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 75 , 0 , ParticleDeathMode.Seconds , 3 , 0 , 0.5f , 0.5f , Color.White , Color.White , ParticleRandType.Uniform , 0 , 0 , 0 , 0 , 0 , 0 , (float)(Math.PI * 2) , 75 , -1 , 75 , false , false ); break; case PrebuiltEmitter.RocketBoostFire: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 60 , 0 , ParticleDeathMode.Distance , 20 , 0 , 0.5f , 0.1f , new Color(255, 0, 0, 255) , new Color(255, 160, 0, 50) , ParticleRandType.Gaussian , 0.2f , 0.05f , 5 , 15 , 0.25f , 0 , (float)(Math.PI / 2) , 100 , 50 , -1 , true , true ); break; case PrebuiltEmitter.SmallBulletSparks: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 100 , 0 , ParticleDeathMode.Seconds , 1f , 0 , 0.4f , 0.2f , new Color(0, 0, 0, 255) , new Color(0, 0, 0, 0) , ParticleRandType.Uniform , 0.2f , 0.1f , 0.2f , 50 , 0 , 0 , (float)(Math.PI / 8) , 50 , 30 , -1 , true , true ); break; case PrebuiltEmitter.FlameFire: e = new Emitter(TextureManager.Get("circle") , new Vector2(0, 0) , 40 , 0 , ParticleDeathMode.Distance , 12 , 0 , 0.1f , 0.9f , new Color(255, 0, 0, 255) , new Color(255, 70, 0, 0) , ParticleRandType.Uniform , 0.1f , 0.2f , 4f , 0 , 0.25f , 0.25f , (float)(2 * Math.PI) , 400 , 500 , -1 , true , true ); break; } return e; }