添加英雄处理
This commit is contained in:
parent
ccd8fa6493
commit
3eaeea9686
@ -1117,5 +1117,24 @@ void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState
|
|||||||
|
|
||||||
void Human::SummonHero()
|
void Human::SummonHero()
|
||||||
{
|
{
|
||||||
|
Hero* hero = room->CreateHero(this);
|
||||||
|
if (hero) {
|
||||||
|
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this)
|
||||||
|
.SetParam1(hero->entity_uniid),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
},
|
||||||
|
&skill_xtimer_attacher_.timer_list_,
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Human* hum = (Human*)param.sender.GetUserData();
|
||||||
|
Entity* hero = hum->room->GetEntityByUniId(param.param1);
|
||||||
|
if (hero && hero->entity_type == ET_Hero) {
|
||||||
|
hum->room->RemoveObjectLater(hero);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "collision.h"
|
#include "collision.h"
|
||||||
#include "roommgr.h"
|
#include "roommgr.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
|
#include "hero.h"
|
||||||
|
|
||||||
const int ROOM_MAX_PLAYER_NUM = 50;
|
const int ROOM_MAX_PLAYER_NUM = 50;
|
||||||
#if 0
|
#if 0
|
||||||
@ -421,6 +422,36 @@ Obstacle* Room::CreateObstacle(int id, float x, float y)
|
|||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Hero* Room::CreateHero(Human* hum)
|
||||||
|
{
|
||||||
|
Vector2D pos = hum->pos;
|
||||||
|
{
|
||||||
|
Vector2D dir = Vector2D::UP;
|
||||||
|
dir.Rotate(a8::RandAngle());
|
||||||
|
pos = pos + dir * (25 + rand() % 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
Hero* hero = new Hero();
|
||||||
|
hero->room = this;
|
||||||
|
hero->entity_uniid = AllocUniid();
|
||||||
|
hero->pos = pos;
|
||||||
|
hero->move_dir = hum->move_dir;
|
||||||
|
hero->attack_dir = hum->attack_dir;
|
||||||
|
hero->master = hum;
|
||||||
|
hero->skin = hum->skin;
|
||||||
|
hero->backpack = hum->backpack;
|
||||||
|
hero->helmet = hum->helmet;
|
||||||
|
hero->chest = hum->chest;
|
||||||
|
hero->weapon = *hum->curr_weapon;
|
||||||
|
hero->Initialize();
|
||||||
|
#if 1
|
||||||
|
uniid_hash_[hero->entity_uniid] = hero;
|
||||||
|
grid_service.AddEntity(hero);
|
||||||
|
#endif
|
||||||
|
hero->BroadcastFullState();
|
||||||
|
return hero;
|
||||||
|
}
|
||||||
|
|
||||||
void Room::CreateLoot(int equip_id, Vector2D pos, int count)
|
void Room::CreateLoot(int equip_id, Vector2D pos, int count)
|
||||||
{
|
{
|
||||||
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id);
|
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id);
|
||||||
@ -471,6 +502,7 @@ void Room::RemoveObjectLater(Entity* entity)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ET_Loot:
|
case ET_Loot:
|
||||||
|
case ET_Hero:
|
||||||
{
|
{
|
||||||
entity->BroadcastDeleteState();
|
entity->BroadcastDeleteState();
|
||||||
entity->room->grid_service.DelEntity(entity);
|
entity->room->grid_service.DelEntity(entity);
|
||||||
|
@ -27,6 +27,7 @@ class Bullet;
|
|||||||
class Human;
|
class Human;
|
||||||
class Player;
|
class Player;
|
||||||
class Building;
|
class Building;
|
||||||
|
class Hero;
|
||||||
class Room
|
class Room
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -74,6 +75,7 @@ public:
|
|||||||
void ScatterDrop(Vector2D center, int drop_id);
|
void ScatterDrop(Vector2D center, int drop_id);
|
||||||
void DropItem(Vector2D pos, int item_id, int item_count);
|
void DropItem(Vector2D pos, int item_id, int item_count);
|
||||||
|
|
||||||
|
Hero* CreateHero(Human* hum);
|
||||||
void CreateLoot(int equip_id, Vector2D pos, int count);
|
void CreateLoot(int equip_id, Vector2D pos, int count);
|
||||||
void CreateBullet(Human* hum, MetaData::Equip* gun_meta,
|
void CreateBullet(Human* hum, MetaData::Equip* gun_meta,
|
||||||
Vector2D pos, Vector2D dir, float fly_distance);
|
Vector2D pos, Vector2D dir, float fly_distance);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user