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()) { if (!del_bullets_.empty()) {
del_bullets_.clear(); del_bullets_.clear();
} }
if (!voices_.empty()) {
voices_.clear();
}
} }

View File

@ -11,7 +11,15 @@ struct PartObject
EntityWeakPtr object; EntityWeakPtr object;
}; };
struct FightVoice
{
int voice_id = 0;
int killer_id = 0;
int dead_id = 0;
};
class Human; class Human;
struct FightVoice;
class FrameData class FrameData
{ {
private: private:
@ -41,8 +49,10 @@ class FrameData
std::vector<int> chged_cars_; std::vector<int> chged_cars_;
std::vector<int> chged_props_; std::vector<int> chged_props_;
std::vector<int> del_bullets_; std::vector<int> del_bullets_;
std::vector<std::shared_ptr<FightVoice>> voices_;
friend class Human; friend class Human;
friend class FrameMaker; friend class FrameMaker;
friend class FrameEvent; 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() void FrameEvent::Clear()
{ {
if (!room->frame_event_data->explosions_.empty()) { if (!room->frame_event_data->explosions_.empty()) {

View File

@ -51,6 +51,7 @@ public:
float value, float value2, float value3, bool only_self = false); float value, float value2, float value3, bool only_self = false);
void AddEnterGame(CreatureWeakPtr& sender); void AddEnterGame(CreatureWeakPtr& sender);
void AddExitGame(CreatureWeakPtr& sender); void AddExitGame(CreatureWeakPtr& sender);
void AddVoice(int voice_id, Human* killer, Human* dead);
void Clear(); 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) 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()) { switch (meta->GetNotifyObject()) {
case InGameVoiceNotifyObject_e::kGlobal: case InGameVoiceNotifyObject_e::kGlobal:
{ {
room_->TraverseHumanList
(
[p] (Human* hum) -> bool
{
hum->GetFrameData().voices_.push_back(p);
return true;
});
} }
break; break;
case InGameVoiceNotifyObject_e::kKiller: case InGameVoiceNotifyObject_e::kKiller:
{ {
killer->GetFrameData().voices_.push_back(p);
} }
break; break;
case InGameVoiceNotifyObject_e::kNoKiller: case InGameVoiceNotifyObject_e::kNoKiller:
{ {
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum != killer) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
} }
break; break;
case InGameVoiceNotifyObject_e::kKillerTeam: 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; break;
case InGameVoiceNotifyObject_e::kNoKillerTeam: 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; break;
case InGameVoiceNotifyObject_e::kDead: case InGameVoiceNotifyObject_e::kDead:
{ {
deader->GetFrameData().voices_.push_back(p);
} }
break; break;
case InGameVoiceNotifyObject_e::kNoDead: case InGameVoiceNotifyObject_e::kNoDead:
{ {
room_->TraverseHumanList
(
[p, killer, deader] (Human* hum) -> bool
{
if (hum != deader) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
} }
break; break;
case InGameVoiceNotifyObject_e::kDeadTeam: 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; break;
case InGameVoiceNotifyObject_e::kNoDeadTeam: 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; break;
case InGameVoiceNotifyObject_e::kTeammateExcludeDead: 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; break;
default: default:
{ {
} }