DarkflameServer/dGame/dComponents/ShootingGalleryComponent.h
2023-06-23 10:30:03 -05:00

139 lines
3.3 KiB
C++

#pragma once
#include "dCommonVars.h"
#include "NiPoint3.h"
#include "Entity.h"
#include "ActivityComponent.h"
#include "eReplicaComponentType.h"
/**
* Parameters for the shooting gallery that change during playtime
*/
struct DynamicShootingGalleryParams {
/**
* The distance from the camera to the barrel
*/
Vector3 cameraBarrelOffset;
/**
* The area the barrel is looking at
*/
Vector3 facing;
/**
* The velocity of the cannonballs
*/
double_t cannonVelocity;
/**
* The max firerate of the cannon
*/
double_t cannonRefireRate;
/**
* The min distance the cannonballs traverse
*/
double_t cannonMinDistance;
/**
* The angle at which the cannon is shooting
*/
float_t cannonAngle;
/**
* The timeout between cannon shots
*/
float_t cannonTimeout;
/**
* The FOV while in the canon
*/
float_t cannonFOV;
};
/**
* Parameters for the shooting gallery that don't change over time
*/
struct StaticShootingGalleryParams {
/**
* The position of the camera
*/
Vector3 cameraPosition;
/**
* The position that the camera is looking at
*/
Vector3 cameraLookatPosition;
};
/**
* A very ancient component that was used to guide shooting galleries, it's still kind of used but a lot of logic is
* also in the related scripts.
*/
class ShootingGalleryComponent : public ActivityComponent {
public:
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::SHOOTING_GALLERY;
explicit ShootingGalleryComponent(Entity* parent);
~ShootingGalleryComponent();
void Serialize(RakNet::BitStream* outBitStream, bool isInitialUpdate, uint32_t& flags) const;
/**
* Returns the static params for the shooting gallery
* @return the static params for the shooting gallery
*/
const StaticShootingGalleryParams& GetStaticParams() const { return m_StaticParams; };
/**
* Sets the static parameters for the shooting gallery, see `StaticShootingGalleryParams`
* @param params the params to set
*/
void SetStaticParams(const StaticShootingGalleryParams& params);
/**
* Returns the dynamic params for the shooting gallery
* @return the dynamic params for the shooting gallery
*/
const DynamicShootingGalleryParams& GetDynamicParams() const { return m_DynamicParams; };
/**
* Sets the mutable params for the shooting gallery, see `DynamicShootingGalleryParams`
* @param params the params to set
*/
void SetDynamicParams(const DynamicShootingGalleryParams& params);
/**
* Sets the entity that's currently playing the shooting gallery
* @param playerID the entity to set
*/
void SetCurrentPlayerID(LWOOBJID playerID) { m_CurrentPlayerID = playerID; m_Dirty = true; };
/**
* Returns the player that's currently playing the shooting gallery
* @return the player that's currently playing the shooting gallery
*/
LWOOBJID GetCurrentPlayerID() const { return m_CurrentPlayerID; };
private:
/**
* The player that's currently playing the shooting gallery
*/
LWOOBJID m_CurrentPlayerID = LWOOBJID_EMPTY;
/**
* The static parameters for the shooting gallery, see `StaticShootingGalleryParams`
*/
StaticShootingGalleryParams m_StaticParams{};
/**
* The dynamic params for the shooting gallery, see `DynamicShootingGalleryParams`
*/
DynamicShootingGalleryParams m_DynamicParams{};
/**
* Whether or not the component should be serialized
*/
bool m_Dirty = false;
};