Пример #1
0
        private void RandomToadieAirDrop(GameObject lootCratePrefab, RoomHandler currentRoom, IntVector2?Clearence = null)
        {
            if (!Clearence.HasValue)
            {
                Clearence = new IntVector2(2, 2);
            }

            IntVector2?DropLocation = FindRandomDropLocation(currentRoom, Clearence.Value);

            if (DropLocation.HasValue)
            {
                EmergencyCrateController lootCrate = Instantiate(lootCratePrefab, DropLocation.Value.ToVector2().ToVector3ZUp(1f), Quaternion.identity).GetComponent <EmergencyCrateController>();
                if (lootCrate == null)
                {
                    return;
                }

                lootCrate.ChanceToExplode    = 0;
                lootCrate.ChanceToSpawnEnemy = 1;
                lootCrate.EnemyPlaceable     = m_CustomEnemyPlacable(BraveUtility.RandomElement(ToadieGUIDs));

                lootCrate.Trigger(new Vector3(-5f, -5f, -5f), DropLocation.Value.ToVector3() + new Vector3(15f, 15f, 15f), currentRoom, true);
                currentRoom.ExtantEmergencyCrate = lootCrate.gameObject;
            }
            return;
        }
Пример #2
0
        private void SpawnCrate(int item)
        {
            GameObject gameObject                = (GameObject)BraveResources.Load("EmergencyCrate", ".prefab");
            GameObject gameObject2               = UnityEngine.Object.Instantiate <GameObject>(gameObject);
            EmergencyCrateController component   = gameObject2.GetComponent <EmergencyCrateController>();
            SimplerCrateBehaviour    simpleCrate = component.TurnIntoSimplerCrate();

            simpleCrate.LootID = item;

            IntVector2 bestRewardLocation = LastOwner.CurrentRoom.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true);

            simpleCrate.Trigger(new Vector3(-5f, -5f, -5f), bestRewardLocation.ToVector3() + new Vector3(15f, 15f, 15f), LastOwner.CurrentRoom);
            LastOwner.CurrentRoom.ExtantEmergencyCrate = gameObject2;
        }
        public void SpawnAirDrop(IntVector2 roomVector, GenericLootTable overrideTable = null, float EnemyOdds = 0f, float ExplodeOdds = 0f, bool playSoundFX = true, bool usePlayerPosition = true, string EnemyGUID = "01972dee89fc4404a5c408d50007dad5")
        {
            EmergencyCrateController lootCrate = Instantiate(EmergancyCratePrefab, roomVector.ToVector2().ToVector3ZUp(1f), Quaternion.identity).GetComponent <EmergencyCrateController>();
            Dungeon          dungeon           = GameManager.Instance.Dungeon;
            PlayerController player            = GameManager.Instance.PrimaryPlayer;
            RoomHandler      currentRoom       = GameManager.Instance.PrimaryPlayer.CurrentRoom;
            IntVector2       currentRoomSize   = currentRoom.area.dimensions;
            int RoomSizeX = currentRoomSize.x;
            int RoomSizeY = currentRoomSize.y;

            lootCrate.ChanceToExplode    = ExplodeOdds;
            lootCrate.ChanceToSpawnEnemy = EnemyOdds;
            lootCrate.EnemyPlaceable     = CustomEnemyPlacable(EnemyGUID);


            if (overrideTable != null)
            {
                lootCrate.gunTable = overrideTable;
            }

            IntVector2 bestRewardLocation = new IntVector2(1, 1);

            if (RoomSizeX < 8 && RoomSizeY < 8)
            {
                currentRoomSize = bestRewardLocation;
            }

            if (!usePlayerPosition)
            {
                bestRewardLocation = player.CurrentRoom.GetBestRewardLocation(currentRoom.area.dimensions, RoomHandler.RewardLocationStyle.CameraCenter, true);
                lootCrate.Trigger(new Vector3(-5f, -5f, -5f), bestRewardLocation.ToVector3() + new Vector3(15f, 15f, 15f), player.CurrentRoom, overrideTable == null);
                GameManager.Instance.Dungeon.data[bestRewardLocation].PreventRewardSpawn = true;
            }
            else
            {
                bestRewardLocation = player.CurrentRoom.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true);
                lootCrate.Trigger(new Vector3(-5f, -5f, -5f), bestRewardLocation.ToVector3() + new Vector3(15f, 15f, 15f), player.CurrentRoom, overrideTable == null);
                GameManager.Instance.Dungeon.data[bestRewardLocation].PreventRewardSpawn = true;
            }

            dungeon.data[bestRewardLocation].PreventRewardSpawn = true;
            player.CurrentRoom.ExtantEmergencyCrate             = lootCrate.gameObject;
            if (playSoundFX)
            {
                AkSoundEngine.PostEvent("Play_OBJ_supplydrop_activate_01", player.CurrentRoom.ExtantEmergencyCrate);
            }
            return;
        }
        public static SimplerCrateBehaviour TurnIntoSimplerCrate(this EmergencyCrateController self)
        {
            GameObject obj = self.gameObject;

            if (obj != null)
            {
                SimplerCrateBehaviour newCrateBehav = obj.AddComponent <SimplerCrateBehaviour>();
                newCrateBehav.driftAnimationName          = self.driftAnimationName;
                newCrateBehav.landedAnimationName         = self.landedAnimationName;
                newCrateBehav.chuteLandedAnimationName    = self.chuteLandedAnimationName;
                newCrateBehav.crateDisappearAnimationName = self.crateDisappearAnimationName;
                newCrateBehav.chuteAnimator       = self.chuteAnimator;
                newCrateBehav.landingTargetSprite = self.landingTargetSprite;

                UnityEngine.Object.Destroy(self);
                return(newCrateBehav);
            }
            else
            {
                return(null);
            }
        }
Пример #5
0
        private IEnumerator Trigger()
        {
            if (m_triggered)
            {
                yield break;
            }
            if (!string.IsNullOrEmpty(TriggerAnimation))
            {
                spriteAnimator.Play(TriggerAnimation);
            }
            if (!string.IsNullOrEmpty(TriggerSFX))
            {
                AkSoundEngine.PostEvent(TriggerSFX, gameObject);
            }
            m_triggered = true;
            Vector2 SpawnOffset = Vector2.zero;

            if (EnemySpawnOffset.HasValue)
            {
                SpawnOffset = EnemySpawnOffset.Value;
            }
            if (TriggerVFX)
            {
                SpawnManager.SpawnVFX(TriggerVFX, specRigidbody.UnitCenter + SpawnOffset, Quaternion.identity);
            }
            if (useAirDropSpawn)
            {
                EmergencyCrateController spawnedEnemyCrate = null;
                if (!EnemySpawnPlacableOverride)
                {
                    RobotDaveIdea targetIdea     = (!GameManager.Instance.Dungeon.UsesCustomFloorIdea) ? GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultProceduralIdea : GameManager.Instance.Dungeon.FloorIdea;
                    GameObject    eCrateInstance = ExpandUtility.SpawnAirDrop(m_room, sprite.WorldCenter, null, targetIdea.ValidEasyEnemyPlaceables[UnityEngine.Random.Range(0, targetIdea.ValidEasyEnemyPlaceables.Length)], 0.2f);
                    if (eCrateInstance)
                    {
                        spawnedEnemyCrate = eCrateInstance.GetComponent <EmergencyCrateController>();
                    }
                    // spawnedEnemyCrate = EnemyAirDrop(m_room, sprite.WorldCenter, targetIdea.ValidEasyEnemyPlaceables[UnityEngine.Random.Range(0, targetIdea.ValidEasyEnemyPlaceables.Length)]);
                }
                else
                {
                    // spawnedEnemyCrate = EnemyAirDrop(m_room, sprite.WorldCenter, EnemySpawnPlacableOverride);
                    GameObject eCrateInstance = ExpandUtility.SpawnAirDrop(m_room, sprite.WorldCenter, null, EnemySpawnPlacableOverride, 0.2f);
                    if (eCrateInstance)
                    {
                        spawnedEnemyCrate = eCrateInstance.GetComponent <EmergencyCrateController>();
                    }
                }
                if (!m_room.IsSealed && spawnedEnemyCrate)
                {
                    m_room.npcSealState = RoomHandler.NPCSealState.SealAll;
                    m_room.SealRoom();
                }
                yield return(new WaitForSeconds(2.25f));

                DestroyMushroom(false);
                if (spawnedEnemyCrate)
                {
                    while (ReflectionHelpers.ReflectGetField <bool?>(typeof(EmergencyCrateController), "m_hasBeenTriggered", spawnedEnemyCrate).HasValue&& ReflectionHelpers.ReflectGetField <bool?>(typeof(EmergencyCrateController), "m_hasBeenTriggered", spawnedEnemyCrate).Value)
                    {
                        if (!spawnedEnemyCrate)
                        {
                            break;
                        }
                        yield return(null);
                    }
                }
                yield return(new WaitForSeconds(1f));

                m_room.npcSealState = RoomHandler.NPCSealState.SealNone;
                if (spriteAnimator.IsPlaying(BreakAnimation))
                {
                    while (spriteAnimator.IsPlaying(BreakAnimation))
                    {
                        yield return(null);
                    }
                }
                Destroy(gameObject);
            }
            else
            {
                AIActor selectedEnemy = null;
                if (EnemySpawnPlacableOverride)
                {
                    DungeonPlaceableVariant enemyVariant = EnemySpawnPlacableOverride.SelectFromTiersFull();
                    selectedEnemy = enemyVariant.GetOrLoadPlaceableObject.GetComponent <AIActor>();
                }
                else
                {
                    RobotDaveIdea           targetIdea           = (!GameManager.Instance.Dungeon.UsesCustomFloorIdea) ? GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultProceduralIdea : GameManager.Instance.Dungeon.FloorIdea;
                    DungeonPlaceable        backupEnemyPlaceable = targetIdea.ValidEasyEnemyPlaceables[UnityEngine.Random.Range(0, targetIdea.ValidEasyEnemyPlaceables.Length)];
                    DungeonPlaceableVariant enemyVariant         = backupEnemyPlaceable.SelectFromTiersFull();
                }
                if (selectedEnemy)
                {
                    AIActor targetAIActor = AIActor.Spawn(selectedEnemy, specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor) + SpawnOffset.ToIntVector2(), m_room, true, AIActor.AwakenAnimationType.Spawn, true);
                    targetAIActor.reinforceType = AIActor.ReinforceType.SkipVfx;
                    targetAIActor.HandleReinforcementFallIntoRoom(0.8f);
                    if (!m_room.IsSealed)
                    {
                        m_room.SealRoom();
                    }
                    while (targetAIActor.IsGone)
                    {
                        yield return(null);
                    }
                    DestroyMushroom();
                }
            }
            yield break;
        }