コード例 #1
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            PowBlockObject = expandSharedAssets1.LoadAsset <GameObject>("Pow Block");

            tk2dSprite m_PowBlockSprite = SpriteSerializer.AddSpriteToObject(PowBlockObject, ExpandPrefabs.EXItemCollection, "PowBlock");

            ExpandUtility.GenerateSpriteAnimator(PowBlockObject, playAutomatically: true);

            tk2dSpriteAnimator m_PowBlockAnimator = PowBlockObject.GetComponent <tk2dSpriteAnimator>();

            ExpandUtility.AddAnimation(m_PowBlockAnimator, m_PowBlockSprite.Collection, PowBlockIdleSprites, "Idle", tk2dSpriteAnimationClip.WrapMode.Loop, 8);
            ExpandUtility.AddAnimation(m_PowBlockAnimator, m_PowBlockSprite.Collection, PowBlockUsedSprites, "POW", tk2dSpriteAnimationClip.WrapMode.Loop, 2);


            PowBlock powBlock  = PowBlockObject.AddComponent <PowBlock>();
            string   shortDesc = "Shaken not stirred...";
            string   longDesc  = "A special block that when stomped on causes a violent shaking.\n\nEnemies shall lose their footing.";

            ItemBuilder.SetupItem(powBlock, shortDesc, longDesc, "ex");
            ItemBuilder.SetCooldownType(powBlock, ItemBuilder.CooldownType.Damage, 380f);
            powBlock.quality = ItemQuality.C;
            if (!ExpandSettings.EnableEXItems)
            {
                powBlock.quality = ItemQuality.EXCLUDED;
            }


            PowBlockPickupID = powBlock.PickupObjectId;
        }
コード例 #2
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            SonicBoxObject = expandSharedAssets1.LoadAsset <GameObject>("EXSonicBox");
            SpriteSerializer.AddSpriteToObject(SonicBoxObject, ExpandPrefabs.EXItemCollection, "SonicBox_Idle_02");

            ExpandUtility.GenerateSpriteAnimator(SonicBoxObject, playAutomatically: true);
            ExpandUtility.AddAnimation(SonicBoxObject.GetComponent <tk2dSpriteAnimator>(), ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), m_IdleFrames, "Idle", tk2dSpriteAnimationClip.WrapMode.Loop, 16);

            SonicBox sonicBoxItem = SonicBoxObject.AddComponent <SonicBox>();

            string name      = "Sonic Box";
            string shortDesc = "Gotta Go Fast!";
            string longDesc  = "Sonic the Hedgehog has found his way to the Gungeon and loves to spin dash into the Gundead!";

            ItemBuilder.SetupEXItem(sonicBoxItem, name, shortDesc, longDesc);
            sonicBoxItem.quality = ItemQuality.A;
            if (!ExpandSettings.EnableEXItems)
            {
                sonicBoxItem.quality = ItemQuality.EXCLUDED;
            }
            ;
        }
コード例 #3
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            CorruptedJunkObject = expandSharedAssets1.LoadAsset <GameObject>("Corrupted Junk");

            CorruptedJunk poopSack = CorruptedJunkObject.AddComponent <CorruptedJunk>();

            ItemBuilder.AddSpriteToObject(CorruptedJunkObject, expandSharedAssets1.LoadAsset <Texture2D>("corrupted_poopsack_09"), false, false);

            string shortDesc = "Next Time... What even is this!?";
            string longDesc  = "Just some corrupted junk.\n\nCarrying this around makes you question your sanity...";

            ItemBuilder.SetupItem(poopSack, shortDesc, longDesc, "ex");
            poopSack.quality      = ItemQuality.A;
            poopSack.CanBeDropped = false;

            m_SpriteNames = new List <string> {
                "corrupted_poopsack_01",
                "corrupted_poopsack_02",
                "corrupted_poopsack_03",
                "corrupted_poopsack_04",
                "corrupted_poopsack_05",
                "corrupted_poopsack_06",
                "corrupted_poopsack_07",
                "corrupted_poopsack_08",
                "corrupted_poopsack_09",
                "corrupted_poopsack_10"
            };

            foreach (string spritePath in m_SpriteNames)
            {
                if (spritePath != "corrupted_poopsack_09")
                {
                    SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(spritePath), CorruptedJunkObject.GetComponent <tk2dSprite>().Collection);
                }
            }

            ExpandUtility.GenerateSpriteAnimator(CorruptedJunkObject, playAutomatically: true);
            ExpandUtility.AddAnimation(CorruptedJunkObject.GetComponent <tk2dSpriteAnimator>(), CorruptedJunkObject.GetComponent <tk2dSprite>().Collection, m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20);
        }
コード例 #4
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            RockslideObject = expandSharedAssets1.LoadAsset <GameObject>("Rock Slide");
            ItemBuilder.AddSpriteToObject(RockslideObject, expandSharedAssets1.LoadAsset <Texture2D>("rockslide"), false, false);

            RockSlide rockslide = RockslideObject.AddComponent <RockSlide>();
            string    shortDesc = "Crushing Defeat";
            string    longDesc  = "Falling rocks are a well known threat to everyone, especially within the Gungeon.\n\nIt does not help that a long gone Gungeoneer accidentally popularized the idea of using falling debris as a weapon among the Gundead.\n\nHowever, they quickly grew tired of it, seeming too easy or effortless to eliminate Gungeoneers compared to the exhilarating experience of the combat they were forged for.";

            ItemBuilder.SetupItem(rockslide, shortDesc, longDesc, "ex");
            ItemBuilder.SetCooldownType(rockslide, ItemBuilder.CooldownType.Damage, 275f);
            rockslide.quality = ItemQuality.B;

            List <string> spritePaths = new List <string>()
            {
                "plunger_fire_001",
                "plunger_fire_002",
                "plunger_fire_003",
                "plunger_fire_004",
                "plunger_fire_005",
                "plunger_fire_006"
            };

            tk2dSprite rockslidesprite = RockslideObject.GetComponent <tk2dSprite>();

            foreach (string sprite in spritePaths)
            {
                SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(sprite), rockslidesprite.Collection);
            }

            ExpandUtility.GenerateSpriteAnimator(RockslideObject);

            tk2dSpriteAnimator rockslideAnimator = RockslideObject.GetComponent <tk2dSpriteAnimator>();

            ExpandUtility.AddAnimation(rockslideAnimator, rockslidesprite.Collection, spritePaths, "Activate", frameRate: 8);

            RockSlidePickupID = rockslide.PickupObjectId;
        }
コード例 #5
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            CorruptedJunkObject = expandSharedAssets1.LoadAsset <GameObject>("Corrupted Junk");

            CorruptedJunk poopSack = CorruptedJunkObject.AddComponent <CorruptedJunk>();

            SpriteSerializer.AddSpriteToObject(CorruptedJunkObject, ExpandPrefabs.EXItemCollection, "corrupted_poopsack_09");

            string shortDesc = "Next Time... What even is this!?";
            string longDesc  = "Just some corrupted junk.\n\nCarrying this around makes you question your sanity...";

            ItemBuilder.SetupItem(poopSack, shortDesc, longDesc, "ex");
            poopSack.quality = ItemQuality.A;
            if (!ExpandSettings.EnableEXItems)
            {
                poopSack.quality = ItemQuality.EXCLUDED;
            }
            poopSack.CanBeDropped = false;
            CorruptedJunkID       = poopSack.PickupObjectId;

            m_SpriteNames = new List <string> {
                "corrupted_poopsack_01",
                "corrupted_poopsack_02",
                "corrupted_poopsack_03",
                "corrupted_poopsack_04",
                "corrupted_poopsack_05",
                "corrupted_poopsack_06",
                "corrupted_poopsack_07",
                "corrupted_poopsack_08",
                "corrupted_poopsack_09",
                "corrupted_poopsack_10"
            };

            ExpandUtility.GenerateSpriteAnimator(CorruptedJunkObject, playAutomatically: true);
            ExpandUtility.AddAnimation(CorruptedJunkObject.GetComponent <tk2dSpriteAnimator>(), ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20);
        }
コード例 #6
0
        public static void InitPrefabs(AssetBundle expandSharedAssets1)
        {
            EXSecretDoorAnimation = expandSharedAssets1.LoadAsset <GameObject>("EX_SecretDoor_Animation");

            tk2dSpriteAnimation DoorSpriteAnimations = EXSecretDoorAnimation.AddComponent <tk2dSpriteAnimation>();

            ExpandUtility.AddAnimation(DoorSpriteAnimations, ExpandPrefabs.EXSecretDoorCollection.GetComponent <tk2dSpriteCollectionData>(), m_DoorOpenSprites, "door_open", frameRate: 10);
            ExpandUtility.AddAnimation(DoorSpriteAnimations, ExpandPrefabs.EXSecretDoorCollection.GetComponent <tk2dSpriteCollectionData>(), m_DoorCloseSprites, "door_close", frameRate: 10);

            EXSecretDoorMinimapIcon = expandSharedAssets1.LoadAsset <GameObject>("EXSecretDoor_MinimapIcon");
            SpriteSerializer.AddSpriteToObject(EXSecretDoorMinimapIcon, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_MinimapIcon");

            EXSecretDoor_Hollow = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door_Hollow");
            GameObject EXSecretDoorHollow_Frame_Top    = EXSecretDoor_Hollow.transform.Find("FrameTop").gameObject;
            GameObject EXSecretDoorHollow_Frame_Bottom = EXSecretDoor_Hollow.transform.Find("FrameBottom").gameObject;
            GameObject EXSecretDoorHollow_Background   = EXSecretDoor_Hollow.transform.Find("Background").gameObject;
            GameObject EXSecretDoorHollow_Light        = EXSecretDoor_Hollow.transform.Find("Light").gameObject;
            GameObject EXSecretDoorHollow_Lock         = EXSecretDoor_Hollow.transform.Find("Lock").gameObject;


            tk2dSprite m_DoorHollowSprite             = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Hollow, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00");
            tk2dSprite m_DoorHollowBorderTopSprite    = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Top");
            tk2dSprite m_DoorHollowBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom");
            tk2dSprite m_DoorHollowBackgroundSprite   = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background");
            tk2dSprite m_DoorHollowLightSprite        = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red");

            m_DoorHollowBorderTopSprite.HeightOffGround    = 3;
            m_DoorHollowBorderBottomSprite.HeightOffGround = -0.5f;
            m_DoorHollowSprite.HeightOffGround             = -1.5f;
            m_DoorHollowBackgroundSprite.HeightOffGround   = -2f;
            m_DoorHollowLightSprite.HeightOffGround        = 3.5f;

            ExpandUtility.GenerateSpriteAnimator(EXSecretDoor_Hollow, DoorSpriteAnimations, ClipFps: 10);

            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12));

            ExpandSecretDoorPlacable m_SecretDoorHollowComponent = EXSecretDoor_Hollow.AddComponent <ExpandSecretDoorPlacable>();

            m_SecretDoorHollowComponent.DoorTopBorderObject    = EXSecretDoorHollow_Frame_Top;
            m_SecretDoorHollowComponent.DoorBottomBorderObject = EXSecretDoorHollow_Frame_Bottom;
            m_SecretDoorHollowComponent.DoorBackgroundObject   = EXSecretDoorHollow_Background;
            m_SecretDoorHollowComponent.DoorLightObject        = EXSecretDoorHollow_Light;

            GameObject m_RatLock = ExpandPrefabs.RatJailDoor.GetComponent <InteractableDoorController>().WorldLocks[0].gameObject;

            tk2dSprite EXLockSprite = EXSecretDoorHollow_Lock.AddComponent <tk2dSprite>();

            ExpandUtility.DuplicateSprite(EXLockSprite, m_RatLock.GetComponent <tk2dSprite>());
            ExpandUtility.DuplicateSpriteAnimator(EXSecretDoorHollow_Lock, m_RatLock.GetComponent <tk2dSpriteAnimator>());
            EXLockSprite.HeightOffGround = -0.3f;


            InteractableLock m_EXLockHollow = EXSecretDoorHollow_Lock.AddComponent <InteractableLock>();

            m_EXLockHollow.Suppress          = m_RatLock.GetComponent <InteractableLock>().Suppress;
            m_EXLockHollow.lockMode          = InteractableLock.InteractableLockMode.RESOURCEFUL_RAT;
            m_EXLockHollow.JailCellKeyId     = m_RatLock.GetComponent <InteractableLock>().JailCellKeyId;
            m_EXLockHollow.IdleAnimName      = m_RatLock.GetComponent <InteractableLock>().IdleAnimName;
            m_EXLockHollow.UnlockAnimName    = m_RatLock.GetComponent <InteractableLock>().UnlockAnimName;
            m_EXLockHollow.NoKeyAnimName     = m_RatLock.GetComponent <InteractableLock>().NoKeyAnimName;
            m_EXLockHollow.SpitAnimName      = m_RatLock.GetComponent <InteractableLock>().SpitAnimName;
            m_EXLockHollow.BustedAnimName    = m_RatLock.GetComponent <InteractableLock>().BustedAnimName;
            m_SecretDoorHollowComponent.Lock = m_EXLockHollow;
            EXSecretDoor_Hollow.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));

            EXSecretDoor_Hollow_Unlocked = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door_Hollow_Unlocked");
            GameObject EXSecretDoorHollowUnlocked_Frame_Top    = EXSecretDoor_Hollow_Unlocked.transform.Find("FrameTop").gameObject;
            GameObject EXSecretDoorHollowUnlocked_Frame_Bottom = EXSecretDoor_Hollow_Unlocked.transform.Find("FrameBottom").gameObject;
            GameObject EXSecretDoorHollowUnlocked_Background   = EXSecretDoor_Hollow_Unlocked.transform.Find("Background").gameObject;
            GameObject EXSecretDoorHollowUnlocked_Light        = EXSecretDoor_Hollow_Unlocked.transform.Find("Light").gameObject;

            tk2dSprite m_DoorHollow_UnlockedSprite             = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Hollow_Unlocked, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00");
            tk2dSprite m_DoorHollow_UnlockedBorderTopSprite    = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Top");
            tk2dSprite m_DoorHollow_UnlockedBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom");
            tk2dSprite m_DoorHollow_UnlockedBackgroundSprite   = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background");
            tk2dSprite m_DoorHollow_UnlockedLightSprite        = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red");

            m_DoorHollow_UnlockedBorderTopSprite.HeightOffGround    = 3;
            m_DoorHollow_UnlockedBorderBottomSprite.HeightOffGround = -0.5f;
            m_DoorHollow_UnlockedSprite.HeightOffGround             = -1.5f;
            m_DoorHollow_UnlockedBackgroundSprite.HeightOffGround   = -2f;
            m_DoorHollow_UnlockedLightSprite.HeightOffGround        = 3.5f;

            ExpandUtility.GenerateSpriteAnimator(EXSecretDoor_Hollow_Unlocked, DoorSpriteAnimations, ClipFps: 10);

            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow_Unlocked, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12));

            ExpandSecretDoorPlacable m_SecretDoorHollow_UnlockedComponent = EXSecretDoor_Hollow_Unlocked.AddComponent <ExpandSecretDoorPlacable>();

            m_SecretDoorHollow_UnlockedComponent.DoorTopBorderObject    = EXSecretDoorHollowUnlocked_Frame_Top;
            m_SecretDoorHollow_UnlockedComponent.DoorBottomBorderObject = EXSecretDoorHollowUnlocked_Frame_Bottom;
            m_SecretDoorHollow_UnlockedComponent.DoorBackgroundObject   = EXSecretDoorHollowUnlocked_Background;
            m_SecretDoorHollow_UnlockedComponent.DoorLightObject        = EXSecretDoorHollowUnlocked_Light;
            EXSecretDoor_Hollow_Unlocked.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));



            EXSecretDoor = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door");
            GameObject EXSecretDoor_Frame_Top    = EXSecretDoor.transform.Find("FrameTop").gameObject;
            GameObject EXSecretDoor_Frame_Bottom = EXSecretDoor.transform.Find("FrameBottom").gameObject;
            GameObject EXSecretDoor_Background   = EXSecretDoor.transform.Find("Background").gameObject;
            GameObject EXSecretDoor_Light        = EXSecretDoor.transform.Find("Light").gameObject;
            GameObject EXSecretDoor_Lock         = EXSecretDoor.transform.Find("Lock").gameObject;


            tk2dSprite m_DoorSprite             = SpriteSerializer.AddSpriteToObject(EXSecretDoor, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00");
            tk2dSprite m_DoorBorderTopSprite    = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_NoDecal_Top");
            tk2dSprite m_DoorBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom");
            tk2dSprite m_DoorBackgroundSprite   = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background");
            tk2dSprite m_DoorLightSprite        = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red");

            m_DoorBorderTopSprite.HeightOffGround    = 3;
            m_DoorBorderBottomSprite.HeightOffGround = -0.5f;
            m_DoorSprite.HeightOffGround             = -1.5f;
            m_DoorBackgroundSprite.HeightOffGround   = -2f;
            m_DoorLightSprite.HeightOffGround        = 3.5f;


            ExpandUtility.GenerateSpriteAnimator(EXSecretDoor, DoorSpriteAnimations, ClipFps: 10);

            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12));

            ExpandSecretDoorPlacable m_SecretDoorComponent = EXSecretDoor.AddComponent <ExpandSecretDoorPlacable>();

            m_SecretDoorComponent.DoorTopBorderObject    = EXSecretDoor_Frame_Top;
            m_SecretDoorComponent.DoorBottomBorderObject = EXSecretDoor_Frame_Bottom;
            m_SecretDoorComponent.DoorBackgroundObject   = EXSecretDoor_Background;
            m_SecretDoorComponent.DoorLightObject        = EXSecretDoor_Light;

            Dungeon    Base_Castle  = DungeonDatabase.GetOrLoadByName("Base_Castle");
            GameObject m_NormalLock = (Base_Castle.PatternSettings.flows[0].sharedInjectionData[1].InjectionData[0].exactRoom.placedObjects[0].nonenemyBehaviour as SecretFloorInteractableController).WorldLocks[0].gameObject;

            tk2dSprite EXLockNormalSprite = EXSecretDoor_Lock.AddComponent <tk2dSprite>();

            ExpandUtility.DuplicateSprite(EXLockNormalSprite, m_NormalLock.GetComponent <tk2dSprite>());
            ExpandUtility.DuplicateSpriteAnimator(EXSecretDoor_Lock, m_NormalLock.GetComponent <tk2dSpriteAnimator>());
            EXLockNormalSprite.HeightOffGround = 1.7f;

            InteractableLock m_EXLockNormal = EXSecretDoor_Lock.AddComponent <InteractableLock>();

            m_EXLockNormal.Suppress       = m_NormalLock.GetComponent <InteractableLock>().Suppress;
            m_EXLockNormal.lockMode       = m_NormalLock.GetComponent <InteractableLock>().lockMode;
            m_EXLockNormal.JailCellKeyId  = m_NormalLock.GetComponent <InteractableLock>().JailCellKeyId;
            m_EXLockNormal.IdleAnimName   = m_NormalLock.GetComponent <InteractableLock>().IdleAnimName;
            m_EXLockNormal.UnlockAnimName = m_NormalLock.GetComponent <InteractableLock>().UnlockAnimName;
            m_EXLockNormal.NoKeyAnimName  = m_NormalLock.GetComponent <InteractableLock>().NoKeyAnimName;
            m_EXLockNormal.SpitAnimName   = m_NormalLock.GetComponent <InteractableLock>().SpitAnimName;
            m_EXLockNormal.BustedAnimName = m_NormalLock.GetComponent <InteractableLock>().BustedAnimName;

            m_SecretDoorComponent.Lock = m_EXLockNormal;
            EXSecretDoor.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));

            Base_Castle  = null;
            m_NormalLock = null;

            EXSecretDoor_Unlocked = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door_Unlocked");
            GameObject EXSecretDoorUnlocked_Frame_Top    = EXSecretDoor_Unlocked.transform.Find("FrameTop").gameObject;
            GameObject EXSecretDoorUnlocked_Frame_Bottom = EXSecretDoor_Unlocked.transform.Find("FrameBottom").gameObject;
            GameObject EXSecretDoorUnlocked_Background   = EXSecretDoor_Unlocked.transform.Find("Background").gameObject;
            GameObject EXSecretDoorUnlocked_Light        = EXSecretDoor_Unlocked.transform.Find("Light").gameObject;

            tk2dSprite m_Door_UnlockedSprite             = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Unlocked, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00");
            tk2dSprite m_Door_UnlockedBorderTopSprite    = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Top");
            tk2dSprite m_Door_UnlockedBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom");
            tk2dSprite m_Door_UnlockedBackgroundSprite   = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background");
            tk2dSprite m_Door_UnlockedLightSprite        = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red");

            m_Door_UnlockedBorderTopSprite.HeightOffGround    = 3;
            m_Door_UnlockedBorderBottomSprite.HeightOffGround = -0.5f;
            m_Door_UnlockedSprite.HeightOffGround             = -1.5f;
            m_Door_UnlockedBackgroundSprite.HeightOffGround   = -2f;
            m_Door_UnlockedLightSprite.HeightOffGround        = 3.5f;

            ExpandUtility.GenerateSpriteAnimator(EXSecretDoor_Unlocked, DoorSpriteAnimations, ClipFps: 10);

            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Unlocked, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12));

            ExpandSecretDoorPlacable m_SecretDoor_UnlockedComponent = EXSecretDoor_Unlocked.AddComponent <ExpandSecretDoorPlacable>();

            m_SecretDoor_UnlockedComponent.DoorTopBorderObject    = EXSecretDoorUnlocked_Frame_Top;
            m_SecretDoor_UnlockedComponent.DoorBottomBorderObject = EXSecretDoorUnlocked_Frame_Bottom;
            m_SecretDoor_UnlockedComponent.DoorBackgroundObject   = EXSecretDoorUnlocked_Background;
            m_SecretDoor_UnlockedComponent.DoorLightObject        = EXSecretDoorUnlocked_Light;
            EXSecretDoor_Unlocked.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));
        }
コード例 #7
0
        public static void InitPrefabs(AssetBundle expandSharedAssets1)
        {
            List <string> m_DoorOpenSprites = new List <string>()
            {
                "EXSecretDoor_Open_00",
                "EXSecretDoor_Open_01",
                "EXSecretDoor_Open_02",
                "EXSecretDoor_Open_03",
                "EXSecretDoor_Open_04",
                "EXSecretDoor_Open_05",
                "EXSecretDoor_Open_06",
                "EXSecretDoor_Open_07"
            };

            List <string> m_DoorCloseSprites = new List <string>()
            {
                "EXSecretDoor_Close_00",
                "EXSecretDoor_Close_01",
                "EXSecretDoor_Close_02",
                "EXSecretDoor_Close_03",
                "EXSecretDoor_Close_04",
                "EXSecretDoor_Close_05",
                "EXSecretDoor_Close_06",
                "EXSecretDoor_Close_07",
            };

            EXSecretDoorMinimapIcon = expandSharedAssets1.LoadAsset <GameObject>("EXSecretDoor_MinimapIcon");
            ItemBuilder.AddSpriteToObject(EXSecretDoorMinimapIcon, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_MinimapIcon"), false, false);

            EXSecretDoor                               = expandSharedAssets1.LoadAsset <GameObject>("EX Secret Door Entrance");
            EXSecretDoor_Frame_Top                     = EXSecretDoor.transform.Find("EX Secret Door Top").gameObject;
            EXSecretDoor_Frame_Bottom                  = EXSecretDoor.transform.Find("EX Secret Door Bottom").gameObject;
            EXSecretDoor_Background                    = EXSecretDoor.transform.Find("EX Secret Door Background").gameObject;
            EXSecretDoor_Light                         = EXSecretDoor.transform.Find("EX Secret Door Light").gameObject;
            EXSecretDoor_Frame_Top.layer               = LayerMask.NameToLayer("FG_Critical");
            EXSecretDoor_Frame_Bottom.layer            = LayerMask.NameToLayer("FG_Critical");
            EXSecretDoor_Background.layer              = LayerMask.NameToLayer("FG_Critical");
            EXSecretDoor_Light.layer                   = LayerMask.NameToLayer("FG_Critical");
            EXSecretDoor_Frame_Top.transform.parent    = EXSecretDoor.transform;
            EXSecretDoor_Frame_Bottom.transform.parent = EXSecretDoor.transform;
            EXSecretDoor_Background.transform.parent   = EXSecretDoor.transform;
            EXSecretDoor_Light.transform.parent        = EXSecretDoor.transform;

            ItemBuilder.AddSpriteToObject(EXSecretDoor, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Open_00"), false, false);
            ItemBuilder.AddSpriteToObject(EXSecretDoor_Frame_Top, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Frame_Top"), false, false);
            ItemBuilder.AddSpriteToObject(EXSecretDoor_Frame_Bottom, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Frame_Bottom"), false, false);
            ItemBuilder.AddSpriteToObject(EXSecretDoor_Background, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Background"), false, false);
            ItemBuilder.AddSpriteToObject(EXSecretDoor_Light, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Light_Red"), false, false);


            tk2dSprite m_DoorBorderTopSprite = EXSecretDoor_Frame_Top.GetComponent <tk2dSprite>();

            m_DoorBorderTopSprite.HeightOffGround = 3;
            SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Frame_NoDecal_Top"), m_DoorBorderTopSprite.Collection);

            tk2dSprite m_DoorBorderBottomSprite = EXSecretDoor_Frame_Bottom.GetComponent <tk2dSprite>();

            m_DoorBorderBottomSprite.HeightOffGround = -0.5f;

            tk2dSprite m_DoorSprite = EXSecretDoor.GetComponent <tk2dSprite>();

            m_DoorSprite.HeightOffGround = -1.5f;

            tk2dSprite m_DoorBackgroundSprite = EXSecretDoor_Background.GetComponent <tk2dSprite>();

            m_DoorBackgroundSprite.HeightOffGround = -2f;

            tk2dSprite m_DoorLightSprite = EXSecretDoor_Light.GetComponent <tk2dSprite>();

            m_DoorLightSprite.HeightOffGround = 3.5f;

            SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Light_Green"), m_DoorLightSprite.Collection);

            foreach (string spriteName in m_DoorOpenSprites)
            {
                if (spriteName != "EXSecretDoor_Open_00")
                {
                    SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(spriteName), m_DoorSprite.Collection);
                }
            }
            foreach (string spriteName in m_DoorCloseSprites)
            {
                SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(spriteName), m_DoorSprite.Collection);
            }

            ExpandUtility.GenerateSpriteAnimator(EXSecretDoor, ClipFps: 10);

            tk2dSpriteAnimator m_DoorAnimator = EXSecretDoor.GetComponent <tk2dSpriteAnimator>();

            ExpandUtility.AddAnimation(m_DoorAnimator, m_DoorSprite.Collection, m_DoorOpenSprites, "door_open", frameRate: 10);
            ExpandUtility.AddAnimation(m_DoorAnimator, m_DoorSprite.Collection, m_DoorCloseSprites, "door_close", frameRate: 10);

            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14));
            ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12));

            ExpandSecretDoorPlacable m_SecretDoorComponent = EXSecretDoor.AddComponent <ExpandSecretDoorPlacable>();

            m_SecretDoorComponent.DoorTopBorderObject    = EXSecretDoor_Frame_Top;
            m_SecretDoorComponent.DoorBottomBorderObject = EXSecretDoor_Frame_Bottom;
            m_SecretDoorComponent.DoorBackgroundObject   = EXSecretDoor_Background;
            m_SecretDoorComponent.DoorLightObject        = EXSecretDoor_Light;

            GameObject m_RatLock = ExpandPrefabs.RatJailDoorPlacable.gameObject.GetComponent <InteractableDoorController>().WorldLocks[0].gameObject;

            EXSecretDoor_Lock = EXSecretDoor.transform.Find("EX Secret Door Lock").gameObject;
            tk2dSprite EXLockSprite = EXSecretDoor_Lock.AddComponent <tk2dSprite>();

            ExpandUtility.DuplicateSprite(EXLockSprite, m_RatLock.GetComponent <tk2dSprite>());
            EXLockSprite.HeightOffGround = -0.3f;

            tk2dSpriteAnimator m_EXLockAnimator = ExpandUtility.DuplicateSpriteAnimator(EXSecretDoor_Lock, m_RatLock.GetComponent <tk2dSpriteAnimator>(), true);

            InteractableLock m_EXLock = EXSecretDoor_Lock.AddComponent <InteractableLock>();

            m_EXLock.Suppress       = m_RatLock.GetComponent <InteractableLock>().Suppress;
            m_EXLock.lockMode       = InteractableLock.InteractableLockMode.RESOURCEFUL_RAT;
            m_EXLock.JailCellKeyId  = m_RatLock.GetComponent <InteractableLock>().JailCellKeyId;
            m_EXLock.IdleAnimName   = m_RatLock.GetComponent <InteractableLock>().IdleAnimName;
            m_EXLock.UnlockAnimName = m_RatLock.GetComponent <InteractableLock>().UnlockAnimName;
            m_EXLock.NoKeyAnimName  = m_RatLock.GetComponent <InteractableLock>().NoKeyAnimName;
            m_EXLock.SpitAnimName   = m_RatLock.GetComponent <InteractableLock>().SpitAnimName;
            m_EXLock.BustedAnimName = m_RatLock.GetComponent <InteractableLock>().BustedAnimName;

            m_SecretDoorComponent.Lock = m_EXLock;
            EXSecretDoor_Lock.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));

            EXSecretDoorDestination      = UnityEngine.Object.Instantiate(EXSecretDoor);
            EXSecretDoorDestination.name = "EX Secret Door (Exit)";
            ExpandSecretDoorExitPlacable m_ExitDoorComponent = EXSecretDoorDestination.AddComponent <ExpandSecretDoorExitPlacable>();

            m_ExitDoorComponent.MinimapIcon = ExpandPrefabs.exit_room_basic.associatedMinimapIcon;

            m_ExitDoorComponent.DoorBackgroundObject   = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorBackgroundObject;
            m_ExitDoorComponent.DoorBottomBorderObject = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorBottomBorderObject;
            m_ExitDoorComponent.DoorLightObject        = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorLightObject;
            m_ExitDoorComponent.DoorTopBorderObject    = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorTopBorderObject;
            UnityEngine.Object.Destroy(EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().Lock.gameObject);
            UnityEngine.Object.Destroy(EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>());


            Dungeon    Base_Castle  = DungeonDatabase.GetOrLoadByName("Base_Castle");
            GameObject m_NormalLock = (Base_Castle.PatternSettings.flows[0].sharedInjectionData[1].InjectionData[0].exactRoom.placedObjects[0].nonenemyBehaviour as SecretFloorInteractableController).WorldLocks[0].gameObject;

            // Setup copy with no rat decal and normal lock instead of rat lock. A general purpose version of the Mini-Elevator.
            EXSecretDoor_Normal      = UnityEngine.Object.Instantiate(EXSecretDoor);
            EXSecretDoor_Normal.name = "EX Secret Door 2 (Entrance)";

            Vector3 Lock2PositionOffset = (EXSecretDoor_Normal.transform.position + new Vector3(1.22f, 0.34f));

            ExpandSecretDoorPlacable m_SecretDoor2Component = EXSecretDoor_Normal.GetComponent <ExpandSecretDoorPlacable>();

            m_SecretDoor2Component.isHollowsElevator = false;
            UnityEngine.Object.Destroy(m_SecretDoor2Component.Lock.gameObject);
            m_SecretDoor2Component.DoorTopBorderObject.GetComponent <tk2dSprite>().SetSprite("EXSecretDoor_Frame_NoDecal_Top");
            GameObject m_LockObject2 = UnityEngine.Object.Instantiate(m_NormalLock, Lock2PositionOffset, Quaternion.identity);

            m_LockObject2.gameObject.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));
            m_LockObject2.GetComponent <InteractableLock>().sprite.HeightOffGround = 1.7f;
            m_LockObject2.GetComponent <InteractableLock>().sprite.UpdateZDepth();
            // m_LockObject2.SetActive(false);
            m_LockObject2.transform.SetParent(EXSecretDoor_Normal.transform, true);
            m_SecretDoor2Component.Lock = m_LockObject2.GetComponent <InteractableLock>();


            /*m_ExitDoorComponent.DoorBackgroundObject.SetActive(false);
             * m_ExitDoorComponent.DoorBottomBorderObject.SetActive(false);
             * m_ExitDoorComponent.DoorLightObject.SetActive(false);
             * m_ExitDoorComponent.DoorTopBorderObject.SetActive(false);*/
            EXSecretDoor_Normal.SetActive(false);
            EXSecretDoorDestination.SetActive(false);
            FakePrefab.MarkAsFakePrefab(EXSecretDoor_Normal);
            FakePrefab.MarkAsFakePrefab(EXSecretDoorDestination);
            UnityEngine.Object.DontDestroyOnLoad(EXSecretDoor_Normal);
            UnityEngine.Object.DontDestroyOnLoad(EXSecretDoorDestination);

            Base_Castle  = null;
            m_NormalLock = null;
        }
コード例 #8
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            hammerItemObject = expandSharedAssets1.LoadAsset <GameObject>("Baby Good Hammer");
            BabyGoodHammer babyGoodHammer = hammerItemObject.AddComponent <BabyGoodHammer>();

            SpriteSerializer.AddSpriteToObject(hammerItemObject, ExpandPrefabs.EXItemCollection, "babygoodhammer");

            string shortDesc = "It's Hammer Time!";
            string longDesc  = "Summons a Dead Blow Hammer.\n\nIt's cry sounds a lot like a whistle.\n\nThe closer you are to the Forge, the more powerful the hammers will be.";

            // ItemBuilder.SetupItem(babyGoodHammer, shortDesc, longDesc, "ex");
            ItemBuilder.SetupItem(babyGoodHammer, shortDesc, longDesc, "ex");
            ItemBuilder.SetCooldownType(babyGoodHammer, ItemBuilder.CooldownType.Damage, 350f);
            babyGoodHammer.quality = ItemQuality.B;
            if (!ExpandSettings.EnableEXItems)
            {
                babyGoodHammer.quality = ItemQuality.EXCLUDED;
            }

            // Hammer Spawn FX Object
            hammerSpawnFX = expandSharedAssets1.LoadAsset <GameObject>("HammerSpawningFX");
            tk2dSprite hammerSpawnFXSprite = SpriteSerializer.AddSpriteToObject(hammerSpawnFX, ExpandPrefabs.EXItemCollection, "babygoodhammer_spawn_00");

            List <string> spritePaths = new List <string>()
            {
                "babygoodhammer_spawn_00",
                "babygoodhammer_spawn_00",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_02",
                "babygoodhammer_spawn_03",
                "babygoodhammer_spawn_04",
                "babygoodhammer_spawn_05",
                "babygoodhammer_spawn_06",
                "babygoodhammer_spawn_07",
                "babygoodhammer_spawn_08",
                "babygoodhammer_spawn_09",
                "babygoodhammer_spawn_10",
                "babygoodhammer_spawn_11",
                "babygoodhammer_spawn_12",
                "babygoodhammer_spawn_13",
                "babygoodhammer_spawn_14",
                "babygoodhammer_spawn_15",
                "babygoodhammer_spawn_16",
                "babygoodhammer_spawn_17",
                "babygoodhammer_spawn_18",
                "babygoodhammer_spawn_19",
                "babygoodhammer_spawn_20",
                "babygoodhammer_spawn_21",
                "babygoodhammer_spawn_22",
                "babygoodhammer_spawn_23",
                "babygoodhammer_spawn_24",
                "babygoodhammer_spawn_25"
            };

            /*foreach (string spriteName in spritePaths) {
             *  if (spriteName != "babygoodhammer_spawn_00") {
             *      SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset<Texture2D>(spriteName), hammerSpawnFXSprite.Collection);
             *  }
             * }*/

            ExpandUtility.GenerateSpriteAnimator(hammerSpawnFX);
            tk2dSpriteAnimator hammerAnimator = hammerSpawnFX.GetComponent <tk2dSpriteAnimator>();

            List <string> spritePaths_reversed = new List <string>()
            {
                "babygoodhammer_spawn_25",
                "babygoodhammer_spawn_24",
                "babygoodhammer_spawn_23",
                "babygoodhammer_spawn_22",
                "babygoodhammer_spawn_21",
                "babygoodhammer_spawn_20",
                "babygoodhammer_spawn_19",
                "babygoodhammer_spawn_18",
                "babygoodhammer_spawn_17",
                "babygoodhammer_spawn_16",
                "babygoodhammer_spawn_15",
                "babygoodhammer_spawn_14",
                "babygoodhammer_spawn_13",
                "babygoodhammer_spawn_12",
                "babygoodhammer_spawn_11",
                "babygoodhammer_spawn_10",
                "babygoodhammer_spawn_09",
                "babygoodhammer_spawn_08",
                "babygoodhammer_spawn_07",
                "babygoodhammer_spawn_06",
                "babygoodhammer_spawn_05",
                "babygoodhammer_spawn_04",
                "babygoodhammer_spawn_03",
                "babygoodhammer_spawn_02",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_01",
                "babygoodhammer_spawn_00"
            };


            ExpandUtility.AddAnimation(hammerAnimator, ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), spritePaths, "HammerSpawn", tk2dSpriteAnimationClip.WrapMode.Once);
            ExpandUtility.AddAnimation(hammerAnimator, ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), spritePaths_reversed, "HammerReturnSpawn", tk2dSpriteAnimationClip.WrapMode.Once);

            HammerPickupID = babyGoodHammer.PickupObjectId;
        }
コード例 #9
0
        private void HandleUIAnimation()
        {
            // if (m_PickedUp) { return; }

            MinimapUIController minimapDock = null;

            if (Minimap.Instance)
            {
                minimapDock = Minimap.Instance.UIMinimap;
            }
            else
            {
                minimapDock = FindObjectOfType <MinimapUIController>();
            }

            if (minimapDock)
            {
                List <Tuple <tk2dSprite, PassiveItem> > m_DockItems = ReflectionHelpers.ReflectGetField <List <Tuple <tk2dSprite, PassiveItem> > >(typeof(MinimapUIController), "dockItems", minimapDock);

                if (m_DockItems != null && m_DockItems.Count > 0)
                {
                    for (int i = 0; i < m_DockItems.Count; i++)
                    {
                        if (m_DockItems[i].Second is CorruptedJunk)
                        {
                            if (!m_DockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>())
                            {
                                ExpandUtility.GenerateSpriteAnimator(m_DockItems[i].First.gameObject, playAutomatically: true);
                                ExpandUtility.AddAnimation(m_DockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>(), m_DockItems[i].First.Collection, m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20);
                            }
                            if (m_DockItems[i].First.spriteAnimator)
                            {
                                if (!m_DockItems[i].First.spriteAnimator.IsPlaying("idle"))
                                {
                                    m_DockItems[i].First.spriteAnimator.Play("idle");
                                }
                            }
                        }
                        else
                        {
                            if (!m_PickedUp && UnityEngine.Random.value <= 0.6f)
                            {
                                ExpandShaders.Instance.ApplyGlitchShader(m_DockItems[i].First);
                            }
                        }
                    }
                }

                List <Tuple <tk2dSprite, PassiveItem> > m_secondaryDockItems = ReflectionHelpers.ReflectGetField <List <Tuple <tk2dSprite, PassiveItem> > >(typeof(MinimapUIController), "secondaryDockItems", minimapDock);

                if (m_secondaryDockItems != null && m_secondaryDockItems.Count > 0)
                {
                    for (int i = 0; i < m_secondaryDockItems.Count; i++)
                    {
                        if (m_secondaryDockItems[i].Second is CorruptedJunk)
                        {
                            if (!m_secondaryDockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>())
                            {
                                ExpandUtility.GenerateSpriteAnimator(m_secondaryDockItems[i].First.gameObject, playAutomatically: true);
                                ExpandUtility.AddAnimation(m_secondaryDockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>(), m_secondaryDockItems[i].First.Collection, m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20);
                            }
                            if (m_secondaryDockItems[i].First.spriteAnimator)
                            {
                                if (!m_secondaryDockItems[i].First.spriteAnimator.IsPlaying("idle"))
                                {
                                    m_secondaryDockItems[i].First.spriteAnimator.Play("idle");
                                }
                            }
                        }
                        else
                        {
                            if (!m_PickedUp && UnityEngine.Random.value <= 0.6f)
                            {
                                ExpandShaders.Instance.ApplyGlitchShader(m_secondaryDockItems[i].First);
                            }
                        }
                    }
                }
            }
        }
コード例 #10
0
        private void BuildBossPrefab(RoomHandler room)
        {
            AssetBundle expandSharedAssets1 = ResourceManager.LoadAssetBundle("ExpandSharedAuto");

            List <string> m_MirrorMimicFadeInSprites = new List <string>()
            {
                "PlayerMimicMirror_MimicFadeIn_01",
                "PlayerMimicMirror_MimicFadeIn_02",
                "PlayerMimicMirror_MimicFadeIn_03",
                "PlayerMimicMirror_MimicFadeIn_04",
                "PlayerMimicMirror_MimicFadeIn_05",
                "PlayerMimicMirror_MimicFadeIn_06",
                "PlayerMimicMirror_MimicFadeIn_07",
                "PlayerMimicMirror_MimicFadeIn_08",
                "PlayerMimicMirror_MimicFadeIn_09",
                "PlayerMimicMirror_MimicFadeIn_10"
            };

            List <string> m_MirrorCrackSprites = new List <string>()
            {
                "PlayerMimicMirror_MimicCrack_01",
                "PlayerMimicMirror_MimicCrack_02",
                "PlayerMimicMirror_MimicCrack_03",
                "PlayerMimicMirror_MimicCrack_04",
                "PlayerMimicMirror_MimicCrack_05"
            };

            List <string> m_MirrorShatterFXSprites = new List <string>()
            {
                "PlayerMimicMirror_ShatterDebris_01",
                "PlayerMimicMirror_ShatterDebris_02",
                "PlayerMimicMirror_ShatterDebris_03",
                "PlayerMimicMirror_ShatterDebris_04",
                "PlayerMimicMirror_ShatterDebris_05",
                "PlayerMimicMirror_ShatterDebris_06",
                "PlayerMimicMirror_ShatterDebris_07",
                "PlayerMimicMirror_ShatterDebris_08",
                "PlayerMimicMirror_ShatterDebris_09",
                "PlayerMimicMirror_ShatterDebris_10"
            };

            IntVector2 SpawnPosition = (gameObject.transform.PositionVector2().ToIntVector2() - room.area.basePosition);

            PlayerController CurrentPlayer = GameManager.Instance.PrimaryPlayer;

            GameObject m_CachedNewObject = new GameObject("Gungeoneer Mimic")
            {
                layer = 28
            };

            GenerateGungeoneerMimicBoss(expandSharedAssets1, m_CachedNewObject, CurrentPlayer);

            GameObject SpawnedBossObject = m_CachedNewObject.GetComponent <AIActor>().InstantiateObject(room, SpawnPosition, false);

            SpawnedBossObject.transform.parent = room.hierarchyParent;
            Destroy(m_CachedNewObject);

            PickupObject MimiclayItem = PickupObjectDatabase.GetById(Mimiclay.MimiclayPickupID);

            if (MimiclayItem)
            {
                SpawnedBossObject.GetComponent <AIActor>().AdditionalSafeItemDrops.Add(MimiclayItem);
            }

            MirrorController mirror = ExpandPrefabs.CurrsedMirrorPlacable.gameObject.GetComponent <MirrorController>();

            GameObject MimicMirrorObject = new GameObject("MimicMirrorBase");

            MimicMirrorObject.transform.position = (SpawnedBossObject.transform.position - new Vector3(0.25f, 1));
            MimicMirrorObject.transform.parent   = gameObject.transform;
            ItemBuilder.AddSpriteToObject(MimicMirrorObject, expandSharedAssets1.LoadAsset <Texture2D>("PlayerMimicMirror_Base"), false, false);

            tk2dSprite MirrorBaseSprite = MimicMirrorObject.GetComponent <tk2dSprite>();

            SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>("PlayerMimicMirror_Broken"), MirrorBaseSprite.Collection);

            foreach (string SpriteName in m_MirrorMimicFadeInSprites)
            {
                SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(SpriteName), MirrorBaseSprite.Collection);
            }
            foreach (string SpriteName in m_MirrorCrackSprites)
            {
                SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(SpriteName), MirrorBaseSprite.Collection);
            }

            ExpandUtility.GenerateSpriteAnimator(MimicMirrorObject, AnimateDuringBossIntros: true, AlwaysIgnoreTimeScale: true, ignoreTimeScale: true);
            ExpandUtility.AddAnimation(MimicMirrorObject.GetComponent <tk2dSpriteAnimator>(), MirrorBaseSprite.Collection, m_MirrorMimicFadeInSprites, "PlayerMimicFadeIn", tk2dSpriteAnimationClip.WrapMode.Once, 8);
            ExpandUtility.AddAnimation(MimicMirrorObject.GetComponent <tk2dSpriteAnimator>(), MirrorBaseSprite.Collection, m_MirrorCrackSprites, "MirrorGlassCrack", tk2dSpriteAnimationClip.WrapMode.Once, 6);

            ExpandGungeoneerMimicIntroDoer playerMimicBossIntroDoer = SpawnedBossObject.GetComponent <ExpandGungeoneerMimicIntroDoer>();

            playerMimicBossIntroDoer.MirrorBase    = MimicMirrorObject;
            playerMimicBossIntroDoer.ShatterSystem = Instantiate(mirror.ShatterSystem, MimicMirrorObject.transform.position, Quaternion.identity);
            playerMimicBossIntroDoer.ShatterSystem.SetActive(false);
            playerMimicBossIntroDoer.ShatterSystem.transform.parent = MimicMirrorObject.transform;

            GameObject MimicMirrorFXObject = new GameObject("MirrorShatterFX");

            MimicMirrorFXObject.transform.position = (MimicMirrorObject.transform.position - Vector3.one);
            MimicMirrorFXObject.transform.parent   = gameObject.transform.parent;
            ItemBuilder.AddSpriteToObject(MimicMirrorFXObject, expandSharedAssets1.LoadAsset <Texture2D>("PlayerMimicMirror_ShatterDebris_01"), false, false);
            foreach (string SpriteName in m_MirrorShatterFXSprites)
            {
                SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(SpriteName), MimicMirrorFXObject.GetComponent <tk2dSprite>().Collection);
            }
            ExpandUtility.GenerateSpriteAnimator(MimicMirrorFXObject, AnimateDuringBossIntros: true, AlwaysIgnoreTimeScale: true, ignoreTimeScale: true);
            ExpandUtility.AddAnimation(MimicMirrorFXObject.GetComponent <tk2dSpriteAnimator>(), MimicMirrorFXObject.GetComponent <tk2dSprite>().Collection, m_MirrorShatterFXSprites, "PlayerMimicShatter", tk2dSpriteAnimationClip.WrapMode.Once, 12);
            MimicMirrorFXObject.GetComponent <tk2dSprite>().HeightOffGround = 3.5f;
            MimicMirrorFXObject.GetComponent <tk2dSprite>().UpdateZDepth();
            playerMimicBossIntroDoer.MirrorShatterFX = MimicMirrorFXObject;
            MimicMirrorFXObject.SetActive(false);

            expandSharedAssets1 = null;
        }
コード例 #11
0
        private static void Add(bool isGoldenVersion)
        {
            string upperColor = isGoldenVersion ? "Golden" : "Black";
            string lowerColor = isGoldenVersion ? "golden" : "black";

            Gun gun = ETGMod.Databases.Items.NewGun($"{upperColor} Revolver", $"gr_{lowerColor}_revolver");

            Game.Items.Rename($"outdated_gun_mods:{lowerColor}_revolver", $"ex:{lowerColor}_revolver");

            gun.gameObject.AddComponent <BlackAndGoldenRevolver>();
            gun.SetShortDescription("Six Deep");

            string longDescription = "Bullets fired from this cursed revolver jam enemies on hit, but also completely ignore their increased strength, damaging them as if they were unjammed.";

            if (isGoldenVersion)
            {
                longDescription += "\n\nThree bullet kin, that were completely unalike each other, set aside their differences to obtain this revolver, that was once carried by the bearer of a terrible curse. Their presence can still be felt while wielding it.";
            }
            else
            {
                longDescription += "\n\nThis revolver was once carried by the bearer of a terrible curse. It is cold to the touch. A dark wind blows.";
            }

            gun.SetLongDescription(longDescription);

            // frame rate can be adjusted if we don't like the current idle animation speed
            gun.SetupSprite(null, $"gr_{lowerColor}_revolver_idle_001", 5);

            var idleAnimation = gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.idleAnimation);

            var list = idleAnimation.frames.ToList();

            // manually add the reversal of the animation so we don't load the same sprite multiple times for no reason (these frames don't really need to be duplicated)
            list.Add(list[2]);
            list.Add(list[1]);

            // add a few more frames of the idle frame so the animation has a slight pause before looping
            for (int i = 0; i < 5; i++)
            {
                list.Add(list[0]);
            }

            idleAnimation.frames = list.ToArray();

            gun.SetAnimationFPS(gun.shootAnimation, 12);
            gun.SetAnimationFPS(gun.reloadAnimation, 14);

            // Every modded gun has base projectile it works with that is borrowed from other guns in the game.
            // The gun names are the names from the JSON dump! While most are the same, some guns named completely different things. If you need help finding gun names, ask a modder on the Gungeon discord.
            // which means its the ETGMod.Databases.Items / PickupObjectDatabase.Instance.InternalGetByName name, aka the pickupobject.name

            var defaultGun = PickupObjectDatabase.GetById(22) as Gun;

            gun.AddProjectileModuleFrom(defaultGun, true, false);

            // move the gun up with the hand in the second frame of the shooting animation (hand movement was done in GAE with a y offset of 1)
            //gun.GetComponent<tk2dSpriteAnimator>().GetClipByName(gun.shootAnimation).frames[1].FrameToDefinition().MakeOffset(new Vector2(0, 1));

            gun.gunSwitchGroup     = defaultGun.gunSwitchGroup;
            gun.muzzleFlashEffects = defaultGun.muzzleFlashEffects;

            gun.AddMuzzle();
            gun.muzzleOffset.localPosition = new Vector3(1.2f, 0.8f, 0f);
            gun.barrelOffset.localPosition = new Vector3(1.4f, 0.8f, 0f);

            gun.DefaultModule.shootStyle          = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle       = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.DefaultModule.cooldownTime        = 0.07f;
            gun.DefaultModule.numberOfShotsInClip = 6;
            gun.DefaultModule.angleVariance       = 0;
            gun.DefaultModule.ammoCost            = 1;

            var curseWhileHeld = new StatModifier
            {
                amount      = 2,
                statToBoost = PlayerStats.StatType.Curse,
                modifyType  = StatModifier.ModifyMethod.ADDITIVE
            };

            gun.currentGunStatModifiers = new StatModifier[] { curseWhileHeld };

            gun.shellCasing            = defaultGun.shellCasing;
            gun.shellsToLaunchOnFire   = 0;
            gun.shellsToLaunchOnReload = gun.DefaultModule.numberOfShotsInClip;
            gun.reloadShellLaunchFrame = defaultGun.reloadShellLaunchFrame;

            gun.reloadTime = 1f;
            gun.gunClass   = GunClass.PISTOL;
            gun.SetBaseMaxAmmo(666);
            gun.quality = PickupObject.ItemQuality.EXCLUDED;

            gun.encounterTrackable.EncounterGuid = $"this is the {lowerColor} skull revolver";

            Projectile projectile      = isGoldenVersion ? WestBrosGoldenRevolverProjectile.AddComponent <Projectile>() : WestBrosBlackRevolverProjectile.AddComponent <Projectile>();
            GameObject projectileChild = projectile.transform.Find("Sprite").gameObject;
            tk2dSprite projetileSprite = SpriteSerializer.AddSpriteToObject(projectileChild, ExpandCustomEnemyDatabase.WestBrosCollection, "gr_black_revolver_projectile_001");

            ExpandUtility.GenerateSpriteAnimator(projectileChild, playAutomatically: true);
            ExpandUtility.AddAnimation(projectileChild.GetComponent <tk2dSpriteAnimator>(), projetileSprite.Collection, ProjectileSpriteList, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 13);

            SpeculativeRigidbody projectileRigidBody = projectile.gameObject.AddComponent <SpeculativeRigidbody>();

            ExpandUtility.DuplicateRigidBody(projectileRigidBody, defaultGun.DefaultModule.projectiles[0].specRigidbody);
            ExpandUtility.DuplicateComponent(projectile, defaultGun.DefaultModule.projectiles[0]);
            gun.DefaultModule.projectiles[0] = projectile;
            projectile.baseData.damage       = 14f;
            projectile.baseData.speed        = 25f;
            projectile.baseData.force        = 14f;


            // projectile.transform.parent = gun.barrelOffset;
            projectile.transform.localPosition = gun.barrelOffset.localPosition;

            projectile.shouldRotate = true;
            var comp = projectile.gameObject.AddComponent <SkullRevolverBullet>();

            comp.jamsEnemies = true;

            ETGMod.Databases.Items.Add(gun, null, "ANY");

            if (isGoldenVersion)
            {
                AddHoveringGunComponent(gun);
                GoldenRevolverID = gun.PickupObjectId;
            }
            else
            {
                BlackRevolverID = gun.PickupObjectId;
            }
        }
コード例 #12
0
        public static void Init(AssetBundle expandSharedAssets1)
        {
            SonicRingObject = expandSharedAssets1.LoadAsset <GameObject>("EXSonicRing");
            SpriteSerializer.AddSpriteToObject(SonicRingObject, ExpandPrefabs.EXItemCollection, "SonicRing_Idle_05");

            List <string> m_RingFrames = new List <string>();

            for (int i = 1; i < 16; i++)
            {
                if (i < 10)
                {
                    m_RingFrames.Add("SonicRing_Idle_0" + i.ToString());
                }
                else
                {
                    m_RingFrames.Add("SonicRing_Idle_" + i.ToString());
                }
            }

            ExpandUtility.GenerateSpriteAnimator(SonicRingObject, playAutomatically: true);

            ExpandUtility.AddAnimation(SonicRingObject.GetComponent <tk2dSpriteAnimator>(), ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), m_RingFrames, "idle", tk2dSpriteAnimationClip.WrapMode.Loop);

            ExpandUtility.GenerateOrAddToRigidBody(SonicRingObject, CollisionLayer.Pickup, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(0, 1), dimensions: new IntVector2(15, 14));

            SonicRingObject.GetComponent <SpeculativeRigidbody>().PixelColliders[0].IsTrigger = true;

            PickupMover pickupMover = SonicRingObject.AddComponent <PickupMover>();

            pickupMover.pathInterval = 0.25f;
            pickupMover.acceleration = 7;
            pickupMover.maxSpeed     = 15;
            pickupMover.minRadius    = 0;

            SonicRing sonicRing = SonicRingObject.AddComponent <SonicRing>();

            string name      = "Sonic Ring";
            string shortDesc = "A Ring";
            string longDesc  = "A Simple Ring. Equilivent to one casing.";

            ItemBuilder.SetupEXItem(sonicRing, name, shortDesc, longDesc, "ex", false);
            sonicRing.quality = ItemQuality.COMMON;
            sonicRing.ItemSpansBaseQualityTiers      = false;
            sonicRing.additionalMagnificenceModifier = 0;
            sonicRing.ItemRespectsHeartMagnificence  = false;
            sonicRing.associatedItemChanceMods       = new LootModData[0];
            sonicRing.contentSource             = ContentSource.BASE;
            sonicRing.ShouldBeExcludedFromShops = false;
            sonicRing.CanBeDropped = true;
            sonicRing.PreventStartingOwnerFromDropping = false;
            sonicRing.PersistsOnDeath            = false;
            sonicRing.PersistsOnPurchase         = false;
            sonicRing.RespawnsIfPitfall          = true;
            sonicRing.PreventSaveSerialization   = false;
            sonicRing.IgnoredByRat               = false;
            sonicRing.SaveFlagToSetOnAcquisition = 0;
            sonicRing.UsesCustomCost             = false;
            sonicRing.CustomCost = 0;
            sonicRing.CanBeSold  = true;
            sonicRing.ForcedPositionInAmmonomicon = -1;
            sonicRing.currencyValue           = 1;
            sonicRing.IsMetaCurrency          = false;
            sonicRing.overrideBloopSpriteName = "SonicRing_Idle_05";

            RingID = sonicRing.PickupObjectId;
        }