/// <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); } }
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); }
// 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); }
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); }
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); }
/// <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); }
// 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)); }
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); }
// 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); }
// 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); }
// 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); }
// 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); }
// Token: 0x06000006 RID: 6 RVA: 0x0000224C File Offset: 0x0000044C public static int AddToAmmonomicon(tk2dSpriteDefinition spriteDefinition) { return(SpriteBuilder.AddSpriteToCollection(spriteDefinition, SpriteBuilder.ammonomiconCollection)); }
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); }
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); }
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); }