aozhiwei 868c91ac11 1
2021-05-28 13:51:49 +08:00

127 lines
2.9 KiB
C++

#include "precompile.h"
#include "android.h"
#include "metamgr.h"
#include "android.ai.h"
#include "zombiemode.ai.h"
#include "room.h"
#include "app.h"
Android::Android():Human()
{
#if 0
++PerfMonitor::Instance()->entity_num[ET_Android];
#endif
}
Android::~Android()
{
if (ai) {
A8_SAFE_DELETE(ai);
}
#if 0
--PerfMonitor::Instance()->entity_num[ET_Android];
#endif
}
void Android::Initialize()
{
if (room->GetRoomMode() == kZombieMode) {
ai = new ZombieModeAI;
ai->owner = this;
ai->SetAiLevel(8);
ai->SetAiMode(kHumanAiMode);
} else {
ai = new AndroidNewAI;
ai->owner = this;
}
Human::Initialize();
RandSkin();
GiveEquip();
RecalcBaseAttr();
}
void Android::Update(int delta_time)
{
if (UpdatedTimes() <= 0) {
if (room->GetFrameNo() % 2 != 0) {
return;
}
}
InternalUpdate(delta_time);
++updated_times_;
}
void Android::InternalUpdate(int delta_time)
{
if (a8::HasBitFlag(status, HS_Disable)) {
return;
}
if (action_type != AT_None) {
UpdateAction();
}
if (HasBuffEffect(kBET_Fly)) {
SetPos(room->plane.curr_pos);
room->grid_service->MoveCreature(this);
return;
}
ai->Update(delta_time);
}
void Android::GiveEquip()
{
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip
(room->GetRoomMode() == kZombieMode ?
robot_meta->i->zbmode_weapon_id() : robot_meta->i->weapon_id());
if (weapon_meta) {
weapons[GUN_SLOT1].weapon_idx = GUN_SLOT1;
weapons[GUN_SLOT1].weapon_id = weapon_meta->i->id();
weapons[GUN_SLOT1].weapon_lv = room->GetRoomMode() == kZombieMode ?
robot_meta->i->zbmode_weapon_lv() : robot_meta->i->weapon_lv();
weapons[GUN_SLOT1].ammo = 0;
weapons[GUN_SLOT1].meta = weapon_meta;
weapons[GUN_SLOT1].Recalc();
SetCurrWeapon(&weapons[GUN_SLOT1]);
}
sex = robot_meta->i->sex();
if (sex == 0) {
sex = rand() % 3;
}
}
void Android::SetAiLevel(int ai_level)
{
if (ai) {
ai->SetAiLevel(ai_level);
}
}
void Android::RandSkin()
{
#if 1
if (!robot_meta->skin_id.empty()) {
Skin& skin = skins[0];
skin.skin_id = 13001 + robot_meta->skin_id[rand() % robot_meta->skin_id.size()];
skin.skin_lv = 1;
}
#else
std::vector<int> ids = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < kSkinNum; ++i) {
int rand_idx = rand() % ids.size();
int skin_id = ids[rand_idx];
if (i == 1) {
skin_id = 13001 + (rand() % 6);
} else if (i == 2) {
skin_id = 15001 + (rand() % 6);
}
#if 1
skin_id = 1;
#endif
Skin& skin = skins[i];
skin.skin_id = skin_id;
skin.skin_lv = 1;
ids.erase(ids.begin() + rand_idx);
}
#endif
}