#pragma once #include "framedata.h" namespace MetaData { struct Map; struct SafeArea; struct Building; } class Entity; class Bullet; class Human; class Player; class Building; class Room { public: long long room_uuid = 0; MetaData::Map* map_meta = nullptr; RoomFrameData frame_data; long long frame_no = 0; GasData gas_data; void Initialize(); void Update(int delta_time); bool IsFull(); int GetPlayerNum(); int AliveCount(); Player* GetPlayerByAccountId(const std::string& accountid); Player* GetPlayerByUniId(unsigned short uniid); Entity* GetEntityByUniId(unsigned short uniid); void AddPlayer(Player* hum); Human* FindEnemy(Human* hum); void CollisionDetection(Entity* sender, int detection_flags, std::vector& objects); void AddDeletedObject(unsigned short obj_uniid); void BeAddedObject(Entity* entity); void FetchBuilding(Human* hum); void FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg); void FillSMMapInfo(cs::SMMapInfo& map_info); void TouchPlayerList(a8::XParams param, std::function func); void TouchHumanList(a8::XParams param, std::function func); void ScatterDrop(Vector2D center, int drop_id); void DropItem(Vector2D pos, int item_id); void CreateThings(); void CreateDoor(Building* building, int door_idx); void CreateHouseObstacle(Building* building, int id, float x, float y); void CreateLoot(int equip_id, Vector2D pos, int count); void CreateBullet(Human* hum, MetaData::Equip* gun_meta, Vector2D pos, Vector2D dir, float fly_distance); void OnHumanDie(Human* hum); private: unsigned short AllocUniid(); void ShuaAndroid(); void ResetFrameData(); void ClearDeletedObjects(); void ProcAddedObjects(); void UpdateGas(); bool GenSmallCircle(Vector2D big_circle_pos, float big_circle_rad, float small_circle_rad, Vector2D& out_pos); void OutputDebugLog(); private: a8::TimerAttacher timer_attacher_; int elapsed_time_ = 0; int alive_count_ = 0; unsigned short current_uniid = 0; RoomState_e state_ = RS_Inactive; std::map accountid_hash_; std::map moveable_hash_; std::map uniid_hash_; std::map human_hash_; std::map be_added_hash_; };