private void TryBuild(int cell) { if (!((Object)visualizer == (Object)null) && (cell != lastDragCell || buildingOrientation != lastDragOrientation)) { int num = Grid.PosToCell(visualizer); if (num == cell || (!(bool)def.BuildingComplete.GetComponent <LogicPorts>() && !(bool)def.BuildingComplete.GetComponent <LogicGateBase>())) { lastDragCell = cell; lastDragOrientation = buildingOrientation; ClearTilePreview(); Vector3 vector = Grid.CellToPosCBC(cell, Grid.SceneLayer.Building); GameObject gameObject = null; if (DebugHandler.InstantBuildMode || (Game.Instance.SandboxModeActive && SandboxToolParameterMenu.instance.settings.InstantBuild)) { if (def.IsValidBuildLocation(visualizer, vector, buildingOrientation) && def.IsValidPlaceLocation(visualizer, vector, buildingOrientation, out string _)) { gameObject = def.Build(cell, buildingOrientation, null, selectedElements, 293.15f, false, GameClock.Instance.GetTime()); if ((Object)source != (Object)null) { source.DeleteObject(); } } } else { gameObject = def.TryPlace(visualizer, vector, buildingOrientation, selectedElements, 0); if ((Object)gameObject == (Object)null && def.ReplacementLayer != ObjectLayer.NumLayers) { GameObject replacementCandidate = def.GetReplacementCandidate(cell); if ((Object)replacementCandidate != (Object)null && !def.IsReplacementLayerOccupied(cell)) { BuildingComplete component = replacementCandidate.GetComponent <BuildingComplete>(); if ((Object)component != (Object)null && component.Def.Replaceable && def.CanReplace(replacementCandidate) && ((Object)component.Def != (Object)def || selectedElements[0] != replacementCandidate.GetComponent <PrimaryElement>().Element.tag)) { gameObject = def.TryReplaceTile(visualizer, vector, buildingOrientation, selectedElements, 0); Grid.Objects[cell, (int)def.ReplacementLayer] = gameObject; } } } if ((Object)gameObject != (Object)null) { Prioritizable component2 = gameObject.GetComponent <Prioritizable>(); if ((Object)component2 != (Object)null) { if ((Object)BuildMenu.Instance != (Object)null) { component2.SetMasterPriority(BuildMenu.Instance.GetBuildingPriority()); } if ((Object)PlanScreen.Instance != (Object)null) { component2.SetMasterPriority(PlanScreen.Instance.GetBuildingPriority()); } } if ((Object)source != (Object)null) { source.Trigger(2121280625, gameObject); } } } if ((Object)gameObject != (Object)null) { if (def.MaterialsAvailable(selectedElements) || DebugHandler.InstantBuildMode) { placeSound = GlobalAssets.GetSound("Place_Building_" + def.AudioSize, false); if (placeSound != null) { buildingCount = buildingCount % 14 + 1; EventInstance instance = SoundEvent.BeginOneShot(placeSound, vector); if (def.AudioSize == "small") { instance.setParameterValue("tileCount", (float)buildingCount); } SoundEvent.EndOneShot(instance); } } else { PopFXManager.Instance.SpawnFX(PopFXManager.Instance.sprite_Resource, UI.TOOLTIPS.NOMATERIAL, null, vector, 1.5f, false, false); } Rotatable component3 = gameObject.GetComponent <Rotatable>(); if ((Object)component3 != (Object)null) { component3.SetOrientation(buildingOrientation); } } } } }