mirror of https://github.com/AxioDL/metaforce.git
CDrone: Implement UpdateLaser
This commit is contained in:
parent
8d45dc6da9
commit
51bb242af9
|
@ -5,6 +5,7 @@
|
||||||
#include "Runtime/CSimplePool.hpp"
|
#include "Runtime/CSimplePool.hpp"
|
||||||
#include "Runtime/CStateManager.hpp"
|
#include "Runtime/CStateManager.hpp"
|
||||||
#include "Runtime/GameGlobalObjects.hpp"
|
#include "Runtime/GameGlobalObjects.hpp"
|
||||||
|
#include "Runtime/MP1/World/CDroneLaser.hpp"
|
||||||
#include "Runtime/Particle/CWeaponDescription.hpp"
|
#include "Runtime/Particle/CWeaponDescription.hpp"
|
||||||
#include "Runtime/Weapon/CGameProjectile.hpp"
|
#include "Runtime/Weapon/CGameProjectile.hpp"
|
||||||
#include "Runtime/Weapon/CWeapon.hpp"
|
#include "Runtime/Weapon/CWeapon.hpp"
|
||||||
|
@ -32,7 +33,7 @@ CDrone::CDrone(TUniqueId uid, std::string_view name, EFlavorType flavor, const C
|
||||||
s32 sId, bool b1)
|
s32 sId, bool b1)
|
||||||
: CPatterned(ECharacter::Drone, uid, name, flavor, info, xf, std::move(mData), pInfo, movement, colliderType, bodyType,
|
: CPatterned(ECharacter::Drone, uid, name, flavor, info, xf, std::move(mData), pInfo, movement, colliderType, bodyType,
|
||||||
actParms, flavor == EFlavorType::Zero ? EKnockBackVariant::Medium : EKnockBackVariant::Large)
|
actParms, flavor == EFlavorType::Zero ? EKnockBackVariant::Medium : EKnockBackVariant::Large)
|
||||||
, x568_(aId1)
|
, x568_laserParticlesId(aId1)
|
||||||
, x56c_(g_SimplePool->GetObj({SBIG('CRSC'), crscId}))
|
, x56c_(g_SimplePool->GetObj({SBIG('CRSC'), crscId}))
|
||||||
, x57c_flares(std::move(flares))
|
, x57c_flares(std::move(flares))
|
||||||
, x590_(dInfo1)
|
, x590_(dInfo1)
|
||||||
|
@ -347,7 +348,7 @@ void CDrone::Touch(CActor& act, CStateManager& mgr) {
|
||||||
if (TCastToPtr<CWeapon> weapon = act) {
|
if (TCastToPtr<CWeapon> weapon = act) {
|
||||||
if (IsAlive()) {
|
if (IsAlive()) {
|
||||||
x834_24_ = weapon->GetType() == EWeaponType::Wave;
|
x834_24_ = weapon->GetType() == EWeaponType::Wave;
|
||||||
if (HitShield(weapon->GetTranslation() - GetTranslation())) {
|
if (x3fc_flavor == CPatterned::EFlavorType::One && HitShield(weapon->GetTranslation() - GetTranslation())) {
|
||||||
x5e8_shieldTime = 1.f;
|
x5e8_shieldTime = 1.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -942,8 +943,16 @@ void CDrone::RemoveFromTeam(CStateManager& mgr) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDrone::UpdateLaser(CStateManager& mgr, u32 laserIdx, bool b1) {
|
void CDrone::UpdateLaser(CStateManager& mgr, u32 laserIdx, bool active) {
|
||||||
// TODO: Finish
|
if (active) {
|
||||||
|
if (x7d8_[laserIdx] == kInvalidUniqueId) {
|
||||||
|
x7d8_[laserIdx] = mgr.AllocateUniqueId();
|
||||||
|
mgr.AddObject(new CDroneLaser(x7d8_[laserIdx], GetAreaIdAlways(), GetTransform(), x568_laserParticlesId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CEntity* ent = mgr.ObjectById(x7d8_[laserIdx])) {
|
||||||
|
mgr.SendScriptMsg(ent, GetUniqueId(), active ? EScriptObjectMessage::Activate : EScriptObjectMessage::Deactivate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDrone::FireProjectile(CStateManager& mgr, const zeus::CTransform& xf, const TToken<CWeaponDescription>& weapon) {
|
void CDrone::FireProjectile(CStateManager& mgr, const zeus::CTransform& xf, const TToken<CWeaponDescription>& weapon) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace urde {
|
||||||
class CWeaponDescription;
|
class CWeaponDescription;
|
||||||
namespace MP1 {
|
namespace MP1 {
|
||||||
class CDrone : public CPatterned {
|
class CDrone : public CPatterned {
|
||||||
CAssetId x568_;
|
CAssetId x568_laserParticlesId;
|
||||||
TLockedToken<CCollisionResponseData> x56c_;
|
TLockedToken<CCollisionResponseData> x56c_;
|
||||||
TUniqueId x578_lightId = kInvalidUniqueId;
|
TUniqueId x578_lightId = kInvalidUniqueId;
|
||||||
TUniqueId x57a_ = kInvalidUniqueId;
|
TUniqueId x57a_ = kInvalidUniqueId;
|
||||||
|
@ -98,7 +98,7 @@ class CDrone : public CPatterned {
|
||||||
bool HitShield(const zeus::CVector3f& dir) const;
|
bool HitShield(const zeus::CVector3f& dir) const;
|
||||||
void AddToTeam(CStateManager& mgr) const;
|
void AddToTeam(CStateManager& mgr) const;
|
||||||
void RemoveFromTeam(CStateManager& mgr) const;
|
void RemoveFromTeam(CStateManager& mgr) const;
|
||||||
void UpdateLaser(CStateManager& mgr, u32 laserIdx, bool b1);
|
void UpdateLaser(CStateManager& mgr, u32 laserIdx, bool active);
|
||||||
void FireProjectile(CStateManager& mgr, const zeus::CTransform& xf, const TToken<CWeaponDescription>& weapon);
|
void FireProjectile(CStateManager& mgr, const zeus::CTransform& xf, const TToken<CWeaponDescription>& weapon);
|
||||||
void StrafeFromCompanions(CStateManager& mgr);
|
void StrafeFromCompanions(CStateManager& mgr);
|
||||||
void UpdateScanner(CStateManager& mgr, float dt);
|
void UpdateScanner(CStateManager& mgr, float dt);
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
namespace urde::MP1 {
|
namespace urde::MP1 {
|
||||||
CDroneLaser::CDroneLaser(TUniqueId uid, TAreaId aId, const zeus::CTransform& xf, CAssetId particle)
|
CDroneLaser::CDroneLaser(TUniqueId uid, TAreaId aId, const zeus::CTransform& xf, CAssetId particle)
|
||||||
: CActor(uid, true, "DroneLaser"sv, CEntityInfo(aId, CEntity::NullConnectionList), xf, CModelData::CModelDataNull(),
|
: CActor(uid, true, "DroneLaser"sv, CEntityInfo(aId, CEntity::NullConnectionList), xf, CModelData::CModelDataNull(),
|
||||||
CMaterialList(EMaterialTypes::NoStepLogic), CActorParameters::None(), kInvalidUniqueId)
|
CMaterialList(EMaterialTypes::NoStepLogic), CActorParameters::None().HotInThermal(true), kInvalidUniqueId)
|
||||||
, xf8_beamDesc(g_SimplePool->GetObj({SBIG('PART'), particle}))
|
, xf8_beamDesc(g_SimplePool->GetObj({SBIG('PART'), particle}))
|
||||||
, x104_beamParticle(std::make_unique<CElementGen>(xf8_beamDesc, CElementGen::EModelOrientationType::Normal,
|
, x104_beamParticle(std::make_unique<CElementGen>(xf8_beamDesc, CElementGen::EModelOrientationType::Normal,
|
||||||
CElementGen::EOptionalSystemFlags::One)) {}
|
CElementGen::EOptionalSystemFlags::One)) {}
|
||||||
|
|
||||||
void CDroneLaser::Accept(IVisitor& visitor) { visitor.Visit(this); }
|
void CDroneLaser::Accept(IVisitor& visitor) { visitor.Visit(this); }
|
||||||
|
|
||||||
void CDroneLaser::Think(float dt, CStateManager& mgr) { x104_beamParticle->Update(dt); }
|
void CDroneLaser::Think(float dt, CStateManager& mgr) { x104_beamParticle->Update(dt); }
|
||||||
|
|
Loading…
Reference in New Issue