This commit is contained in:
aozhiwei 2024-04-01 10:17:18 +08:00
parent 1ac680544b
commit 952c949d88
5 changed files with 118 additions and 11 deletions

View File

@ -91,4 +91,7 @@ void FrameData::ClearFrameData(Human* hum)
if (!del_bullets_.empty()) {
del_bullets_.clear();
}
if (!voices_.empty()) {
voices_.clear();
}
}

View File

@ -11,7 +11,15 @@ struct PartObject
EntityWeakPtr object;
};
struct FightVoice
{
int voice_id = 0;
int killer_id = 0;
int dead_id = 0;
};
class Human;
struct FightVoice;
class FrameData
{
private:
@ -41,8 +49,10 @@ class FrameData
std::vector<int> chged_cars_;
std::vector<int> chged_props_;
std::vector<int> del_bullets_;
std::vector<std::shared_ptr<FightVoice>> voices_;
friend class Human;
friend class FrameMaker;
friend class FrameEvent;
friend class InGameVoice;
};

View File

@ -547,6 +547,11 @@ void FrameEvent::AddExitGame(CreatureWeakPtr& sender)
}
}
void FrameEvent::AddVoice(int voice_id, Human* killer, Human* dead)
{
}
void FrameEvent::Clear()
{
if (!room->frame_event_data->explosions_.empty()) {

View File

@ -51,6 +51,7 @@ public:
float value, float value2, float value3, bool only_self = false);
void AddEnterGame(CreatureWeakPtr& sender);
void AddExitGame(CreatureWeakPtr& sender);
void AddVoice(int voice_id, Human* killer, Human* dead);
void Clear();
};

View File

@ -94,61 +94,149 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader)
void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* meta)
{
auto p = std::make_shared<FightVoice>();
{
p->voice_id = meta->sound_id();
switch (meta->notify_fields()) {
case 1:
{
p->killer_id = killer->GetUniId();
}
break;
case 2:
{
p->dead_id = deader->GetUniId();
}
break;
case 3:
{
p->killer_id = killer->GetUniId();
p->dead_id = deader->GetUniId();
}
break;
default:
{
}
break;
}
}
switch (meta->GetNotifyObject()) {
case InGameVoiceNotifyObject_e::kGlobal:
{
room_->TraverseHumanList
(
[p] (Human* hum) -> bool
{
hum->GetFrameData().voices_.push_back(p);
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kKiller:
{
killer->GetFrameData().voices_.push_back(p);
}
break;
case InGameVoiceNotifyObject_e::kNoKiller:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum != killer) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kKillerTeam:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum->GetTeam() == killer->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kNoKillerTeam:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum->GetTeam() != killer->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kDead:
{
deader->GetFrameData().voices_.push_back(p);
}
break;
case InGameVoiceNotifyObject_e::kNoDead:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum != deader) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kDeadTeam:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum->GetTeam() == deader->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kNoDeadTeam:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum->GetTeam() != deader->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
case InGameVoiceNotifyObject_e::kTeammateExcludeDead:
{
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum->GetTeam() == deader->GetTeam() &&
hum != deader) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
break;
default:
{
}