private void RemoveJammedEffect(AIActor companion) { if (companion.IsBlackPhantom) { companion.UnbecomeBlackPhantom(); } }
private void DoSpawn() { DisplacedEnemy enemy = BraveUtility.RandomElement(listOfDisplacedEnemies.DisplacedEnemies); var Enemy = EnemyDatabase.GetOrLoadByGuid(enemy.GUID); IntVector2?bestRewardLocation = m_player.CurrentRoom.GetRandomVisibleClearSpot(2, 2); AIActor TargetActor = AIActor.Spawn(Enemy.aiActor, bestRewardLocation.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(bestRewardLocation.Value), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); if (TargetActor.IsBlackPhantom && !enemy.ISJAMMED) { TargetActor.UnbecomeBlackPhantom(); } else if (!TargetActor.IsBlackPhantom && enemy.ISJAMMED) { TargetActor.BecomeBlackPhantom(); } TargetActor.healthHaver.ForceSetCurrentHealth(enemy.HEALTH); listOfDisplacedEnemies.DisplacedEnemies.Remove(enemy); AkSoundEngine.PostEvent("Play_OBJ_chestwarp_use_01", gameObject); var tpvfx = (PickupObjectDatabase.GetById(573) as ChestTeleporterItem).TeleportVFX; SpawnManager.SpawnVFX(tpvfx, TargetActor.sprite.WorldCenter, Quaternion.identity, true); }
protected override void DoEffect(PlayerController user) { List <AIActor> activeEnemies = user.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All); if (activeEnemies != null) { for (int i = 0; i < activeEnemies.Count; i++) { AIActor aiactor = activeEnemies[i]; if (aiactor.IsBlackPhantom) { aiactor.UnbecomeBlackPhantom(); } } } foreach (Projectile proj in StaticReferenceManager.AllProjectiles) { if (proj && proj.isActiveAndEnabled && !(proj.Owner is PlayerController)) { if (proj.IsBlackBullet) { proj.ReturnFromBlackBullet(); } } } Projectile.BaseEnemyBulletSpeedMultiplier *= 0.5f; StartCoroutine(ItemBuilder.HandleDuration(this, duration, user, EndEffect)); }
public override ContinuousBehaviorResult ContinuousUpdate() { if (this.m_state == FriendlyMirrorImageBehavior.State.Summoning) { if (this.m_timer <= 0f) { int num = Mathf.Min(this.NumImages, this.MaxImages - this.m_allImages.Count); for (int i = 0; i < num; i++) { AIActor aiactor = UnityEngine.Object.Instantiate(this.m_enemyPrefab.gameObject, this.m_aiActor.transform.position, Quaternion.identity).GetComponent <AIActor>(); CompanionController orAddComponent = aiactor.gameObject.GetOrAddComponent <CompanionController>(); if (IsBlackPhantom) { aiactor.gameObject.GetComponent <AIActor>().BecomeBlackPhantom(); } orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(base.m_aiActor.CompanionOwner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); if (orAddComponent.healthHaver != null) { orAddComponent.healthHaver.PreventAllDamage = true; } if (orAddComponent.bulletBank != null) { orAddComponent.bulletBank.OnProjectileCreated += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } if (orAddComponent.aiShooter != null) { orAddComponent.aiShooter.PostProcessProjectile += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } aiactor.HitByEnemyBullets = true; aiactor.transform.position = this.m_aiActor.transform.position; aiactor.specRigidbody.Reinitialize(); aiactor.IsGone = true; aiactor.specRigidbody.CollideWithOthers = false; if (!string.IsNullOrEmpty(this.MirrorDeathAnim)) { aiactor.aiAnimator.OtherAnimations.Find((AIAnimator.NamedDirectionalAnimation a) => a.name == "death").anim.Prefix = this.MirrorDeathAnim; } aiactor.PreventBlackPhantom = true; if (aiactor.IsBlackPhantom) { aiactor.UnbecomeBlackPhantom(); } this.m_actorsToSplit.Add(aiactor); this.m_allImages.Add(aiactor); aiactor.aiAnimator.healthHaver.SetHealthMaximum(this.MirrorHealth * AIActor.BaseLevelHealthModifier, null, false); MirrorImageController mirrorImageController = aiactor.gameObject.AddComponent <MirrorImageController>(); mirrorImageController.SetHost(this.m_aiActor); for (int j = 0; j < this.MirroredAnims.Length; j++) { mirrorImageController.MirrorAnimations.Add(this.MirroredAnims[j]); } if (this.AnimRequiresTransparency) { aiactor.sprite.usesOverrideMaterial = true; aiactor.procedurallyOutlined = false; aiactor.SetOutlines(false); aiactor.renderer.material.shader = ShaderCache.Acquire("Brave/LitBlendUber"); } } this.m_startAngle = UnityEngine.Random.Range(0f, 360f); this.m_state = FriendlyMirrorImageBehavior.State.Splitting; this.m_timer = this.SplitDelay; return(ContinuousBehaviorResult.Continue); } } else if (this.m_state == FriendlyMirrorImageBehavior.State.Splitting) { float num2 = 360f / (float)this.m_actorsToSplit.Count; for (int k = 0; k < this.m_actorsToSplit.Count; k++) { this.m_actorsToSplit[k].BehaviorOverridesVelocity = true; this.m_actorsToSplit[k].BehaviorVelocity = BraveMathCollege.DegreesToVector(this.m_startAngle + num2 * (float)k, this.SplitDistance / this.SplitDelay); } if (this.m_timer <= 0f) { return(ContinuousBehaviorResult.Finished); } } return(ContinuousBehaviorResult.Continue); }
private void Update() { RoomHandler currentRoom = GameManager.Instance.PrimaryPlayer.CurrentRoom; List <AIActor> activeEnemies = currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All); Vector2 vector = Vector2.zero; Vector2 b = Vector2.zero; float num; if (GameManager.Instance.PrimaryPlayer.CurrentGun && !GameManager.Instance.PrimaryPlayer.IsGhost) { num = GameManager.Instance.PrimaryPlayer.CurrentGun.CurrentAngle; } else { num = BraveMathCollege.Atan2Degrees(GameManager.Instance.PrimaryPlayer.unadjustedAimPoint.XY()); } vector = GameManager.Instance.PrimaryPlayer.CenterPosition; float a; if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { if (GameManager.Instance.SecondaryPlayer.CurrentGun && !GameManager.Instance.SecondaryPlayer.IsGhost) { a = GameManager.Instance.SecondaryPlayer.CurrentGun.CurrentAngle; } else { a = BraveMathCollege.Atan2Degrees(GameManager.Instance.SecondaryPlayer.unadjustedAimPoint.XY()); } b = GameManager.Instance.SecondaryPlayer.CenterPosition; } else { b = vector; a = num; } for (int i = 0; i < activeEnemies.Count; i++) { AIActor aiactor = activeEnemies[i]; if (aiactor && aiactor.healthHaver && aiactor.IsNormalEnemy && !aiactor.healthHaver.IsBoss && !aiactor.healthHaver.IsDead) { Vector2 centerPosition = aiactor.CenterPosition; float b2 = BraveMathCollege.Atan2Degrees(centerPosition - vector); float b3 = BraveMathCollege.Atan2Degrees(centerPosition - b); bool flag = BraveMathCollege.AbsAngleBetween(num, b2) < ConeAngle || BraveMathCollege.AbsAngleBetween(a, b3) < ConeAngle; if (flag) { if (aiactor.behaviorSpeculator) { aiactor.behaviorSpeculator.Stun(0.25f, false); } if (aiactor.IsBlackPhantom) { aiactor.UnbecomeBlackPhantom(); } aiactor.RegisterOverrideColor(new Color(0.4f, 0.4f, 0.33f, 1), "Turn to Stone"); } else if (!aiactor.IsBlackPhantom) { aiactor.DeregisterOverrideColor("Turn to Stone"); aiactor.BecomeBlackPhantom(); } } } }
public static AIActor AdvancedTransmogrify(this AIActor startEnemy, AIActor EnemyPrefab, GameObject EffectVFX, string audioEvent = "Play_ENM_wizardred_appear_01", bool ignoreAlreadyTransmogged = false, bool canTransmogMimics = false, bool defuseExplosives = true, bool carryOverRewards = false, bool maintainHealthPercent = false, bool maintainsJammedState = false, bool giveIsTransmogrifiedBool = true, bool logEverything = false) { if (startEnemy == null) { Debug.LogError("Tried to transmog a null enemy!"); return(null); } if (EnemyPrefab == null) { Debug.LogError("Tried to transmog to a null prefab!"); return(startEnemy); } if (startEnemy.EnemyGuid == EnemyPrefab.EnemyGuid) { if (logEverything) { Debug.Log($"Tried to transmog an enemy into an actor with the same guid!"); } return(startEnemy); } if (ignoreAlreadyTransmogged && startEnemy.IsTransmogrified) { if (logEverything) { Debug.Log("Tried to transmog an enemy that has already been transmogged."); } return(startEnemy); } if (!startEnemy.healthHaver || startEnemy.healthHaver.IsBoss || startEnemy.ParentRoom == null) { if (logEverything) { Debug.Log("Either the healthhaver or parent room on the target was null, or they were a boss!"); } return(startEnemy); } Vector2 centerPosition = startEnemy.CenterPosition; if (EffectVFX != null) { SpawnManager.SpawnVFX(EffectVFX, centerPosition, Quaternion.identity); } AIActor aiactor = AIActor.Spawn(EnemyPrefab, centerPosition.ToIntVector2(VectorConversions.Floor), startEnemy.ParentRoom, true, AIActor.AwakenAnimationType.Default, true); if (aiactor) { if (giveIsTransmogrifiedBool) { aiactor.IsTransmogrified = true; } if (maintainHealthPercent) { float healthPercent = startEnemy.healthHaver.GetCurrentHealthPercentage(); //ETGModConsole.Log("HP Percent: " + healthPercent); float aiactorHP = aiactor.healthHaver.GetMaxHealth(); float resultHP = aiactorHP * healthPercent; aiactor.healthHaver.ForceSetCurrentHealth(resultHP); } } if (!string.IsNullOrEmpty(audioEvent)) { AkSoundEngine.PostEvent(audioEvent, startEnemy.gameObject); } if (maintainsJammedState) { if (startEnemy.IsBlackPhantom && !aiactor.IsBlackPhantom) { aiactor.BecomeBlackPhantom(); } if (!startEnemy.IsBlackPhantom && aiactor.IsBlackPhantom) { aiactor.UnbecomeBlackPhantom(); } } if (defuseExplosives && startEnemy.GetComponent <ExplodeOnDeath>() != null) { UnityEngine.Object.Destroy(startEnemy.GetComponent <ExplodeOnDeath>()); } if (carryOverRewards && aiactor) { aiactor.CanDropCurrency = startEnemy.CanDropCurrency; aiactor.AssignedCurrencyToDrop = startEnemy.AssignedCurrencyToDrop; aiactor.AdditionalSafeItemDrops = startEnemy.AdditionalSafeItemDrops; aiactor.AdditionalSimpleItemDrops = startEnemy.AdditionalSimpleItemDrops; aiactor.AdditionalSingleCoinDropChance = startEnemy.AdditionalSingleCoinDropChance; aiactor.CanDropDuplicateItems = startEnemy.CanDropDuplicateItems; aiactor.CanDropItems = startEnemy.CanDropItems; aiactor.ChanceToDropCustomChest = startEnemy.ChanceToDropCustomChest; aiactor.CustomLootTableMaxDrops = startEnemy.CustomLootTableMaxDrops; aiactor.CustomLootTableMinDrops = startEnemy.CustomLootTableMinDrops; aiactor.CustomLootTable = startEnemy.CustomLootTable; aiactor.SpawnLootAtRewardChestPos = startEnemy.SpawnLootAtRewardChestPos; if (startEnemy.GetComponent <KeyBulletManController>()) { KeyBulletManController controller = startEnemy.GetComponent <KeyBulletManController>(); int numberOfIterations = 1; if (startEnemy.IsBlackPhantom && controller.doubleForBlackPhantom) { numberOfIterations++; } for (int i = 0; i < numberOfIterations; i++) { GameObject objToAdd = null; if (controller.lootTable) { objToAdd = controller.lootTable.SelectByWeight(false); } else if (controller.lookPickupId > -1) { objToAdd = PickupObjectDatabase.GetById(controller.lookPickupId).gameObject; } if (objToAdd != null) { aiactor.AdditionalSafeItemDrops.Add(objToAdd.GetComponent <PickupObject>()); } } } startEnemy.EraseFromExistence(false); } else { startEnemy.EraseFromExistenceWithRewards(false); } return(aiactor); }