20 class bhkCollisionObject;
22 class bhkSimpleShapePhantom;
23 class BGSMaterialType;
25 class CombatController;
188 #ifndef SKYRIM_CROSS_VR
243 #define PROJECTILE_RUNTIME_DATA_CONTENT \
244 BSSimpleList<ImpactData*> impacts; \
245 NiTransform unk0A8; \
247 bhkSimpleShapePhantom* unk0E0; \
248 mutable BSSpinLock unk0E8; \
250 NiPoint3 linearVelocity; \
251 NiPointer<BSLight> light; \
253 NiPointer<ActorCause> actorCause; \
254 ObjectRefHandle shooter; \
255 ObjectRefHandle desiredTarget; \
256 BSSoundHandle sndHandle; \
257 BSSoundHandle sndCountdown; \
258 std::uint32_t* unk140; \
259 InventoryEntryData* unk148; \
260 BGSExplosion* explosion; \
262 MagicSystem::CastingSource castingSource; \
263 std::uint32_t pad164; \
264 EffectSetting* avEffect; \
265 NiPointer<QueuedFile> projectileDBFiles; \
266 std::uint64_t unk178; \
267 std::uint64_t unk180; \
272 float weaponDamage; \
273 float transparency; \
274 float explosionTimer; \
275 std::uint32_t unk1A4; \
278 TESObjectWEAP* weaponSource; \
279 TESAmmo* ammoSource; \
280 float distanceMoved; \
281 std::uint32_t unk1C4; \
283 std::uint32_t flags; \
286 std::uint8_t unk1D2[6];
302 #ifndef ENABLE_SKYRIM_AE
306 #ifndef ENABLE_SKYRIM_AE
307 static_assert(
sizeof(Projectile) == 0x1D8);
310 #undef PROJECTILE_RUNTIME_DATA_CONTENT
#define SKYRIM_REL_VR_VIRTUAL
Definition: Common.h:94
#define PROJECTILE_RUNTIME_DATA_CONTENT
Definition: Projectile.h:243
Definition: ActorCause.h:9
Definition: AlchemyItem.h:24
Definition: BGSKeyword.h:10
Definition: BGSMaterialType.h:12
Definition: BGSProjectile.h:79
Definition: BSAtomic.h:51
Definition: BSTArray.h:377
Definition: CombatController.h:23
Definition: EnchantmentItem.h:10
Definition: MagicCaster.h:25
Definition: MagicItem.h:30
Definition: NiAVObject.h:50
Definition: NiMatrix3.h:8
Definition: NiSmartPointer.h:9
Definition: Projectile.h:46
static Manager * GetSingleton()
BSTArray< WobbleControl > wobble
Definition: Projectile.h:55
BSTArray< ProjectileHandle > pending
Definition: Projectile.h:53
BSTArray< ProjectileHandle > limited
Definition: Projectile.h:52
BSTArray< ProjectileHandle > unlimited
Definition: Projectile.h:51
BSSpinLock projectileLock
Definition: Projectile.h:54
Definition: Projectile.h:30
SKYRIM_REL_VR_VIRTUAL void Unk_A6(void)
SKYRIM_REL_VR_VIRTUAL void OnKill()
SKYRIM_REL_VR_VIRTUAL void CleanUpPointersOnDisable()
NiNode * GetFireNode() override
Flags
Definition: Projectile.h:134
@ kAddedVisualEffectOnGround
SKYRIM_REL_VR_VIRTUAL void UpdateImpl(float a_delta)
NiAVObject * Load3D(bool a_backgroundLoading) override
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
Projectile * AsProjectile() override
bool GetAllowPromoteToPersistent() const override
static ProjectileHandle * LaunchSpell(ProjectileHandle *a_result, Actor *a_shooter, SpellItem *a_spell, const NiPoint3 &a_origin, const ProjectileRot &a_angles) noexcept
void MoveHavok(bool a_forceRec) override
const PROJECTILE_RUNTIME_DATA & GetProjectileRuntimeData() const noexcept
Definition: Projectile.h:296
SKYRIM_REL_VR_VIRTUAL float GetWeaponSpeedMult() const
void LoadGame(BGSLoadFormBuffer *a_buf) override
SKYRIM_REL_VR_VIRTUAL void ReportHavokDeactivation()
SKYRIM_REL_VR_VIRTUAL float GetGravity()
SKYRIM_REL_VR_VIRTUAL bool IsBarrierProjectile()
SKYRIM_REL_VR_VIRTUAL bool GetStopMainSoundAfterImpact()
SKYRIM_REL_VR_VIRTUAL bool GetKillOnCollision()
SKYRIM_REL_VR_VIRTUAL bhkShape * GetCollisionShape()
SKYRIM_REL_VR_VIRTUAL void OnTriggerEnter()
SKYRIM_REL_VR_VIRTUAL bool IsBeamProjectile()
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
SKYRIM_REL_VR_VIRTUAL void Process3D()
ActorCause * GetActorCause() const override
SKYRIM_REL_VR_VIRTUAL bool TurnOff(Actor *a_owner, bool a_noDeactivateSound)
static ProjectileHandle * Launch(ProjectileHandle *a_result, LaunchData &a_data) noexcept
bool Load(TESFile *a_mod) override
SKYRIM_REL_VR_VIRTUAL bool RunTargetPick()
void Set3D(NiAVObject *a_object, bool a_queue3DTasks=true) override
PROJECTILE_RUNTIME_DATA & GetProjectileRuntimeData() noexcept
Definition: Projectile.h:291
SKYRIM_REL_VR_VIRTUAL bool IsPermanent() const
SKYRIM_REL_VR_VIRTUAL float GetPowerSpeedMult() const
SKYRIM_REL_VR_VIRTUAL bool IsMissileProjectile()
SKYRIM_REL_VR_VIRTUAL bool IsFlameProjectile()
static constexpr auto RTTI
Definition: Projectile.h:32
SKYRIM_REL_VR_VIRTUAL bool ShouldUseDesiredTarget()
SKYRIM_REL_VR_VIRTUAL bool IsGrenadeProjectile()
SKYRIM_REL_VR_VIRTUAL void AddImpact(TESObjectREFR *a_ref, const NiPoint3 &a_targetLoc, const NiPoint3 &a_velocity, hkpCollidable *a_collidable, std::int32_t a_arg6, std::uint32_t a_arg7)
BGSProjectile * GetProjectileBase() const
void SaveGame(BGSSaveFormBuffer *a_buf) override
SKYRIM_REL_VR_VIRTUAL void PostLoad3D(NiAVObject *a_root)
SKYRIM_REL_VR_VIRTUAL void Handle3DLoaded()
bool OnAddCellPerformQueueReference(TESObjectCELL &a_cell) const override
static constexpr auto VTABLE
Definition: Projectile.h:33
void SetActorCause(ActorCause *a_cause) override
SKYRIM_REL_VR_VIRTUAL bool ShouldBeLimited()
MagicCaster * GetMagicCaster(MagicSystem::CastingSource a_source) override
void InitHavok() override
SKYRIM_REL_VR_VIRTUAL bool ProcessImpacts()
bool DetachHavok(NiAVObject *a_obj3D) override
SKYRIM_REL_VR_VIRTUAL void Update3D()
bool HasKeywordHelper(const BGSKeyword *a_keyword) const override
SKYRIM_REL_VR_VIRTUAL std::uint32_t GetCollisionGroup()
SKYRIM_REL_VR_VIRTUAL bool TargetsWholeBody()
void GetLinearVelocity(NiPoint3 &a_velocity) const override
static ProjectileHandle * LaunchSpell(ProjectileHandle *a_result, Actor *a_shooter, SpellItem *a_spell, MagicSystem::CastingSource a_source) noexcept
void Revert(BGSLoadFormBuffer *a_buf) override
SKYRIM_REL_VR_VIRTUAL bool HandleHits(hkpCollidable *a_collidable)
static ProjectileHandle * LaunchArrow(ProjectileHandle *a_result, Actor *a_shooter, TESAmmo *a_ammo, TESObjectWEAP *a_weap) noexcept
SKYRIM_REL_VR_VIRTUAL void Unk_AE(void)
static ProjectileHandle * LaunchArrow(ProjectileHandle *a_result, Actor *a_shooter, TESAmmo *a_ammo, TESObjectWEAP *a_weap, const NiPoint3 &a_origin, const ProjectileRot &a_angles) noexcept
Definition: SpellItem.h:16
Definition: TESObjectCELL.h:116
Definition: TESObjectREFR.h:113
Definition: TESObjectWEAP.h:79
Definition: bhkShape.h:10
Definition: hkpCollidable.h:13
CastingSource
Definition: MagicSystem.h:24
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_Projectile__LaunchData(684852, 392556, 0x1edadd8)
constexpr std::array< REL::VariantID, 4 > VTABLE_Projectile
Definition: Offsets_VTABLE.h:2788
ImpactResult
Definition: ImpactResults.h:6
constexpr REL::VariantID RTTI_Projectile(514046, 394480, 0x1f02a60)
constexpr std::array< REL::VariantID, 1 > VTABLE_Projectile__LaunchData
Definition: Offsets_VTABLE.h:273
constexpr REL::Version RUNTIME_SSE_1_6_629(1, 6, 629, 0)
Definition: BSTSingleton.h:50
Definition: Projectile.h:114
stl::enumeration< COL_LAYER, std::int32_t > collidedLayer
Definition: Projectile.h:123
BGSMaterialType * material
Definition: Projectile.h:121
std::int32_t damageRootNodeType
Definition: Projectile.h:122
NiPoint3 desiredTargetLoc
Definition: Projectile.h:117
std::uint16_t unk46
Definition: Projectile.h:127
NiPointer< bhkCollisionObject > colObj
Definition: Projectile.h:120
ImpactResult impactResult
Definition: Projectile.h:125
std::uint8_t unk49
Definition: Projectile.h:129
ObjectRefHandle collidee
Definition: Projectile.h:119
std::uint8_t unk48
Definition: Projectile.h:128
NiPoint3 negativeVelocity
Definition: Projectile.h:118
NiNode * damageRootNode
Definition: Projectile.h:124
std::uint16_t unk44
Definition: Projectile.h:126
Definition: Projectile.h:68
static constexpr auto RTTI
Definition: Projectile.h:70
bool chainShatter
Definition: Projectile.h:106
EnchantmentItem * enchantItem
Definition: Projectile.h:98
MagicItem * spell
Definition: Projectile.h:95
float unk60
Definition: Projectile.h:92
TESAmmo * ammoSource
Definition: Projectile.h:87
virtual ~LaunchData()=default
TESObjectREFR * desiredTarget
Definition: Projectile.h:91
float unk64
Definition: Projectile.h:93
BGSProjectile * projectileBase
Definition: Projectile.h:83
NiPoint3 origin
Definition: Projectile.h:81
std::uint32_t pad7C
Definition: Projectile.h:97
bool noDamageOutsideCombat
Definition: Projectile.h:104
std::int32_t area
Definition: Projectile.h:100
void * unk50
Definition: Projectile.h:90
bool useOrigin
Definition: Projectile.h:107
TESObjectWEAP * weaponSource
Definition: Projectile.h:86
NiPoint3 contactNormal
Definition: Projectile.h:82
LaunchData(Actor *a_shooter, const NiPoint3 &a_origin, const ProjectileRot &a_angles, MagicItem *a_spell)
float angleZ
Definition: Projectile.h:88
float power
Definition: Projectile.h:101
TESObjectREFR * shooter
Definition: Projectile.h:84
float scale
Definition: Projectile.h:102
MagicSystem::CastingSource castingSource
Definition: Projectile.h:96
float angleX
Definition: Projectile.h:89
CombatController * combatController
Definition: Projectile.h:85
bool alwaysHit
Definition: Projectile.h:103
LaunchData(Actor *a_shooter, const NiPoint3 &a_origin, const ProjectileRot &a_angles, TESAmmo *a_ammo, TESObjectWEAP *a_weap)
LaunchData(BGSProjectile *a_bproj, Actor *a_shooter, const NiPoint3 &a_origin, const ProjectileRot &a_angles)
bool forceConeOfFire
Definition: Projectile.h:109
static constexpr auto VTABLE
Definition: Projectile.h:71
bool deferInitialization
Definition: Projectile.h:108
TESObjectCELL * parentCell
Definition: Projectile.h:94
bool autoAim
Definition: Projectile.h:105
AlchemyItem * poison
Definition: Projectile.h:99
Definition: Projectile.h:242
Definition: Projectile.h:59
float z
Definition: Projectile.h:63
float x
Definition: Projectile.h:62
Definition: Projectile.h:36
NiMatrix3 unk00
Definition: Projectile.h:39
float wobble
Definition: Projectile.h:41
ProjectileHandle handle
Definition: Projectile.h:40