prime/include/MetroidPrime/Weapons/CWeapon.hpp

80 lines
2.6 KiB
C++

#ifndef _CWEAPON
#define _CWEAPON
#include "types.h"
#include "MetroidPrime/CActor.hpp"
#include "MetroidPrime/CDamageInfo.hpp"
#include "MetroidPrime/Weapons/WeaponTypes.hpp"
class CWeapon : public CActor {
public:
enum EProjectileAttrib {
kPA_None = 0,
kPA_PartialCharge = (1 << 0),
kPA_PlasmaProjectile = (1 << 1),
kPA_Charged = (1 << 2),
kPA_Ice = (1 << 3),
kPA_Wave = (1 << 4),
kPA_Plasma = (1 << 5),
kPA_Phazon = (1 << 6),
kPA_ComboShot = (1 << 7),
kPA_Bombs = (1 << 8),
kPA_PowerBombs = (1 << 9),
kPA_BigProjectile = (1 << 10),
kPA_ArmCannon = (1 << 11),
kPA_BigStrike = (1 << 12),
kPA_DamageFalloff = (1 << 13),
kPA_StaticInterference = (1 << 14),
kPA_PlayerUnFreeze = (1 << 15),
kPA_ParticleOPTS = (1 << 16),
kPA_KeepInCinematic = (1 << 17),
};
CWeapon(TUniqueId uid, TAreaId areaId, bool active, TUniqueId owner, EWeaponType type,
const rstl::string& name, const CTransform4f& xf, const CMaterialFilter& filter,
const CMaterialList& mList, const CDamageInfo& dInfo, int attribs,
const CModelData& mData);
// CEntity
~CWeapon() override;
void Think(float dt, CStateManager& mgr) override;
// CActor
void Render(const CStateManager&) const override;
EWeaponCollisionResponseTypes GetCollisionResponseType(const CVector3f&, const CVector3f&,
const CWeaponMode&, int) const override;
void FluidFXThink(EFluidState, CScriptWater&, CStateManager&) override;
void SetDamageFalloffSpeed(float d);
int GetAttribField() const { return xe8_projectileAttribs; }
bool HasAttrib(EProjectileAttrib attrib) const {
return (xe8_projectileAttribs & attrib) == attrib; // maybe wrong
}
TUniqueId GetOwnerId() const { return xec_ownerId; }
EWeaponType GetType() const { return xf0_weaponType; }
CMaterialFilter GetFilter() const { return xf8_filter; }
CDamageInfo& OrigDamageInfo() { return x110_origDamageInfo; }
float GetInterferenceDuration() const { return x154_interferenceDuration; }
void SetOwnerId(TUniqueId id) { xec_ownerId = id; }
void SetDamageInfo(const CDamageInfo& dInfo) { x12c_curDamageInfo = dInfo; }
void SetFilter(const CMaterialFilter& filter) { xf8_filter = filter; }
protected:
int xe8_projectileAttribs;
TUniqueId xec_ownerId;
EWeaponType xf0_weaponType;
CMaterialFilter xf8_filter;
CDamageInfo x110_origDamageInfo;
CDamageInfo x12c_curDamageInfo;
float x148_curTime;
float x14c_damageFalloffSpeed;
float x150_damageDuration;
float x154_interferenceDuration;
};
CHECK_SIZEOF(CWeapon, 0x158)
#endif // _CWEAPON