public override void Start() { base.Start(); damageComp = new Damage(damage, piercing); damageComp.relativeKnockbackCollider = relativeCollider; damageComp.knockbackPower = knockback; Sprite sprite = new Sprite(ResourceManager.hitFlash); sprite.SetAnchor(Sprite.AnchorType.Middle_Center); float rotation = VectorFacing.FacingToPi(face); sprite.rotation = rotation; FadeInSeconds fade = new FadeInSeconds(duration * 1.6f); Collider collider = new Collider(); collider.bounds = new Rectangle(0, 0, sprite.width, sprite.height); collider.offset = new Vector2(-sprite.origin.X, -sprite.origin.Y); this.blob.AddComponent(damageComp); this.blob.AddComponent(sprite); this.blob.AddComponent(collider); this.blob.AddComponent(fade); timer = duration; }
public void FireGun(Vector2 position) { if (ammo > 0 && hasBeenUnpressed) { if (!thrown) { facing = body.GetFacing(); } chargePower = Math.Max(chargePower, 1); int laserWidth = (int)(60 * chargePower); Blob bulletBlob = new Blob(); bulletBlob.transform.Position = position; Sprite laserSprite = new Sprite(ResourceManager.laserBeam); //laserSprite.SetAnchor(Sprite.AnchorType.Upper_Center); laserSprite.rotation = VectorFacing.FacingToPi(facing); laserSprite.SetSize(laserWidth * 2, 1000); bulletBlob.AddComponent(laserSprite); Collider collider = new Collider(); bulletBlob.AddComponent(collider); laserWidth /= 2; Rectangle colliderRectangle = new Rectangle(); switch (facing) { case Facing.Down: colliderRectangle = new Rectangle(0, 0, laserWidth, 1000); collider.offset = new Vector2(laserWidth * 1.5f, 0); bulletBlob.transform.Translate(new Vector2(-laserWidth * 2, 0)); break; case Facing.Left: colliderRectangle = new Rectangle(0, 0, 1000, laserWidth); collider.offset = new Vector2(-1000, laserWidth * 1.5f); bulletBlob.transform.Translate(new Vector2(0, -laserWidth * 2)); break; case Facing.Right: colliderRectangle = new Rectangle(0, 0, 1000, laserWidth); collider.offset = new Vector2(0, -laserWidth * 2.5f); bulletBlob.transform.Translate(new Vector2(0, laserWidth * 2)); break; case Facing.Up: colliderRectangle = new Rectangle(0, 0, laserWidth, 1000); collider.offset = new Vector2(-laserWidth * 2.5f, -1000); bulletBlob.transform.Translate(new Vector2(laserWidth * 2, 0f)); break; } collider.bounds = colliderRectangle; float dieTime = .3f * chargePower; bulletBlob.AddComponent(new DieInSeconds(dieTime)); bulletBlob.AddComponent(new FadeInSeconds(dieTime)); bulletBlob.AddComponent(new Damage(5)); bulletBlob.AddComponent(new DieOutOfBounds()); //bulletBlob.AddComponent(new Bullet(VectorFacing.RotateVectorToFacing(bulletFireTrajectory, facing))); ammo--; SoundManager.PlaySound(SoundManager.SFX_LASER_FIRE); } else if (ammo <= 0 && hasBeenUnpressed) { SoundManager.PlaySound(SoundManager.SFX_EMPTY_GUN); } }