#pragma once

#include "Library/LiveActor/LiveActor.h"

namespace al {
class MtxConnector;

using JudgeFuncPtr = bool (*)(const SensorMsg* message, HitSensor* other, HitSensor* self);

class BreakMapPartsBase : public LiveActor {
public:
    BreakMapPartsBase(const char* name);

    void init(const ActorInitInfo& info) override;
    void initAfterPlacement() override;
    void kill() override;
    void movement() override;
    void calcAnim() override;
    void exeWait();
    void exeBreak();
    void startBreakByProgram();
    bool receiveMsg(const SensorMsg* message, HitSensor* other, HitSensor* self) override;

    virtual JudgeFuncPtr getJudgeFunction(const char* name) const { return nullptr; }

private:
    JudgeFuncPtr mJudgeFunction = nullptr;
    MtxConnector* mMtxConnector = nullptr;
    sead::Vector3f mItemOffset = {0.0f, 0.0f, 0.0f};
    bool mIsExistHitReactionBreak = false;
    IUseAudioKeeper* mAudioKeeper = nullptr;
};
}  // namespace al
