#include "precompile.h" #include "android.h" #include "metamgr.h" #include "android.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() { ai = new AndroidAI; ai->owner = this; Human::Initialize(); RandSkin(); GiveEquip(); RecalcBaseAttr(); SetInfiniteBulletMode(); } 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, CS_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) { if (room->GetRoomMode() == kChiJiMode) { ((AndroidAI*)ai)->SetAiLevel(ai_level); } } } void Android::RandSkin() { #if 1 if (!robot_meta->skin_id.empty()) { Skin& skin = skins[0]; skin.skin_id = robot_meta->skin_id[rand() % robot_meta->skin_id.size()]; skin.skin_lv = 1; } #else std::vector 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 }