93 lines
2.0 KiB
C++
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);
|
|
}
|
|
}
|