mirror of https://github.com/AxioDL/metaforce.git
CBloodFlower: LaunchPollenProjectile fixes
This commit is contained in:
parent
c474b19b9d
commit
e305fbffab
|
@ -120,7 +120,7 @@ void CBloodFlower::LaunchPollenProjectile(const zeus::CTransform& xf, CStateMana
|
||||||
CProjectileInfo* proj = GetProjectileInfo();
|
CProjectileInfo* proj = GetProjectileInfo();
|
||||||
TLockedToken<CWeaponDescription> projToken = proj->Token();
|
TLockedToken<CWeaponDescription> projToken = proj->Token();
|
||||||
|
|
||||||
if (!projToken)
|
if (!projToken || !mgr.CanCreateProjectile(GetUniqueId(), EWeaponType::AI, w1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
zeus::CVector3f aimPos = mgr.GetPlayer().GetAimPosition(mgr, 0.f);
|
zeus::CVector3f aimPos = mgr.GetPlayer().GetAimPosition(mgr, 0.f);
|
||||||
|
@ -129,16 +129,16 @@ void CBloodFlower::LaunchPollenProjectile(const zeus::CTransform& xf, CStateMana
|
||||||
float f2 = (zDiff > 0.f ? var_f1 : -zDiff + var_f1);
|
float f2 = (zDiff > 0.f ? var_f1 : -zDiff + var_f1);
|
||||||
if (zDiff > 0.f)
|
if (zDiff > 0.f)
|
||||||
var_f1 = zDiff + var_f1;
|
var_f1 = zDiff + var_f1;
|
||||||
float f7 = std::sqrt(2.f * f2 / 4.9050002f) + std::sqrt(2.f * var_f1 / 4.9050002f);
|
float f7 = std::sqrt(2.f * f2 / 4.905f) + std::sqrt(2.f * var_f1 / 4.905f);
|
||||||
float f4 = 1.f / f7;
|
float f4 = 1.f / f7;
|
||||||
zeus::CVector3f vel{f4 * (aimPos.x() - xf.origin.x()), f4 * (aimPos.y() - xf.origin.y()),
|
zeus::CVector3f vel{f4 * (aimPos.x() - xf.origin.x()), f4 * (aimPos.y() - xf.origin.y()),
|
||||||
2.4525001f * f7 + (-zDiff / f7)};
|
2.4525f * f7 + (-zDiff / f7)};
|
||||||
if (CTargetableProjectile* targProj =
|
if (CTargetableProjectile* targProj =
|
||||||
CreateArcProjectile(mgr, GetProjectileInfo()->Token(), zeus::CTransform::Translate(xf.origin),
|
CreateArcProjectile(mgr, GetProjectileInfo()->Token(), zeus::CTransform::Translate(xf.origin),
|
||||||
GetProjectileInfo()->GetDamage(), kInvalidUniqueId)) {
|
GetProjectileInfo()->GetDamage(), kInvalidUniqueId)) {
|
||||||
targProj->ProjectileWeapon().SetVelocity(CProjectileWeapon::GetTickPeriod() * vel);
|
targProj->ProjectileWeapon().SetVelocity(CProjectileWeapon::GetTickPeriod() * vel);
|
||||||
targProj->ProjectileWeapon().SetGravity(CProjectileWeapon::GetTickPeriod() *
|
targProj->ProjectileWeapon().SetGravity(CProjectileWeapon::GetTickPeriod() *
|
||||||
zeus::CVector3f(0.f, 0.f, -4.9050002f));
|
zeus::CVector3f(0.f, 0.f, -4.905f));
|
||||||
mgr.AddObject(targProj);
|
mgr.AddObject(targProj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,8 @@ void CBloodFlower::Render(CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
EWeaponCollisionResponseTypes CBloodFlower::GetCollisionResponseType(const zeus::CVector3f&, const zeus::CVector3f&,
|
EWeaponCollisionResponseTypes CBloodFlower::GetCollisionResponseType(const zeus::CVector3f&, const zeus::CVector3f&,
|
||||||
const CWeaponMode& weaponMode, EProjectileAttrib) const {
|
const CWeaponMode& weaponMode,
|
||||||
|
EProjectileAttrib) const {
|
||||||
const auto* const damageVulnerability = GetDamageVulnerability();
|
const auto* const damageVulnerability = GetDamageVulnerability();
|
||||||
|
|
||||||
if (damageVulnerability->WeaponHurts(weaponMode, false)) {
|
if (damageVulnerability->WeaponHurts(weaponMode, false)) {
|
||||||
|
@ -251,11 +252,12 @@ CTargetableProjectile* CBloodFlower::CreateArcProjectile(CStateManager& mgr, con
|
||||||
const zeus::CTransform& xf, const CDamageInfo& damage,
|
const zeus::CTransform& xf, const CDamageInfo& damage,
|
||||||
TUniqueId uid) {
|
TUniqueId uid) {
|
||||||
|
|
||||||
if (!x578_projectileDesc)
|
if (!x578_projectileDesc) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
TUniqueId projId = mgr.AllocateUniqueId();
|
TUniqueId projId = mgr.AllocateUniqueId();
|
||||||
CTargetableProjectile* targProj = new CTargetableProjectile(
|
auto* targProj = new CTargetableProjectile(
|
||||||
desc, EWeaponType::AI, xf, EMaterialTypes::Character, damage, x5dc_projectileDamage, projId, GetAreaIdAlways(),
|
desc, EWeaponType::AI, xf, EMaterialTypes::Character, damage, x5dc_projectileDamage, projId, GetAreaIdAlways(),
|
||||||
GetUniqueId(), x578_projectileDesc, uid, EProjectileAttrib::None, {x5c4_visorParticle}, x5d4_visorSfx, false);
|
GetUniqueId(), x578_projectileDesc, uid, EProjectileAttrib::None, {x5c4_visorParticle}, x5d4_visorSfx, false);
|
||||||
if (mgr.GetPlayer().GetOrbitTargetId() == GetUniqueId()) {
|
if (mgr.GetPlayer().GetOrbitTargetId() == GetUniqueId()) {
|
||||||
|
|
Loading…
Reference in New Issue