feat(live-room): BIG_HEART_DONATION 하트 메시지 3초 표시
HEART_DONATION은 기존 1.5초 유지. heartNicknameList를 (nickname,duration) 큐로 변경해 개별 표시시간을 저장. addHeartMessage(nickname:type:) 도입 및 호출부 수정. showNextHeartMessage가 현재 항목의 duration으로 전환 예약하도록 변경.
This commit is contained in:
@@ -212,7 +212,12 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
@Published var heartNicknameList = [String]()
|
||||
@Published var heartNicknameList = [(nickname: String, duration: TimeInterval)]()
|
||||
|
||||
// HEART_DONATION/BIG_HEART_DONATION 메시지 표시 시간 제어
|
||||
private let heartDonationDisplayDuration: TimeInterval = 1.5
|
||||
private let bigHeartDonationDisplayDuration: TimeInterval = 3.0
|
||||
private var currentHeartMessageDuration: TimeInterval = 1.5
|
||||
|
||||
private var menuId = 0
|
||||
@Published var menu = ""
|
||||
@@ -1969,7 +1974,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||
agora.sendRawMessageToGroup(rawMessage: donationRawMessage) { [unowned self] _, error in
|
||||
if error == nil {
|
||||
let (nickname, _) = self.getUserNicknameAndProfileUrl(accountId: UserDefaults.int(forKey: .userId))
|
||||
self.addHeartMessage(nickname: nickname)
|
||||
self.addHeartMessage(nickname: nickname, type: messageType)
|
||||
|
||||
totalHeartCount += heartCount
|
||||
|
||||
@@ -2054,18 +2059,22 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
private func addHeartMessage(nickname: String) {
|
||||
private func addHeartMessage(nickname: String, type: LiveRoomChatRawMessage.LiveRoomChatRawMessageType = .HEART_DONATION) {
|
||||
let duration: TimeInterval = (type == .BIG_HEART_DONATION) ? bigHeartDonationDisplayDuration : heartDonationDisplayDuration
|
||||
if heartNickname != nil {
|
||||
self.heartNicknameList.append(nickname)
|
||||
self.heartNicknameList.append((nickname: nickname, duration: duration))
|
||||
} else {
|
||||
self.currentHeartMessageDuration = duration
|
||||
self.heartNickname = nickname
|
||||
}
|
||||
}
|
||||
|
||||
private func showNextHeartMessage() {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
|
||||
if let nextHeartNickname = self.heartNicknameList.first {
|
||||
self.heartNickname = nextHeartNickname
|
||||
let delay = currentHeartMessageDuration
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
|
||||
if let next = self.heartNicknameList.first {
|
||||
self.currentHeartMessageDuration = next.duration
|
||||
self.heartNickname = next.nickname
|
||||
self.heartNicknameList.removeFirst()
|
||||
} else {
|
||||
self.heartNickname = nil
|
||||
@@ -2516,11 +2525,11 @@ extension LiveRoomViewModel: AgoraRtmClientDelegate {
|
||||
} else if decoded.type == .EDIT_ROOM_INFO || decoded.type == .SET_MANAGER {
|
||||
self.getRoomInfo()
|
||||
} else if decoded.type == .HEART_DONATION {
|
||||
self.addHeartMessage(nickname: nickname)
|
||||
self.addHeartMessage(nickname: nickname, type: .HEART_DONATION)
|
||||
self.totalHeartCount += decoded.can
|
||||
self.addHeart()
|
||||
} else if decoded.type == .BIG_HEART_DONATION {
|
||||
self.addHeartMessage(nickname: nickname)
|
||||
self.addHeartMessage(nickname: nickname, type: .BIG_HEART_DONATION)
|
||||
self.totalHeartCount += decoded.can
|
||||
self.addBigHeartAnimation()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user