1
This commit is contained in:
parent
60e1b43f34
commit
2a1d5bc661
@ -142,6 +142,95 @@ static void InternalCreateBullet(BulletInfo& bullet_info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CalcGunMuzzlePosition(Creature* c,
|
||||||
|
MetaData::Equip* weapon_meta,
|
||||||
|
MetaData::HeroShotAnimation* shot_animi,
|
||||||
|
glm::vec4& gun_muzzle_position,
|
||||||
|
int bulletIdx,
|
||||||
|
int bulletNum)
|
||||||
|
{
|
||||||
|
if (shot_animi) {
|
||||||
|
if (weapon_meta->i->shootfire() == DOUBLE_GUN_ANIMATION &&
|
||||||
|
bulletIdx > (int)(bulletNum / 2)) {
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
shot_animi->l_x,
|
||||||
|
shot_animi->l_y,
|
||||||
|
shot_animi->l_z,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (c->IsCar() && weapon_meta->i->shootfire() != DOUBLE_GUN_ANIMATION) {
|
||||||
|
switch (c->shot_hole) {
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
shot_animi->p3_x,
|
||||||
|
shot_animi->p3_y,
|
||||||
|
shot_animi->p3_z,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
shot_animi->p4_x,
|
||||||
|
shot_animi->p4_y,
|
||||||
|
shot_animi->p4_z,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
shot_animi->p5_x,
|
||||||
|
shot_animi->p5_y,
|
||||||
|
shot_animi->p5_z,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
shot_animi->r_x,
|
||||||
|
shot_animi->r_y,
|
||||||
|
shot_animi->r_z,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//end if
|
||||||
|
if (weapon_meta->gun_muzzle_position) {
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
std::get<0>(*weapon_meta->gun_muzzle_position.get()),
|
||||||
|
std::get<1>(*weapon_meta->gun_muzzle_position.get()),
|
||||||
|
std::get<2>(*weapon_meta->gun_muzzle_position.get()),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (weapon_meta->movex_position) {
|
||||||
|
gun_muzzle_position +=
|
||||||
|
glm::vec4(
|
||||||
|
std::get<0>(*weapon_meta->movex_position.get()),
|
||||||
|
std::get<1>(*weapon_meta->movex_position.get()),
|
||||||
|
std::get<2>(*weapon_meta->movex_position.get()),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void InternalShot(Creature* c,
|
void InternalShot(Creature* c,
|
||||||
MetaData::Equip* weapon_meta,
|
MetaData::Equip* weapon_meta,
|
||||||
MetaData::Equip* bullet_meta,
|
MetaData::Equip* bullet_meta,
|
||||||
@ -206,6 +295,8 @@ void InternalShot(Creature* c,
|
|||||||
c->room->xtimer.ModifyTimer(buff->remover_timer, weapon_meta->i->cast_time() / FRAME_RATE_MS);
|
c->room->xtimer.ModifyTimer(buff->remover_timer, weapon_meta->i->cast_time() / FRAME_RATE_MS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
MetaData::HeroShotAnimation* shot_animi = c->GetHeroMeta() ?
|
||||||
|
c->GetHeroMeta()->GetShotAnimi(weapon_meta->i->shootfire()) : nullptr;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int num = weapon_meta->bullet_born_offset.size();
|
int num = weapon_meta->bullet_born_offset.size();
|
||||||
for (auto& tuple : weapon_meta->bullet_born_offset) {
|
for (auto& tuple : weapon_meta->bullet_born_offset) {
|
||||||
@ -221,7 +312,6 @@ void InternalShot(Creature* c,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
bullet_dir.Rotate(bullet_angle / 180.0f);
|
bullet_dir.Rotate(bullet_angle / 180.0f);
|
||||||
#if 1
|
|
||||||
{
|
{
|
||||||
bool is_player = c->IsPlayer();
|
bool is_player = c->IsPlayer();
|
||||||
bool is_car = c->IsCar();
|
bool is_car = c->IsCar();
|
||||||
@ -236,92 +326,7 @@ void InternalShot(Creature* c,
|
|||||||
bullet_born_angle * A8_PI,
|
bullet_born_angle * A8_PI,
|
||||||
glm::vec3(0.0, 1.0, 0.0));
|
glm::vec3(0.0, 1.0, 0.0));
|
||||||
glm::vec4 gun_muzzle_position(0.0, 0.0, 0.0, 0.0);
|
glm::vec4 gun_muzzle_position(0.0, 0.0, 0.0, 0.0);
|
||||||
if (weapon_meta->i->shootfire()) {
|
CalcGunMuzzlePosition(c, weapon_meta, shot_animi, gun_muzzle_position, i, num);
|
||||||
MetaData::Player* hero_meta = c->GetHeroMeta();
|
|
||||||
if (hero_meta) {
|
|
||||||
auto itr = hero_meta->shot_animations.find(weapon_meta->i->shootfire());
|
|
||||||
if (itr != hero_meta->shot_animations.end()) {
|
|
||||||
if (weapon_meta->i->shootfire() == DOUBLE_GUN_ANIMATION &&
|
|
||||||
i > (int)(num / 2)) {
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
itr->second.l_x,
|
|
||||||
itr->second.l_y,
|
|
||||||
itr->second.l_z,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
if (c->IsCar() && weapon_meta->i->shootfire() != DOUBLE_GUN_ANIMATION) {
|
|
||||||
switch (c->shot_hole) {
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
itr->second.p3_x,
|
|
||||||
itr->second.p3_y,
|
|
||||||
itr->second.p3_z,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
itr->second.p4_x,
|
|
||||||
itr->second.p4_y,
|
|
||||||
itr->second.p4_z,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
{
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
itr->second.p5_x,
|
|
||||||
itr->second.p5_y,
|
|
||||||
itr->second.p5_z,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
itr->second.r_x,
|
|
||||||
itr->second.r_y,
|
|
||||||
itr->second.r_z,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (weapon_meta->gun_muzzle_position) {
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
std::get<0>(*weapon_meta->gun_muzzle_position.get()),
|
|
||||||
std::get<1>(*weapon_meta->gun_muzzle_position.get()),
|
|
||||||
std::get<2>(*weapon_meta->gun_muzzle_position.get()),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (weapon_meta->movex_position) {
|
|
||||||
gun_muzzle_position +=
|
|
||||||
glm::vec4(
|
|
||||||
std::get<0>(*weapon_meta->movex_position.get()),
|
|
||||||
std::get<1>(*weapon_meta->movex_position.get()),
|
|
||||||
std::get<2>(*weapon_meta->movex_position.get()),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
glm::vec4 v = transform * gun_muzzle_position;
|
glm::vec4 v = transform * gun_muzzle_position;
|
||||||
bullet_born_offset = a8::Vec2(v.z *10*1, v.x*10*-1);
|
bullet_born_offset = a8::Vec2(v.z *10*1, v.x*10*-1);
|
||||||
bullet_born_pos = c->GetPos() + bullet_born_offset;
|
bullet_born_pos = c->GetPos() + bullet_born_offset;
|
||||||
@ -348,7 +353,6 @@ void InternalShot(Creature* c,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
BulletInfo bullet_info;
|
BulletInfo bullet_info;
|
||||||
bullet_info.c = c->GetWeakPtrRef();
|
bullet_info.c = c->GetWeakPtrRef();
|
||||||
|
@ -646,6 +646,12 @@ namespace MetaData
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HeroShotAnimation* Player::GetShotAnimi(int shotfire)
|
||||||
|
{
|
||||||
|
auto itr = shot_animations.find(shotfire);
|
||||||
|
return itr != shot_animations.end() ? &itr->second : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void Robot::Init()
|
void Robot::Init()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -124,28 +124,24 @@ namespace MetaData
|
|||||||
struct HeroShotAnimation
|
struct HeroShotAnimation
|
||||||
{
|
{
|
||||||
int id = 0;
|
int id = 0;
|
||||||
|
int t = 0;
|
||||||
|
|
||||||
float r_t = 0;
|
|
||||||
float r_x = 0;
|
float r_x = 0;
|
||||||
float r_y = 0;
|
float r_y = 0;
|
||||||
float r_z = 0;
|
float r_z = 0;
|
||||||
|
|
||||||
float l_t = 0;
|
|
||||||
float l_x = 0;
|
float l_x = 0;
|
||||||
float l_y = 0;
|
float l_y = 0;
|
||||||
float l_z = 0;
|
float l_z = 0;
|
||||||
|
|
||||||
float p3_t = 0;
|
|
||||||
float p3_x = 0;
|
float p3_x = 0;
|
||||||
float p3_y = 0;
|
float p3_y = 0;
|
||||||
float p3_z = 0;
|
float p3_z = 0;
|
||||||
|
|
||||||
float p4_t = 0;
|
|
||||||
float p4_x = 0;
|
float p4_x = 0;
|
||||||
float p4_y = 0;
|
float p4_y = 0;
|
||||||
float p4_z = 0;
|
float p4_z = 0;
|
||||||
|
|
||||||
float p5_t = 0;
|
|
||||||
float p5_x = 0;
|
float p5_x = 0;
|
||||||
float p5_y = 0;
|
float p5_y = 0;
|
||||||
float p5_z = 0;
|
float p5_z = 0;
|
||||||
@ -166,6 +162,7 @@ namespace MetaData
|
|||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
int RandDrop();
|
int RandDrop();
|
||||||
|
HeroShotAnimation* GetShotAnimi(int shotfire);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NpcStandard
|
struct NpcStandard
|
||||||
|
@ -583,56 +583,49 @@ private:
|
|||||||
for (auto& key2 : keys2) {
|
for (auto& key2 : keys2) {
|
||||||
auto anim_xobj = hero_xobj->At(key2);
|
auto anim_xobj = hero_xobj->At(key2);
|
||||||
int id = a8::XValue(key2);
|
int id = a8::XValue(key2);
|
||||||
float r_t = 0;
|
int t = anim_xobj->At("t") ? anim_xobj->At("t")->AsXValue().GetInt() : 0;
|
||||||
|
|
||||||
float r_x = 0;
|
float r_x = 0;
|
||||||
float r_y = 0;
|
float r_y = 0;
|
||||||
float r_z = 0;
|
float r_z = 0;
|
||||||
if (anim_xobj->At("r") && anim_xobj->At("r")->IsObject()) {
|
if (anim_xobj->At("r") && anim_xobj->At("r")->IsObject()) {
|
||||||
r_t = anim_xobj->At("t")->AsXValue().GetDouble();
|
|
||||||
r_x = anim_xobj->At("r")->At("x")->AsXValue().GetDouble();
|
r_x = anim_xobj->At("r")->At("x")->AsXValue().GetDouble();
|
||||||
r_y = anim_xobj->At("r")->At("y")->AsXValue().GetDouble();
|
r_y = anim_xobj->At("r")->At("y")->AsXValue().GetDouble();
|
||||||
r_z = anim_xobj->At("r")->At("z")->AsXValue().GetDouble();
|
r_z = anim_xobj->At("r")->At("z")->AsXValue().GetDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
float l_t = 0;
|
|
||||||
float l_x = 0;
|
float l_x = 0;
|
||||||
float l_y = 0;
|
float l_y = 0;
|
||||||
float l_z = 0;
|
float l_z = 0;
|
||||||
if (anim_xobj->At("l") && anim_xobj->At("l")->IsObject()) {
|
if (anim_xobj->At("l") && anim_xobj->At("l")->IsObject()) {
|
||||||
l_t = anim_xobj->At("t")->AsXValue().GetDouble();
|
|
||||||
l_x = anim_xobj->At("l")->At("x")->AsXValue().GetDouble();
|
l_x = anim_xobj->At("l")->At("x")->AsXValue().GetDouble();
|
||||||
l_y = anim_xobj->At("l")->At("y")->AsXValue().GetDouble();
|
l_y = anim_xobj->At("l")->At("y")->AsXValue().GetDouble();
|
||||||
l_z = anim_xobj->At("l")->At("z")->AsXValue().GetDouble();
|
l_z = anim_xobj->At("l")->At("z")->AsXValue().GetDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
float p3_t = 0;
|
|
||||||
float p3_x = 0;
|
float p3_x = 0;
|
||||||
float p3_y = 0;
|
float p3_y = 0;
|
||||||
float p3_z = 0;
|
float p3_z = 0;
|
||||||
if (anim_xobj->At("p3") && anim_xobj->At("p3")->IsObject()) {
|
if (anim_xobj->At("p3") && anim_xobj->At("p3")->IsObject()) {
|
||||||
p3_t = anim_xobj->At("t")->AsXValue().GetDouble();
|
|
||||||
p3_x = anim_xobj->At("p3")->At("x")->AsXValue().GetDouble();
|
p3_x = anim_xobj->At("p3")->At("x")->AsXValue().GetDouble();
|
||||||
p3_y = anim_xobj->At("p3")->At("y")->AsXValue().GetDouble();
|
p3_y = anim_xobj->At("p3")->At("y")->AsXValue().GetDouble();
|
||||||
p3_z = anim_xobj->At("p3")->At("z")->AsXValue().GetDouble();
|
p3_z = anim_xobj->At("p3")->At("z")->AsXValue().GetDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
float p4_t = 0;
|
|
||||||
float p4_x = 0;
|
float p4_x = 0;
|
||||||
float p4_y = 0;
|
float p4_y = 0;
|
||||||
float p4_z = 0;
|
float p4_z = 0;
|
||||||
if (anim_xobj->At("p4") && anim_xobj->At("p4")->IsObject()) {
|
if (anim_xobj->At("p4") && anim_xobj->At("p4")->IsObject()) {
|
||||||
p4_t = anim_xobj->At("t")->AsXValue().GetDouble();
|
|
||||||
p4_x = anim_xobj->At("p4")->At("x")->AsXValue().GetDouble();
|
p4_x = anim_xobj->At("p4")->At("x")->AsXValue().GetDouble();
|
||||||
p4_y = anim_xobj->At("p4")->At("y")->AsXValue().GetDouble();
|
p4_y = anim_xobj->At("p4")->At("y")->AsXValue().GetDouble();
|
||||||
p4_z = anim_xobj->At("p4")->At("z")->AsXValue().GetDouble();
|
p4_z = anim_xobj->At("p4")->At("z")->AsXValue().GetDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
float p5_t = 0;
|
|
||||||
float p5_x = 0;
|
float p5_x = 0;
|
||||||
float p5_y = 0;
|
float p5_y = 0;
|
||||||
float p5_z = 0;
|
float p5_z = 0;
|
||||||
if (anim_xobj->At("p5") && anim_xobj->At("p5")->IsObject()) {
|
if (anim_xobj->At("p5") && anim_xobj->At("p5")->IsObject()) {
|
||||||
p5_t = anim_xobj->At("t")->AsXValue().GetDouble();
|
|
||||||
p5_x = anim_xobj->At("p5")->At("x")->AsXValue().GetDouble();
|
p5_x = anim_xobj->At("p5")->At("x")->AsXValue().GetDouble();
|
||||||
p5_y = anim_xobj->At("p5")->At("y")->AsXValue().GetDouble();
|
p5_y = anim_xobj->At("p5")->At("y")->AsXValue().GetDouble();
|
||||||
p5_z = anim_xobj->At("p5")->At("z")->AsXValue().GetDouble();
|
p5_z = anim_xobj->At("p5")->At("z")->AsXValue().GetDouble();
|
||||||
@ -643,28 +636,24 @@ private:
|
|||||||
if (hero_meta) {
|
if (hero_meta) {
|
||||||
MetaData::HeroShotAnimation anim;
|
MetaData::HeroShotAnimation anim;
|
||||||
anim.id = id;
|
anim.id = id;
|
||||||
|
anim.t = t;
|
||||||
|
|
||||||
anim.r_t = r_t;
|
|
||||||
anim.r_x = r_x;
|
anim.r_x = r_x;
|
||||||
anim.r_y = r_y;
|
anim.r_y = r_y;
|
||||||
anim.r_z = r_z;
|
anim.r_z = r_z;
|
||||||
|
|
||||||
anim.l_t = l_t;
|
|
||||||
anim.l_x = l_x;
|
anim.l_x = l_x;
|
||||||
anim.l_y = l_y;
|
anim.l_y = l_y;
|
||||||
anim.l_z = l_z;
|
anim.l_z = l_z;
|
||||||
|
|
||||||
anim.p3_t = p3_t;
|
|
||||||
anim.p3_x = p3_x;
|
anim.p3_x = p3_x;
|
||||||
anim.p3_y = p3_y;
|
anim.p3_y = p3_y;
|
||||||
anim.p3_z = p3_z;
|
anim.p3_z = p3_z;
|
||||||
|
|
||||||
anim.p4_t = p4_t;
|
|
||||||
anim.p4_x = p4_x;
|
anim.p4_x = p4_x;
|
||||||
anim.p4_y = p4_y;
|
anim.p4_y = p4_y;
|
||||||
anim.p4_z = p4_z;
|
anim.p4_z = p4_z;
|
||||||
|
|
||||||
anim.p5_t = p5_t;
|
|
||||||
anim.p5_x = p5_x;
|
anim.p5_x = p5_x;
|
||||||
anim.p5_y = p5_y;
|
anim.p5_y = p5_y;
|
||||||
anim.p5_z = p5_z;
|
anim.p5_z = p5_z;
|
||||||
@ -673,15 +662,14 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
a8::UdpLog::Instance()->Info
|
a8::UdpLog::Instance()->Info
|
||||||
("shot animation hero_id:%d anim_id:%d r_t:%f r_x:%f r_y:%f r_z:%f l_t:%f l_x:%f l_y:%f l_z:%f",
|
("shot animation hero_id:%d anim_id:%d t:%f r_x:%f r_y:%f r_z:%f l_x:%f l_y:%f l_z:%f",
|
||||||
{
|
{
|
||||||
hero_id,
|
hero_id,
|
||||||
id,
|
id,
|
||||||
r_t,
|
t,
|
||||||
r_x,
|
r_x,
|
||||||
r_y,
|
r_y,
|
||||||
r_z,
|
r_z,
|
||||||
l_t,
|
|
||||||
l_x,
|
l_x,
|
||||||
l_y,
|
l_y,
|
||||||
l_z
|
l_z
|
||||||
|
Loading…
x
Reference in New Issue
Block a user