#ifndef BOUNCERCOMPONENT_H #define BOUNCERCOMPONENT_H #include "dCommonVars.h" #include "RakNetTypes.h" #include "Entity.h" #include "Component.h" #include "eReplicaComponentType.h" /** * Attached to bouncer entities, allowing other entities to bounce off of it */ class BouncerComponent final : public Component { public: static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::BOUNCER; BouncerComponent(Entity* parentEntity, const int32_t componentID); ~BouncerComponent() override; void Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) override; Entity* GetParentEntity() const; /** * Sets whether or not this bouncer needs to be activated by a pet * @param value whether or not this bouncer needs to be activated by a pet */ void SetPetEnabled(bool value); /** * Sets whether or not this bouncer is currently being activated by a pet, allowing entities to bounce off of it, * also displays FX accordingly. * @param value whether or not this bouncer is activated by a pet */ void SetPetBouncerEnabled(bool value); /** * Gets whether this bouncer should be enabled using pets * @return whether this bouncer should be enabled using pets */ bool GetPetEnabled() const; /** * Gets whether this bouncer is currently activated by a pet * @return whether this bouncer is currently activated by a pet */ bool GetPetBouncerEnabled() const; /** * Finds the switch used to activate this bouncer if its pet-enabled and stores this components' state there */ void LookupPetSwitch(); bool MsgGetObjectReportInfo(GameMessages::GameMsg& msg); private: /** * Whether this bouncer needs to be activated by a pet */ bool m_PetEnabled; /** * Whether this bouncer is currently being activated by a pet */ bool m_PetBouncerEnabled; /** * Whether the pet switch for this bouncer has been located */ bool m_PetSwitchLoaded; // The bouncer destination NiPoint3 m_Destination; // The speed at which the player is bounced float m_Speed{}; // Whether to use a high arc for the bounce trajectory bool m_UsesHighArc{}; // Lock controls when bouncing bool m_LockControls{}; // Ignore collision when bouncing bool m_IgnoreCollision{}; // Stick the landing afterwards or let the player slide bool m_StickLanding{}; // Whether or not there is a group name bool m_UsesGroupName{}; // The group name for targets std::string m_GroupName{}; // The number of targets to activate the bouncer int32_t m_MinNumTargets{}; // The cinematic path to play during the bounce std::string m_CinematicPath{}; }; #endif // BOUNCERCOMPONENT_H