aozhiwei c8d0b871ca 1
2020-12-10 14:00:16 +08:00

93 lines
2.0 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();
}
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();
curr_weapon = &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);
}
}