public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("March Gun", "marchgun");

            Game.Items.Rename("outdated_gun_mods:march_gun", "nn:march_gun");
            gun.gameObject.AddComponent <MarchGun>();
            gun.SetShortDescription("Direct To The Point");
            gun.SetLongDescription("Deals bonus damage when fired in the same direction the user is moving." + "\n\nBrought to the Gungeon by notorious tapdancer Tom Toe Tucker.");

            gun.SetupSprite(null, "marchgun_idle_001", 8);

            gun.SetAnimationFPS(gun.shootAnimation, 12);
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(732) as Gun).gunSwitchGroup;

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(86) as Gun, true, false);

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 1f;
            gun.DefaultModule.cooldownTime           = 0.1f;
            gun.DefaultModule.numberOfShotsInClip    = 9;
            gun.barrelOffset.transform.localPosition = new Vector3(1.37f, 0.63f, 0f);
            gun.SetBaseMaxAmmo(222);
            gun.gunClass           = GunClass.PISTOL;
            gun.muzzleFlashEffects = (PickupObjectDatabase.GetById(18) as Gun).muzzleFlashEffects;


            //BULLET STATS
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            gun.DefaultModule.projectiles[0]             = projectile;
            projectile.baseData.damage                   = 7.5f;
            projectile.baseData.speed                   *= 1f;
            projectile.baseData.range                   *= 1f;
            projectile.hitEffects.overrideMidairDeathVFX = EasyVFXDatabase.SmoothLightBlueLaserCircleVFX;
            projectile.hitEffects.alwaysUseMidair        = true;
            projectile.SetProjectileSpriteRight("march_none_projectile", 9, 9, false, tk2dBaseSprite.Anchor.MiddleCenter, 7, 7);

            GunTools.SetupDefinitionForProjectileSprite("march_left_projectile", ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName("march_left_projectile"), 17, 11, false, 15, 9, 0, 0, null);
            GunTools.SetupDefinitionForProjectileSprite("march_right_projectile", ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName("march_right_projectile"), 17, 11, false, 15, 9, 0, 0, null);
            GunTools.SetupDefinitionForProjectileSprite("march_up_projectile", ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName("march_up_projectile"), 11, 17, false, 9, 15, 0, 0, null);
            GunTools.SetupDefinitionForProjectileSprite("march_down_projectile", ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName("march_down_projectile"), 11, 17, false, 9, 15, 0, 0, null);

            projectile.gameObject.AddComponent <MarchGunBulletController>();
            projectile.transform.parent = gun.barrelOffset;

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("March gun Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/marchgun_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/marchgun_clipempty");

            gun.quality = PickupObject.ItemQuality.C; //C

            ETGMod.Databases.Items.Add(gun, null, "ANY");
            DemolitionistID = gun.PickupObjectId;
        }
Exemplo n.º 2
0
        public static void AnimateProjectile(this Projectile proj, List <string> names, int fps, bool loops, List <IntVector2> pixelSizes, List <bool> lighteneds, List <tk2dBaseSprite.Anchor> anchors, List <bool> anchorsChangeColliders,
                                             List <bool> fixesScales, List <Vector3?> manualOffsets, List <IntVector2?> overrideColliderPixelSizes, List <IntVector2?> overrideColliderOffsets, List <Projectile> overrideProjectilesToCopyFrom)
        {
            tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip();

            clip.name = "idle";
            clip.fps  = fps;
            List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>();

            for (int i = 0; i < names.Count; i++)
            {
                string     name      = names[i];
                IntVector2 pixelSize = pixelSizes[i];
                IntVector2?overrideColliderPixelSize = overrideColliderPixelSizes[i];
                IntVector2?overrideColliderOffset    = overrideColliderOffsets[i];
                Vector3?   manualOffset          = manualOffsets[i];
                bool       anchorChangesCollider = anchorsChangeColliders[i];
                bool       fixesScale            = fixesScales[i];
                if (!manualOffset.HasValue)
                {
                    manualOffset = new Vector2?(Vector2.zero);
                }
                tk2dBaseSprite.Anchor anchor            = anchors[i];
                bool       lightened                    = lighteneds[i];
                Projectile overrideProjectileToCopyFrom = overrideProjectilesToCopyFrom[i];
                tk2dSpriteAnimationFrame frame          = new tk2dSpriteAnimationFrame();
                frame.spriteId         = ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName(name);
                frame.spriteCollection = ETGMod.Databases.Items.ProjectileCollection;
                frames.Add(frame);
                int?overrideColliderPixelWidth  = null;
                int?overrideColliderPixelHeight = null;
                if (overrideColliderPixelSize.HasValue)
                {
                    overrideColliderPixelWidth  = overrideColliderPixelSize.Value.x;
                    overrideColliderPixelHeight = overrideColliderPixelSize.Value.y;
                }
                int?overrideColliderOffsetX = null;
                int?overrideColliderOffsetY = null;
                if (overrideColliderOffset.HasValue)
                {
                    overrideColliderOffsetX = overrideColliderOffset.Value.x;
                    overrideColliderOffsetY = overrideColliderOffset.Value.y;
                }
                tk2dSpriteDefinition def = GunTools.SetupDefinitionForProjectileSprite(name, frame.spriteId, pixelSize.x, pixelSize.y, lightened, overrideColliderPixelWidth, overrideColliderPixelHeight, overrideColliderOffsetX, overrideColliderOffsetY,
                                                                                       overrideProjectileToCopyFrom);
                def.ConstructOffsetsFromAnchor(anchor, def.position3, fixesScale, anchorChangesCollider);
                def.position0 += manualOffset.Value;
                def.position1 += manualOffset.Value;
                def.position2 += manualOffset.Value;
                def.position3 += manualOffset.Value;
                if (i == 0)
                {
                    proj.GetAnySprite().SetSprite(frame.spriteCollection, frame.spriteId);
                }
            }
            clip.wrapMode = loops ? tk2dSpriteAnimationClip.WrapMode.Loop : tk2dSpriteAnimationClip.WrapMode.Once;
            clip.frames   = frames.ToArray();
            if (proj.sprite.spriteAnimator == null)
            {
                proj.sprite.spriteAnimator = proj.sprite.gameObject.AddComponent <tk2dSpriteAnimator>();
            }
            proj.sprite.spriteAnimator.playAutomatically = true;
            bool flag = proj.sprite.spriteAnimator.Library == null;

            if (flag)
            {
                proj.sprite.spriteAnimator.Library         = proj.sprite.spriteAnimator.gameObject.AddComponent <tk2dSpriteAnimation>();
                proj.sprite.spriteAnimator.Library.clips   = new tk2dSpriteAnimationClip[0];
                proj.sprite.spriteAnimator.Library.enabled = true;
            }
            proj.sprite.spriteAnimator.Library.clips      = proj.sprite.spriteAnimator.Library.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray();
            proj.sprite.spriteAnimator.DefaultClipId      = proj.sprite.spriteAnimator.Library.GetClipIdByName("idle");
            proj.sprite.spriteAnimator.deferNextStartClip = false;
        }