86 lines
2.2 KiB
C++
86 lines
2.2 KiB
C++
#include "precompile.h"
|
|
|
|
#include "obstacle.h"
|
|
#include "metamgr.h"
|
|
#include "movement.h"
|
|
#include "room.h"
|
|
#include "collider.h"
|
|
|
|
Obstacle::Obstacle():Entity()
|
|
{
|
|
entity_type = ET_Obstacle;
|
|
}
|
|
|
|
Obstacle::~Obstacle()
|
|
{
|
|
}
|
|
|
|
void Obstacle::Initialize()
|
|
{
|
|
health = meta->i->hp();
|
|
RecalcSelfCollider();
|
|
}
|
|
|
|
void Obstacle::RecalcSelfCollider()
|
|
{
|
|
switch (meta->i->thing_id()) {
|
|
case 61001:
|
|
{
|
|
if (!self_collider2_) {
|
|
self_collider2_ = new AabbCollider();
|
|
self_collider2_->owner = this;
|
|
colliders.push_back(self_collider2_);
|
|
}
|
|
self_collider2_->_min = Vector2D(-16.0f, -16.0f);
|
|
self_collider2_->_max = Vector2D(16.0f, 16.0f);
|
|
}
|
|
break;
|
|
case 61017:
|
|
{
|
|
//玻璃32 * 12
|
|
if (!self_collider2_) {
|
|
self_collider2_ = new AabbCollider();
|
|
self_collider2_->owner = this;
|
|
colliders.push_back(self_collider2_);
|
|
}
|
|
self_collider2_->_min = Vector2D(-16.0f, -16.0f);
|
|
self_collider2_->_max = Vector2D(6.0f, 6.0f);
|
|
}
|
|
break;
|
|
case 61007:
|
|
{
|
|
if (!self_collider_) {
|
|
self_collider_ = new CircleCollider();
|
|
self_collider_->owner = this;
|
|
colliders.push_back(self_collider_);
|
|
}
|
|
self_collider_->pos = Vector2D();
|
|
self_collider_->rad = 32 / 2.0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Obstacle::FillMFObjectPart(cs::MFObjectPart* part_data)
|
|
{
|
|
part_data->set_object_type(ET_Obstacle);
|
|
cs::MFObstaclePart* p = part_data->mutable_union_obj_2();
|
|
p->set_obj_uniid(entity_uniid);
|
|
pos.ToPB(p->mutable_pos());
|
|
p->set_scale(1.0f);
|
|
}
|
|
|
|
void Obstacle::FillMFObjectFull(cs::MFObjectFull* full_data)
|
|
{
|
|
full_data->set_object_type(ET_Obstacle);
|
|
cs::MFObstacleFull* p = full_data->mutable_union_obj_2();
|
|
p->set_obj_uniid(entity_uniid);
|
|
pos.ToPB(p->mutable_pos());
|
|
p->set_scale(1.0f);
|
|
|
|
p->set_obstacle_id(meta->i->thing_id());
|
|
p->set_health(health);
|
|
p->set_dead(dead);
|
|
p->set_dead_at_thisframe(dead ? dead_frameno < room->frame_no : false);
|
|
}
|