69 lines
1.9 KiB
C++
69 lines
1.9 KiB
C++
#include "precompile.h"
|
|
|
|
#include "building.h"
|
|
#include "collider.h"
|
|
#include "metamgr.h"
|
|
#include "room.h"
|
|
#include "loot.h"
|
|
#include "app.h"
|
|
#include "typeconvert.h"
|
|
|
|
Building::Building():Entity()
|
|
{
|
|
entity_type = ET_Building;
|
|
++App::Instance()->perf.entity_num[ET_Building];
|
|
}
|
|
|
|
Building::~Building()
|
|
{
|
|
--App::Instance()->perf.entity_num[ET_Building];
|
|
}
|
|
|
|
void Building::Initialize()
|
|
{
|
|
Entity::Initialize();
|
|
RecalcSelfCollider();
|
|
}
|
|
|
|
void Building::RecalcSelfCollider()
|
|
{
|
|
for (auto& obj : meta->i->staticobj()) {
|
|
AabbCollider* collider = new AabbCollider();
|
|
collider->owner = this;
|
|
collider->_min = a8::Vec2(obj.x() - obj.width()/2.0 - meta->i->tilewidth()/2.0,
|
|
obj.y() - obj.height()/2.0 - meta->i->tileheight()/2.0);
|
|
collider->_max = a8::Vec2(obj.x() + obj.width()/2.0 - meta->i->tilewidth()/2.0,
|
|
obj.y() + obj.height()/2.0 - meta->i->tileheight()/2.0);
|
|
AddCollider(collider);
|
|
room->map_service.AddCollider(collider);
|
|
}
|
|
}
|
|
|
|
void Building::FillMFObjectPart(cs::MFObjectPart* part_data)
|
|
{
|
|
part_data->set_object_type(ET_Building);
|
|
cs::MFBuildingPart* p = part_data->mutable_union_obj_3();
|
|
p->set_obj_uniid(entity_uniid);
|
|
TypeConvert::ToPb(pos, p->mutable_pos());
|
|
}
|
|
|
|
void Building::FillMFObjectFull(cs::MFObjectFull* full_data)
|
|
{
|
|
full_data->set_object_type(ET_Building);
|
|
cs::MFBuildingFull* p = full_data->mutable_union_obj_3();
|
|
p->set_obj_uniid(entity_uniid);
|
|
TypeConvert::ToPb(pos, p->mutable_pos());
|
|
|
|
p->set_building_id(meta->i->mapid());
|
|
}
|
|
|
|
void Building::GetAabbBox(AabbCollider& aabb_box)
|
|
{
|
|
aabb_box.active = true;
|
|
aabb_box.owner = this;
|
|
aabb_box._min.x = -meta->i->tilewidth()/2.0;
|
|
aabb_box._min.y = -meta->i->tileheight()/2.0;
|
|
aabb_box._max.x = meta->i->tilewidth()/2.0;
|
|
aabb_box._max.y = meta->i->tileheight()/2.0;
|
|
}
|