isle/LEGO1/lego/legoomni/include/act3ammo.h
Fabian Neundorf ea61077c1b
Some checks are pending
Analyze / ${{ matrix.who }} annotations (CONFIG) (push) Waiting to run
Analyze / ${{ matrix.who }} annotations (ISLE) (push) Waiting to run
Analyze / ${{ matrix.who }} annotations (LEGO1) (push) Waiting to run
Build / Download original binaries (push) Waiting to run
Build / Current ${{ matrix.toolchain.name }} (map[clang-tidy:true msys-env:mingw-w64-i686 msystem:mingw32 name:msys2 mingw32 shell:msys2 {0} werror:true]) (push) Waiting to run
Build / Current ${{ matrix.toolchain.name }} (map[name:MSVC setup-cmake:true setup-msvc:true setup-ninja:true shell:sh]) (push) Waiting to run
Build / MSVC 4.20 (push) Waiting to run
Build / MSVC 4.20 (BETA10) (push) Waiting to run
Build / Verify decomp (push) Blocked by required conditions
Build / Upload artifacts (push) Blocked by required conditions
Format / C++ (push) Waiting to run
Naming / C++ (push) Waiting to run
Clear unknowns in Act3Ammo (#1715)
2026-01-12 02:49:16 +01:00

105 lines
2.5 KiB
C++

#ifndef ACT3AMMO_H
#define ACT3AMMO_H
#include "legopathactor.h"
#include "mxgeometry/mxgeometry3d.h"
class Act3;
// VTABLE: LEGO1 0x100d8460
// SIZE 0x1a0
class Act3Ammo : public LegoPathActor {
public:
enum {
c_pizza = 0x01,
c_donut = 0x02,
c_valid = 0x04,
c_withoutBoundary = 0x08,
c_sharkFood = 0x10
};
Act3Ammo();
~Act3Ammo() override;
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
void Animate(float p_time) override; // vtable+0x70
// FUNCTION: BETA10 0x10017750
MxU32 IsValid() { return m_ammoFlag & c_valid; }
// FUNCTION: BETA10 0x100177b0
Mx3DPointFloat* GetCoefficients() { return m_coefficients; }
// FUNCTION: BETA10 0x100177e0
MxFloat* GetApexParameter() { return &m_apexParameter; }
// FUNCTION: BETA10 0x1001fbd0
void SetValid(MxBool p_valid)
{
if (p_valid) {
m_ammoFlag |= c_valid;
}
else {
m_ammoFlag &= ~c_valid;
}
}
// FUNCTION: BETA10 0x1001fc80
MxU32 IsPizza() { return m_ammoFlag & c_pizza; }
// FUNCTION: BETA10 0x10021d60
MxU32 IsDonut() { return m_ammoFlag & c_donut; }
// FUNCTION: BETA10 0x1001fcb0
void SetShootWithoutBoundary(MxBool p_withoutBoundary)
{
if (p_withoutBoundary) {
m_ammoFlag |= c_withoutBoundary;
}
else {
m_ammoFlag &= ~c_withoutBoundary;
}
}
// FUNCTION: BETA10 0x10021d90
MxU32 IsShootWithoutBoundary() { return m_ammoFlag & c_withoutBoundary; }
void SetSharkFood(MxBool p_sharkFood)
{
if (p_sharkFood) {
m_ammoFlag |= c_sharkFood;
}
else {
m_ammoFlag &= ~c_sharkFood;
}
}
MxU32 IsSharkFood() { return m_ammoFlag & c_sharkFood; }
MxFloat GetRotateTimeout() { return m_rotateTimeout; }
void SetRotateTimeout(MxFloat p_rotateTimeout) { m_rotateTimeout = p_rotateTimeout; }
MxResult Remove();
MxResult Create(Act3* p_world, MxU32 p_isPizza, MxS32 p_index);
MxResult CalculateArc(const Vector3& p_srcLoc, const Vector3& p_srcDir, const Vector3& p_srcUp);
MxResult Shoot(LegoPathController* p_p, LegoPathBoundary* p_boundary, MxFloat p_apexParameter);
MxResult Shoot(LegoPathController* p_p, MxFloat p_apexParameter);
// SYNTHETIC: LEGO1 0x10053880
// Act3Ammo::`scalar deleting destructor'
private:
MxResult CalculateTransform(float p_curveParameter, Matrix4& p_transform);
static Mx3DPointFloat g_hitTranslation;
MxU16 m_ammoFlag; // 0x154
MxFloat m_rotateTimeout; // 0x158
Act3* m_world; // 0x15c
Mx3DPointFloat m_coefficients[3]; // 0x160
MxFloat m_apexParameter; // 0x19c
};
#endif // ACT3AMMO_H