private void OnPlacement() { _gridDisplayRenderer.sharedMaterial.SetFloat("_Boolean_ShowGrid", 0f); _currentPlaceableObject = null; _isDragging = false; }
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 }