From 316f18a173ddb4e32d90cb50c8f3ef47e552b939 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 28 Apr 2019 11:06:16 +0800 Subject: [PATCH] add hero --- server/gameserver/hero.cc | 0 server/gameserver/hero.h | 10 +++++++++ server/gameserver/human.cc | 42 ++++++++++++++++++++++++++++++++++++++ server/gameserver/human.h | 4 ++++ 4 files changed, 56 insertions(+) create mode 100644 server/gameserver/hero.cc create mode 100644 server/gameserver/hero.h diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc new file mode 100644 index 0000000..e69de29 diff --git a/server/gameserver/hero.h b/server/gameserver/hero.h new file mode 100644 index 0000000..6c7eb31 --- /dev/null +++ b/server/gameserver/hero.h @@ -0,0 +1,10 @@ +#pragma once + +#include "entity.h" + +class Hero : public Entity +{ +private: + CircleCollider* self_collider_ = nullptr; + +}; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index b56e31c..c95848f 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -105,6 +105,48 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) state->set_left_time(std::min(0, MetaMgr::Instance()->jump_time * 1000 - passed_time)); state->set_lasting_time(MetaMgr::Instance()->jump_time * 1000); } + if (a8::HasBitFlag(status, HS_Hide) && skill_meta) { + int passed_time = (room->frame_no - hide_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = p->add_states(); + state->set_state_type(HS_Hide); + state->set_left_time(std::min(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_Accelerate) && skill_meta) { + int passed_time = (room->frame_no - accelerate_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = p->add_states(); + state->set_state_type(HS_Accelerate); + state->set_left_time(std::min(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_DamageAdd) && skill_meta) { + int passed_time = (room->frame_no - damageadd_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = p->add_states(); + state->set_state_type(HS_DamageAdd); + state->set_left_time(std::min(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_DefAdd) && skill_meta) { + int passed_time = (room->frame_no - defadd_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = p->add_states(); + state->set_state_type(HS_DefAdd); + state->set_left_time(std::min(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_RecoverHP) && skill_meta) { + int passed_time = (room->frame_no - recover_hp_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = p->add_states(); + state->set_state_type(HS_RecoverHP); + state->set_left_time(std::min(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_ReflectDamage) && skill_meta) { + int passed_time = (room->frame_no - reflect_damage_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = p->add_states(); + state->set_state_type(HS_ReflectDamage); + state->set_left_time(std::min(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } } ColliderComponent* Human::GetBoxBound() diff --git a/server/gameserver/human.h b/server/gameserver/human.h index ebe0aee..51d9cda 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -7,6 +7,8 @@ namespace MetaData { struct Player; struct Equip; + struct Dress; + struct Skill; } enum HumanStatus @@ -35,6 +37,8 @@ class Human : public Entity MetaData::Player* meta = nullptr; MetaData::Equip* helmet_meta = nullptr; MetaData::Equip* chest_meta = nullptr; + MetaData::Dress* skin_meta = nullptr; + MetaData::Skill* skill_meta = nullptr; Vector2D move_dir; Vector2D attack_dir;