168 lines
4.3 KiB
C++
168 lines
4.3 KiB
C++
#include "precompile.h"
|
|
|
|
#include "frameevent.h"
|
|
#include "human.h"
|
|
#include "bullet.h"
|
|
#include "metamgr.h"
|
|
|
|
void FrameEvent::AddAirDrop(int appear_time, int box_id, Vector2D box_pos)
|
|
{
|
|
cs::MFAirDrop* airdrop = airdrops_.Add();
|
|
airdrop->set_appear_time(appear_time);
|
|
airdrop->set_box_id(box_id);
|
|
box_pos.ToPB(airdrop->mutable_pos());
|
|
}
|
|
|
|
void FrameEvent::AddEmote(Human* hum, int emote_id)
|
|
{
|
|
{
|
|
auto& tuple = a8::FastAppend(emotes_);
|
|
std::get<0>(tuple) = hum;
|
|
auto& p = std::get<1>(tuple);
|
|
|
|
p.set_emote_id(emote_id);
|
|
p.set_player_id(hum->entity_uniid);
|
|
}
|
|
{
|
|
int emote_idx = emotes_.size() - 1;
|
|
for (auto& cell : hum->grid_list) {
|
|
for (auto& hum : cell->human_list) {
|
|
hum->emotes_.push_back(emote_idx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FrameEvent::AddShot(Human* hum)
|
|
{
|
|
{
|
|
auto& tuple = a8::FastAppend(shots_);
|
|
std::get<0>(tuple) = hum;
|
|
auto& p = std::get<1>(tuple);
|
|
|
|
p.set_player_id(hum->entity_uniid);
|
|
hum->curr_weapon->ToPB(p.mutable_weapon());
|
|
p.set_offhand(true);
|
|
p.set_bullskin(10001);
|
|
}
|
|
{
|
|
int shot_idx = shots_.size() - 1;
|
|
for (auto& cell : hum->grid_list) {
|
|
for (auto& hum : cell->human_list) {
|
|
hum->shots_.push_back(shot_idx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FrameEvent::AddBullet(Human* hum, Vector2D born_pos, Vector2D dir, float fly_distance)
|
|
{
|
|
{
|
|
auto& tuple = a8::FastAppend(bullets_);
|
|
std::get<0>(tuple) = hum;
|
|
auto& p = std::get<1>(tuple);
|
|
|
|
p.set_player_id(hum->entity_uniid);
|
|
p.set_bullet_id(hum->curr_weapon->meta->i->use_bullet());
|
|
born_pos.ToPB(p.mutable_pos());
|
|
dir.ToPB(p.mutable_dir());
|
|
p.set_bulletskin(10001);
|
|
p.set_gun_id(hum->curr_weapon->meta->i->id());
|
|
p.set_fly_distance(fly_distance);
|
|
}
|
|
{
|
|
int bullet_idx = bullets_.size() - 1;
|
|
for (auto& cell : hum->grid_list) {
|
|
for (auto& hum : cell->human_list) {
|
|
hum->bullets_.push_back(bullet_idx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FrameEvent::AddExplosion(Bullet* bullet, int item_id, Vector2D bomb_pos)
|
|
{
|
|
{
|
|
auto& tuple = a8::FastAppend(explosions_);
|
|
std::get<0>(tuple) = bullet->player;
|
|
auto& p = std::get<1>(tuple);
|
|
|
|
p.set_item_id(item_id);
|
|
bomb_pos.ToPB(p.mutable_pos());
|
|
p.set_player_id(bullet->player->entity_uniid);
|
|
}
|
|
{
|
|
int explosion_idx = explosions_.size() - 1;
|
|
for (auto& cell : bullet->player->grid_list) {
|
|
for (auto& hum : cell->human_list) {
|
|
hum->explosions_.push_back(explosion_idx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FrameEvent::AddExplosionEx(Human* sender, int item_id, Vector2D bomb_pos, int effect)
|
|
{
|
|
{
|
|
auto& tuple = a8::FastAppend(explosions_);
|
|
std::get<0>(tuple) = sender;
|
|
auto& p = std::get<1>(tuple);
|
|
|
|
p.set_item_id(item_id);
|
|
bomb_pos.ToPB(p.mutable_pos());
|
|
p.set_player_id(sender->entity_uniid);
|
|
p.set_effect(effect);
|
|
}
|
|
{
|
|
int explosion_idx = explosions_.size() - 1;
|
|
for (auto& cell : sender->grid_list) {
|
|
for (auto& hum : cell->human_list) {
|
|
hum->explosions_.push_back(explosion_idx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FrameEvent::AddSmoke(Bullet* bullet, int item_id, Vector2D pos)
|
|
{
|
|
{
|
|
auto& tuple = a8::FastAppend(smokes_);
|
|
std::get<0>(tuple) = bullet->player;
|
|
auto& p = std::get<1>(tuple);
|
|
|
|
p.set_item_id(item_id);
|
|
pos.ToPB(p.mutable_pos());
|
|
p.set_player_id(bullet->player->entity_uniid);
|
|
}
|
|
{
|
|
int idx = smokes_.size() - 1;
|
|
for (auto& cell : bullet->player->grid_list) {
|
|
for (auto& hum : cell->human_list) {
|
|
hum->smokes_.push_back(idx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FrameEvent::Clear()
|
|
{
|
|
if (!explosions_.empty()) {
|
|
explosions_.clear();
|
|
}
|
|
if (!smokes_.empty()) {
|
|
smokes_.clear();
|
|
}
|
|
if (!emotes_.empty()) {
|
|
emotes_.clear();
|
|
}
|
|
if (!bullets_.empty()) {
|
|
bullets_.clear();
|
|
}
|
|
if (!shots_.empty()) {
|
|
shots_.clear();
|
|
}
|
|
if (airdrops_.size() > 0) {
|
|
airdrops_.Clear();
|
|
}
|
|
}
|