private static void GenerateNegXMutation(BuildingLot _lot) { List <Panel> addedPanels = new List <Panel>(); // set new height, width and length // Calculate size of mutation int newHeight = (int)_lot.GetCurrentBuildingHeight() / 2; newHeight = (int)Random.Range(newHeight, _lot.GetCurrentBuildingHeight()); if (newHeight <= 1) { return; } _lot.SetCurrentBuildingHeight(newHeight); int newWidth = (int)Random.Range(1, _lot.GetOffsetX() + 1); int newLength = (int)Random.Range(1, _lot.GetNegXWidth() + 1); if (newLength == 1) { return; } // Generate panels! Vector3 pos = _lot.transform.position + new Vector3(_lot.GetOffsetX() - newWidth, 0.0f, _lot.GetOffsetZ() + (float)panelSize / 2); GenerateNegXPanels(_lot, newLength, pos, addedPanels); pos = _lot.transform.position + new Vector3(_lot.GetOffsetX(), 0.0f, _lot.GetOffsetZ() + (float)panelSize / 2); GeneratePosXPanels(_lot, newLength, pos, addedPanels); pos = _lot.transform.position + new Vector3(_lot.GetOffsetX() - newWidth + (float)panelSize / 2, 0.0f, _lot.GetOffsetZ()); GenerateNegZPanels(_lot, newWidth, pos, addedPanels); pos = _lot.transform.position + new Vector3(_lot.GetOffsetX() - newWidth + (float)panelSize / 2, 0.0f, _lot.GetOffsetZ() + newLength); GeneratePosZPanels(_lot, newWidth, pos, addedPanels); pos = _lot.transform.position + new Vector3((_lot.GetOffsetX() + (float)panelSize / 2) - newWidth, newHeight - (float)panelSize / 2, _lot.GetOffsetZ() + (float)panelSize / 2); GeneratePosYPanels(_lot, newWidth, newLength, pos, addedPanels); // if the length of mutation == faceWidth, update if (newLength == _lot.GetNegXWidth()) { _lot.SetNegZWidth(_lot.GetNegZWidth() + newWidth); _lot.SetPosZWidth(_lot.GetPosZWidth() + newWidth); _lot.SetOffsetX(_lot.GetOffsetX() - newWidth); // offsets only need to be done for negatives } MergeList(_lot, addedPanels); }