Exemple #1
0
        /// <summary>
        /// Finishes the item setup, adds it to the item databases, adds an encounter trackable
        /// blah, blah, blah
        /// </summary>
        public static void SetupItem(this PickupObject item, string shortDesc, string longDesc, string idPool = "ItemAPI")
        {
            try
            {
                item.encounterTrackable = null;

                ETGMod.Databases.Items.SetupItem(item, item.name);
                SpriteBuilder.AddToAmmonomicon(item.sprite.GetCurrentSpriteDef());
                item.encounterTrackable.journalData.AmmonomiconSprite = item.sprite.GetCurrentSpriteDef().name;

                item.SetName(item.name);
                item.SetShortDescription(shortDesc);
                item.SetLongDescription(longDesc);

                if (item is PlayerItem)
                {
                    (item as PlayerItem).consumable = false;
                }
                Gungeon.Game.Items.Add(idPool + ":" + item.name.ToLower().Replace(" ", "_"), item);
                ETGMod.Databases.Items.Add(item);
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.Message);
                ETGModConsole.Log(e.StackTrace);
            }
        }
Exemple #2
0
        public static tk2dSpriteAnimationClip BuildAnimation(AIAnimator aiAnimator, string name, string spriteDirectory, int fps, tk2dSpriteAnimationClip.WrapMode wrapMode = tk2dSpriteAnimationClip.WrapMode.Loop)
        {
            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.Loop);

            clip.fps      = fps;
            clip.wrapMode = wrapMode;
            return(clip);
        }
        /// <summary>
        /// Adds a tk2dSprite component to an object and adds that sprite to the
        /// ammonomicon for later use. If obj is null, returns a new GameObject with the sprite
        /// </summary>
        public static GameObject AddSpriteToObject(string name, string resourcePath, GameObject obj = null)
        {
            GameObject spriteObject = SpriteBuilder.SpriteFromResource(resourcePath, obj);

            spriteObject.name = name;
            return(spriteObject);
        }
Exemple #4
0
        // Token: 0x060000BF RID: 191 RVA: 0x000083B8 File Offset: 0x000065B8
        public static tk2dSpriteAnimationClip BuildAnimation(AIAnimator aiAnimator, string name, string spriteDirectory, int fps)
        {
            tk2dSpriteCollectionData tk2dSpriteCollectionData = aiAnimator.GetComponent <tk2dSpriteCollectionData>();
            bool flag = !tk2dSpriteCollectionData;

            if (flag)
            {
                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 flag2 = resourceNames[i].StartsWith(spriteDirectory.Replace('/', '.'), StringComparison.OrdinalIgnoreCase);
                if (flag2)
                {
                    list.Add(SpriteBuilder.AddSpriteToCollection(resourceNames[i], tk2dSpriteCollectionData));
                }
            }
            tk2dSpriteAnimationClip tk2dSpriteAnimationClip = SpriteBuilder.AddAnimation(aiAnimator.spriteAnimator, tk2dSpriteCollectionData, list, name, tk2dSpriteAnimationClip.WrapMode.Loop);

            tk2dSpriteAnimationClip.fps = (float)fps;
            return(tk2dSpriteAnimationClip);
        }
Exemple #5
0
 public static void SetupEntry(this AIActor enemy, string shortDesc, string longDesc, string portrait, string AmmonomiconSprite, string EnemyName)
 {
     SpriteBuilder.AddSpriteToCollection(AmmonomiconSprite, SpriteBuilder.ammonomiconCollection);
     if (enemy.GetComponent <EncounterTrackable>() != null)
     {
         UnityEngine.Object.Destroy(enemy.GetComponent <EncounterTrackable>());
     }
     enemy.encounterTrackable               = enemy.gameObject.AddComponent <EncounterTrackable>();
     enemy.encounterTrackable.journalData   = new JournalEntry();
     enemy.encounterTrackable.EncounterGuid = enemy.EnemyGuid;
     enemy.encounterTrackable.prerequisites = new DungeonPrerequisite[0];
     enemy.encounterTrackable.journalData.SuppressKnownState    = false;
     enemy.encounterTrackable.journalData.IsEnemy               = true;
     enemy.encounterTrackable.journalData.SuppressInAmmonomicon = false;
     enemy.encounterTrackable.journalData.AmmonomiconSprite     = AmmonomiconSprite;
     enemy.encounterTrackable.journalData.enemyPortraitSprite   = ItemAPI.ResourceExtractor.GetTextureFromResource(portrait + ".png");
     enemy.encounterTrackable.ProxyEncounterGuid = "";
     ItemsMod.Strings.Enemies.Set("#" + EnemyName.ToUpper(), EnemyName);
     ItemsMod.Strings.Enemies.Set("#" + shortDesc.ToUpper(), shortDesc);
     ItemsMod.Strings.Enemies.Set("#" + longDesc.ToUpper(), longDesc);
     enemy.encounterTrackable.journalData.PrimaryDisplayName           = "#" + EnemyName.ToUpper();
     enemy.encounterTrackable.journalData.NotificationPanelDescription = "#" + shortDesc.ToUpper();
     enemy.encounterTrackable.journalData.AmmonomiconFullEntry         = "#" + longDesc.ToUpper();
     enemy.encounterTrackable.journalData.SuppressKnownState           = false;
 }
        public static GameObject SpriteFromTexture(Texture2D texture, string spriteName, GameObject obj = null, bool copyFromExisting = true)
        {
            bool flag = obj == null;

            if (flag)
            {
                obj = new GameObject();
            }
            tk2dSprite tk2dSprite;

            if (copyFromExisting)
            {
                tk2dSprite = obj.AddComponent(SpriteBuilder.baseSprite);
            }
            else
            {
                tk2dSprite = obj.AddComponent <tk2dSprite>();
            }
            int newSpriteId = SpriteBuilder.AddSpriteToCollection(spriteName, SpriteBuilder.itemCollection);

            tk2dSprite.SetSprite(SpriteBuilder.itemCollection, newSpriteId);
            tk2dSprite.SortingOrder = 0;
            obj.GetComponent <BraveBehaviour>().sprite = tk2dSprite;
            return(obj);
        }
Exemple #7
0
        public static GameObject AddSpriteToObject(string name, string resourcePath, GameObject obj = null, bool copyFromExisting = true)
        {
            GameObject gameObject = SpriteBuilder.SpriteFromResource(resourcePath, obj, copyFromExisting);

            FakePrefab.MarkAsFakePrefab(gameObject);
            obj.SetActive(false);
            gameObject.name = name;
            return(gameObject);
        }
Exemple #8
0
        /// <summary>
        /// Adds a tk2dSprite component to an object and adds that sprite to the
        /// ammonomicon for later use. If obj is null, returns a new GameObject with the sprite
        /// </summary>
        public static GameObject AddSpriteToObject(string name, string resourcePath, GameObject obj = null)
        {
            GameObject spriteObject = SpriteBuilder.SpriteFromResource(resourcePath, obj);

            FakePrefab.MarkAsFakePrefab(spriteObject);
            obj.SetActive(false);

            spriteObject.name = name;
            return(spriteObject);
        }
Exemple #9
0
        // Token: 0x06000004 RID: 4 RVA: 0x00002190 File Offset: 0x00000390
        public static int AddSpriteToCollection(string resourcePath, tk2dSpriteCollectionData collection)
        {
            string str = (!resourcePath.EndsWith(".png")) ? ".png" : "";

            resourcePath += str;
            Texture2D            textureFromResource  = ResourceExtractor.GetTextureFromResource(resourcePath);
            tk2dSpriteDefinition tk2dSpriteDefinition = SpriteBuilder.ConstructDefinition(textureFromResource);

            tk2dSpriteDefinition.name = textureFromResource.name;
            return(SpriteBuilder.AddSpriteToCollection(tk2dSpriteDefinition, collection));
        }
Exemple #10
0
        public static void BuildPrefab()
        {
            if (blobPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("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);
        }
Exemple #11
0
        // Token: 0x060000BF RID: 191 RVA: 0x000087B8 File Offset: 0x000069B8
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize)
        {
            bool       flag = CompanionBuilder.companionDictionary.ContainsKey(guid);
            GameObject result;

            if (flag)
            {
                ETGModConsole.Log("CompanionBuilder: Tried to create two companion prefabs with the same GUID!", false);
                result = null;
            }
            else
            {
                GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(CompanionBuilder.behaviorSpeculatorPrefab);
                gameObject.name = name;
                tk2dSprite component = SpriteBuilder.SpriteFromResource(defaultSpritePath, gameObject, false).GetComponent <tk2dSprite>();
                component.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = false;
                gameObject.AddComponent <tk2dSpriteAnimator>();
                gameObject.AddComponent <AIAnimator>();
                HealthHaver healthHaver = gameObject.AddComponent <HealthHaver>();
                healthHaver.RegisterBodySprite(component, false, 0);
                healthHaver.PreventAllDamage = true;
                healthHaver.SetHealthMaximum(15000f, null, false);
                healthHaver.FullHeal();
                AIActor aiactor = gameObject.AddComponent <AIActor>();
                aiactor.State     = AIActor.ActorState.Normal;
                aiactor.EnemyGuid = guid;
                BehaviorSpeculator component2 = gameObject.GetComponent <BehaviorSpeculator>();
                component2.MovementBehaviors = new List <MovementBehaviorBase>();
                component2.AttackBehaviors   = new List <AttackBehaviorBase>();
                component2.TargetBehaviors   = new List <TargetBehaviorBase>();
                component2.OverrideBehaviors = new List <OverrideBehaviorBase>();
                component2.OtherBehaviors    = new List <BehaviorBase>();
                EnemyDatabaseEntry item = new EnemyDatabaseEntry
                {
                    myGuid          = guid,
                    placeableWidth  = 2,
                    placeableHeight = 2,
                    isNormalEnemy   = false
                };
                EnemyDatabase.Instance.Entries.Add(item);
                CompanionBuilder.companionDictionary.Add(guid, gameObject);
                UnityEngine.Object.DontDestroyOnLoad(gameObject);
                FakePrefab.MarkAsFakePrefab(gameObject);
                gameObject.SetActive(false);
                result = gameObject;
            }
            return(result);
        }
Exemple #12
0
        // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
        public static GameObject SpriteFromFile(string spriteName, GameObject obj = null, bool copyFromExisting = true)
        {
            string     fileName        = spriteName.Replace(".png", "");
            Texture2D  textureFromFile = ResourceExtractor.GetTextureFromFile(fileName, ".png");
            bool       flag            = textureFromFile == null;
            GameObject result;

            if (flag)
            {
                result = null;
            }
            else
            {
                result = SpriteBuilder.SpriteFromTexture(textureFromFile, spriteName, obj, copyFromExisting);
            }
            return(result);
        }
Exemple #13
0
        // Token: 0x06000049 RID: 73 RVA: 0x00003EEC File Offset: 0x000020EC
        public static GameObject SpriteFromTexture(Texture2D texture, string spriteName, GameObject obj = null)
        {
            bool flag = obj == null;

            if (flag)
            {
                obj = new GameObject();
            }
            tk2dSprite tk2dSprite  = obj.AddComponent <tk2dSprite>();
            int        newSpriteId = SpriteBuilder.AddSpriteToCollection(spriteName, SpriteBuilder.itemCollection);

            tk2dSprite.SetSprite(SpriteBuilder.itemCollection, newSpriteId);
            tk2dSprite.SortingOrder    = 0;
            tk2dSprite.IsPerpendicular = true;
            obj.GetComponent <BraveBehaviour>().sprite = tk2dSprite;
            return(obj);
        }
Exemple #14
0
        // Token: 0x06000002 RID: 2 RVA: 0x00002098 File Offset: 0x00000298
        public static GameObject SpriteFromResource(string spriteName, GameObject obj = null, bool copyFromExisting = true)
        {
            string     str  = (!spriteName.EndsWith(".png")) ? ".png" : "";
            string     text = spriteName + str;
            Texture2D  textureFromResource = ResourceExtractor.GetTextureFromResource(text);
            bool       flag = textureFromResource == null;
            GameObject result;

            if (flag)
            {
                result = null;
            }
            else
            {
                result = SpriteBuilder.SpriteFromTexture(textureFromResource, text, obj, copyFromExisting);
            }
            return(result);
        }
Exemple #15
0
 // Token: 0x06000006 RID: 6 RVA: 0x0000224C File Offset: 0x0000044C
 public static int AddToAmmonomicon(tk2dSpriteDefinition spriteDefinition)
 {
     return(SpriteBuilder.AddSpriteToCollection(spriteDefinition, SpriteBuilder.ammonomiconCollection));
 }
Exemple #16
0
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize, bool HasAiShooter, bool UsesAttackGroup = false)
        {
            if (BossBuilder.Dictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("BossBuilder: Yea something went wrong. Complain to Neighborino about it.");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = true;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();
            PickupObject item = PickupObjectDatabase.GetById(291);
            //setup knockback
            var knockback = prefab.AddComponent <KnockbackDoer>();

            knockback.weight = 1;
            SpriteBuilder.AddSpriteToCollection("FrostAndGunfireItems/Resources/roomimic_bosscard", SpriteBuilder.ammonomiconCollection);



            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = false;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();


            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State     = AIActor.ActorState.Normal;
            aiActor.EnemyGuid = guid;
            aiActor.HasShadow = false;

            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();
            bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem>();
            if (HasAiShooter)
            {
                var actor = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5");
                behaviorSpeculatorPrefab = GameObject.Instantiate(actor.gameObject);
                foreach (Transform child in behaviorSpeculatorPrefab.transform)
                {
                    if (child != behaviorSpeculatorPrefab.transform)
                    {
                        GameObject.DestroyImmediate(child);
                    }
                }

                foreach (var comp in behaviorSpeculatorPrefab.GetComponents <Component>())
                {
                    if (comp.GetType() != typeof(BehaviorSpeculator))
                    {
                        GameObject.DestroyImmediate(comp);
                    }
                }

                GameObject.DontDestroyOnLoad(behaviorSpeculatorPrefab);
                FakePrefab.MarkAsFakePrefab(behaviorSpeculatorPrefab);
                behaviorSpeculatorPrefab.SetActive(false);
            }
            else
            {
                AIBulletBank aibulletBank = prefab.AddComponent <AIBulletBank>();
            }

            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = true,
                path            = guid,
                isInBossTab     = true,
                encounterGuid   = guid,
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            BossBuilder.Dictionary.Add(guid, prefab);
            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }
Exemple #17
0
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize, bool HasAiShooter, bool UsesAttackGroup = false)
        {
            if (HasAiShooter)
            {
                var actor = EnemyDatabase.GetOrLoadByGuid("3cadf10c489b461f9fb8814abc1a09c1");
                behaviorSpeculatorPrefab = GameObject.Instantiate(actor.gameObject);
                foreach (Transform child in behaviorSpeculatorPrefab.transform)
                {
                    if (child != behaviorSpeculatorPrefab.transform)
                    {
                        GameObject.DestroyImmediate(child);
                    }
                }
                foreach (var comp in behaviorSpeculatorPrefab.GetComponents <Component>())
                {
                    if (comp.GetType() != typeof(BehaviorSpeculator))
                    {
                        GameObject.DestroyImmediate(comp);
                    }
                }
                GameObject.DontDestroyOnLoad(behaviorSpeculatorPrefab);
                FakePrefab.MarkAsFakePrefab(behaviorSpeculatorPrefab);
                behaviorSpeculatorPrefab.SetActive(false);
            }
            if (EnemyBuilder.Dictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("EnemyBuilder: Yea something went wrong. Complain to Neighborino about it.");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = true;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();

            //setup knockback
            var knockback = prefab.AddComponent <KnockbackDoer>();

            knockback.weight = 1;

            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = false;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();

            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State            = AIActor.ActorState.Normal;
            aiActor.EnemyGuid        = guid;
            aiActor.CanTargetPlayers = true;
            aiActor.HasShadow        = false;
            aiActor.specRigidbody.CollideWithOthers  = true;
            aiActor.specRigidbody.CollideWithTileMap = true;
            aiActor.specRigidbody.PixelColliders.Clear();
            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
            });
            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,
            });
            aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject;
            aiActor.PreventBlackPhantom = false;
            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            prefab.AddComponent <Tint>();
            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();
            if (UsesAttackGroup)
            {
                bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem>();
            }
            else
            {
                bs.AttackBehaviors = new List <AttackBehaviorBase>();
            }
            //allows enemies to be tinted
            prefab.AddComponent <AIBulletBank>();
            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry()
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = true
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            EnemyBuilder.Dictionary.Add(guid, prefab);
            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }
Exemple #18
0
        public static void BuildPrefab()
        {
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("Bullet Dog", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 20;
                companion.aiActor.MovementSpeed                = 10f;
                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(6f);
                companion.aiActor.CollisionKnockbackStrength = 5f;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(6f, 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            = 16,
                    ManualHeight           = 16,
                    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            = 16,
                    ManualHeight           = 16,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                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.Single,
                            Flipped   = new DirectionalAnimation.FlipType[1],
                            AnimNames = new string[]
                            {
                                "die",
                            }
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.EightWayOrdinal,
                    Flipped   = new DirectionalAnimation.FlipType[8],
                    AnimNames = new string[]
                    {
                        "run_north",
                        "run_north_east",
                        "run_east",
                        "run_south_east",
                        "run_south",
                        "run_south_west",
                        "run_west",
                        "run_north_west"
                    }
                };
                bool flag3 = BulletDogCollection == null;
                if (flag3)
                {
                    BulletDogCollection = SpriteBuilder.ConstructCollection(prefab, "Bullet_Dog_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(BulletDogCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], BulletDogCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        5,
                        6,
                        7,
                        8,
                        9,
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "run_south_west", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        15,
                        16,
                        17,
                        18,
                        19
                    }, "run_south_east", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                    }, "run_north", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        26,
                        27,
                        28,
                        29,
                        30,
                        31,
                    }, "run_north_west", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        32,
                        33,
                        34,
                        35,
                        36,
                        37
                    }, "run_north_east", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        38,
                        39,
                        40,
                        41,
                        42,
                        43
                    }, "run_west", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        44,
                        45,
                        46,
                        47,
                        48
                    }, "run_east", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        49,
                        50,
                        51,
                        52,
                        53
                    }, "run_south", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, BulletDogCollection, new List <int>
                    {
                        54,
                        55,
                        56,
                        57,
                        58,
                        59
                    }, "die", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                }
                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.MovementBehaviors = new List <MovementBehaviorBase>
                {
                    new SeekTargetBehavior
                    {
                        StopWhenInRange     = false,
                        CustomRange         = 12f,
                        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("cel:bullet_dog", companion.aiActor);
            }
        }
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize)
        {
            if (CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("CompanionBuilder: Tried to create two companion prefabs with the same GUID!");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = false;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();


            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = true;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();

            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State     = AIActor.ActorState.Normal;
            aiActor.EnemyGuid = guid;

            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.AttackBehaviors   = new List <AttackBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();

            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry()
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = false
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            CompanionBuilder.companionDictionary.Add(guid, prefab);


            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }