{
ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
// uapi_set_sleep_mode_active(false);//睡眠模式激活标志位
- ThunderBirdModel::GetInstance()->HighFrequence();
+ //如果仍在对话,取消对话
+ if(ThunderBirdPresenter::GetInstance()->isDialogueing)
+ {
+ AI_ForceInterrupt();
+ ln_ws_send_voice_chat_interrupt("退出对话");
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ ln_ws_end_audio_chat();//结束对话
+ ThunderBirdModel::GetInstance()->HighFrequence();
+ ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+ ThunderBirdPresenter::GetInstance()->SetDialogueing(false);
+ }
// 从ThunderBirdModel获取当前表情和状态文本
std::string currentStatusText = "发呆中... ";
Isband(true);
{
//用string来接收表情
std::string emotionStr(emotion);
- //return;//确保稳定性该版本不使用NPC表情变化
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleNpcEmotionChange: %s", emotionStr.c_str());
if (emotionStr.empty()) {
//更新二维码
UpdateQrcodeIfValid();
}
- // //如果是在对话界面 需要根据对话状态去拿对话数据进行更新
- // if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)
- // {
- // //每一个界面都需要判断是否存在
- // if(ThunderBirdDialogueView::GetInstance() != nullptr)
- // {
- // //判断是否为开始对话 如果是开始对话 则更新对话数据
- // // if(ThunderBirdModel::GetInstance()->GetConversationStatus() == 1){
- // //更新对话数据
- // std::string dialogueText = ThunderBirdModel::GetInstance()->GetTextStr();
- // //只有一行 是拼接 还是直接覆盖?
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateDialogueText:%s\n",dialogueText.c_str());
- // ThunderBirdDialogueView::GetInstance()->UpdateDialogueText(dialogueText.c_str());
-
- // }
- // }
- // //如果是哄睡界面 需要更新哄睡文本
- // if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4)
- // {
- // if(ThunderBirdLullabyView::GetInstance() != nullptr)
- // {
- // std::string lullabyText = ThunderBirdModel::GetInstance()->GetTextStr();
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateLullabyText:%s\n",lullabyText.c_str());
- // ThunderBirdLullabyView::GetInstance()->UpdateLullabyText(lullabyText.c_str());
- // }
- // }
}
}
ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_GUIDEVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
isDialogueing = true;
+ //开启小绿点
+ if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
+ ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(true);
+ }
//未绑定状态,联网隐藏网络断开提醒
// 开始对话
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE, NULL, 0);
- // ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
+ // 进入对话模式时记录当前表情
+ ThunderBirdModel::GetInstance()->OnEnterDialogueMode();
+ // 获取对话体力与流量信息
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_GET_CHAT_STAMINA, NULL, 0);
+ ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
break;
}
//发送开始对话流标志
do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_CHAT_SESSION_START, NULL, 0);
#endif
-
-
+ //开启小绿点
+ if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
+ ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(true);
+ }
// 音频已初始化,直接跳转界面
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
if(ThunderBirdDialogueView::GetInstance()->DialogueFirst == true)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdShutdownView::ThunderBirdShutdownView");
g_tbShutdownView = this;
- // 关机前释放 thunderbird 视频与相关资源
- if (ThunderBirdMainView::GetInstance())
- {
- // ThunderBirdMainView::GetInstance()->CloseVideo();
- ThunderBirdMainView::GetInstance()->videoPlay_->StopVideoPlay();
- }
+ // 关机前释放 thunderbird 视频与相关资源
+ ThunderBirdMainView *mainView = ThunderBirdMainView::GetInstance();
+ if (mainView != nullptr && mainView->videoPlay_ != nullptr)
+ {
+ mainView->videoPlay_->StopVideoPlay();
+ }
}
ThunderBirdShutdownView::~ThunderBirdShutdownView()
void ThunderBirdShutdownView::ClearAll()
{
+ // 先删除shutdownAnimator,不依赖group状态
+ if (shutdownAnimator != nullptr)
+ {
+ delete shutdownAnimator;
+ shutdownAnimator = nullptr;
+ }
+
if (group != nullptr)
{
group->RemoveAll();
- if (shutdownAnimator != nullptr)
- {
- delete shutdownAnimator;
- shutdownAnimator = nullptr;
- }
//FreeImagePathsArray(shutdownPathsArray, TB_SHUTDOWN_ANIM_FRAMES);
delete group;
group = nullptr;
group->SetPosition(0, 0, 360, 360);
if (!EnsureAnimator())
{
+ // 修复:EnsureAnimator失败时删除已创建的group,避免内存泄漏
+ delete group;
+ group = nullptr;
return nullptr;
}
group->Add(shutdownAnimator);