osb/source/game/interfaces/StarToolUserItem.hpp
2023-06-20 14:33:09 +10:00

50 lines
1.3 KiB
C++

#ifndef STAR_TOOL_USER_ITEM_HPP
#define STAR_TOOL_USER_ITEM_HPP
#include "StarToolUserEntity.hpp"
#include "StarPhysicsEntity.hpp"
namespace Star {
STAR_EXCEPTION(ToolUserItemException, StarException);
STAR_CLASS(ToolUserItem);
// FIXME: You know what another name for an item that a tool user uses is? A
// Tool. Three words when one will do, rename.
class ToolUserItem {
public:
ToolUserItem();
virtual ~ToolUserItem() = default;
// Owner must be initialized when a ToolUserItem is initialized and
// uninitialized before the owner is uninitialized.
virtual void init(ToolUserEntity* owner, ToolHand hand);
virtual void uninit();
// Default implementation does nothing
virtual void update(FireMode fireMode, bool shifting, HashSet<MoveControlType> const& moves);
// Default implementations return empty list
virtual List<DamageSource> damageSources() const;
virtual List<PolyF> shieldPolys() const;
virtual List<PhysicsForceRegion> forceRegions() const;
bool initialized() const;
// owner, entityMode, hand, and world throw ToolUserException if
// initialized() is false
ToolUserEntity* owner() const;
EntityMode entityMode() const;
ToolHand hand() const;
World* world() const;
private:
ToolUserEntity* m_owner;
Maybe<ToolHand> m_hand;
};
}
#endif