LNHomeGameMatePanel.swift 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // LNHomeGameMatePanel.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/17.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNHomeGameMatePanel: UIView {
  11. private var curItem: LNGameTypeItemVO?
  12. private let hallView = UIView()
  13. private let listView = LNGameMateListView()
  14. init(item: LNGameTypeItemVO) {
  15. super.init(frame: .zero)
  16. setupViews(item)
  17. curItem = item
  18. LNEventDeliver.addObserver(self)
  19. onHallEntranceChanged()
  20. }
  21. required init?(coder: NSCoder) {
  22. fatalError("init(coder:) has not been implemented")
  23. }
  24. func onShow() {
  25. listView.reportExposure()
  26. }
  27. }
  28. extension LNHomeGameMatePanel: LNRoomManagerNotify {
  29. func onHallEntranceChanged() {
  30. hallView.isHidden = !LNRoomManager.hallEntrance
  31. }
  32. }
  33. extension LNHomeGameMatePanel: LNHomeGameTabViewDelegate {
  34. func homeGameTabView(view: LNHomeGameTabView, didSelect category: LNGameCategoryItemVO?) {
  35. guard let curItem else { return }
  36. listView.reloadList(newTopCategory: curItem.code, newCategory: category?.code, filter: LNGameMateFilter())
  37. }
  38. func homeGameTabViewClickMore(view: LNHomeGameTabView) {
  39. pushToGameCategoryList { [weak self] category, game in
  40. guard let self else { return }
  41. pushToGameMateList(topCategory: category, category: game, filter: LNGameMateFilter())
  42. }
  43. }
  44. }
  45. extension LNHomeGameMatePanel: LNHomeActivityTabViewDelegate {
  46. func homeActivityTabView(view: LNHomeActivityTabView, didSelect category: LNGameCategoryItemVO?) {
  47. guard let curItem else { return }
  48. listView.reloadList(newTopCategory: curItem.code, newCategory: category?.code, filter: LNGameMateFilter())
  49. }
  50. func homeActivityTabViewClickMore(view: LNHomeActivityTabView) {
  51. pushToGameCategoryList { [weak self] category, game in
  52. guard let self else { return }
  53. pushToGameMateList(topCategory: category, category: game, filter: LNGameMateFilter())
  54. }
  55. }
  56. }
  57. extension LNHomeGameMatePanel {
  58. private func setupViews(_ item: LNGameTypeItemVO) {
  59. let stackView = UIStackView()
  60. stackView.axis = .vertical
  61. stackView.spacing = 8
  62. addSubview(stackView)
  63. stackView.snp.makeConstraints { make in
  64. make.edges.equalToSuperview()
  65. }
  66. let tabView = UIView()
  67. if item.categoryType == .offline
  68. || item.categoryType == .user {
  69. let gameTab = LNHomeActivityTabView()
  70. gameTab.delegate = self
  71. tabView.addSubview(gameTab)
  72. gameTab.snp.makeConstraints { make in
  73. make.horizontalEdges.equalToSuperview().inset(16)
  74. make.verticalEdges.equalToSuperview()
  75. }
  76. gameTab.update(item.children)
  77. } else {
  78. let gameTab = LNHomeGameTabView()
  79. gameTab.delegate = self
  80. tabView.addSubview(gameTab)
  81. gameTab.snp.makeConstraints { make in
  82. make.horizontalEdges.equalToSuperview().inset(16)
  83. make.verticalEdges.equalToSuperview()
  84. make.height.equalTo(78)
  85. }
  86. gameTab.update(item.children)
  87. }
  88. stackView.addArrangedSubview(tabView)
  89. stackView.addArrangedSubview(buildHall())
  90. stackView.addArrangedSubview(listView)
  91. listView.reloadList(newTopCategory: item.code, newCategory: nil, filter: LNGameMateFilter())
  92. }
  93. private func buildHall() -> UIView {
  94. hallView.onTap { [weak self] in
  95. guard let self else { return }
  96. LNRoomManager.shared.getRandomRoom { [weak self] info in
  97. guard let self else { return }
  98. guard let info else { return }
  99. pushToRoom(info.roomId)
  100. }
  101. }
  102. let image: UIImage = .icHomeHall
  103. let bg = UIImageView()
  104. bg.image = image.resizableImage(withCapInsets: .init(top: 0, left: image.size.width * 0.5 - 1,
  105. bottom: 0, right: image.size.width * 0.5 - 1))
  106. hallView.addSubview(bg)
  107. bg.snp.makeConstraints { make in
  108. make.horizontalEdges.equalToSuperview().inset(16)
  109. make.verticalEdges.equalToSuperview()
  110. make.height.equalTo(42)
  111. }
  112. let titleLabel = UILabel()
  113. titleLabel.text = .init(key: "A00370")
  114. titleLabel.font = .heading_h3
  115. titleLabel.textColor = .text_1
  116. hallView.addSubview(titleLabel)
  117. titleLabel.snp.makeConstraints { make in
  118. make.centerY.equalToSuperview()
  119. make.leading.equalTo(bg).offset(61)
  120. }
  121. return hallView
  122. }
  123. }