Ejemplo n.º 1
0
 private void OnPlacement()
 {
     _gridDisplayRenderer.sharedMaterial.SetFloat("_Boolean_ShowGrid", 0f);
     _currentPlaceableObject = null;
     _isDragging             = false;
 }
Ejemplo n.º 2
0
    private void MoveObject(Transform movedTransform, Camera camera)
    {
        Ray ray = camera.ScreenPointToRay(Input.mousePosition);

        if (!Physics.Raycast(ray, out var hitInfo, Mathf.Infinity, _buildingsMask))
        {
            return;
        }
        _gridDisplayRenderer.sharedMaterial.SetVector("_Vector3_GridCullingPosition", hitInfo.point);
        hitInfo.point -= new Vector3(_offsetVec3.x, _offsetVec3.y, _offsetVec3.z);

        Vector3 currentPosition = _currentPlaceableObject.transform.position;
        Vector3 position        = _placementController.MoveObject(hitInfo.point, currentPosition, _offsetVec3);

        movedTransform.position = position;

        // Check position change
        if (!(Math.Abs(position.x - currentPosition.x) < 0.5f) &&
            !(Math.Abs(position.z - currentPosition.z) < 0.5f))
        {
            return;
        }

        SimpleMapPlaceable mapPlaceable    = _currentPlaceableObject.GetComponent <SimpleMapPlaceable>();
        Transform          objectTransform = _currentPlaceableObject.transform;

        if (!mapPlaceable || !mapPlaceable.IsDraggable || !_isDragging)
        {
            return;
        }

        if (_draggedGameObjects.Count == 0)
        {
            _draggedGameObjects.Add(GameObject.Instantiate(_currentPlaceableObject, objectTransform.position,
                                                           objectTransform.rotation));
        }
        else
        {
            Vector3 start      = _draggedGameObjects[0].transform.position;
            Vector3 end        = position;
            Vector3 difference = end - start;
            int     x          = Mathf.RoundToInt(difference.x);
            int     z          = Mathf.RoundToInt(difference.z);

            int neededCount = Mathf.Abs(x) + Mathf.Abs(z);

            // Remove Objects until neededCount is met
            while (_draggedGameObjects.Count >= 1 && _draggedGameObjects.Count > neededCount)
            {
                GameObject.Destroy(_draggedGameObjects[_draggedGameObjects.Count - 1].gameObject);
                _draggedGameObjects.RemoveAt(_draggedGameObjects.Count - 1);
            }

            // Add Objects until neededCount is met
            while (_draggedGameObjects.Count < neededCount)
            {
                _draggedGameObjects.Add(GameObject.Instantiate(_currentPlaceableObject,
                                                               objectTransform.position,
                                                               objectTransform.rotation));
            }

            for (int i = 1; i < _draggedGameObjects.Count; i++)
            {
                MapPlaceable draggedObject = _draggedGameObjects[i];
                if (x != 0)
                {
                    Vector3 direction = x > 0 ? Vector3.right : Vector3.left;
                    start += direction;
                    draggedObject.transform.position = start;
                    x = x > 0 ? x - 1 : x + 1;
                }
                else if (z != 0)
                {
                    Vector3 direction = z > 0 ? Vector3.forward : Vector3.back;
                    start += direction;
                    draggedObject.transform.position = start;
                    z = z > 0 ? z - 1 : z + 1;
                }
            }
        }
    }
        public static void Init()
        {
            #region SpecialLoot
            NonRatStealableArmor = PickupObjectDatabase.GetById(120).gameObject.InstantiateAndFakeprefab();
            NonRatStealableArmor.GetComponent <PickupObject>().IgnoredByRat = true;

            NonRatStealableAmmo = PickupObjectDatabase.GetById(78).gameObject.InstantiateAndFakeprefab();
            NonRatStealableAmmo.GetComponent <PickupObject>().IgnoredByRat = true;

            NonRatStealableSpreadAmmo = PickupObjectDatabase.GetById(600).gameObject.InstantiateAndFakeprefab();
            NonRatStealableSpreadAmmo.GetComponent <PickupObject>().IgnoredByRat = true;

            MapPlaceable = PickupObjectDatabase.GetById(137).gameObject.InstantiateAndFakeprefab();
            MapPlaceable.GetComponent <PickupObject>().IgnoredByRat = true;
            MapPlaceable.GetOrAddComponent <SquishyBounceWiggler>();

            GlassGuonPlaceable = PickupObjectDatabase.GetById(565).gameObject.InstantiateAndFakeprefab();
            GlassGuonPlaceable.GetComponent <PickupObject>().IgnoredByRat = true;
            GlassGuonPlaceable.GetOrAddComponent <SquishyBounceWiggler>();

            FiftyCasingPlaceable = PickupObjectDatabase.GetById(74).gameObject.InstantiateAndFakeprefab();
            if (FiftyCasingPlaceable.GetComponent <PickupMover>())
            {
                UnityEngine.Object.Destroy(FiftyCasingPlaceable.GetComponent <PickupMover>());
            }

            SingleCasingPlaceable = PickupObjectDatabase.GetById(68).gameObject.InstantiateAndFakeprefab();
            if (SingleCasingPlaceable.GetComponent <PickupMover>())
            {
                UnityEngine.Object.Destroy(SingleCasingPlaceable.GetComponent <PickupMover>());
            }

            FiveCasingPlaceable = PickupObjectDatabase.GetById(70).gameObject.InstantiateAndFakeprefab();
            if (FiveCasingPlaceable.GetComponent <PickupMover>())
            {
                UnityEngine.Object.Destroy(FiveCasingPlaceable.GetComponent <PickupMover>());
            }
            #endregion
            #region NonFloorStolen
            BulletKingThrone = EnemyDatabase.GetOrLoadByGuid("ffca09398635467da3b1f4a54bcfda80").GetComponent <BulletKingDeathController>().thronePrefab.InstantiateAndFakeprefab();
            OldKingThrone    = EnemyDatabase.GetOrLoadByGuid("5729c8b5ffa7415bb3d01205663a33ef").GetComponent <BulletKingDeathController>().thronePrefab.InstantiateAndFakeprefab();
            GameObject skeletonNote = LoadHelper.LoadAssetFromAnywhere <GameObject>("assets/data/prefabs/interactable objects/notes/skeleton_note_001.prefab");
            SecretRoomSkeleton = skeletonNote.transform.Find("skleleton").gameObject.InstantiateAndFakeprefab();
            #endregion
            #region Oubliette
            Dungeon sewerDungeon = DungeonDatabase.GetOrLoadByName("base_sewer");
            foreach (WeightedRoom wRoom in sewerDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms.elements)
            {
                if (wRoom.room != null && !string.IsNullOrEmpty(wRoom.room.name))
                {
                    if (wRoom.room.name.ToLower().StartsWith("sewer_trash_compactor_001"))
                    {
                        HorizontalCrusher = wRoom.room.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                    }
                }
            }
            sewerDungeon = null;
            #endregion
            #region Abbey
            Dungeon abbeyDungeon = DungeonDatabase.GetOrLoadByName("base_cathedral");
            foreach (WeightedRoom wRoom in abbeyDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms.elements)
            {
                if (wRoom.room != null && !string.IsNullOrEmpty(wRoom.room.name))
                {
                    if (wRoom.room.name.ToLower().StartsWith("cathedral_brent_standard_02"))
                    {
                        Pew = wRoom.room.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                    }
                }
            }
            abbeyDungeon = null;
            #endregion
            #region R&GDept
            Dungeon rngDungeon = DungeonDatabase.GetOrLoadByName("base_nakatomi");
            if (rngDungeon)
            {
                if (rngDungeon.PatternSettings.flows[0].name == "FS4_Nakatomi_Flow")
                {
                    if (rngDungeon.PatternSettings.flows[0].AllNodes.Count == 14)
                    {
                        MopAndBucket               = rngDungeon.PatternSettings.flows[0].AllNodes[0].overrideExactRoom.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        CardboardBox3              = rngDungeon.PatternSettings.flows[0].AllNodes[0].overrideExactRoom.placedObjects[2].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        ACUnit                     = rngDungeon.PatternSettings.flows[0].AllNodes[1].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        ACVent                     = rngDungeon.PatternSettings.flows[0].AllNodes[1].overrideExactRoom.placedObjects[2].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        KitchenChairFront          = rngDungeon.PatternSettings.flows[0].AllNodes[4].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        KitchenChairLeft           = rngDungeon.PatternSettings.flows[0].AllNodes[4].overrideExactRoom.placedObjects[8].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        KitchenChairRight          = rngDungeon.PatternSettings.flows[0].AllNodes[4].overrideExactRoom.placedObjects[12].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        KitchenCounter             = rngDungeon.PatternSettings.flows[0].AllNodes[4].overrideExactRoom.placedObjects[16].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        SteelTableHorizontal       = rngDungeon.PatternSettings.flows[0].AllNodes[4].overrideExactRoom.placedObjects[6].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        SteelTableVertical         = rngDungeon.PatternSettings.flows[0].AllNodes[4].overrideExactRoom.placedObjects[3].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        BathroomStallDividerNorth  = rngDungeon.PatternSettings.flows[0].AllNodes[6].overrideExactRoom.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        BathroomStallDividerEast   = rngDungeon.PatternSettings.flows[0].AllNodes[6].overrideExactRoom.placedObjects[6].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        BathroomStallDividerWest   = rngDungeon.PatternSettings.flows[0].AllNodes[6].overrideExactRoom.placedObjects[9].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        ToiletNorth                = rngDungeon.PatternSettings.flows[0].AllNodes[6].overrideExactRoom.placedObjects[2].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        ToiletEast                 = rngDungeon.PatternSettings.flows[0].AllNodes[6].overrideExactRoom.placedObjects[7].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        ToiletWest                 = rngDungeon.PatternSettings.flows[0].AllNodes[6].overrideExactRoom.placedObjects[10].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        GlassWallVertical          = rngDungeon.PatternSettings.flows[0].AllNodes[7].overrideExactRoom.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        GlassWallHorizontal        = rngDungeon.PatternSettings.flows[0].AllNodes[7].overrideExactRoom.placedObjects[6].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        LargeDesk                  = rngDungeon.PatternSettings.flows[0].AllNodes[8].overrideExactRoom.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        TechnoFloorCellEmpty       = rngDungeon.PatternSettings.flows[0].AllNodes[10].overrideExactRoom.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        TechnoFloorCellCaterpillar = rngDungeon.PatternSettings.flows[0].AllNodes[10].overrideExactRoom.placedObjects[4].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        TechnoFloorCellLeever      = rngDungeon.PatternSettings.flows[0].AllNodes[10].overrideExactRoom.placedObjects[13].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        TechnoFloorCellSpider      = rngDungeon.PatternSettings.flows[0].AllNodes[10].overrideExactRoom.placedObjects[14].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        WideComputerBreakable      = rngDungeon.PatternSettings.flows[0].AllNodes[10].overrideExactRoom.placedObjects[6].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        MetalCrate                 = rngDungeon.PatternSettings.flows[0].AllNodes[10].overrideExactRoom.placedObjects[10].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        HologramWallHorizontal     = rngDungeon.PatternSettings.flows[0].AllNodes[11].overrideExactRoom.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        HologramWallVertical       = rngDungeon.PatternSettings.flows[0].AllNodes[11].overrideExactRoom.placedObjects[7].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        VentilationTube            = rngDungeon.PatternSettings.flows[0].AllNodes[11].overrideExactRoom.placedObjects[8].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        TallComputerBreakable      = rngDungeon.PatternSettings.flows[0].AllNodes[11].overrideExactRoom.placedObjects[13].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        AgunimBossMatt             = rngDungeon.PatternSettings.flows[0].AllNodes[12].overrideExactRoom.placedObjects[1].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        AlienTank                  = rngDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[9].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        DecorativeElectricFloor    = rngDungeon.PatternSettings.flows[0].AllNodes[13].overrideExactRoom.placedObjects[29].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                    }
                    else
                    {
                        ETGModConsole.Log("<color=#ff0000ff>ERROR: R&G DEPARTMENT FLOW 0 HAS AN INCORRECT AMOUNT OF NODES</color>");
                    }
                }
                else
                {
                    ETGModConsole.Log("<color=#ff0000ff>ERROR: R&G DEPARTMENT FLOW 0 HAS AN INCORRECT NAME, AND HAS BEEN ALTERED</color>");
                }
            }
            else
            {
                ETGModConsole.Log("<color=#ff0000ff>ERROR: R&G DEPARTMENT DUNGEON PREFAB WAS NULL</color>");
            }
            rngDungeon = null;
            #endregion
            #region Forge
            Dungeon forgeDungeon = DungeonDatabase.GetOrLoadByName("base_forge");
            foreach (WeightedRoom wRoom in forgeDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms.elements)
            {
                if (wRoom.room != null && !string.IsNullOrEmpty(wRoom.room.name))
                {
                    if (wRoom.room.name.ToLower().StartsWith("forge_normal_cubulead_03"))
                    {
                        VerticalCrusher = wRoom.room.placedObjects[0].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        FireBarTrap     = wRoom.room.placedObjects[7].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                    }
                    if (wRoom.room.name.ToLower().StartsWith("forge_connector_flamepipes_01"))
                    {
                        FlamePipeNorth = wRoom.room.placedObjects[1].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        FlamePipeWest  = wRoom.room.placedObjects[3].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                        FlamePipeEast  = wRoom.room.placedObjects[2].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                    }
                }
            }
            forgeDungeon = null;
            #endregion
            #region BulletHell
            Dungeon hellDungeon = DungeonDatabase.GetOrLoadByName("base_bullethell");
            foreach (WeightedRoom wRoom in hellDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms.elements)
            {
                if (wRoom.room != null && !string.IsNullOrEmpty(wRoom.room.name))
                {
                    if (wRoom.room.name.ToLower().StartsWith("hell_connector_pathburst_01"))
                    {
                        FlameburstTrap = wRoom.room.placedObjects[3].nonenemyBehaviour.gameObject.InstantiateAndFakeprefab();
                    }
                }
            }
            hellDungeon = null;
            #endregion
        }