Пример #1
0
        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;
        }
Пример #2
0
        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);
            }
        }