2024-02-25 14:46:47 +00:00
|
|
|
#pragma once
|
2023-06-20 04:33:09 +00:00
|
|
|
|
|
|
|
#include "StarToolUserItem.hpp"
|
|
|
|
#include "StarStatusEffectItem.hpp"
|
|
|
|
#include "StarLuaComponents.hpp"
|
|
|
|
|
|
|
|
namespace Star {
|
|
|
|
|
|
|
|
STAR_CLASS(FireableItem);
|
|
|
|
|
|
|
|
class FireableItem : public virtual ToolUserItem, public virtual StatusEffectItem {
|
|
|
|
public:
|
|
|
|
FireableItem();
|
|
|
|
FireableItem(Json const& params);
|
|
|
|
virtual ~FireableItem() {}
|
|
|
|
|
|
|
|
FireableItem(FireableItem const& fireableItem);
|
|
|
|
|
|
|
|
virtual void fire(FireMode mode, bool shifting, bool edgeTriggered);
|
|
|
|
virtual void endFire(FireMode mode, bool shifting);
|
|
|
|
virtual FireMode fireMode() const;
|
|
|
|
virtual float fireTimer() const;
|
|
|
|
virtual void setFireTimer(float fireTimer);
|
|
|
|
virtual float cooldownTime() const;
|
|
|
|
virtual void setCooldownTime(float cooldownTime);
|
|
|
|
virtual float windupTime() const;
|
|
|
|
virtual void setWindupTime(float time);
|
|
|
|
virtual bool ready() const;
|
|
|
|
virtual bool firing() const;
|
|
|
|
virtual bool inUse() const;
|
|
|
|
virtual bool walkWhileFiring() const;
|
|
|
|
virtual bool stopWhileFiring() const;
|
|
|
|
virtual bool windup() const;
|
|
|
|
virtual void triggerCooldown();
|
|
|
|
virtual bool coolingDown() const;
|
|
|
|
virtual void setCoolingDown(bool coolingdown);
|
|
|
|
virtual float timeFiring() const;
|
|
|
|
virtual void setTimeFiring(float timeFiring);
|
|
|
|
virtual Vec2F firePosition() const;
|
|
|
|
virtual Vec2F handPosition() const;
|
|
|
|
|
|
|
|
virtual void init(ToolUserEntity* owner, ToolHand hand) override;
|
|
|
|
virtual void uninit() override;
|
2023-07-20 14:58:49 +00:00
|
|
|
virtual void update(float dt, FireMode fireMode, bool shifting, HashSet<MoveControlType> const& moves) override;
|
2023-06-20 04:33:09 +00:00
|
|
|
|
|
|
|
virtual List<PersistentStatusEffect> statusEffects() const override;
|
|
|
|
|
|
|
|
virtual bool validAimPos(Vec2F const& aimPos);
|
|
|
|
|
|
|
|
Json fireableParam(String const& key) const;
|
|
|
|
Json fireableParam(String const& key, Json const& defaultVal) const;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void setParams(Json const& params);
|
|
|
|
void setFireableParam(String const& key, Json const& value);
|
|
|
|
virtual void startTriggered();
|
|
|
|
virtual void fireTriggered();
|
|
|
|
|
|
|
|
// firePosition translated by the hand in the owner's space
|
|
|
|
Vec2F ownerFirePosition() const;
|
|
|
|
|
|
|
|
float m_fireTimer;
|
|
|
|
float m_cooldownTime;
|
|
|
|
float m_windupTime;
|
|
|
|
bool m_fireWhenReady;
|
|
|
|
bool m_startWhenReady;
|
|
|
|
bool m_cooldown;
|
|
|
|
bool m_alreadyInit;
|
|
|
|
bool m_requireEdgeTrigger;
|
|
|
|
|
|
|
|
bool m_attemptedFire;
|
|
|
|
bool m_fireOnRelease;
|
|
|
|
float m_timeFiring;
|
|
|
|
bool m_startTimingFire;
|
|
|
|
bool m_inUse;
|
|
|
|
bool m_walkWhileFiring;
|
|
|
|
bool m_stopWhileFiring;
|
|
|
|
|
|
|
|
mutable Maybe<LuaWorldComponent<LuaBaseComponent>> m_scriptComponent;
|
|
|
|
|
|
|
|
Json m_fireableParams;
|
|
|
|
|
|
|
|
Vec2F m_handPosition;
|
|
|
|
|
|
|
|
FireMode m_mode;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|