1#include "Enemy/KuromadoMagicBall.h"
2
3#include "Library/Effect/EffectSystemInfo.h"
4#include "Library/LiveActor/ActorClippingFunction.h"
5#include "Library/LiveActor/ActorInitFunction.h"
6#include "Library/LiveActor/ActorMovementFunction.h"
7#include "Library/LiveActor/ActorPoseUtil.h"
8#include "Library/LiveActor/ActorSensorUtil.h"
9
10#include "Util/SensorMsgFunction.h"
11
12KuromadoMagicBall::KuromadoMagicBall(const char* actorName) : al::LiveActor(actorName) {}
13
14void KuromadoMagicBall::init(const al::ActorInitInfo& info) {
15 al::initActorSceneInfo(actor: this, info);
16 al::initActorPoseTFSV(actor: this);
17 al::initActorSRT(actor: this, info);
18 al::initActorClipping(actor: this, initInfo: info);
19 al::invalidateClipping(actor: this);
20 al::initActorEffectKeeper(this, info, "KuromadoMagicBall");
21 al::initExecutorEnemyMovement(actor: this, info);
22 initHitSensor(amount: 1);
23 al::addHitSensorEnemyAttack(this, info, "Attack", 120.0f, 8, sead::Vector3f(0.0f, 0.0f, 0.0f));
24 makeActorDead();
25}
26
27void KuromadoMagicBall::appear() {
28 al::LiveActor::appear();
29 al::emitEffect(this, "Core", nullptr);
30 al::setVelocity(actor: this, vel: al::getFront(actor: this) * 20.0f);
31 mAliveTimer = 0;
32}
33
34void KuromadoMagicBall::control() {
35 mAliveTimer += 1;
36 if (mAliveTimer >= 300) {
37 al::emitEffect(this, "Disappear", nullptr);
38 kill();
39 }
40}
41
42void KuromadoMagicBall::attackSensor(al::HitSensor* self, al::HitSensor* other) {
43 if (al::sendMsgEnemyAttackFire(receiver: other, sender: self, nullptr) ||
44 rs::sendMsgEnemyAttackStrong(source: other, target: self) || rs::sendMsgEnemyAttackDash(source: other, target: self)) {
45 al::emitEffect(this, "Hit", nullptr);
46 kill();
47 }
48}
49