mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-17 05:21:15 +00:00
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
105 lines
2.5 KiB
C++
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
|