コード例 #1
0
        public static void BuildIcon()
        {
            TeleportIcon = SpriteBuilder.SpriteFromResource("BleakMod/Resources/phase_shift_vfx/phase_shift_vfx_idle_001");
            tk2dBaseSprite vfxSprite = TeleportIcon.GetComponent <tk2dBaseSprite>();

            vfxSprite.GetCurrentSpriteDef().ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.MiddleCenter, vfxSprite.GetCurrentSpriteDef().position3);
            FakePrefab.MarkAsFakePrefab(TeleportIcon);
            UnityEngine.Object.DontDestroyOnLoad(TeleportIcon);
            TeleportIcon.SetActive(false);
            List <string> vfxIdleSprites = new List <string>
            {
                "phase_shift_vfx_idle_001.png",
                "phase_shift_vfx_idle_002.png",
                "phase_shift_vfx_idle_003.png",
                "phase_shift_vfx_idle_004.png",
                "phase_shift_vfx_idle_005.png",
                "phase_shift_vfx_idle_006.png",
                "phase_shift_vfx_idle_007.png",
                "phase_shift_vfx_idle_008.png"
            };

            var collection  = TeleportIcon.GetComponent <tk2dSprite>().Collection;
            var idleIdsList = new List <int>();

            foreach (string sprite in vfxIdleSprites)
            {
                idleIdsList.Add(SpriteBuilder.AddSpriteToCollection("BleakMod/Resources/phase_shift_vfx/" + sprite, collection));
            }
            tk2dSpriteAnimator spriteAnimator = TeleportIcon.AddComponent <tk2dSpriteAnimator>();

            spriteAnimator.playAutomatically = true;
            SpriteBuilder.AddAnimation(spriteAnimator, collection, idleIdsList, "phase_shift_vfx_idle", tk2dSpriteAnimationClip.WrapMode.Loop, 8);
        }
コード例 #2
0
        public static void BuildPrefab()
        {
            bool flag = BabyGoodLovebulon.blobPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(BabyGoodLovebulon.guid);

            if (flag)
            {
                ETGModConsole.Log("shit. this mod has fallen comrades, we must seek Round King", false);
            }
            else
            {
                BabyGoodLovebulon.blobPrefab = CompanionBuilder.BuildPrefab("blobuloveman", BabyGoodLovebulon.guid, BabyGoodLovebulon.spritePaths[0], new IntVector2(1, 0), new IntVector2(9, 9));
                BabyGoodLovebulon.RandomGoopTrailBehaviour randomGoopTrailBehaviour = BabyGoodLovebulon.blobPrefab.AddComponent <BabyGoodLovebulon.RandomGoopTrailBehaviour>();
                AIAnimator component = BabyGoodLovebulon.blobPrefab.GetComponent <AIAnimator>();
                component.MoveAnimation = new DirectionalAnimation
                {
                    AnimNames = new string[]
                    {
                        "idle"
                    },
                    Type = DirectionalAnimation.DirectionType.None
                };
                component.IdleAnimation = component.MoveAnimation;
                bool flag2 = BabyGoodLovebulon.blobCollection == null;
                if (flag2)
                {
                    BabyGoodLovebulon.blobCollection = SpriteBuilder.ConstructCollection(BabyGoodLovebulon.blobPrefab, "Lovebulon_Baby_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(BabyGoodLovebulon.blobCollection);
                    for (int i = 0; i < BabyGoodLovebulon.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(BabyGoodLovebulon.spritePaths[i], BabyGoodLovebulon.blobCollection);
                    }
                    SpriteBuilder.AddAnimation(randomGoopTrailBehaviour.spriteAnimator, BabyGoodLovebulon.blobCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                }
                BehaviorSpeculator component2 = BabyGoodLovebulon.blobPrefab.GetComponent <BehaviorSpeculator>();
                component2.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                component2.MovementBehaviors.Add(new SeekTargetBehavior
                {
                    LineOfSight     = false,
                    StopWhenInRange = true,
                    CustomRange     = 1f
                });
                randomGoopTrailBehaviour.aiActor.MovementSpeed = 7f;
                UnityEngine.Object.DontDestroyOnLoad(BabyGoodLovebulon.blobPrefab);
                FakePrefab.MarkAsFakePrefab(BabyGoodLovebulon.blobPrefab);
                BabyGoodLovebulon.blobPrefab.SetActive(false);
            }
        }
コード例 #3
0
        public static void Init()
        {
            string     itemName     = "Imposter's Knife";
            string     resourceName = "ImposterItems/Resources/imposter_knife";
            GameObject obj          = new GameObject(itemName);
            var        item         = obj.AddComponent <ImpostersKnife>();

            ItemBuilder.AddSpriteToObject(itemName, resourceName, obj);
            string shortDesc = "Wasn't me";
            string longDesc  = "On use, deliver a quick short range, high damage stab towards a direction of your choosing.\n\nSharp, quick, reliable, and most importantly never runs out of ammo. It's no wonder why the knife is such an effective " +
                               "killing device, held back only for it's short range..maybe there's some kind of workaround to that...";

            ItemBuilder.SetupItem(item, shortDesc, longDesc, "spapi");
            ItemBuilder.SetCooldownType(item, ItemBuilder.CooldownType.Damage, 500);
            item.consumable = false;
            item.quality    = ItemQuality.SPECIAL;
            var cm = Instantiate((GameObject)BraveResources.Load("Global Prefabs/_ChallengeManager", ".prefab"));

            item.DarknessEffectShader = (cm.GetComponent <ChallengeManager>().PossibleChallenges.Where(c => c.challenge is DarknessChallengeModifier).First().challenge as DarknessChallengeModifier).DarknessEffectShader;
            VFXPool stabVFX = new VFXPool {
                type = VFXPoolType.All
            };
            VFXComplex complex = new VFXComplex();
            VFXObject  vfxObj  = new VFXObject
            {
                alignment       = VFXAlignment.Fixed,
                attached        = true,
                orphaned        = false,
                persistsOnDeath = false,
                destructible    = true,
                usesZHeight     = true,
                zHeight         = -0.25f
            };
            GameObject stabKnifeObj = SpriteBuilder.SpriteFromResource("ImposterItems/Resources/imposter_knife_stab", new GameObject("ImposterKnifeStab"));

            stabKnifeObj.SetActive(false);
            FakePrefab.MarkAsFakePrefab(stabKnifeObj);
            DontDestroyOnLoad(stabKnifeObj);
            tk2dSpriteAnimator animator = stabKnifeObj.AddComponent <tk2dSpriteAnimator>();

            SpriteBuilder.AddAnimation(animator, stabKnifeObj.GetComponent <tk2dBaseSprite>().Collection, new List <int> {
                stabKnifeObj.GetComponent <tk2dBaseSprite>().spriteId
            }, "stab", tk2dSpriteAnimationClip.WrapMode.Once).fps = 1;
            animator.playAutomatically = true;
            animator.DefaultClipId     = animator.GetClipIdByName("stab");
            SpriteAnimatorKiller killer = stabKnifeObj.AddComponent <SpriteAnimatorKiller>();

            killer.fadeTime             = -1f;
            killer.delayDestructionTime = -1f;
            killer.animator             = animator;
            ConstructOffsetsFromAnchor(stabKnifeObj.GetComponent <tk2dBaseSprite>().GetCurrentSpriteDef(), tk2dBaseSprite.Anchor.MiddleLeft);
            vfxObj.effect   = stabKnifeObj;
            complex.effects = new VFXObject[] { vfxObj };
            stabVFX.effects = new VFXComplex[] { complex };
            item.stabVfx    = stabVFX;
            Destroy(cm);
            ImpostersKnifeId = item.PickupObjectId;
            Game.Items.Rename("spapi:imposter's_knife", "spapi:imposters_knife");
        }
コード例 #4
0
        public static void Init()
        {
            string     itemName     = "Lich's Book";
            string     resourceName = "LichItems/Resources/lichsbook_item_001";
            GameObject obj          = new GameObject(itemName);
            var        item         = obj.AddComponent <LichsBookItem>();

            ItemBuilder.AddSpriteToObject(itemName, resourceName, obj);
            string shortDesc = "Bang Bang Bang";
            string longDesc  = "A book about the know-how of shooting skills and knowledge of magic.\nThe book itself has magical power, Just unfolding it has a mysterious effect.";

            ItemBuilder.SetupItem(item, shortDesc, longDesc, "spapi");
            ItemBuilder.SetCooldownType(item, ItemBuilder.CooldownType.Damage, 600);
            item.consumable = false;
            item.quality    = ItemQuality.C;
            Game.Items.Rename("spapi:lich's_book", "spapi:lichs_book");
            GameObject shadow = SpriteBuilder.SpriteFromResource("LichItems/Resources/lichsbook_shadow_001");

            shadow.SetActive(false);
            FakePrefab.MarkAsFakePrefab(shadow);
            DontDestroyOnLoad(shadow);
            tk2dBaseSprite sprite = shadow.GetComponent <tk2dBaseSprite>();

            ConstructOffsetsFromAnchor(sprite.GetCurrentSpriteDef(), tk2dBaseSprite.Anchor.LowerCenter);
            Shader shadowShader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent <tk2dSprite>().renderer.material.shader;

            sprite.GetCurrentSpriteDef().material.shader = shadowShader;
            sprite.GetCurrentSpriteDef().materialInst.shader = shadowShader;
            GameObject book = SpriteBuilder.SpriteFromResource("LichItems/Resources/lichsbook_depoy_001");

            book.SetActive(false);
            FakePrefab.MarkAsFakePrefab(book);
            DontDestroyOnLoad(book);
            tk2dSpriteAnimator animator = book.gameObject.AddComponent <tk2dSpriteAnimator>();
            List <int>         ids      = new List <int>
            {
                book.GetComponent <tk2dBaseSprite>().spriteId,
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_002", book.GetComponent <tk2dBaseSprite>().Collection),
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_003", book.GetComponent <tk2dBaseSprite>().Collection),
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_004", book.GetComponent <tk2dBaseSprite>().Collection),
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_005", book.GetComponent <tk2dBaseSprite>().Collection),
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_006", book.GetComponent <tk2dBaseSprite>().Collection),
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_007", book.GetComponent <tk2dBaseSprite>().Collection),
                SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_008", book.GetComponent <tk2dBaseSprite>().Collection),
            };

            foreach (int id in ids)
            {
                ConstructOffsetsFromAnchor(book.GetComponent <tk2dBaseSprite>().Collection.spriteDefinitions[id], tk2dBaseSprite.Anchor.LowerCenter);
            }
            SpriteBuilder.AddAnimation(animator, book.GetComponent <tk2dBaseSprite>().Collection, ids, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 10;
            animator.DefaultClipId     = animator.GetClipIdByName("idle");
            animator.playAutomatically = true;
            book.AddComponent <LichsBook>().shadowPrefab = shadow;
            item.LichsBookPrefab = book;
            BuildLibrary(item);
        }
コード例 #5
0
        public static void BuildDronePrefab()
        {
            if (dronePrefab != null)
            {
                return;
            }

            dronePrefab      = SpriteBuilder.SpriteFromResource(spritePaths[0], null).gameObject;
            dronePrefab.name = "Drone";

            //setup rigidbody
            var item           = Gungeon.Game.Items["dog"].GetComponent <CompanionItem>();
            var baseRigidbody  = EnemyDatabase.GetOrLoadByGuid(item.CompanionGuid).specRigidbody;
            var spriteAnimator = dronePrefab.AddComponent <tk2dSpriteAnimator>();

            var body = dronePrefab.GetComponent <tk2dSprite>().SetUpSpeculativeRigidbody(new IntVector2(10, 5), new IntVector2(10, 5));

            body.CollideWithTileMap = true;
            body.CollideWithOthers  = true;

            if (droneCollection == null)
            {
                droneCollection = SpriteBuilder.ConstructCollection(dronePrefab, "Drone_Collection");
                GameObject.DontDestroyOnLoad(droneCollection);
                for (int i = 0; i < spritePaths.Length; i++)
                {
                    SpriteBuilder.AddSpriteToCollection(spritePaths[i], droneCollection);
                }
                SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>()
                {
                    0, 1
                }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop);
                SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>()
                {
                    2, 3
                }, "forward", tk2dSpriteAnimationClip.WrapMode.Loop);
                SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>()
                {
                    4, 5
                }, "back", tk2dSpriteAnimationClip.WrapMode.Loop);
                SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>()
                {
                    6, 7
                }, "left", tk2dSpriteAnimationClip.WrapMode.Loop);
                SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>()
                {
                    8, 9
                }, "right", tk2dSpriteAnimationClip.WrapMode.Loop);
            }

            GameObject.DontDestroyOnLoad(dronePrefab);
            FakePrefab.MarkAsFakePrefab(dronePrefab);
            dronePrefab.SetActive(false);
        }
コード例 #6
0
        public static void BuildPrefab()
        {
            if (blobPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                Tools.PrintError("Tried to make the same Blob prefab twice!");
                return;
            }

            blobPrefab = CompanionBuilder.BuildPrefab("Baby Good Blob", guid, spritePaths[0], new IntVector2(1, 0), new IntVector2(9, 9));
            var blob = blobPrefab.AddComponent <RandomGoopTrailBehaviour>();

            var aiAnimator = blobPrefab.GetComponent <AIAnimator>();

            aiAnimator.MoveAnimation = new DirectionalAnimation()
            {
                AnimNames = new string[] { "idle" }, Type = DirectionalAnimation.DirectionType.None
            };
            aiAnimator.IdleAnimation = aiAnimator.MoveAnimation;

            if (blobCollection == null)
            {
                blobCollection = SpriteBuilder.ConstructCollection(blobPrefab, "Baby_Good_Blob_Collection");
                GameObject.DontDestroyOnLoad(blobCollection);
                for (int i = 0; i < spritePaths.Length; i++)
                {
                    SpriteBuilder.AddSpriteToCollection(spritePaths[i], blobCollection);
                }
                SpriteBuilder.AddAnimation(blob.spriteAnimator, blobCollection, new List <int>()
                {
                    0, 1, 2, 3, 4, 5
                }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5;
            }

            var bs = blobPrefab.GetComponent <BehaviorSpeculator>();

            bs.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()
            {
                IdleAnimations = new string[] { "idle" }
            });
            bs.MovementBehaviors.Add(new SeekTargetBehavior()
            {
                LineOfSight = false, StopWhenInRange = true, CustomRange = 1f
            });

            blob.aiActor.MovementSpeed = 7;

            GameObject.DontDestroyOnLoad(blobPrefab);
            FakePrefab.MarkAsFakePrefab(blobPrefab);
            blobPrefab.SetActive(false);
        }
コード例 #7
0
        //protected override void OnDestroy()
        //{
        //	base.OnDestroy();
        //}
        public static void BuildPrefab()
        {
            if (prefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                return;
            }

            //Create the prefab with a starting sprite and hitbox offset/size
            BabyGoodShellicopter.ChopperPrefab = CompanionBuilder.BuildPrefab("Baby Good Shellicopter", guid, BabyGoodShellicopter.spritePaths[0], new IntVector2(3, 3), new IntVector2(9, 9));
            BabyGoodShellicopter.ChopperBehavior chopperBehavior = BabyGoodShellicopter.ChopperPrefab.AddComponent <BabyGoodShellicopter.ChopperBehavior>();
            AIAnimator aiAnimator = chopperBehavior.aiAnimator;

            aiAnimator.directionalType = AIAnimator.DirectionalType.Rotation;
            bool flag3 = BabyGoodShellicopter.chopperCollection == null;

            if (flag3)
            {
                BabyGoodShellicopter.chopperCollection = SpriteBuilder.ConstructCollection(BabyGoodShellicopter.ChopperPrefab, "Penguin_Collection");
                UnityEngine.Object.DontDestroyOnLoad(BabyGoodShellicopter.chopperCollection);
                for (int i = 0; i < BabyGoodShellicopter.spritePaths.Length; i++)
                {
                    SpriteBuilder.AddSpriteToCollection(BabyGoodShellicopter.spritePaths[i], BabyGoodShellicopter.chopperCollection);
                }
                SpriteBuilder.AddAnimation(chopperBehavior.spriteAnimator, BabyGoodShellicopter.chopperCollection, new List <int>
                {
                    0,
                    1,
                    2
                }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 15f;
            }
            chopperBehavior.aiActor.MovementSpeed = 9f;
            chopperBehavior.specRigidbody.Reinitialize();
            chopperBehavior.specRigidbody.CollideWithTileMap = false;
            chopperBehavior.aiActor.CanTargetEnemies         = true;
            chopperBehavior.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
            BehaviorSpeculator behaviorSpeculator = chopperBehavior.behaviorSpeculator;

            behaviorSpeculator.AttackBehaviors.Add(new BabyGoodShellicopter.ChopperAttackBehavior());
            behaviorSpeculator.MovementBehaviors.Add(new BabyGoodShellicopter.ApproachEnemiesBehavior());
            behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior());
            UnityEngine.Object.DontDestroyOnLoad(BabyGoodShellicopter.ChopperPrefab);
            FakePrefab.MarkAsFakePrefab(BabyGoodShellicopter.ChopperPrefab);
            BabyGoodShellicopter.ChopperPrefab.SetActive(false);
        }
コード例 #8
0
        private static void BuildTarget()
        {
            targetPrefab = SpriteBuilder.SpriteFromResource("BleakMod/Resources/winchester_targets/winchester_target_001");
            tk2dBaseSprite vfxSprite = targetPrefab.GetComponent <tk2dBaseSprite>();

            vfxSprite.GetCurrentSpriteDef().ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter, vfxSprite.GetCurrentSpriteDef().position3);
            FakePrefab.MarkAsFakePrefab(targetPrefab);
            UnityEngine.Object.DontDestroyOnLoad(targetPrefab);
            targetPrefab.SetActive(false);
            List <string> vfxIdleSprites = new List <string>
            {
                "winchester_target_001.png",
                "winchester_target_002.png",
                "winchester_target_003.png",
                "winchester_target_004.png",
                "winchester_target_005.png",
                "winchester_target_006.png",
                "winchester_target_007.png",
                "winchester_target_008.png",
                "winchester_target_009.png",
                "winchester_target_010.png",
                "winchester_target_011.png",
                "winchester_target_012.png",
                "winchester_target_013.png",
                "winchester_target_014.png",
            };

            var collection  = targetPrefab.GetComponent <tk2dSprite>().Collection;
            var idleIdsList = new List <int>();

            foreach (string sprite in vfxIdleSprites)
            {
                idleIdsList.Add(SpriteBuilder.AddSpriteToCollection("BleakMod/Resources/winchester_targets/" + sprite, collection));
            }
            tk2dSpriteAnimator spriteAnimator = targetPrefab.AddComponent <tk2dSpriteAnimator>();

            spriteAnimator.playAutomatically = true;
            SpriteBuilder.AddAnimation(spriteAnimator, collection, idleIdsList, "winchetser_target_idle", tk2dSpriteAnimationClip.WrapMode.Loop, 7);
            var body = targetPrefab.GetComponent <tk2dSprite>().SetUpSpeculativeRigidbody(IntVector2.Zero, new IntVector2(20, 23));            //Numbers at the end are the dimensions of the hitbox

            body.CollideWithTileMap = false;
            body.PrimaryPixelCollider.CollisionLayer = CollisionLayer.BulletBlocker;
        }
コード例 #9
0
        // Token: 0x0600015D RID: 349 RVA: 0x0000D300 File Offset: 0x0000B500
        public static tk2dSpriteAnimationClip BuildAnimation(AIAnimator aiAnimator, string name, string spriteDirectory, int fps, tk2dSpriteAnimationClip.WrapMode warpmode = tk2dSpriteAnimationClip.WrapMode.Loop)
        {
            tk2dSpriteCollectionData tk2dSpriteCollectionData = aiAnimator.GetComponent <tk2dSpriteCollectionData>();
            bool flag  = !tk2dSpriteCollectionData;
            bool flag2 = flag;
            bool flag3 = flag2;

            if (flag3)
            {
                tk2dSpriteCollectionData = SpriteBuilder.ConstructCollection(aiAnimator.gameObject, aiAnimator.name + "_collection");
            }
            string[]   resourceNames = ResourceExtractor.GetResourceNames();
            List <int> list          = new List <int>();

            for (int i = 0; i < resourceNames.Length; i++)
            {
                bool flag4 = resourceNames[i].StartsWith(spriteDirectory.Replace('/', '.'), StringComparison.OrdinalIgnoreCase);
                bool flag5 = flag4;
                bool flag6 = flag5;
                if (flag6)
                {
                    list.Add(SpriteBuilder.AddSpriteToCollection(resourceNames[i], tk2dSpriteCollectionData));
                }
            }
            bool flag7 = list.Count == 0;
            bool flag8 = flag7;
            bool flag9 = flag8;

            if (flag9)
            {
                ETGModConsole.Log("No sprites found for animation " + name);
            }
            tk2dSpriteAnimationClip tk2dSpriteAnimationClip = SpriteBuilder.AddAnimation(aiAnimator.spriteAnimator, tk2dSpriteCollectionData, list, name, warpmode);

            tk2dSpriteAnimationClip.fps = (float)fps;
            return(tk2dSpriteAnimationClip);
        }
コード例 #10
0
        public static tk2dSpriteAnimationClip BuildAnimation(AIAnimator aiAnimator, string name, string spriteDirectory, int fps)
        {
            tk2dSpriteCollectionData collection = aiAnimator.GetComponent <tk2dSpriteCollectionData>();

            if (!collection)
            {
                collection = SpriteBuilder.ConstructCollection(aiAnimator.gameObject, $"{aiAnimator.name}_collection");
            }

            string[]   resources = ResourceExtractor.GetResourceNames();
            List <int> indices   = new List <int>();

            for (int i = 0; i < resources.Length; i++)
            {
                if (resources[i].StartsWith(spriteDirectory.Replace('/', '.') + ".", StringComparison.OrdinalIgnoreCase))
                {
                    indices.Add(SpriteBuilder.AddSpriteToCollection(resources[i], collection));
                }
            }
            tk2dSpriteAnimationClip clip = SpriteBuilder.AddAnimation(aiAnimator.spriteAnimator, collection, indices, name, tk2dSpriteAnimationClip.WrapMode.Once);

            clip.fps = fps;
            return(clip);
        }
コード例 #11
0
        /// <summary>
        /// Creates a shop object along with an npc
        /// </summary>
        /// <param name="name">Name of the npc</param>
        /// <param name="prefix">Mod prefix (for example Bot)</param>
        ///
        /// <param name="idleSpritePaths">List of *FULL* sprite paths for the idle animation</param>
        /// <param name="idleFps">Fps of the idle animation (base game tends to use around 6)</param>
        ///
        /// <param name="talkSpritePaths">List of *FULL* sprite paths for the talk animation</param>
        /// <param name="talkFps">Fps of the talk animation (base game tends to use around 8)</param>
        ///
        /// <param name="lootTable">Shop loot table</param>
        /// <param name="currency">What is used to buy items at the shop</param>
        ///
        /// <param name="runBasedMultilineGenericStringKey">String key for normal convos</param>
        /// <param name="runBasedMultilineStopperStringKey">String key for if you try talking to an npc to much</param>
        /// <param name="purchaseItemStringKey">String key for when the player buys something</param>
        /// <param name="purchaseItemFailedStringKey">String key for when the player tries but fails to buy something</param>
        /// <param name="introStringKey">String key for when the player enters the room</param>
        /// <param name="attackedStringKey">String key for when the player shoots at the npc</param>
        /// <param name="costModifier">The multiplier for shop prices</param>
        /// <param name="itemPositions">The offset for the item(s) sold by your npc, the amount of items sold is based off how many offsets you add here (if you just want the 3 normally items spots you can use ItsDaFuckinShopApi.defaultItemPositions)</param>
        /// <param name="giveStatsOnPurchase">Whether the shop modifies stats after the player buys an item for example how cursula gives curse</param>
        /// <param name="statsToGiveOnPurchase"> The stats given when the player buys an item (will be ingored if statsToGiveOnPurchase is false)</param>
        ///
        /// <param name="CustomCanBuy">The method that gets called to check if the player can buy an item (useless if currency isnt set to CUSTOM)</param>
        /// <param name="CustomRemoveCurrency">The method that gets called remove currency from the player (useless if currency isnt set to CUSTOM)</param>
        /// <param name="CustomPrice">The method that gets called to get the price of an item (useless if currency isnt set to CUSTOM)</param>
        ///
        /// <param name="currencyIconPath">Sprite path for your custom currency sprite</param>
        /// <param name="currencyName">The name you want your custom currecy sprite to have (i should probably remove this...)</param>
        ///
        /// <param name="hasCarpet">Whether the shop has a carpet or something else that they sit on</param>
        /// <param name="carpetSpritePath">Sprite path for the carpet or whatever</param>
        ///
        /// <param name="hasMinimapIcon">Whether the shop has a minimap icon to show what room theyre in</param>
        /// <param name="minimapIconSpritePath">Sprite path minimap icon leave blank to just use deafult smiley face</param>
        ///
        /// <param name="addToMainNpcPool">Whether the shop should be added to the pool of npcs that show up in the main shop a long side bello</param>
        /// <param name="percentChanceForMainPool">How likely it is for the shop to show up in the main pool base game shops use 0.1</param>
        ///
        /// <param name="prerequisites">These do unlocks and shit</param>
        /// <returns></returns>
        public static GameObject SetUpShop(string name, string prefix, List <string> idleSpritePaths, int idleFps, List <string> talkSpritePaths, int talkFps, GenericLootTable lootTable, CustomShopItemController.ShopCurrencyType currency, string runBasedMultilineGenericStringKey,
                                           string runBasedMultilineStopperStringKey, string purchaseItemStringKey, string purchaseItemFailedStringKey, string introStringKey, string attackedStringKey, Vector3 talkPointOffset, Vector3[] itemPositions = null, float costModifier = 1, bool giveStatsOnPurchase = false,
                                           StatModifier[] statsToGiveOnPurchase = null, Func <CustomShopController, PlayerController, int, bool> CustomCanBuy           = null, Func <CustomShopController, PlayerController, int, int> CustomRemoveCurrency = null, Func <CustomShopController, CustomShopItemController, PickupObject, int> CustomPrice = null,
                                           Func <PlayerController, PickupObject, int, bool> OnPurchase = null, Func <PlayerController, PickupObject, int, bool> OnSteal = null, string currencyIconPath = "", string currencyName = "", bool canBeRobbed = true, bool hasCarpet = false, string carpetSpritePath = "", bool hasMinimapIcon = false,
                                           string minimapIconSpritePath = "", bool addToMainNpcPool = false, float percentChanceForMainPool = 0.1f, DungeonPrerequisite[] prerequisites = null)
        {
            try
            {
                if (prerequisites == null)
                {
                    prerequisites = new DungeonPrerequisite[0];
                }
                //bool isBreachShop = false;
                Vector3 breachPos = Vector3.zero;

                var shared_auto_001 = ResourceManager.LoadAssetBundle("shared_auto_001");
                var shared_auto_002 = ResourceManager.LoadAssetBundle("shared_auto_002");
                var SpeechPoint     = new GameObject("SpeechPoint");
                SpeechPoint.transform.position = talkPointOffset;



                var npcObj = SpriteBuilder.SpriteFromResource(idleSpritePaths[0], new GameObject(prefix + ":" + name));

                FakePrefab.MarkAsFakePrefab(npcObj);
                UnityEngine.Object.DontDestroyOnLoad(npcObj);
                npcObj.SetActive(false);

                npcObj.layer = 22;

                var collection = npcObj.GetComponent <tk2dSprite>().Collection;
                SpeechPoint.transform.parent = npcObj.transform;

                FakePrefab.MarkAsFakePrefab(SpeechPoint);
                UnityEngine.Object.DontDestroyOnLoad(SpeechPoint);
                SpeechPoint.SetActive(true);


                var idleIdsList = new List <int>();
                var talkIdsList = new List <int>();

                foreach (string sprite in idleSpritePaths)
                {
                    idleIdsList.Add(SpriteBuilder.AddSpriteToCollection(sprite, collection));
                }

                foreach (string sprite in talkSpritePaths)
                {
                    talkIdsList.Add(SpriteBuilder.AddSpriteToCollection(sprite, collection));
                }

                tk2dSpriteAnimator spriteAnimator = npcObj.AddComponent <tk2dSpriteAnimator>();

                SpriteBuilder.AddAnimation(spriteAnimator, collection, idleIdsList, name + "_idle", tk2dSpriteAnimationClip.WrapMode.Loop, idleFps);
                SpriteBuilder.AddAnimation(spriteAnimator, collection, talkIdsList, name + "_talk", tk2dSpriteAnimationClip.WrapMode.Loop, talkFps);

                SpeculativeRigidbody rigidbody = GenerateOrAddToRigidBody(npcObj, CollisionLayer.BulletBlocker, PixelCollider.PixelColliderGeneration.Manual, true, true, true, false, false, false, false, true, new IntVector2(20, 18), new IntVector2(5, 0));

                TalkDoerLite talkDoer = npcObj.AddComponent <TalkDoerLite>();

                talkDoer.placeableWidth  = 4;
                talkDoer.placeableHeight = 3;
                talkDoer.difficulty      = 0;
                talkDoer.isPassable      = true;
                talkDoer.usesOverrideInteractionRegion = false;
                talkDoer.overrideRegionOffset          = Vector2.zero;
                talkDoer.overrideRegionDimensions      = Vector2.zero;
                talkDoer.overrideInteractionRadius     = -1;
                talkDoer.PreventInteraction            = false;
                talkDoer.AllowPlayerToPassEventually   = true;
                talkDoer.speakPoint              = SpeechPoint.transform;
                talkDoer.SpeaksGleepGlorpenese   = false;
                talkDoer.audioCharacterSpeechTag = "oldman";
                talkDoer.playerApproachRadius    = 5;
                talkDoer.conversationBreakRadius = 5;
                talkDoer.echo1 = null;
                talkDoer.echo2 = null;
                talkDoer.PreventCoopInteraction = false;
                talkDoer.IsPaletteSwapped       = false;
                talkDoer.PaletteTexture         = null;
                talkDoer.OutlineDepth           = 0.5f;
                talkDoer.OutlineLuminanceCutoff = 0.05f;
                talkDoer.MovementSpeed          = 3;
                talkDoer.PathableTiles          = CellTypes.FLOOR;


                UltraFortunesFavor dreamLuck = npcObj.AddComponent <UltraFortunesFavor>();

                dreamLuck.goopRadius          = 2;
                dreamLuck.beamRadius          = 2;
                dreamLuck.bulletRadius        = 2;
                dreamLuck.bulletSpeedModifier = 0.8f;

                dreamLuck.vfxOffset      = 0.625f;
                dreamLuck.sparkOctantVFX = shared_auto_001.LoadAsset <GameObject>("FortuneFavor_VFX_Spark");


                AIAnimator aIAnimator = GenerateBlankAIAnimator(npcObj);
                aIAnimator.spriteAnimator = spriteAnimator;
                aIAnimator.IdleAnimation  = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = name + "_idle",
                    AnimNames = new string[]
                    {
                        ""
                    },
                    Flipped = new DirectionalAnimation.FlipType[]
                    {
                        DirectionalAnimation.FlipType.None
                    }
                };

                aIAnimator.TalkAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = name + "_talk",
                    AnimNames = new string[]
                    {
                        ""
                    },
                    Flipped = new DirectionalAnimation.FlipType[]
                    {
                        DirectionalAnimation.FlipType.None
                    }
                };

                var basenpc = ResourceManager.LoadAssetBundle("shared_auto_001").LoadAsset <GameObject>("Merchant_Key").transform.Find("NPC_Key").gameObject;

                PlayMakerFSM iHaveNoFuckingClueWhatThisIs = npcObj.AddComponent <PlayMakerFSM>();

                UnityEngine.JsonUtility.FromJsonOverwrite(UnityEngine.JsonUtility.ToJson(basenpc.GetComponent <PlayMakerFSM>()), iHaveNoFuckingClueWhatThisIs);

                FieldInfo fsmStringParams = typeof(ActionData).GetField("fsmStringParams", BindingFlags.NonPublic | BindingFlags.Instance);

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[1].ActionData) as List <FsmString>)[0].Value = runBasedMultilineGenericStringKey;
                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[1].ActionData) as List <FsmString>)[1].Value = runBasedMultilineStopperStringKey;

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[4].ActionData) as List <FsmString>)[0].Value = purchaseItemStringKey;

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[5].ActionData) as List <FsmString>)[0].Value = purchaseItemFailedStringKey;

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[7].ActionData) as List <FsmString>)[0].Value = introStringKey;

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[8].ActionData) as List <FsmString>)[0].Value = attackedStringKey;

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[9].ActionData) as List <FsmString>)[0].Value = "#SUBSHOP_GENERIC_CAUGHT_STEALING";

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[10].ActionData) as List <FsmString>)[0].Value = "#SHOP_GENERIC_NO_SALE_LABEL";

                (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[12].ActionData) as List <FsmString>)[0].Value = "#COOP_REBUKE";


                npcObj.name = prefix + ":" + name;

                var posList = new List <Transform>();
                for (int i = 0; i < itemPositions.Length; i++)
                {
                    var ItemPoint = new GameObject("ItemPoint" + i);
                    ItemPoint.transform.position = itemPositions[i];
                    FakePrefab.MarkAsFakePrefab(ItemPoint);
                    UnityEngine.Object.DontDestroyOnLoad(ItemPoint);
                    ItemPoint.SetActive(true);
                    posList.Add(ItemPoint.transform);
                }

                var ItemPoint1 = new GameObject("ItemPoint1");
                ItemPoint1.transform.position = new Vector3(1.125f, 2.125f, 1);
                FakePrefab.MarkAsFakePrefab(ItemPoint1);
                UnityEngine.Object.DontDestroyOnLoad(ItemPoint1);
                ItemPoint1.SetActive(true);
                var ItemPoint2 = new GameObject("ItemPoint2");
                ItemPoint2.transform.position = new Vector3(2.625f, 1f, 1);
                FakePrefab.MarkAsFakePrefab(ItemPoint2);
                UnityEngine.Object.DontDestroyOnLoad(ItemPoint2);
                ItemPoint2.SetActive(true);
                var ItemPoint3 = new GameObject("ItemPoint3");
                ItemPoint3.transform.position = new Vector3(4.125f, 2.125f, 1);
                FakePrefab.MarkAsFakePrefab(ItemPoint3);
                UnityEngine.Object.DontDestroyOnLoad(ItemPoint3);
                ItemPoint3.SetActive(true);


                var shopObj = new GameObject(prefix + ":" + name + "_Shop").AddComponent <CustomShopController>();
                FakePrefab.MarkAsFakePrefab(shopObj.gameObject);
                UnityEngine.Object.DontDestroyOnLoad(shopObj.gameObject);

                shopObj.gameObject.SetActive(false);

                shopObj.currencyType = currency;

                shopObj.ActionAndFuncSetUp(CustomCanBuy, CustomRemoveCurrency, CustomPrice, OnPurchase, OnSteal);

                if (!string.IsNullOrEmpty(currencyIconPath))
                {
                    shopObj.customPriceSprite = AddCustomCurrencyType(currencyIconPath, $"{prefix}:{currencyName}");
                }
                else
                {
                    shopObj.customPriceSprite = currencyName;
                }


                //GungeonAPI.ToolsGAPI.AddNewItemToAtlas()

                shopObj.canBeRobbed = canBeRobbed;

                shopObj.placeableHeight = 5;
                shopObj.placeableWidth  = 5;
                shopObj.difficulty      = 0;
                shopObj.isPassable      = true;
                shopObj.baseShopType    = BaseShopController.AdditionalShopType.TRUCK;//shopType;

                shopObj.FoyerMetaShopForcedTiers = false;
                shopObj.IsBeetleMerchant         = false;
                shopObj.ExampleBlueprintPrefab   = null;
                shopObj.shopItems      = lootTable;
                shopObj.spawnPositions = posList.ToArray();//{ ItemPoint1.transform, ItemPoint2.transform, ItemPoint3.transform };

                foreach (var pos in shopObj.spawnPositions)
                {
                    pos.parent = shopObj.gameObject.transform;
                }

                shopObj.shopItemsGroup2          = null;
                shopObj.spawnPositionsGroup2     = null;
                shopObj.spawnGroupTwoItem1Chance = 0.5f;
                shopObj.spawnGroupTwoItem2Chance = 0.5f;
                shopObj.spawnGroupTwoItem3Chance = 0.5f;
                shopObj.shopkeepFSM          = npcObj.GetComponent <PlayMakerFSM>();
                shopObj.shopItemShadowPrefab = shared_auto_001.LoadAsset <GameObject>("Merchant_Key").GetComponent <BaseShopController>().shopItemShadowPrefab;

                shopObj.prerequisites = prerequisites;
                //shopObj.shopItemShadowPrefab =

                shopObj.cat = null;


                if (hasMinimapIcon)
                {
                    if (!string.IsNullOrEmpty(minimapIconSpritePath))
                    {
                        shopObj.OptionalMinimapIcon = SpriteBuilder.SpriteFromResource(minimapIconSpritePath);
                        UnityEngine.Object.DontDestroyOnLoad(shopObj.OptionalMinimapIcon);
                        FakePrefab.MarkAsFakePrefab(shopObj.OptionalMinimapIcon);
                    }
                    else
                    {
                        shopObj.OptionalMinimapIcon = ResourceCache.Acquire("Global Prefabs/Minimap_NPC_Icon") as GameObject;
                    }
                }

                shopObj.ShopCostModifier     = costModifier;
                shopObj.FlagToSetOnEncounter = GungeonFlags.NONE;

                shopObj.giveStatsOnPurchase = giveStatsOnPurchase;
                shopObj.statsToGive         = statsToGiveOnPurchase;

                //shopObj.

                /*if (isBreachShop)
                 * {
                 *  shopObj.gameObject.AddComponent<BreachShopComp>().offset = breachPos;
                 *  BreachShopTools.registeredShops.Add(prefix + ":" + name, shopObj.gameObject);
                 *
                 *  shopObj.FoyerMetaShopForcedTiers = true;
                 *
                 *  var exampleBlueprintObj = SpriteBuilder.SpriteFromResource(carpetSpritePath, new GameObject(prefix + ":" + name + "_ExampleBlueprintPrefab"));
                 *  exampleBlueprintObj.GetComponent<tk2dSprite>().SortingOrder = 2;
                 *  FakePrefab.MarkAsFakePrefab(exampleBlueprintObj);
                 *  UnityEngine.Object.DontDestroyOnLoad(exampleBlueprintObj);
                 *  exampleBlueprintObj.SetActive(false);
                 *
                 *  //var item = exampleBlueprintObj.AddComponent<ItemBlueprintItem>();
                 *  //item.quality = PickupObject.ItemQuality.SPECIAL;
                 *  //item.PickupObjectId = 99999999;
                 *
                 *
                 *
                 *  shopObj.ExampleBlueprintPrefab = shared_auto_001.LoadAsset<GameObject>("NPC_Beetle_Merchant_Foyer").GetComponent<BaseShopController>().ExampleBlueprintPrefab;
                 * }*/

                npcObj.transform.parent   = shopObj.gameObject.transform;
                npcObj.transform.position = new Vector3(1.9375f, 3.4375f, 5.9375f);



                if (hasCarpet)
                {
                    var carpetObj = SpriteBuilder.SpriteFromResource(carpetSpritePath, new GameObject(prefix + ":" + name + "_Carpet"));
                    carpetObj.GetComponent <tk2dSprite>().SortingOrder = 2;
                    FakePrefab.MarkAsFakePrefab(carpetObj);
                    UnityEngine.Object.DontDestroyOnLoad(carpetObj);
                    carpetObj.SetActive(true);

                    carpetObj.transform.position = new Vector3(0, 0, 1.7f);
                    carpetObj.transform.parent   = shopObj.gameObject.transform;
                    carpetObj.layer = 20;
                }
                npcObj.SetActive(true);

                if (addToMainNpcPool)
                {
                    shared_auto_002.LoadAsset <DungeonPlaceable>("shopannex_contents_01").variantTiers.Add(new DungeonPlaceableVariant
                    {
                        percentChance           = percentChanceForMainPool,
                        unitOffset              = new Vector2(-0.5f, -1.25f),
                        nonDatabasePlaceable    = shopObj.gameObject,
                        enemyPlaceableGuid      = "",
                        pickupObjectPlaceableId = -1,
                        forceBlackPhantom       = false,
                        addDebrisObject         = false,
                        prerequisites           = prerequisites, //shit for unlocks gose here sooner or later
                        materialRequirements    = new DungeonPlaceableRoomMaterialRequirement[0],
                    });
                }

                ItsDaFuckinShopApi.builtShops.Add(prefix + ":" + name, shopObj.gameObject);
                return(shopObj.gameObject);
            }
            catch (Exception message)
            {
                ETGModConsole.Log(message.ToString());
                return(null);
            }
        }
コード例 #12
0
        public static void BuildPrefab()
        {
            bool flag = GregTheEgg.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(GregTheEgg.guid);

            if (!flag)
            {
                GregTheEgg.prefab = CompanionBuilder.BuildPrefab("Greg The Egg", GregTheEgg.guid, "NevernamedsItems/Resources/Companions/Greg/gregtheegg_idle_001", new IntVector2(1, 2), new IntVector2(9, 12));
                var companionController = GregTheEgg.prefab.AddComponent <GregTheEggBehaviour>();
                companionController.CanInterceptBullets   = true;
                companionController.companionID           = CompanionController.CompanionIdentifier.NONE;
                companionController.aiActor.MovementSpeed = 5f;
                companionController.aiActor.healthHaver.PreventAllDamage = false;
                companionController.aiActor.CollisionDamage = 0f;
                companionController.aiActor.specRigidbody.CollideWithOthers  = true;
                companionController.aiActor.specRigidbody.CollideWithTileMap = false;
                companionController.aiActor.healthHaver.ForceSetCurrentHealth(3000f);         //4000
                companionController.aiActor.healthHaver.SetHealthMaximum(3000f, null, false); //4000



                companionController.aiActor.specRigidbody.PixelColliders.Clear();
                companionController.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 1,
                    ManualOffsetY          = 2,
                    ManualWidth            = 9,
                    ManualHeight           = 12,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companionController.aiAnimator.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 1,
                    ManualOffsetY          = 2,
                    ManualWidth            = 9,
                    ManualHeight           = 12,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                BehaviorSpeculator component = GregTheEgg.prefab.GetComponent <BehaviorSpeculator>();
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                //SET UP ANIMATIONS
                AIAnimator aiAnimator = companionController.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "run",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.Single,
                            Prefix    = "die",
                            AnimNames = new string[1],
                            Flipped   = new DirectionalAnimation.FlipType[1]
                        }
                    },
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "spawnloot",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.Single,
                            Prefix    = "spawnloot",
                            AnimNames = new string[1],
                            Flipped   = new DirectionalAnimation.FlipType[1]
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "idle",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                //ADD SPRITES TO THE ANIMATIONS
                bool flag3 = GregTheEgg.GregAnimationCollection == null;
                if (flag3)
                {
                    GregTheEgg.GregAnimationCollection = SpriteBuilder.ConstructCollection(GregTheEgg.prefab, "GregTheEgg_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(GregTheEgg.GregAnimationCollection);
                    for (int i = 0; i < GregTheEgg.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(GregTheEgg.spritePaths[i], GregTheEgg.GregAnimationCollection);
                    }
                    //Loot Spawning Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        13,
                        14,
                        15,
                        14,
                        15,
                        14,
                        15,
                        14,
                        15,
                        14,
                        15,
                    }, "spawnloot", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f;
                    //Idling Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        9,
                        10,
                        11,
                        12
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 6f;
                    //Running Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23
                    }, "run", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                    //Cracking and Dying Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8
                    }, "die", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f;
                }
            }
        }
コード例 #13
0
        public static void BuildPrefab()
        {
            // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93");
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("Jesterlet", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 200;
                companion.aiActor.MovementSpeed                = 2f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = false;
                companion.aiActor.aiAnimator.HitReactChance        = 0.05f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(15f);
                companion.aiActor.CollisionKnockbackStrength = 5f;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(15f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 12,
                    ManualHeight           = 26,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 12,
                    ManualHeight           = 26,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle",
                        "idle_two"
                    }
                };
                DirectionalAnimation done3456 = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "prepare",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "prepare",
                        anim = done3456
                    }
                };
                bool flag3 = JesterletCollection == null;
                if (flag3)
                {
                    JesterletCollection = SpriteBuilder.ConstructCollection(prefab, "Jesterlet_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(JesterletCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], JesterletCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, JesterletCollection, new List <int>
                    {
                        2,
                        3
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, JesterletCollection, new List <int>
                    {
                        0,
                        1
                    }, "idle_two", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, JesterletCollection, new List <int>
                    {
                        4,
                        5,
                        6,
                        7
                    }, "prepare", tk2dSpriteAnimationClip.WrapMode.Once).fps = 4f;
                }
                var bs = prefab.GetComponent <BehaviorSpeculator>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;
                bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors    = behaviorSpeculator.OtherBehaviors;
                bs.TargetBehaviors   = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = false,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f
                    }
                };
                shootpoint = new GameObject("f**k");
                shootpoint.transform.parent   = companion.transform;
                shootpoint.transform.position = companion.sprite.WorldCenter;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject;
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint          = m_CachedGunAttachPoint,
                        BulletScript        = new CustomBulletScriptSelector(typeof(TeleportScript)),
                        LeadAmount          = 0f,
                        InitialCooldown     = 5f,
                        AttackCooldown      = 10f,
                        RequiresLineOfSight = false,
                        ChargeAnimation     = "prepare",
                        ChargeTime          = 1f,
                        Uninterruptible     = true
                    },
                };
                bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                Game.Enemies.Add("cak:jestlet", companion.aiActor);
            }
        }
コード例 #14
0
        public static void AdvAddAnimation(this AIAnimator targetAnimator, string animationName, DirectionalAnimation.DirectionType directionality, CompanionBuilder.AnimationType AnimationType, List <DirectionalAnimationData> AnimData)
        {
            List <string> subAnimNames = new List <string>();

            foreach (DirectionalAnimationData data in AnimData)
            {
                subAnimNames.Add(data.subAnimationName);

                tk2dSpriteCollectionData tk2dSpriteCollectionData = targetAnimator.GetComponent <tk2dSpriteCollectionData>();
                if (!tk2dSpriteCollectionData)
                {
                    tk2dSpriteCollectionData = SpriteBuilder.ConstructCollection(targetAnimator.gameObject, targetAnimator.name + "_collection");
                }

                string[]   resourceNames = ResourceExtractor.GetResourceNames();
                List <int> list          = new List <int>();
                for (int i = 0; i < resourceNames.Length; i++)
                {
                    if (resourceNames[i].StartsWith(data.pathDirectory.Replace('/', '.'), StringComparison.OrdinalIgnoreCase))
                    {
                        // ETGModConsole.Log($"Resource Found: {resourceNames[i]}.");
                        list.Add(SpriteBuilder.AddSpriteToCollection(resourceNames[i], tk2dSpriteCollectionData));
                    }
                }
                //ETGModConsole.Log($"Adding animation {data.subAnimationName} with list length {list.Count}.");

                tk2dSpriteAnimationClip tk2dSpriteAnimationClip = SpriteBuilder.AddAnimation(targetAnimator.spriteAnimator, tk2dSpriteCollectionData, list, data.subAnimationName, data.wrapMode);
                tk2dSpriteAnimationClip.fps = (float)data.fps;
            }

            if (AnimationType != CompanionBuilder.AnimationType.Other)
            {
                DirectionalAnimation newDirectionalAnimation = new DirectionalAnimation
                {
                    Type      = directionality,
                    Flipped   = new DirectionalAnimation.FlipType[subAnimNames.Count],
                    AnimNames = subAnimNames.ToArray(),
                    Prefix    = string.Empty,
                };

                switch (AnimationType)
                {
                case CompanionBuilder.AnimationType.Idle:
                    targetAnimator.IdleAnimation = newDirectionalAnimation;
                    break;

                case CompanionBuilder.AnimationType.Move:
                    targetAnimator.MoveAnimation = newDirectionalAnimation;
                    break;

                case CompanionBuilder.AnimationType.Hit:
                    targetAnimator.HitAnimation = newDirectionalAnimation;
                    break;

                case CompanionBuilder.AnimationType.Talk:
                    targetAnimator.TalkAnimation = newDirectionalAnimation;
                    break;

                case CompanionBuilder.AnimationType.Flight:
                    targetAnimator.FlightAnimation = newDirectionalAnimation;
                    break;

                case CompanionBuilder.AnimationType.Fidget:
                    if (targetAnimator.IdleFidgetAnimations == null)
                    {
                        targetAnimator.IdleFidgetAnimations = new List <DirectionalAnimation>();
                    }
                    targetAnimator.IdleFidgetAnimations.Add(newDirectionalAnimation);
                    break;
                }
            }
            else
            {
                AIAnimator.NamedDirectionalAnimation newOtheranim = new AIAnimator.NamedDirectionalAnimation
                {
                    name = animationName,
                    anim = new DirectionalAnimation
                    {
                        Prefix    = animationName,
                        Type      = directionality,
                        Flipped   = new DirectionalAnimation.FlipType[subAnimNames.Count],
                        AnimNames = subAnimNames.ToArray(),
                    }
                };

                if (targetAnimator.OtherAnimations == null)
                {
                    targetAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>();
                }
                targetAnimator.OtherAnimations.Add(newOtheranim);
            }
        }
コード例 #15
0
        public static GameObject BuildPrefab()
        {
            var bomb = SpriteBuilder.SpriteFromResource("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_001.png", new GameObject("Lvl2Molotov"));

            bomb.SetActive(false);
            FakePrefab.MarkAsFakePrefab(bomb);

            var animator   = bomb.AddComponent <tk2dSpriteAnimator>();
            var collection = (PickupObjectDatabase.GetById(108) as SpawnObjectPlayerItem).objectToSpawn.GetComponent <tk2dSpriteAnimator>().Library.clips[0].frames[0].spriteCollection;

            //DEPLOYMENT
            var deployAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int>
            {
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_004.png", collection),
            }, "lvl2mol_throw", tk2dSpriteAnimationClip.WrapMode.Once);

            deployAnimation.fps = 12;
            foreach (var frame in deployAnimation.frames)
            {
                frame.eventLerpEmissiveTime  = 0.5f;
                frame.eventLerpEmissivePower = 30f;
            }

            var explodeAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int>
            {
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_001.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_002.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_003.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_004.png", collection),
            }, "lvl2mol_burst", tk2dSpriteAnimationClip.WrapMode.Once);

            explodeAnimation.fps = 16;
            foreach (var frame in explodeAnimation.frames)
            {
                frame.eventLerpEmissiveTime  = 0.5f;
                frame.eventLerpEmissivePower = 30f;
            }

            var armedAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int>
            {
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_001.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_002.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_003.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_004.png", collection),
            }, "lvl2mol_default", tk2dSpriteAnimationClip.WrapMode.LoopSection);

            armedAnimation.fps       = 10.0f;
            armedAnimation.loopStart = 0;
            foreach (var frame in armedAnimation.frames)
            {
                frame.eventLerpEmissiveTime  = 0.5f;
                frame.eventLerpEmissivePower = 30f;
            }

            CustomThrowableObject throwable = new CustomThrowableObject
            {
                doEffectOnHitGround  = true,
                OnThrownAnimation    = "lvl2mol_throw",
                OnHitGroundAnimation = "lvl2mol_burst",
                DefaultAnim          = "lvl2mol_default",
                destroyOnHitGround   = false,
                thrownSoundEffect    = "Play_OBJ_item_throw_01",
                effectSoundEffect    = "Play_OBJ_glassbottle_shatter_01",
            };

            bomb.AddComponent <CustomThrowableObject>(throwable);
            bomb.AddComponent <LvL2MolotovEffect>();
            return(bomb);
        }
コード例 #16
0
        // Token: 0x06000061 RID: 97 RVA: 0x00005358 File Offset: 0x00003558
        public static void BuildPrefab()
        {
            bool flag  = HappyLad.PenguinPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(HappyLad.guid);
            bool flag2 = flag;

            if (!flag2)
            {
                HappyLad.PenguinPrefab = CompanionBuilder.BuildPrefab("Happy Lad", HappyLad.guid, HappyLad.spritePaths[0], new IntVector2(1, 0), new IntVector2(7, 12));
                HappyLad.PenguinBehavior penguinBehavior = HappyLad.PenguinPrefab.AddComponent <HappyLad.PenguinBehavior>();
                AIAnimator aiAnimator = penguinBehavior.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_right",
                        "run_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                bool flag3 = HappyLad.iceCollection == null;
                if (flag3)
                {
                    HappyLad.iceCollection = SpriteBuilder.ConstructCollection(HappyLad.PenguinPrefab, "Ice_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(HappyLad.iceCollection);
                    for (int i = 0; i < HappyLad.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(HappyLad.spritePaths[i], HappyLad.iceCollection);
                    }
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int>
                    {
                        0,
                        1
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int>
                    {
                        2,
                        3
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int>
                    {
                        0,
                        1
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int>
                    {
                        2,
                        3
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                }
                penguinBehavior.aiActor.MovementSpeed = 7f;
                penguinBehavior.specRigidbody.Reinitialize();
                penguinBehavior.specRigidbody.CollideWithTileMap = false;
                penguinBehavior.aiActor.CanTargetEnemies         = true;
                BehaviorSpeculator behaviorSpeculator = penguinBehavior.behaviorSpeculator;
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowCursorBehaviour
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(HappyLad.PenguinPrefab);
                FakePrefab.MarkAsFakePrefab(HappyLad.PenguinPrefab);
                HappyLad.PenguinPrefab.SetActive(false);
            }
        }
コード例 #17
0
        private static void CreateOverheadCard(FoyerCharacterSelectFlag selectCharacter, CustomCharacterData data)
        {
            try
            {
                if (selectCharacter.OverheadElement == null)
                {
                    Debug.LogError($"CHR_{data.nameShort}Panel is null");
                    return;
                }

                if (selectCharacter.OverheadElement?.name == $"CHR_{data.nameShort}Panel")
                {
                    Debug.LogError($"CHR_{data.nameShort}Panel already exists");
                    return;
                }

                //Create new card instance
                selectCharacter.ClearOverheadElement();
                var theCauseOfMySuffering = FakePrefab.Clone(selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>().gameObject);
                selectCharacter.OverheadElement = PrefabAPI.PrefabBuilder.Clone(selectCharacter.OverheadElement);
                //selectCharacter.OverheadElement.SetActive(true);
                selectCharacter.OverheadElement.name = $"CHR_{data.nameShort}Panel";
                selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>().followTransform = selectCharacter.transform;
                //selectCharacter.OverheadElement.AddComponent<BotsMod.Debugger>();
                //BotsMod.BotsModule.Log("0", BotsMod.BotsModule.LOST_COLOR);


                var customFoyerController = selectCharacter.gameObject.AddComponent <CustomCharacterFoyerController>();
                customFoyerController.metaCost = data.metaCost;



                customFoyerController.useGlow            = data.useGlow;
                customFoyerController.emissiveColor      = data.emissiveColor;
                customFoyerController.emissiveColorPower = data.emissiveColorPower;
                customFoyerController.emissivePower      = data.emissivePower;
                customFoyerController.data = data;

                string replaceKey = data.baseCharacter.ToString().ToUpper();
                if (data.baseCharacter == PlayableCharacters.Soldier)
                {
                    replaceKey = "MARINE";
                }
                if (data.baseCharacter == PlayableCharacters.Pilot)
                {
                    replaceKey = "ROGUE";
                }
                if (data.baseCharacter == PlayableCharacters.Eevee)
                {
                    replaceKey = "PARADOX";
                }


                //Change text
                var infoPanel = selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>();

                //infoPanel.textPanel.transform.Find("NameLabel").GetComponent<dfLabel>().Text = "my ass";
                //BotsMod.BotsModule.Log((infoPanel.textPanel.transform.Find("NameLabel").GetComponent<dfLabel>().Text).ToStringIfNoString(), BotsMod.BotsModule.LOST_COLOR);

                dfLabel nameLabel = infoPanel.textPanel.transform.Find("NameLabel").GetComponent <dfLabel>();
                //why? its 3:50am and this is currently the funniest shit to me and you are powerless to stop me :)
                nameLabel.Text = "#CHAR_" + data.nameShort.ToString().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper();;// nameLabel.GetLocalizationKey().Replace(replaceKey, data.identity.ToString());

                //BotsMod.BotsModule.Log(replaceKey, BotsMod.BotsModule.LOST_COLOR);
                dfLabel pastKilledLabel = infoPanel.textPanel.transform.Find("PastKilledLabel").GetComponent <dfLabel>();
                //pastKilledLabel.Text = "(Past Killed)";
                pastKilledLabel.ProcessMarkup   = true;
                pastKilledLabel.ColorizeSymbols = true;
                if (data.metaCost != 0)
                {
                    pastKilledLabel.ModifyLocalizedText(pastKilledLabel.Text + " (" + data.metaCost.ToString() + "[sprite \"hbux_text_icon\"])");
                    pastKilledLabel.ModifyLocalizedText("(Past Killed)" + " (" + data.metaCost.ToString() + "[sprite \"hbux_text_icon\"])");
                }


                infoPanel.itemsPanel.enabled = true;


                var spriteObject = FakePrefab.Clone(infoPanel.itemsPanel.GetComponentInChildren <dfSprite>().gameObject);

                //spriteObject.SetActive(false);
                var posList    = new List <Vector3>();
                var locPosList = new List <Vector3>();


                foreach (var child in infoPanel.itemsPanel.GetComponentsInChildren <dfSprite>())
                {
                    //BotsMod.BotsModule.Log(child.name + " " + child.transform.position + " -- " + child.transform.localPosition);
                    posList.Add(child.transform.position);
                    locPosList.Add(child.transform.localPosition);
                    UnityEngine.Object.DestroyImmediate(child.gameObject);
                }

                for (int i = 0; i < data.loadoutSpriteNames.Count; i++)
                {
                    var sprite = FakePrefab.Clone(spriteObject).GetComponent <dfSprite>();
                    sprite.gameObject.SetActive(true);

                    sprite.SpriteName = data.loadoutSpriteNames[i];
                    sprite.Size       = new Vector2(data.loadoutSprites[i].width * 3, data.loadoutSprites[i].height * 3);
                    sprite.Atlas      = GameUIRoot.Instance.ConversationBar.portraitSprite.Atlas;


                    sprite.transform.parent = infoPanel.itemsPanel.transform;

                    infoPanel.itemsPanel.Controls.Add(sprite);


                    sprite.transform.position      = new Vector3(1 + ((i + 0.1f) * 0.1f), -((i + 0.1f) * 0.1f), 0);
                    sprite.transform.localPosition = new Vector3(((i + 0.1f) * 0.1f), 0, 0);

                    //BotsMod.BotsModule.Log(data.loadoutSpriteNames[i] + sprite.transform.position + " -- " + sprite.transform.localPosition);
                }


                if (data.foyerCardSprites != null)
                {
                    var facecard = selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>();
                    theCauseOfMySuffering.transform.parent               = facecard.transform.parent;
                    theCauseOfMySuffering.transform.localScale           = new Vector3(1, 1, 1);
                    theCauseOfMySuffering.transform.localPosition        = new Vector3(0, 1.687546f, 0.2250061f);
                    theCauseOfMySuffering.transform.parent.localPosition = new Vector3(0, 0, 0);
                    theCauseOfMySuffering.transform.parent.localScale    = new Vector3(0.2f, 0.2f, 1);
                    theCauseOfMySuffering.transform.parent.localScale    = new Vector3(0.1975309f, 0.1975309f, 1);
                    //theCauseOfMySuffering.transform.localScale = Vector3.one;
                    //facecard.gameObject.SetActive(false);
                    facecard.transform.parent = null;
                    UnityEngine.Object.Destroy(facecard.gameObject);
                    facecard = theCauseOfMySuffering.GetComponent <CharacterSelectFacecardIdleDoer>();
                    facecard.gameObject.name = data.nameShort + " Sprite FaceCard";
                    //facecard.RegenerateCache();


                    Debug.Log($"foyer cards arent null. {facecard.gameObject.transform.parent.position}");
                    Debug.Log($"foyer cards arent null. {facecard.gameObject.activeSelf}");

                    var orig = facecard.sprite.Collection;

                    var idleAnimName   = $"{data.nameShort}_facecard_idle";
                    var appearAnimName = $"{data.nameShort}_facecard_appear";

                    List <int> idleAnimIds   = new List <int>();
                    List <int> appearAnimIds = new List <int>();

                    List <int> toCopyAppearAnimIds = new List <int>
                    {
                        230,
                        231,
                        232,
                        233,
                        234,
                        235,
                        236,
                        237,
                        238,
                        239,
                        240,
                    };
                    List <int> toCopyIdleAnimIds = new List <int>
                    {
                        241,
                        242,
                        243,
                        244,
                    };

                    foreach (var sprite in data.foyerCardSprites)
                    {
                        if (sprite.name.ToLower().Contains("appear"))
                        {
                            appearAnimIds.Add(SpriteHandler.AddSpriteToCollectionWithAnchor(sprite, orig, tk2dBaseSprite.Anchor.LowerCenter, $"{data.nameShort}_{sprite.name}"));
                        }
                        else if (sprite.name.ToLower().Contains("idle"))
                        {
                            idleAnimIds.Add(SpriteHandler.AddSpriteToCollectionWithAnchor(sprite, orig, tk2dBaseSprite.Anchor.LowerCenter, $"{data.nameShort}_{sprite.name}"));
                        }
                        //ETGModConsole.Log(sprite.name);
                    }

                    Debug.Log($"anchors done");

                    for (int i = 0; i < appearAnimIds.Count; i++)
                    {
                        orig.spriteDefinitions[appearAnimIds[i]].position0 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position0 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position0;
                        orig.spriteDefinitions[appearAnimIds[i]].position1 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position1 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position1;
                        orig.spriteDefinitions[appearAnimIds[i]].position2 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position2 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position2;
                        orig.spriteDefinitions[appearAnimIds[i]].position3 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position3 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position3;

                        /*
                         * var safeForLaterName = orig.spriteDefinitions[appearAnimIds[i]].name;
                         * var safeForLaterBoundsDataCenter = orig.spriteDefinitions[appearAnimIds[i]].boundsDataCenter;
                         * var safeForLaterBoundsDataExtents = orig.spriteDefinitions[appearAnimIds[i]].boundsDataExtents;
                         * var safeForLaterUntrimmedBoundsDataCenter = orig.spriteDefinitions[appearAnimIds[i]].untrimmedBoundsDataCenter;
                         * var safeForLaterUntrimmedBoundsDataExtents = orig.spriteDefinitions[appearAnimIds[i]].untrimmedBoundsDataExtents;
                         * var safeForLaterUv = orig.spriteDefinitions[appearAnimIds[i]].uvs;
                         *
                         *
                         *
                         * def.name = safeForLaterName;
                         * def.boundsDataCenter = safeForLaterBoundsDataCenter;
                         * def.boundsDataExtents = safeForLaterBoundsDataExtents;
                         * def.untrimmedBoundsDataCenter = safeForLaterUntrimmedBoundsDataCenter;
                         * def.untrimmedBoundsDataExtents = safeForLaterUntrimmedBoundsDataExtents;
                         * def.uvs = safeForLaterUv;
                         *
                         * orig.spriteDefinitions[appearAnimIds[i]] = def;*/
                    }

                    Debug.Log($"appearAnimIds position0-3 done");

                    for (int i = 0; i < idleAnimIds.Count; i++)
                    {
                        orig.spriteDefinitions[idleAnimIds[i]].position0 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position0 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position0;
                        orig.spriteDefinitions[idleAnimIds[i]].position1 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position1 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position1;
                        orig.spriteDefinitions[idleAnimIds[i]].position2 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position2 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position2;
                        orig.spriteDefinitions[idleAnimIds[i]].position3 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position3 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position3;

                        /*
                         * var safeForLaterName = orig.spriteDefinitions[idleAnimIds[i]].name;
                         * var safeForLaterBoundsDataCenter = orig.spriteDefinitions[idleAnimIds[i]].boundsDataCenter;
                         * var safeForLaterBoundsDataExtents = orig.spriteDefinitions[idleAnimIds[i]].boundsDataExtents;
                         * var safeForLaterUntrimmedBoundsDataCenter = orig.spriteDefinitions[idleAnimIds[i]].untrimmedBoundsDataCenter;
                         * var safeForLaterUntrimmedBoundsDataExtents = orig.spriteDefinitions[idleAnimIds[i]].untrimmedBoundsDataExtents;
                         * var safeForLaterUv = orig.spriteDefinitions[idleAnimIds[i]].uvs;
                         *
                         *
                         *
                         * def.name = safeForLaterName;
                         * def.boundsDataCenter = safeForLaterBoundsDataCenter;
                         * def.boundsDataExtents = safeForLaterBoundsDataExtents;
                         * def.untrimmedBoundsDataCenter = safeForLaterUntrimmedBoundsDataCenter;
                         * def.untrimmedBoundsDataExtents = safeForLaterUntrimmedBoundsDataExtents;
                         * def.uvs = safeForLaterUv;
                         *
                         * orig.spriteDefinitions[idleAnimIds[i]] = def;*/
                    }
                    Debug.Log($"idleAnimIds position0-3 done");

                    foreach (var def in orig.spriteDefinitions)
                    {
                        if (def.name.ToLower().Contains("appear") || def.name.ToLower().Contains("idle"))
                        {
                            //ETGModConsole.Log($"{def.name} [{orig.GetSpriteIdByName(def.name)}]: {def.position0} - {def.position1} - {def.position2} - {def.position3}");
                        }
                    }
                    facecard.gameObject.SetActive(true);
                    facecard.spriteAnimator = facecard.gameObject.GetComponent <tk2dSpriteAnimator>();

                    SpriteBuilder.AddAnimation(facecard.spriteAnimator, orig, idleAnimIds, idleAnimName, tk2dSpriteAnimationClip.WrapMode.Loop, 4);
                    var name = SpriteBuilder.AddAnimation(facecard.spriteAnimator, orig, appearAnimIds, appearAnimName, tk2dSpriteAnimationClip.WrapMode.Once, 17);
                    Debug.Log($"anims added");
                    facecard.spriteAnimator.DefaultClipId = facecard.spriteAnimator.Library.GetClipIdByName(appearAnimName);

                    foreach (var anim in facecard.spriteAnimator.Library.clips)
                    {
                        //ETGModConsole.Log($"{anim.name}: {anim.frames.Length}");
                    }

                    facecard.appearAnimation   = appearAnimName;
                    facecard.coreIdleAnimation = idleAnimName;
                    Debug.Log($"foyer card done");
                }

                //selectCharacter.CreateOverheadElement();
            }

            catch (Exception e)
            {
                Debug.LogError("overhead thing broke: " + e);
            }
        }
コード例 #18
0
ファイル: DrawnKin.cs プロジェクト: Lichton/Fallen-Items
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                AIActor aIActor = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5");
                prefab = EnemyBuilder.BuildPrefab("DrawnKin", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), true);
                var companion = prefab.AddComponent <EnemyBehavior>();;
                companion.aiActor.knockbackDoer.weight         = 50;
                companion.aiActor.MovementSpeed                = 2f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = false;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = false;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(30f);
                companion.aiActor.CollisionKnockbackStrength = 5f;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.healthHaver.SetHealthMaximum(30f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider

                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 15,
                    ManualHeight           = 17,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 15,
                    ManualHeight           = 17,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                            Flipped   = new DirectionalAnimation.FlipType[2],
                            AnimNames = new string[]
                            {
                                "die_right",
                                "die_left"
                            }
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_front_right",
                        "idle_front_left",
                        "idle_back_right",
                        "idle_back_left"
                    }
                };
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.FourWay,
                    Flipped   = new DirectionalAnimation.FlipType[4],
                    AnimNames = new string[]
                    {
                        "run_back_right",
                        "run_front_right",
                        "run_front_left",
                        "run_back_left",
                    }
                };

                bool flag3 = DrawnKinCollection == null;
                if (flag3)
                {
                    DrawnKinCollection = SpriteBuilder.ConstructCollection(prefab, "DrawnKin_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(DrawnKinCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], DrawnKinCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        0,
                        3
                    }, "idle_back_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        1,
                        2
                    }, "idle_back_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        0,
                        3
                    }, "idle_front_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        1,
                        2
                    }, "idle_front_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        10,
                        11,
                        12,
                        13,
                        14,
                        15
                    }, "run_back_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        22,
                        23,
                        24,
                        25,
                        26,
                        27
                    }, "run_back_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        4,
                        5,
                        6,
                        7,
                        8,
                        9
                    }, "run_front_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int>
                    {
                        16,
                        17,
                        18,
                        19,
                        20,
                        21
                    }, "run_front_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                }

                var bs = prefab.GetComponent <BehaviorSpeculator>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;

                bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors    = behaviorSpeculator.OtherBehaviors;
                bs.TargetBehaviors   = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = true,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f
                    }
                };
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootGunBehavior()
                    {
                        GroupCooldownVariance        = 0.2f,
                        LineOfSight                  = false,
                        WeaponType                   = WeaponType.BulletScript,
                        OverrideBulletName           = null,
                        BulletScript                 = new CustomBulletScriptSelector(typeof(Drawn47Script)),
                        FixTargetDuringAttack        = true,
                        StopDuringAttack             = true,
                        LeadAmount                   = 0,
                        LeadChance                   = 1,
                        RespectReload                = true,
                        MagazineCapacity             = 8,
                        ReloadSpeed                  = 5f,
                        EmptiesClip                  = true,
                        SuppressReloadAnim           = false,
                        TimeBetweenShots             = -1,
                        PreventTargetSwitching       = true,
                        OverrideAnimation            = null,
                        OverrideDirectionalAnimation = null,
                        HideGun                      = false,
                        UseLaserSight                = false,
                        UseGreenLaser                = false,
                        PreFireLaserTime             = -1,
                        AimAtFacingDirectionWhenSafe = false,
                        Cooldown                     = 0.6f,
                        CooldownVariance             = 0,
                        AttackCooldown               = 0,
                        GlobalCooldown               = 0,
                        InitialCooldown              = 0,
                        InitialCooldownVariance      = 0,
                        GroupName                    = null,
                        GroupCooldown                = 0,
                        MinRange                     = 0,
                        Range                      = 16,
                        MinWallDistance            = 0,
                        MaxEnemiesInRoom           = 0,
                        MinHealthThreshold         = 0,
                        MaxHealthThreshold         = 1,
                        HealthThresholds           = new float[0],
                        AccumulateHealthThresholds = true,
                        targetAreaStyle            = null,
                        IsBlackPhantom             = false,
                        resetCooldownOnDamage      = null,
                        RequiresLineOfSight        = true,
                        MaxUsages                  = 0,
                    }
                };
                bs.MovementBehaviors = new List <MovementBehaviorBase>
                {
                    new SeekTargetBehavior
                    {
                        StopWhenInRange     = true,
                        CustomRange         = 7f,
                        LineOfSight         = false,
                        ReturnToSpawn       = false,
                        SpawnTetherDistance = 0f,
                        PathInterval        = 0.5f,
                        SpecifyRange        = false,
                        MinActiveRange      = 0f,
                        MaxActiveRange      = 0f
                    }
                };
                //BehaviorSpeculator load = EnemyDatabase.GetOrLoadByGuid("206405acad4d4c33aac6717d184dc8d4").behaviorSpeculator;
                //Tools.DebugInformation(load);
                bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("GunAttachPoint").gameObject;
                EnemyBuilder.DuplicateAIShooterAndAIBulletBank(prefab, aIActor.aiShooter, aIActor.GetComponent <AIBulletBank>(), CakeIDs.Drawn47, m_CachedGunAttachPoint.transform);
                Game.Enemies.Add("cak:drawnkin", companion.aiActor);
                ItemsMod.Strings.Enemies.Set("#DRAWNKIN", "Drawn Kin");
                companion.aiActor.OverrideDisplayName = "#DRAWNKIN";
                companion.aiActor.ActorName           = "#DRAWNKIN";
                companion.aiActor.name = "#DRAWNKIN";
            }
        }
コード例 #19
0
ファイル: InkBook.cs プロジェクト: Lichton/Fallen-Items
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                //float AttackAnimationThingAMaWhatIts = 0.5f;
                prefab = EnemyBuilder.BuildPrefab("ink_book", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 100;
                companion.aiActor.MovementSpeed                = 2.5f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = true;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(20f);
                companion.aiActor.CollisionKnockbackStrength = 0f;
                companion.aiActor.procedurallyOutlined       = false;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(20f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider


                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });

                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;

                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                            Flipped   = new DirectionalAnimation.FlipType[2],
                            AnimNames = new string[]
                            {
                                "die_left",
                                "die_right"
                            }
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_left",
                        "idle_right"
                    }
                };
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_left",
                        "run_right"
                    }
                };
                bool flag3 = InkedBook == null;
                if (flag3)
                {
                    InkedBook = SpriteBuilder.ConstructCollection(prefab, "InkBooklet_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(InkedBook);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], InkedBook);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        2,
                        3,
                        4,
                        5,
                        6
                    }, "die_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        2,
                        3,
                        4,
                        5,
                        6
                    }, "die_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;

                    //companion.aiActor.gameObject.AddComponent<ColliderComponent>();
                    var bs = prefab.GetComponent <BehaviorSpeculator>();
                    prefab.GetComponent <ObjectVisibilityManager>();
                    BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").behaviorSpeculator;
                    bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                    bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                    shootpoint                    = new GameObject("beepskysmash");
                    shootpoint.transform.parent   = companion.transform;
                    shootpoint.transform.position = companion.sprite.WorldCenter;
                    GameObject m_CachedGunAttachPoint = companion.transform.Find("beepskysmash").gameObject;
                    bs.TargetBehaviors = new List <TargetBehaviorBase>
                    {
                        new TargetPlayerBehavior
                        {
                            Radius              = 35f,
                            LineOfSight         = true,
                            ObjectPermanence    = true,
                            SearchInterval      = 0.25f,
                            PauseOnTargetSwitch = false,
                            PauseTime           = 0.25f,
                        }
                    };
                    bs.AttackBehaviors = new List <AttackBehaviorBase>()
                    {
                        new ShootBehavior()
                        {
                            ShootPoint          = m_CachedGunAttachPoint,
                            BulletScript        = new CustomBulletScriptSelector(typeof(SkellScript)),
                            LeadAmount          = 0f,
                            AttackCooldown      = 5f,
                            InitialCooldown     = 1f,
                            RequiresLineOfSight = true,
                            StopDuring          = ShootBehavior.StopType.Attack,
                            Uninterruptible     = true,
                        }
                    };
                    bs.MovementBehaviors = new List <MovementBehaviorBase>
                    {
                        new SeekTargetBehavior
                        {
                            StopWhenInRange     = true,
                            CustomRange         = 7f,
                            LineOfSight         = false,
                            ReturnToSpawn       = false,
                            SpawnTetherDistance = 0f,
                            PathInterval        = 0.5f,
                            SpecifyRange        = false,
                            MinActiveRange      = 0f,
                            MaxActiveRange      = 0f
                        }
                    };

                    bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                    bs.TickInterval                    = behaviorSpeculator.TickInterval;
                    bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                    bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                    bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                    bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                    bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                    Game.Enemies.Add("cak:ink_booklet", companion.aiActor);
                    ItemsMod.Strings.Enemies.Set("#INKBOOK", "Ink Booklet");
                    companion.aiActor.OverrideDisplayName = "#INKBOOK";
                    companion.aiActor.ActorName           = "#INKBOOK";
                    companion.aiActor.name = "#INKBOOK";
                }
            }
        }
コード例 #20
0
        public static GameObject BuildPrefab()
        {
            var bomb = SpriteBuilder.SpriteFromResource("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", new GameObject("InfantryGrenade"));

            bomb.SetActive(false);
            FakePrefab.MarkAsFakePrefab(bomb);

            var animator   = bomb.AddComponent <tk2dSpriteAnimator>();
            var collection = (PickupObjectDatabase.GetById(108) as SpawnObjectPlayerItem).objectToSpawn.GetComponent <tk2dSpriteAnimator>().Library.clips[0].frames[0].spriteCollection;

            var deployAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int>
            {
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_002.png", collection),
            }, "infantrygrenade_throw", tk2dSpriteAnimationClip.WrapMode.Once);

            deployAnimation.fps = 12;
            foreach (var frame in deployAnimation.frames)
            {
                frame.eventLerpEmissiveTime  = 0.5f;
                frame.eventLerpEmissivePower = 30f;
            }

            var explodeAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int>
            {
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_explode_001.png", collection),
            }, "infantrygrenade_explode", tk2dSpriteAnimationClip.WrapMode.Once);

            explodeAnimation.fps = 30;
            foreach (var frame in explodeAnimation.frames)
            {
                frame.eventLerpEmissiveTime  = 0.5f;
                frame.eventLerpEmissivePower = 30f;
            }

            var armedAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int>
            {
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", collection),
                SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_002.png", collection),
            }, "infantrygrenade_primed", tk2dSpriteAnimationClip.WrapMode.LoopSection);

            armedAnimation.fps       = 10.0f;
            armedAnimation.loopStart = 0;
            foreach (var frame in armedAnimation.frames)
            {
                frame.eventLerpEmissiveTime  = 0.5f;
                frame.eventLerpEmissivePower = 30f;
            }

            var audioListener = bomb.AddComponent <AudioAnimatorListener>();

            audioListener.animationAudioEvents = new ActorAudioEvent[]
            {
                new ActorAudioEvent
                {
                    eventName = "Play_OBJ_mine_beep_01",
                    eventTag  = "beep"
                }
            };

            ProximityMine proximityMine = new ProximityMine
            {
                explosionData = new ExplosionData
                {
                    useDefaultExplosion = false,
                    doDamage            = true,
                    forceUseThisRadius  = false,
                    damageRadius        = 3f,
                    damageToPlayer      = 0,
                    damage                       = 30,
                    breakSecretWalls             = false,
                    secretWallsRadius            = 3.5f,
                    forcePreventSecretWallDamage = false,
                    doDestroyProjectiles         = true,
                    doForce                      = true,
                    pushRadius                   = 3,
                    force                  = 25,
                    debrisForce            = 12.5f,
                    preventPlayerForce     = false,
                    explosionDelay         = 0.1f,
                    usesComprehensiveDelay = false,
                    comprehensiveDelay     = 0,
                    playDefaultSFX         = false,

                    doScreenShake = true,
                    ss            = new ScreenShakeSettings
                    {
                        magnitude               = 1,
                        speed                   = 6.5f,
                        time                    = 0.22f,
                        falloff                 = 0,
                        direction               = new Vector2(0, 0),
                        vibrationType           = ScreenShakeSettings.VibrationType.Auto,
                        simpleVibrationStrength = Vibration.Strength.Medium,
                        simpleVibrationTime     = Vibration.Time.Normal
                    },
                    doStickyFriction             = true,
                    doExplosionRing              = true,
                    isFreezeExplosion            = false,
                    freezeRadius                 = 5,
                    IsChandelierExplosion        = false,
                    rotateEffectToNormal         = false,
                    ignoreList                   = new List <SpeculativeRigidbody>(),
                    overrideRangeIndicatorEffect = null,
                    effect       = StaticExplosionDatas.explosiveRoundsExplosion.effect,
                    freezeEffect = null,
                },
                explosionStyle           = ProximityMine.ExplosiveStyle.TIMED,
                detectRadius             = 3.5f,
                explosionDelay           = 1f,
                usesCustomExplosionDelay = false,
                customExplosionDelay     = 0.1f,
                deployAnimName           = "infantrygrenade_throw",
                explodeAnimName          = "infantrygrenade_explode",
                idleAnimName             = "infantrygrenade_primed",



                MovesTowardEnemies       = false,
                HomingTriggeredOnSynergy = false,
                HomingDelay  = 3.25f,
                HomingRadius = 10,
                HomingSpeed  = 4,
            };

            var boom = bomb.AddComponent <ProximityMine>(proximityMine);


            return(bomb);
        }
コード例 #21
0
        // Token: 0x0600023B RID: 571 RVA: 0x00015AB8 File Offset: 0x00013CB8
        //public override DebrisObject Drop(PlayerController player)
        //{
        //	player.OnAllyFlipCompleted = (Action<FlippableCover>)Delegate.Remove(player.OnAllyFlipCompleted, new Action<FlippableCover>(this.HandleFlip));
        //	player.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Remove(player.OnNewFloorLoaded, new Action<PlayerController>(this.HandleNewFloor));
        ///	this.DestroyCompanions();
        //	return base.Drop(player);
        //}

        // Token: 0x0600023C RID: 572 RVA: 0x00015B1C File Offset: 0x00013D1C
        public static void BuildPrefab()
        {
            bool flag  = AbilityRebel.AllyPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(AbilityRebel.guid);
            bool flag2 = flag;
            bool flag3 = !flag2;

            if (flag3)
            {
                AbilityRebel.AllyPrefab = CompanionBuilder.BuildPrefab("Ally Boi", AbilityRebel.guid, AbilityRebel.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
                AbilityRebel.AllyBehavior allyBehavior = AbilityRebel.AllyPrefab.AddComponent <AbilityRebel.AllyBehavior>();
                allyBehavior.aiAnimator.facingType            = AIAnimator.FacingType.Movement;
                allyBehavior.aiAnimator.faceSouthWhenStopped  = false;
                allyBehavior.aiAnimator.faceTargetWhenStopped = true;

                AIAnimator aiAnimator = allyBehavior.aiAnimator;
                //AIBulletBank aiBulletBlank = aiBulletBlank.
                //allyBehavior.aiShooter.equippedGunId = 79;

                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "run",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.Single,
                            Prefix    = "die",
                            AnimNames = new string[1],
                            Flipped   = new DirectionalAnimation.FlipType[1]
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    },
                    Flipped = new DirectionalAnimation.FlipType[2]
                };

                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "idle_right",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };

                DirectionalAnimation anim = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "attack",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "attack",
                        anim = anim
                    }
                };
                AIAnimator.NamedDirectionalAnimation namedDirectionalAnimation = new AIAnimator.NamedDirectionalAnimation();
                namedDirectionalAnimation.name = "spawn";
                namedDirectionalAnimation.anim = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "spawn",
                    AnimNames = new string[]
                    {
                        "spawn"
                    },
                    Flipped = new DirectionalAnimation.FlipType[1]
                };
                bool flag4 = AbilityRebel.AllyBoiCollection == null;
                bool flag5 = flag4;
                if (flag5)
                {
                    AbilityRebel.AllyBoiCollection = SpriteBuilder.ConstructCollection(AbilityRebel.AllyPrefab, "Ally_Boi_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(AbilityRebel.AllyBoiCollection);
                    for (int i = 0; i < AbilityRebel.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(AbilityRebel.spritePaths[i], AbilityRebel.AllyBoiCollection);
                    }
                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        43
                    }, "attack", tk2dSpriteAnimationClip.WrapMode.Once).fps = 20f;
                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        37,
                        38,
                        39,
                        40,
                        41,
                        42
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f;

                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        37,
                        38,
                        39,
                        40,
                        41,
                        42
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f;

                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        31,
                        32,
                        33,
                        34,
                        35,
                        36
                    }, "run", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f;

                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        31,
                        32,
                        33,
                        34,
                        35,
                        36
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f;

                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        25,
                        26,
                        27,
                        28,
                        29,
                        30
                    }, "die", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f;
                    SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24
                    }, "spawn", tk2dSpriteAnimationClip.WrapMode.Once).fps = 24f;
                }
                allyBehavior.aiActor.MovementSpeed    = 10f;
                allyBehavior.aiActor.HasShadow        = false;
                allyBehavior.aiActor.CanTargetPlayers = false;
                BehaviorSpeculator behaviorSpeculator = allyBehavior.behaviorSpeculator;
                behaviorSpeculator.AttackBehaviors.Add(new AbilityRebel.AllyAttackBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new AbilityRebel.ApproachEnemiesBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(AbilityRebel.AllyPrefab);
                FakePrefab.MarkAsFakePrefab(AbilityRebel.AllyPrefab);
                AbilityRebel.AllyPrefab.SetActive(false);
                allyBehavior.CanInterceptBullets = true;
                allyBehavior.aiActor.healthHaver.PreventAllDamage = false;
                allyBehavior.aiActor.CollisionDamage = 0f;
                allyBehavior.aiActor.specRigidbody.CollideWithOthers  = true;
                allyBehavior.aiActor.specRigidbody.CollideWithTileMap = false;
                allyBehavior.aiActor.healthHaver.ForceSetCurrentHealth(12f);
                allyBehavior.aiActor.healthHaver.SetHealthMaximum(12f, null, false);
                allyBehavior.aiActor.specRigidbody.PixelColliders.Clear();
                allyBehavior.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 16,
                    ManualHeight           = 24,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });;

                /*
                 * allyBehavior.aiAnimator.specRigidbody.PixelColliders.Add(new PixelCollider
                 * {
                 *      ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                 *      CollisionLayer = CollisionLayer.PlayerHitBox,
                 *      IsTrigger = false,
                 *      BagleUseFirstFrameOnly = false,
                 *      SpecifyBagelFrame = string.Empty,
                 *      BagelColliderNumber = 0,
                 *      ManualOffsetX = 0,
                 *      ManualOffsetY = 0,
                 *      ManualWidth = 1,
                 *      ManualHeight = 1,
                 *      ManualDiameter = 0,
                 *      ManualLeftX = 0,
                 *      ManualLeftY = 0,
                 *      ManualRightX = 0,
                 *      ManualRightY = 0
                 * });*/
            }
        }
コード例 #22
0
ファイル: IceOgreHead.cs プロジェクト: Lichton/Fallen-Items
        // Token: 0x06000061 RID: 97 RVA: 0x00005358 File Offset: 0x00003558
        public static void BuildPrefab()
        {
            bool flag  = IceOgreHead.PenguinPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(IceOgreHead.guid);
            bool flag2 = flag;

            if (!flag2)
            {
                IceOgreHead.PenguinPrefab = CompanionBuilder.BuildPrefab("Ice Ogre Head", IceOgreHead.guid, IceOgreHead.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
                IceOgreHead.PenguinBehavior penguinBehavior = IceOgreHead.PenguinPrefab.AddComponent <IceOgreHead.PenguinBehavior>();
                AIAnimator aiAnimator = penguinBehavior.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_right",
                        "run_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                bool flag3 = IceOgreHead.iceCollection == null;
                if (flag3)
                {
                    IceOgreHead.iceCollection = SpriteBuilder.ConstructCollection(IceOgreHead.PenguinPrefab, "Ice_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(IceOgreHead.iceCollection);
                    for (int i = 0; i < IceOgreHead.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(IceOgreHead.spritePaths[i], IceOgreHead.iceCollection);
                    }
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int>
                    {
                        4,
                        5,
                        6,
                        7
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int>
                    {
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                    SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int>
                    {
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                }
                penguinBehavior.aiActor.MovementSpeed = 7f;
                penguinBehavior.specRigidbody.Reinitialize();
                penguinBehavior.specRigidbody.CollideWithTileMap = false;
                penguinBehavior.aiActor.CanTargetEnemies         = true;
                BehaviorSpeculator behaviorSpeculator = penguinBehavior.behaviorSpeculator;
                behaviorSpeculator.AttackBehaviors.Add(new IceOgreHead.PenguinAttackBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new IceOgreHead.ApproachEnemiesBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(IceOgreHead.PenguinPrefab);
                FakePrefab.MarkAsFakePrefab(IceOgreHead.PenguinPrefab);
                IceOgreHead.PenguinPrefab.SetActive(false);
            }
        }
コード例 #23
0
ファイル: StrangeArrow.cs プロジェクト: Lichton/Fallen-Items
        public static void BuildPrefab()
        {
            bool flag  = StrangeArrow.arrowPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(StrangeArrow.guid);
            bool flag2 = flag;

            if (!flag2)
            {
                StrangeArrow.arrowPrefab = CompanionBuilder.BuildPrefab("Strange Arrow", StrangeArrow.guid, StrangeArrow.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
                StrangeArrow.arrowBehavior arrowsBehavior = StrangeArrow.arrowPrefab.AddComponent <StrangeArrow.arrowBehavior>();
                AIAnimator aiAnimator = arrowsBehavior.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_right",
                        "run_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                bool flag3 = StrangeArrow.arrowCollection == null;
                if (flag3)
                {
                    StrangeArrow.arrowCollection = SpriteBuilder.ConstructCollection(StrangeArrow.arrowPrefab, "StrangeArrow_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(StrangeArrow.arrowCollection);
                    for (int i = 0; i < StrangeArrow.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(StrangeArrow.spritePaths[i], StrangeArrow.arrowCollection);
                    }
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        0,
                        1
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        2,
                        3
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        4,
                        5
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        6,
                        7
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                }
                arrowsBehavior.aiActor.MovementSpeed = 7f;
                arrowsBehavior.specRigidbody.Reinitialize();
                arrowsBehavior.specRigidbody.CollideWithTileMap = false;
                arrowsBehavior.aiActor.CanTargetEnemies         = true;
                BehaviorSpeculator behaviorSpeculator = arrowsBehavior.behaviorSpeculator;
                behaviorSpeculator.AttackBehaviors.Add(new StrangeArrow.arrowAttackBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new StrangeArrow.ApproachEnemiesBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(StrangeArrow.arrowPrefab);
                FakePrefab.MarkAsFakePrefab(StrangeArrow.arrowPrefab);
                StrangeArrow.arrowPrefab.SetActive(false);
            }
        }
コード例 #24
0
        public static void BuildPrefab()
        {
            bool flag  = PointZero.PointZeroPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(PointZero.guid);
            bool flag2 = flag;

            if (!flag2)
            {
                PointZero.PointZeroPrefab = CompanionBuilder.BuildPrefab("Point Zero", PointZero.guid, PointZero.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
                PointZero.PointZeroBehaviour pointZeroBehavior = PointZero.PointZeroPrefab.AddComponent <PointZero.PointZeroBehaviour>();
                AIAnimator aiAnimator = pointZeroBehavior.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_right",
                        "run_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "attack_right",
                        "attack_left"
                    }
                };
                bool flag3 = PointZero.pointzeroCollection == null;
                if (flag3)
                {
                    PointZero.pointzeroCollection = SpriteBuilder.ConstructCollection(PointZero.PointZeroPrefab, "Penguin_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(PointZero.pointzeroCollection);
                    for (int i = 0; i < PointZero.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(PointZero.spritePaths[i], PointZero.pointzeroCollection);
                    }
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15
                    }, "attack_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15
                    }, "attack_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                }
                pointZeroBehavior.aiActor.MovementSpeed = 5f;
                pointZeroBehavior.specRigidbody.Reinitialize();
                pointZeroBehavior.specRigidbody.CollideWithTileMap = false;
                pointZeroBehavior.aiActor.CanTargetEnemies         = true;
                pointZeroBehavior.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                BehaviorSpeculator behaviorSpeculator = pointZeroBehavior.behaviorSpeculator;
                behaviorSpeculator.AttackBehaviors.Add(new PointZero.PointZeroAttackBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new PointZero.ApproachEnemiesBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(PointZero.PointZeroPrefab);
                FakePrefab.MarkAsFakePrefab(PointZero.PointZeroPrefab);
                PointZero.PointZeroPrefab.SetActive(false);
            }
        }
コード例 #25
0
ファイル: FlameClone.cs プロジェクト: Lichton/Fallen-Items
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("Flame_Clone", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.EffectResistances = new ActorEffectResistance[] { new ActorEffectResistance()
                                                                                    {
                                                                                        resistAmount = 1, resistType = EffectResistanceType.Fire
                                                                                    }, };
                companion.aiActor.knockbackDoer.weight = 800;
                companion.aiActor.MovementSpeed        = 5f;
                companion.aiActor.name = "Killinder Clone";
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage                  = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = false;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = false;
                companion.aiActor.CollisionKnockbackStrength       = 5f;
                companion.aiActor.healthHaver.SetHealthMaximum(15f, null, false);
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle"
                    }
                };

                bool flag3 = OphaimCollection == null;
                if (flag3)
                {
                    OphaimCollection = SpriteBuilder.ConstructCollection(prefab, "Inflamed_Eye_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(OphaimCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], OphaimCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, OphaimCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                }
                var     bs     = prefab.GetComponent <BehaviorSpeculator>();
                float[] angles = { 135, 45, 125, 45 };
                prefab.GetComponent <ObjectVisibilityManager>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;
                bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                shootpoint                    = new GameObject("f**k");
                shootpoint.transform.parent   = companion.transform;
                shootpoint.transform.position = companion.sprite.WorldCenter;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject;
                bs.TargetBehaviors = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = true,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f,
                    }
                };
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint          = m_CachedGunAttachPoint,
                        BulletScript        = new CustomBulletScriptSelector(typeof(FlameShooter)),
                        LeadAmount          = 0f,
                        AttackCooldown      = 3f,
                        RequiresLineOfSight = false,
                        Uninterruptible     = true
                    }
                };
                companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                bs.InstantFirstTick            = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                Game.Enemies.Add("cak:flame_clone", companion.aiActor);
            }
        }
コード例 #26
0
        public static void BuildPrefab()
        {
            bool flag = Peanut.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(Peanut.guid);

            if (!flag)
            {
                Peanut.prefab = CompanionBuilder.BuildPrefab("Peanut Companion", Peanut.guid, "NevernamedsItems/Resources/Companions/PeanutCompanion/peanut_idlesouth_001", new IntVector2(16, 11), new IntVector2(8, 9));
                var companionController = Peanut.prefab.AddComponent <PeanutCompanionBehaviour>();
                companionController.companionID           = CompanionController.CompanionIdentifier.NONE;
                companionController.aiActor.MovementSpeed = 5f;
                companionController.aiActor.healthHaver.PreventAllDamage = true;
                companionController.aiActor.CollisionDamage = 0f;
                companionController.aiActor.specRigidbody.CollideWithOthers  = false;
                companionController.aiActor.specRigidbody.CollideWithTileMap = false;

                BehaviorSpeculator component = Peanut.prefab.GetComponent <BehaviorSpeculator>();
                component.AttackBehaviors.Add(new CustomCompanionBehaviours.PeanutAttackBehaviour());
                component.MovementBehaviors.Add(new CustomCompanionBehaviours.SimpleCompanionApproach());
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                //SET UP ANIMATIONS
                AIAnimator aiAnimator = companionController.aiAnimator;
                aiAnimator.
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.FourWayCardinal,
                    Flipped   = new DirectionalAnimation.FlipType[4],
                    AnimNames = new string[]
                    {
                        "move_north",
                        "move_east",
                        "move_south",
                        "move_west",
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.FourWayCardinal,
                    Flipped   = new DirectionalAnimation.FlipType[4],
                    AnimNames = new string[]
                    {
                        "idle_north",
                        "idle_east",
                        "idle_south",
                        "idle_west",
                    }
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "attack",
                        anim = new DirectionalAnimation
                        {
                            Prefix    = "attack",
                            Type      = DirectionalAnimation.DirectionType.FourWayCardinal,
                            Flipped   = new DirectionalAnimation.FlipType[4],
                            AnimNames = new string[]
                            {
                                "attack_west",
                                "attack_east",
                                "attack_north",
                                "attack_south"
                            }
                        }
                    },
                };

                //ADD SPRITES TO THE ANIMATIONS
                if (Peanut.PeanutAnimationCollection == null)
                {
                    Peanut.PeanutAnimationCollection = SpriteBuilder.ConstructCollection(Peanut.prefab, "PeanutCompanion_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(Peanut.PeanutAnimationCollection);
                    for (int i = 0; i < Peanut.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(Peanut.spritePaths[i], Peanut.PeanutAnimationCollection);
                    }
                    //Idling Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3
                    }, "idle_west", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        4,
                        5,
                        6,
                        7,
                    }, "idle_east", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        8,
                        9,
                        10,
                        11,
                    }, "idle_north", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        12,
                        13,
                        14,
                        15,
                    }, "idle_south", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f;
                    //Running Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        16,
                        17,
                        18,
                        19,
                        20,
                        21
                    }, "move_west", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        22,
                        23,
                        24,
                        25,
                        26,
                        27
                    }, "move_east", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        28,
                        29,
                        30,
                        31,
                        32,
                        33
                    }, "move_north", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                    }, "move_south", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    //ATTACKING ANIMATIONS
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        40,
                        41,
                        42,
                        43,
                        44,
                        45,
                        46,
                        47
                    }, "attack_east", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        48,
                        49,
                        50,
                        51,
                        52,
                        53,
                        54,
                        55
                    }, "attack_west", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        56,
                        57,
                        58,
                        59,
                        60,
                        61,
                        62
                    }, "attack_north", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int>
                    {
                        63,
                        64,
                        65,
                        66,
                        67,
                        68,
                        69,
                        70
                    }, "attack_south", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                }
            }
        }
コード例 #27
0
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                //float AttackAnimationThingAMaWhatIts = 0.5f;
                prefab = EnemyBuilder.BuildPrefab("ammomimic_cakaaaa", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 100;
                companion.aiActor.MovementSpeed                = 2.5f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 50f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = true;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(20f);
                companion.aiActor.CollisionKnockbackStrength = 1f;
                companion.aiActor.procedurallyOutlined       = false;
                companion.aiActor.CanTargetPlayers           = false;
                companion.aiActor.healthHaver.SetHealthMaximum(20f, null, false);
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider


                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerBlocker,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;

                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                            Flipped   = new DirectionalAnimation.FlipType[2],
                            AnimNames = new string[]
                            {
                                "die_left",
                                "die_right"
                            }
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_left",
                        "idle_right"
                    }
                };
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_left",
                        "run_right"
                    }
                };
                bool flag3 = ammomimicCollection == null;
                if (flag3)
                {
                    ammomimicCollection = SpriteBuilder.ConstructCollection(prefab, "ammomimic_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(ammomimicCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], ammomimicCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0
                    }, "die_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0
                    }, "die_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;

                    //companion.aiActor.gameObject.AddComponent<ColliderComponent>();
                    var bs = prefab.GetComponent <BehaviorSpeculator>();
                    prefab.GetComponent <ObjectVisibilityManager>();
                    BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("9b4fb8a2a60a457f90dcf285d34143ac").behaviorSpeculator;
                    bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                    bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                    shootpoint                    = new GameObject("ammosh");
                    shootpoint.transform.parent   = companion.transform;
                    shootpoint.transform.position = companion.sprite.WorldCenter;
                    GameObject m_CachedGunAttachPoint = companion.transform.Find("ammosh").gameObject;
                    bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                    bs.TickInterval                    = behaviorSpeculator.TickInterval;
                    bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                    bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                    bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                    bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                    bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                    Game.Enemies.Add("cak:ammomimic", companion.aiActor);
                    ItemsMod.Strings.Enemies.Set("#AMMOMIMIC", "Ammomimic");
                    companion.aiActor.OverrideDisplayName = "#AMMOMIMIC";
                    companion.aiActor.ActorName           = "#AMMOMIMIC";
                    companion.aiActor.name = "#AMMOMIMIC";
                }
            }
        }
コード例 #28
0
ファイル: FlameChamber.cs プロジェクト: Lichton/Fallen-Items
        public static void BuildPrefab()
        {
            // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93");
            bool flag  = prefab != null || BossBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = BossBuilder.BuildPrefab("Flame Chamber", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false, true);
                var companion = prefab.AddComponent <EnemyBehavior2>();

                companion.aiActor.knockbackDoer.weight         = 200;
                companion.aiActor.MovementSpeed                = 6f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow                        = true;
                companion.aiActor.IgnoreForRoomClear               = false;
                companion.aiActor.aiAnimator.HitReactChance        = 0.05f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(500f);
                companion.aiActor.healthHaver.SetHealthMaximum(500f);
                companion.aiActor.CollisionKnockbackStrength = 5f;
                companion.aiActor.procedurallyOutlined       = true;
                companion.aiActor.CanTargetPlayers           = true;

                ItemsMod.Strings.Enemies.Set("#FLAMECHAMBER", "Killinder");
                ItemsMod.Strings.Enemies.Set("#????", "???");
                ItemsMod.Strings.Enemies.Set("#SUBTITLE", "FLAME CHAMBER");
                ItemsMod.Strings.Enemies.Set("#QUOTE", "THE 36 CHAMBERS");
                companion.aiActor.healthHaver.overrideBossName = "#FLAMECHAMBER";
                companion.aiActor.OverrideDisplayName          = "#FLAMECHAMBER";
                companion.aiActor.ActorName = "#FLAMECHAMBER";
                companion.aiActor.name      = "#FLAMECHAMBER";
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);

                prefab.name = companion.aiActor.OverrideDisplayName;

                GenericIntroDoer miniBossIntroDoer = prefab.AddComponent <GenericIntroDoer>();
                miniBossIntroDoer.triggerType  = GenericIntroDoer.TriggerType.PlayerEnteredRoom;
                miniBossIntroDoer.initialDelay = 0.15f;

                miniBossIntroDoer.cameraMoveSpeed        = 14;
                miniBossIntroDoer.specifyIntroAiAnimator = null;
                miniBossIntroDoer.BossMusicEvent         = "Play_MUS_Boss_Theme_Beholster";
                companion.aiActor.ShadowObject           = EnemyDatabase.GetOrLoadByGuid("c00390483f394a849c36143eb878998f").ShadowObject;
                companion.aiActor.HasShadow        = true;
                miniBossIntroDoer.PreventBossMusic = false;

                miniBossIntroDoer.InvisibleBeforeIntroAnim = false;
                miniBossIntroDoer.preIntroAnim             = string.Empty;
                miniBossIntroDoer.preIntroDirectionalAnim  = string.Empty;
                miniBossIntroDoer.introAnim                  = "intro";
                miniBossIntroDoer.introDirectionalAnim       = string.Empty;
                miniBossIntroDoer.continueAnimDuringOutro    = false;
                miniBossIntroDoer.cameraFocus                = null;
                miniBossIntroDoer.roomPositionCameraFocus    = Vector2.zero;
                miniBossIntroDoer.restrictPlayerMotionToRoom = false;
                miniBossIntroDoer.fusebombLock               = false;
                miniBossIntroDoer.AdditionalHeightOffset     = 0;
                miniBossIntroDoer.portraitSlideSettings      = new PortraitSlideSettings()
                {
                    bossNameString          = "#FLAMECHAMBER",
                    bossSubtitleString      = "#SUBTITLE",
                    bossQuoteString         = "#QUOTE",
                    bossSpritePxOffset      = IntVector2.Zero,
                    topLeftTextPxOffset     = IntVector2.Zero,
                    bottomRightTextPxOffset = IntVector2.Zero,
                    bgColor = ExtendedColours.orange
                };
                miniBossIntroDoer.SkipBossCard = false;
                miniBossIntroDoer.portraitSlideSettings.bossArtSprite = BossCardTexture;
                companion.aiActor.healthHaver.bossHealthBar           = HealthHaver.BossBarType.MainBar;
                miniBossIntroDoer.SkipFinalizeAnimation = true;

                miniBossIntroDoer.RegenerateCache();
                //BehaviorSpeculator aIActor = EnemyDatabase.GetOrLoadByGuid("465da2bb086a4a88a803f79fe3a27677").behaviorSpeculator;
                //Tools.DebugInformation(aIActor);

                /////



                companion.aiActor.healthHaver.SetHealthMaximum(500f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider

                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 10,
                    ManualWidth            = 50,
                    ManualHeight           = 50,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 10,
                    ManualWidth            = 50,
                    ManualHeight           = 50,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "idle",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                DirectionalAnimation almostdone = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "intro",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "intro",
                        anim = almostdone
                    }
                };

                DirectionalAnimation done2 = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "bigeyes",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "bigeyes",
                        anim = done2
                    }
                };
                DirectionalAnimation done32 = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "eyes",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "eyes",
                        anim = done32
                    }
                };
                bool flag3 = BishopCollection == null;
                if (flag3)
                {
                    BishopCollection = SpriteBuilder.ConstructCollection(prefab, "FlameChamber_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(BishopCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], BishopCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;

                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int>
                    {
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        34
                    }, "intro", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int>
                    {
                        31
                    }, "bigeyes", tk2dSpriteAnimationClip.WrapMode.Once).fps = 6f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int>
                    {
                        32
                    }, "eyes", tk2dSpriteAnimationClip.WrapMode.Once).fps = 6f;
                }
                var bs = prefab.GetComponent <BehaviorSpeculator>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;
                bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                shootpoint                    = new GameObject("attach");
                shootpoint.transform.parent   = companion.transform;
                shootpoint.transform.position = companion.sprite.WorldCenter;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("attach").gameObject;
                bs.TargetBehaviors = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = false,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f
                    }
                };
                float[] angles = { 45, 135, 225, 135 };
                bs.MovementBehaviors = new List <MovementBehaviorBase>
                {
                    new PingPongAroundBehavior2
                    {
                        startingAngles = angles
                    }
                };

                bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem>
                {
                    new AttackBehaviorGroup.AttackGroupItem()
                    {
                        Probability = 1,
                        Behavior    = new ShootBehavior {
                            ShootPoint          = m_CachedGunAttachPoint,
                            BulletScript        = new CustomBulletScriptSelector(typeof(ChamberShot)),
                            LeadAmount          = 0f,
                            AttackCooldown      = 4.5f,
                            TellAnimation       = "bigeyes",
                            RequiresLineOfSight = false,
                            StopDuring          = ShootBehavior.StopType.Attack,
                            Uninterruptible     = true
                        },
                        NickName = "Lucky Sixes"
                    },
                    new AttackBehaviorGroup.AttackGroupItem()
                    {
                        Probability = 1,
                        Behavior    = new ShootBehavior {
                            ShootPoint          = m_CachedGunAttachPoint,
                            BulletScript        = new CustomBulletScriptSelector(typeof(FireLine)),
                            LeadAmount          = 0f,
                            AttackCooldown      = 4.5f,
                            TellAnimation       = "bigeyes",
                            RequiresLineOfSight = false,
                            StopDuring          = ShootBehavior.StopType.Attack,
                            Uninterruptible     = true
                        },
                        NickName = "Fire In Da Hole"
                    },
                    new AttackBehaviorGroup.AttackGroupItem()
                    {
                        Probability = 1.5f,
                        Behavior    = new TeleportBehavior()
                        {
                            AttackableDuringAnimation = true,

                            AllowCrossRoomTeleportation  = false,
                            teleportRequiresTransparency = false,
                            hasOutlinesDuringAnim        = true,
                            ManuallyDefineRoom           = false,
                            StayOnScreen = true,
                            AvoidWalls   = true,
                            GoneTime     = 0.7f,
                            OnlyTeleportIfPlayerUnreachable = false,
                            MinDistanceFromPlayer           = 7f,
                            MaxDistanceFromPlayer           = -1f,

                            teleportInBulletScript  = new CustomBulletScriptSelector(typeof(PoofScript)),
                            teleportOutBulletScript = new CustomBulletScriptSelector(typeof(PoofScript)),
                            AttackCooldown          = 5f,
                            InitialCooldown         = 0f,
                            RequiresLineOfSight     = false,
                            roomMax        = new Vector2(0, 0),
                            roomMin        = new Vector2(0, 0),
                            GlobalCooldown = 0.5f,
                            Cooldown       = 1f,

                            InitialCooldownVariance = 0f,
                            goneAttackBehavior      = null,
                            IsBlackPhantom          = false,
                            GroupName                  = null,
                            GroupCooldown              = 0f,
                            MinRange                   = 3,
                            Range                      = 10,
                            MinHealthThreshold         = 0,
                            AccumulateHealthThresholds = true,
                            targetAreaStyle            = null,
                            HealthThresholds           = new float[0],
                            MinWallDistance            = 1,
                        },
                        NickName = "Flameport"
                    },

                    new AttackBehaviorGroup.AttackGroupItem()
                    {
                        Probability = 0.5f,
                        Behavior    = new ShootBehavior {
                            ShootPoint          = m_CachedGunAttachPoint,
                            BulletScript        = new CustomBulletScriptSelector(typeof(ShotgunBall)),
                            LeadAmount          = 0f,
                            TellAnimation       = "eyes",
                            AttackCooldown      = 4.5f,
                            RequiresLineOfSight = false,
                            StopDuring          = ShootBehavior.StopType.Attack,
                            Uninterruptible     = true
                        },
                        NickName = "Large Shotgunball"
                    },
                };


                bs.InstantFirstTick                         = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                             = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                          = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce                   = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection          = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection                  = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator                 = behaviorSpeculator.SkipTimingDifferentiator;
                companion.aiActor.CollisionSetsPlayerOnFire = true;
                companion.aiActor.EffectResistances         = new ActorEffectResistance[] { new ActorEffectResistance()
                                                                                            {
                                                                                                resistAmount = 1, resistType = EffectResistanceType.Fire
                                                                                            }, };
                Game.Enemies.Add("cak:flamechamber", companion.aiActor);
            }
        }
コード例 #29
0
        public static void BuildPrefab()
        {
            // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93");
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("mimekin", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 200;
                companion.aiActor.MovementSpeed                = 2f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow          = false;
                companion.aiActor.IgnoreForRoomClear = false;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(25f);
                companion.aiActor.CollisionKnockbackStrength = 5f;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(25f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 12,
                    ManualHeight           = 26,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 12,
                    ManualHeight           = 26,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle",
                        "idle_two"
                    }
                };
                bool flag3 = RoyalJesterletCollection == null;
                if (flag3)
                {
                    RoyalJesterletCollection = SpriteBuilder.ConstructCollection(prefab, "RoyalJesterlet_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(RoyalJesterletCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], RoyalJesterletCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, RoyalJesterletCollection, new List <int>
                    {
                        2,
                        3
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, RoyalJesterletCollection, new List <int>
                    {
                        0,
                        1
                    }, "idle_two", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                }
                var bs = prefab.GetComponent <BehaviorSpeculator>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;
                bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors    = behaviorSpeculator.OtherBehaviors;
                bs.TargetBehaviors   = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = false,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f
                    }
                };
                shootpoint = new GameObject("f**k");
                shootpoint.transform.parent   = companion.transform;
                shootpoint.transform.position = companion.sprite.WorldCenter;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject;
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint          = m_CachedGunAttachPoint,
                        BulletScript        = new CustomBulletScriptSelector(typeof(TransparentBulletScript)),
                        LeadAmount          = 0f,
                        InitialCooldown     = 3f,
                        AttackCooldown      = 5f,
                        RequiresLineOfSight = false,
                        ChargeTime          = 1f,
                        Uninterruptible     = true
                    },
                };
                bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                Game.Enemies.Add("cak:mimekin", companion.aiActor);
                SpriteBuilder.AddSpriteToCollection("CakeMod/Resources/mimekin/mime_left_001", SpriteBuilder.ammonomiconCollection);
                if (companion.GetComponent <EncounterTrackable>() != null)
                {
                    UnityEngine.Object.Destroy(companion.GetComponent <EncounterTrackable>());
                }
                companion.encounterTrackable               = companion.gameObject.AddComponent <EncounterTrackable>();
                companion.encounterTrackable.journalData   = new JournalEntry();
                companion.encounterTrackable.EncounterGuid = "cak:mimekin";
                companion.encounterTrackable.prerequisites = new DungeonPrerequisite[0];
                companion.encounterTrackable.journalData.SuppressKnownState    = false;
                companion.encounterTrackable.journalData.IsEnemy               = true;
                companion.encounterTrackable.journalData.SuppressInAmmonomicon = false;
                companion.encounterTrackable.ProxyEncounterGuid              = "";
                companion.encounterTrackable.journalData.AmmonomiconSprite   = "CakeMod/Resources/mimekin/mime_left_001";
                companion.encounterTrackable.journalData.enemyPortraitSprite = ItemAPI.ResourceExtractor.GetTextureFromResource("CakeMod\\Resources\\mimepic.png");
                ItemsMod.Strings.Enemies.Set("#THE_MIME", "Mime Kin");
                ItemsMod.Strings.Enemies.Set("#THE_MIME_SHORTDESC", "Invisible Man");
                ItemsMod.Strings.Enemies.Set("#THE_MIME_LONGDESC", "Masters of mimicking and mimery, these clever bullets use their connection to a silent force to enchant bullets with a fraction of their power.");
                companion.encounterTrackable.journalData.PrimaryDisplayName           = "#THE_MIME";
                companion.encounterTrackable.journalData.NotificationPanelDescription = "#THE_MIME_SHORTDESC";
                companion.encounterTrackable.journalData.AmmonomiconFullEntry         = "#THE_MIME_LONGDESC";
                EnemyBuilder.AddEnemyToDatabase(companion.gameObject, "cak:mimekin");
                EnemyDatabase.GetEntry("cak:mimekin").ForcedPositionInAmmonomicon = 32;
                EnemyDatabase.GetEntry("cak:mimekin").isInBossTab   = false;
                EnemyDatabase.GetEntry("cak:mimekin").isNormalEnemy = true;
            }
        }
コード例 #30
0
        public static void BuildPrefab()
        {
            if (pikaPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                Tools.PrintError("Tried to make the same Pikachu prefab twice!");
                return;
            }

            pikaPrefab = CompanionBuilder.BuildPrefab("Pikachu", guid, spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
            var pika = pikaPrefab.AddComponent <PikaBehavior>();

            var aiAnimator = pika.aiAnimator;

            aiAnimator.MoveAnimation = new DirectionalAnimation()
            { //animation
                Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                Flipped   = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None, DirectionalAnimation.FlipType.None },
                AnimNames = new string[] { "run_right", "run_left" },
            };

            aiAnimator.IdleAnimation = new DirectionalAnimation()
            {
                Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                Flipped   = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None, DirectionalAnimation.FlipType.None },
                AnimNames = new string[] { "idle_right", "idle_left" },
            };


            var attackAnim = new DirectionalAnimation()
            {
                Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                Flipped   = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None, DirectionalAnimation.FlipType.None },
                AnimNames = new string[] { "attack_right", "attack_left" },
            };

            aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>()
            {
                new AIAnimator.NamedDirectionalAnimation()
                {
                    name = "attack",
                    anim = attackAnim
                }
            };

            if (pikaCollection == null)
            {
                pikaCollection = SpriteBuilder.ConstructCollection(pikaPrefab, "Pikachu_Collection");
                GameObject.DontDestroyOnLoad(pikaCollection);
                for (int i = 0; i < spritePaths.Length; i++)
                {
                    SpriteBuilder.AddSpriteToCollection(spritePaths[i], pikaCollection);
                }
                SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>()
                {
                    0, 1, 2, 3
                }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5;
                SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>()
                {
                    4, 5, 6, 7
                }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5;
                SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>()
                {
                    8, 9, 10, 11, 12, 13
                }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 10;
                SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>()
                {
                    14, 15, 16, 17, 18, 19
                }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 10;
                SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>()
                {
                    20, 21
                }, "attack_left", tk2dSpriteAnimationClip.WrapMode.RandomLoop).fps = 20;
                SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>()
                {
                    22, 23
                }, "attack_right", tk2dSpriteAnimationClip.WrapMode.RandomLoop).fps = 20;
            }


            pika.aiActor.MovementSpeed = 7f;
            pika.specRigidbody.Reinitialize();

            var bs = pika.behaviorSpeculator;

            bs.AttackBehaviors.Add(new ElectricityAttackBehavior());
            bs.MovementBehaviors.Add(new ApproachEnemiesBehavior());
            bs.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()
            {
                IdleAnimations = new string[] { "idle" }
            });

            GameObject.DontDestroyOnLoad(pikaPrefab);
            FakePrefab.MarkAsFakePrefab(pikaPrefab);
            pikaPrefab.SetActive(false);
        }