1
This commit is contained in:
parent
8abeb7f234
commit
1efbf7783e
@ -22,11 +22,13 @@ GunGrasp::~GunGrasp()
|
|||||||
|
|
||||||
void GunGrasp::Init()
|
void GunGrasp::Init()
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
owner_->GetTrigger()->AddListener
|
owner_->GetTrigger()->AddListener
|
||||||
(
|
(
|
||||||
kDieEvent,
|
kTakeonWeaponEvent
|
||||||
[this] (const a8::Args& args) mutable
|
[this] (const a8::Args& args) mutable
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -3,30 +3,12 @@
|
|||||||
#include "mt/Grasp.h"
|
#include "mt/Grasp.h"
|
||||||
|
|
||||||
IMPL_TABLE(mt::Grasp)
|
IMPL_TABLE(mt::Grasp)
|
||||||
std::map<long long, std::map<int, mt::GraspBuffs>> mt::Grasp::hero_weapon_hash_;
|
|
||||||
|
|
||||||
static std::set<int> hero_lv_sets({1, 5, 10, 15});
|
|
||||||
|
|
||||||
namespace mt
|
namespace mt
|
||||||
{
|
{
|
||||||
|
|
||||||
void Grasp::Init1()
|
void Grasp::Init1()
|
||||||
{
|
{
|
||||||
buff1_meta = mt::GraspBuff::GetById(graspbuff_id1());
|
|
||||||
if (graspbuff_id1() && !buff1_meta) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
floor2_buff_meta = mt::GraspBuff::GetById(graspbuff_id1_floor2());
|
|
||||||
if (graspbuff_id1_floor2() && !floor2_buff_meta) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
buff2_meta = mt::GraspBuff::GetById(graspbuff_id2());
|
|
||||||
if (graspbuff_id2() && !buff2_meta) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
if (hero_lv_sets.find(hero_lv()) == hero_lv_sets.end()) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Grasp::Init2()
|
void Grasp::Init2()
|
||||||
@ -36,104 +18,6 @@ namespace mt
|
|||||||
|
|
||||||
void Grasp::StaticPreInit()
|
void Grasp::StaticPreInit()
|
||||||
{
|
{
|
||||||
Traverse
|
|
||||||
(
|
|
||||||
[] (const mt::Grasp* meta, bool& stop)
|
|
||||||
{
|
|
||||||
auto itr = hero_weapon_hash_.find(a8::MakeInt64(meta->hero_id(), meta->weapon_id()));
|
|
||||||
if (itr != hero_weapon_hash_.end()) {
|
|
||||||
auto itr2 = itr->second.find(meta->hero_lv());
|
|
||||||
if (itr2 == itr->second.end()) {
|
|
||||||
itr->second[meta->hero_lv()] = GraspBuffs();
|
|
||||||
}
|
|
||||||
itr2 = itr->second.find(meta->hero_lv());
|
|
||||||
if (itr2 == itr->second.end()) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
if (meta->buff1_meta && meta->floor2_buff_meta) {
|
|
||||||
itr2->second.push_back(std::make_tuple(meta->buff1_meta, meta->floor2_buff_meta));
|
|
||||||
} else {
|
|
||||||
if (meta->buff1_meta) {
|
|
||||||
itr2->second.push_back(std::make_tuple(meta->buff1_meta, nullptr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (meta->buff2_meta) {
|
|
||||||
itr2->second.push_back(std::make_tuple(meta->buff2_meta, nullptr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
auto merge_func =
|
|
||||||
[] (mt::GraspBuffs* a, mt::GraspBuffs* b)
|
|
||||||
{
|
|
||||||
for (auto& tuple1 : *b) {
|
|
||||||
bool found = false;
|
|
||||||
for (auto& tuple2 : *a) {
|
|
||||||
if (std::get<0>(tuple1) && std::get<1>(tuple1)) {
|
|
||||||
if (std::get<0>(tuple1) == std::get<0>(tuple2) &&
|
|
||||||
std::get<1>(tuple1) == std::get<1>(tuple2)) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (std::get<0>(tuple1) &&
|
|
||||||
(
|
|
||||||
std::get<0>(tuple1) == std::get<0>(tuple2) ||
|
|
||||||
std::get<0>(tuple1) == std::get<1>(tuple2)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
} else if (std::get<1>(tuple1) &&
|
|
||||||
(std::get<1>(tuple1) == std::get<0>(tuple2) ||
|
|
||||||
std::get<1>(tuple1) == std::get<1>(tuple2))
|
|
||||||
) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}//end for tuple2
|
|
||||||
if (!found) {
|
|
||||||
a->push_back(tuple1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
for (auto& pair : hero_weapon_hash_) {
|
|
||||||
if (!pair.second.empty()) {
|
|
||||||
std::vector<std::tuple<int, mt::GraspBuffs*>> tuples;
|
|
||||||
{
|
|
||||||
for (auto& pair2 : pair.second) {
|
|
||||||
tuples.push_back(std::make_tuple(pair2.first, &pair2.second));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::sort
|
|
||||||
(tuples.begin(), tuples.end(),
|
|
||||||
[] (std::tuple<int, mt::GraspBuffs*>& a, std::tuple<int, mt::GraspBuffs*>& b) -> bool
|
|
||||||
{
|
|
||||||
if (std::get<0>(a) == std::get<0>(b)) {
|
|
||||||
abort();
|
|
||||||
} else {
|
|
||||||
return std::get<0>(a) > std::get<0>(b);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
for (size_t i = tuples.size() - 1; i >= 0; ++i) {
|
|
||||||
int lv = std::get<0>(tuples[i]);
|
|
||||||
auto buffs = std::get<1>(tuples[i]);
|
|
||||||
for (size_t ii = 0; ii < tuples.size(); ++ii) {
|
|
||||||
if (std::get<0>(tuples[ii]) < lv) {
|
|
||||||
merge_func(buffs, std::get<1>(tuples[ii]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GraspBuffs* Grasp::GetGrasp(int hero_id, int hero_lv, int weapon_id)
|
|
||||||
{
|
|
||||||
auto itr = hero_weapon_hash_.find(a8::MakeInt64(hero_id, weapon_id));
|
|
||||||
if (itr != hero_weapon_hash_.end()) {
|
|
||||||
auto itr2 = itr->second.find(hero_lv);
|
|
||||||
return itr2 != itr->second.end() ? &itr2->second : nullptr;
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
namespace mt
|
namespace mt
|
||||||
{
|
{
|
||||||
typedef std::vector<std::tuple<const mt::GraspBuff*, const mt::GraspBuff*>> GraspBuffs;
|
|
||||||
|
|
||||||
DECLARE_ID_TABLE(Grasp, mtb::Grasp,
|
DECLARE_ID_TABLE(Grasp, mtb::Grasp,
|
||||||
"grasp@grasp.json",
|
"grasp@grasp.json",
|
||||||
@ -17,14 +16,6 @@ namespace mt
|
|||||||
void Init2();
|
void Init2();
|
||||||
void StaticPreInit();
|
void StaticPreInit();
|
||||||
|
|
||||||
const mt::GraspBuff* buff1_meta = nullptr;
|
|
||||||
const mt::GraspBuff* floor2_buff_meta = nullptr;
|
|
||||||
const mt::GraspBuff* buff2_meta = nullptr;
|
|
||||||
|
|
||||||
static GraspBuffs* GetGrasp(int hero_id, int hero_lv, int weapon_id);
|
|
||||||
|
|
||||||
private:
|
|
||||||
static std::map<long long, std::map<int, GraspBuffs>> hero_weapon_hash_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@ namespace mtb
|
|||||||
int graspbuff_id1_floor2() const { return graspbuff_id1_floor2_; };
|
int graspbuff_id1_floor2() const { return graspbuff_id1_floor2_; };
|
||||||
int graspbuff_id2() const { return graspbuff_id2_; };
|
int graspbuff_id2() const { return graspbuff_id2_; };
|
||||||
int weapon_id() const { return weapon_id_; };
|
int weapon_id() const { return weapon_id_; };
|
||||||
|
const std::string add_buff_list() const { return add_buff_list_; };
|
||||||
|
const std::string remove_buff_list() const { return remove_buff_list_; };
|
||||||
|
|
||||||
bool has_grasp_id() const { return __flags__.test(0);};
|
bool has_grasp_id() const { return __flags__.test(0);};
|
||||||
bool has_hero_id() const { return __flags__.test(1);};
|
bool has_hero_id() const { return __flags__.test(1);};
|
||||||
@ -25,6 +27,8 @@ namespace mtb
|
|||||||
bool has_graspbuff_id1_floor2() const { return __flags__.test(4);};
|
bool has_graspbuff_id1_floor2() const { return __flags__.test(4);};
|
||||||
bool has_graspbuff_id2() const { return __flags__.test(5);};
|
bool has_graspbuff_id2() const { return __flags__.test(5);};
|
||||||
bool has_weapon_id() const { return __flags__.test(6);};
|
bool has_weapon_id() const { return __flags__.test(6);};
|
||||||
|
bool has_add_buff_list() const { return __flags__.test(7);};
|
||||||
|
bool has_remove_buff_list() const { return __flags__.test(8);};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -35,9 +39,11 @@ namespace mtb
|
|||||||
int graspbuff_id1_floor2_ = 0;
|
int graspbuff_id1_floor2_ = 0;
|
||||||
int graspbuff_id2_ = 0;
|
int graspbuff_id2_ = 0;
|
||||||
int weapon_id_ = 0;
|
int weapon_id_ = 0;
|
||||||
|
std::string add_buff_list_;
|
||||||
|
std::string remove_buff_list_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::bitset<7> __flags__;
|
std::bitset<9> __flags__;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -748,7 +748,7 @@ namespace mtb
|
|||||||
{
|
{
|
||||||
a8::reflect::Class* meta_class = nullptr;
|
a8::reflect::Class* meta_class = nullptr;
|
||||||
if (!meta_class) {
|
if (!meta_class) {
|
||||||
meta_class = new a8::reflect::Class("Grasp", 7, 0);
|
meta_class = new a8::reflect::Class("Grasp", 9, 0);
|
||||||
meta_class->SetSimpleField(0, "grasp_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, grasp_id_));
|
meta_class->SetSimpleField(0, "grasp_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, grasp_id_));
|
||||||
meta_class->SetSimpleField(1, "hero_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, hero_id_));
|
meta_class->SetSimpleField(1, "hero_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, hero_id_));
|
||||||
meta_class->SetSimpleField(2, "hero_lv", a8::reflect::ET_INT32, my_offsetof2(Grasp, hero_lv_));
|
meta_class->SetSimpleField(2, "hero_lv", a8::reflect::ET_INT32, my_offsetof2(Grasp, hero_lv_));
|
||||||
@ -756,6 +756,8 @@ namespace mtb
|
|||||||
meta_class->SetSimpleField(4, "graspbuff_id1_floor2", a8::reflect::ET_INT32, my_offsetof2(Grasp, graspbuff_id1_floor2_));
|
meta_class->SetSimpleField(4, "graspbuff_id1_floor2", a8::reflect::ET_INT32, my_offsetof2(Grasp, graspbuff_id1_floor2_));
|
||||||
meta_class->SetSimpleField(5, "graspbuff_id2", a8::reflect::ET_INT32, my_offsetof2(Grasp, graspbuff_id2_));
|
meta_class->SetSimpleField(5, "graspbuff_id2", a8::reflect::ET_INT32, my_offsetof2(Grasp, graspbuff_id2_));
|
||||||
meta_class->SetSimpleField(6, "weapon_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, weapon_id_));
|
meta_class->SetSimpleField(6, "weapon_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, weapon_id_));
|
||||||
|
meta_class->SetSimpleField(7, "add_buff_list", a8::reflect::ET_STRING, my_offsetof2(Grasp, add_buff_list_));
|
||||||
|
meta_class->SetSimpleField(8, "remove_buff_list", a8::reflect::ET_STRING, my_offsetof2(Grasp, remove_buff_list_));
|
||||||
}
|
}
|
||||||
return meta_class;
|
return meta_class;
|
||||||
}
|
}
|
||||||
|
@ -97,6 +97,7 @@ void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
DispatchEvent(kTakeonWeaponEvent, {old_weapon, new_weapon});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::Shot(const mt::Equip* weapon_meta)
|
void Trigger::Shot(const mt::Equip* weapon_meta)
|
||||||
|
@ -41,6 +41,7 @@ enum EventId_e
|
|||||||
kAttacked,
|
kAttacked,
|
||||||
kStartJump,
|
kStartJump,
|
||||||
kEndJump,
|
kEndJump,
|
||||||
|
kTakeonWeaponEvent
|
||||||
};
|
};
|
||||||
|
|
||||||
class Weapon;
|
class Weapon;
|
||||||
|
@ -564,6 +564,8 @@ message Grasp
|
|||||||
optional int32 graspbuff_id1_floor2 = 5;
|
optional int32 graspbuff_id1_floor2 = 5;
|
||||||
optional int32 graspbuff_id2 = 6;
|
optional int32 graspbuff_id2 = 6;
|
||||||
optional int32 weapon_id = 7;
|
optional int32 weapon_id = 7;
|
||||||
|
optional string add_buff_list = 8;
|
||||||
|
optional string remove_buff_list = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GraspBuff
|
message GraspBuff
|
||||||
|
Loading…
x
Reference in New Issue
Block a user