1#include "Game/Util.hpp"
2#include "Game/LiveActor/LiveActor.hpp"
3#include "Game/LiveActor/ActorLightCtrl.hpp"
4#include "Game/LiveActor/ClippingDirector.hpp"
5#include "Game/Map/LightFunction.hpp"
9 if (!rIter.isValid()) {
13 MR::getJMapInfoTrans(rIter, &pActor->
mPosition);
14 MR::getJMapInfoRotate(rIter, &pActor->
mRotation);
15 MR::getJMapInfoScale(rIter, &pActor->
mScale);
17 f32 rot_x = fmod(360.0f + (pActor->
mRotation.x) - 0.0f, 360.0f);
18 f32 rot_y = fmod(360.0f + (pActor->
mRotation.y) - 0.0f, 360.0f);
23 MR::getJMapInfoTrans(rIter, &pActor->
mPosition);
24 MR::getJMapInfoRotate(rIter, &pActor->
mRotation);
25 MR::getJMapInfoScale(rIter, &pActor->
mScale);
28 bool isValidMovement(
const LiveActor *pActor) {
29 if (pActor->
mFlags.mIsDead || pActor->
mFlags.mIsClipped) {
36 bool isValidCalcAnim(
const LiveActor *pActor) {
37 if (pActor->
mFlags.mIsDead || pActor->
mFlags.mIsClipped || pActor->
mFlags.mIsNoCalcAnim) {
44 bool isValidCalcViewAndEntry(
const LiveActor *pActor) {
45 if (pActor->
mFlags.mIsDead || pActor->
mFlags.mIsClipped) {
52 bool isValidDraw(
const LiveActor *pActor) {
53 if (pActor->
mFlags.mIsDead || pActor->
mFlags.mIsClipped || pActor->
mFlags.mIsHiddenModel) {
61 bool isNoCalcAnim = pActor->
mFlags.mIsNoCalcAnim;
62 pActor->
mFlags.mIsNoCalcAnim =
false;
65 pActor->
mFlags.mIsNoCalcAnim =
true;
69 void setClippingTypeSphere(
LiveActor *pActor, f32 rad) {
70 MR::getClippingDirector()->mActorHolder->setTypeToSphere(pActor, rad, 0);
73 void setClippingTypeSphere(
LiveActor *pActor, f32 rad,
const TVec3f *a3) {
74 MR::getClippingDirector()->mActorHolder->setTypeToSphere(pActor, rad, a3);
77 void setClippingTypeSphereContainsModelBoundingBox(
LiveActor *pActor, f32 a2) {
79 MR::calcModelBoundingRadius(&radius, pActor);
80 f32 rad = radius * a2;
81 MR::getClippingDirector()->mActorHolder->setTypeToSphere(pActor, rad, 0);
84 void setClippingFar50m(
LiveActor *pActor) {
85 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 7);
88 void setClippingFar100m(
LiveActor *pActor) {
89 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 6);
92 void setClippingFar200m(
LiveActor *pActor) {
93 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 5);
96 void setClippingFar300m(
LiveActor *pActor) {
97 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 4);
100 void setClippingFarMax(
LiveActor *pActor) {
101 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 0);
104 void setClippingFar(
LiveActor *pActor, f32 clipping) {
108 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 7);
111 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 6);
114 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 5);
117 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 4);
120 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 3);
123 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 2);
126 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 1);
129 MR::getClippingDirector()->mActorHolder->setFarClipLevel(pActor, 0);
135 MR::getClippingDirector()->joinToGroupClipping(pActor, rIter, a3);
138 void validateClipping(
LiveActor *pActor) {
139 if (pActor->
mFlags.mIsInvalidClipping) {
140 MR::getClippingDirector()->mActorHolder->validateClipping(pActor);
144 void invalidateClipping(
LiveActor *pActor) {
145 if (pActor->
mFlags.mIsInvalidClipping) {
146 if (pActor->
mFlags.mIsClipped) {
147 pActor->endClipped();
151 MR::getClippingDirector()->mActorHolder->invalidateClipping(pActor);
156 pActor->initActorLightCtrl();
157 pActor->mActorLightCtrl->init(-1,
false);
160 void initLightCtrlForPlayer(
LiveActor *pActor) {
161 pActor->initActorLightCtrl();
162 pActor->mActorLightCtrl->init(-1,
false);
163 LightFunction::registerPlayerLightCtrl(pActor->mActorLightCtrl);
166 void initLightCtrlNoDrawEnemy(
LiveActor *pActor) {
167 pActor->initActorLightCtrl();
168 pActor->mActorLightCtrl->init(1,
true);
171 void initLightCtrlNoDrawMapObj(
LiveActor *pActor) {
172 pActor->initActorLightCtrl();
173 pActor->mActorLightCtrl->init(3,
true);
176 void updateLightCtrl(
LiveActor *pActor) {
177 pActor->mActorLightCtrl->update(
false);
180 void updateLightCtrlDirect(
LiveActor *pActor) {
181 pActor->mActorLightCtrl->update(
true);
184 void loadActorLight(
const LiveActor *pActor) {
185 pActor->mActorLightCtrl->loadLight();
188 void calcLightPos0(TVec3f *pPos,
const LiveActor *pActor) {
189 LightFunction::calcLightWorldPos(pPos, pActor->mActorLightCtrl->getActorLight()->mInfo0);
192 void calcLightPos1(TVec3f *pPos,
const LiveActor *pActor) {
193 LightFunction::calcLightWorldPos(pPos, pActor->mActorLightCtrl->getActorLight()->mInfo1);
196 const GXColor* getLightAmbientColor(
const LiveActor *pActor) {
197 return &pActor->mActorLightCtrl->getActorLight()->mColor;
201 return pActor->mActorLightCtrl;
204 bool isStep(
const LiveActor *pActor, s32 step) {
205 return pActor->getNerveStep() == step;
214 bool isLessStep(
const LiveActor *pActor, s32 step) {
215 return pActor->getNerveStep() < step;
218 bool isLessEqualStep(
const LiveActor *pActor, s32 step) {
219 return pActor->getNerveStep() <= step;
222 bool isGreaterStep(
const LiveActor *pActor, s32 step) {
223 return pActor->getNerveStep() > step;
226 bool isGreaterEqualStep(
const LiveActor *pActor, s32 step) {
227 return pActor->getNerveStep() >= step;
230 bool isIntervalStep(
const LiveActor *pActor, s32 step) {
231 s32 curStep = pActor->getNerveStep();
232 s32 ratio = curStep / step;
233 s32 mult = ratio * step;
234 return mult == curStep;
The basis of a drawable actor that can contain states (see: Nerve)
TVec3f mRotation
3D vector of the actor's rotation.
TVec3f mPosition
3D vector of the actor's position.
TVec3f mScale
3D vector of the actor's scale.
LiveActorFlag mFlags
Flags relating to drawing, animation calculation, etc.