1#include "Game/LiveActor/LodCtrl.hpp"
2#include "Game/LiveActor/ClippingDirector.hpp"
21 pFunc(pCtrl->mActor, arg);
24 pFunc(pCtrl->_10, arg);
28 pFunc(pCtrl->_14, arg);
33const bool def =
false;
47 mActorLightCtrl =
nullptr;
52 MR::getClippingDirector()->entryLodCtrl(
this, rIter);
53 mActorLightCtrl = mActor->mActorLightCtrl;
56void LodCtrl::offSyncShadowHost() {
57 MR::offShadowVisibleSyncHostAll(mActor);
61void LodCtrl::appear() {
62 MR::showModel(mActor);
63 mActorLightCtrl = mActor->mActorLightCtrl;
66 if (MR::isDead(_10)) {
72 if (MR::isDead(_14)) {
78 MR::offShadowVisibleSyncHostAll(mActor);
83 MR::showModel(mActor);
86 if (MR::isDead(_10)) {
92 if (MR::isDead(_14)) {
98 MR::onShadowVisibleSyncHostAll(mActor);
104void LodCtrl::validate() {
109void LodCtrl::invalidate() {
114bool LodCtrl::isShowLowModel()
const {
118 if (obj && obj == _8) {
125void LodCtrl::setDistanceToMiddle(f32 dist) {
129f32 LodCtrl::calcDistanceToCamera()
const {
131 return MR::calcCameraDistanceZ(mActor->
mPosition);
134 return MR::calcDistanceToPlayer(mActor);
137void LodCtrl::setDistanceToLow(f32 dist) {
141void LodCtrl::setDistanceToMiddleAndLow(f32 mid_dist, f32 low_dist) {
146void LodCtrl::setClippingTypeSphereContainsModelBoundingBox(f32 bounds) {
147 LodFuntionCall<f32>(
this, MR::setClippingTypeSphereContainsModelBoundingBox, bounds);
150void LodCtrl::setFarClipping(f32 clip) {
151 LodFuntionCall<f32>(
this, MR::setClippingFar, clip);
154void LodCtrl::invalidateClipping() {
155 LodFuntionCall(
this, MR::invalidateClipping);
158void LodCtrl::showHighModel() {
159 if (MR::isHiddenModel(mActor)) {
160 if (mActorLightCtrl) {
161 mActor->mActorLightCtrl->copy(mActorLightCtrl);
164 mActorLightCtrl = mActor->mActorLightCtrl;
165 MR::showModel(mActor);
169 if (!MR::isDead(_10)) {
170 _10->makeActorDead();
175 if (!MR::isDead(_14)) {
176 _14->makeActorDead();
184void LodCtrl::showMiddleModel() {
185 if (MR::isDead(_10)) {
186 if (mActorLightCtrl) {
187 _10->mActorLightCtrl->copy(mActorLightCtrl);
190 mActorLightCtrl = _10->mActorLightCtrl;
191 _10->makeActorAppeared();
192 MR::calcAnimDirect(mActor);
195 if (!MR::isHiddenModel(mActor)) {
196 MR::hideModelAndOnCalcAnim(mActor);
200 if (!MR::isDead(_14)) {
201 _14->makeActorDead();
209void LodCtrl::showLowModel() {
210 if (MR::isDead(_14)) {
211 if (mActorLightCtrl) {
212 _14->mActorLightCtrl->copy(mActorLightCtrl);
215 mActorLightCtrl = _14->mActorLightCtrl;
216 _14->makeActorAppeared();
217 MR::calcAnimDirect(mActor);
220 if (!MR::isHiddenModel(mActor)) {
221 MR::hideModelAndOnCalcAnim(mActor);
224 if (_10 && !MR::isDead(_10)) {
225 _10->makeActorDead();
232void LodCtrl::hideAllModel() {
233 if (!MR::isHiddenModel(mActor)) {
234 MR::hideModelAndOnCalcAnim(mActor);
238 if (!MR::isDead(_10)) {
239 _10->makeActorDead();
244 if (!MR::isDead(_14)) {
245 _14->makeActorDead();
252void LodCtrl::setViewCtrlPtr(
const bool *a1,
const bool *a2,
const bool *a3,
const bool *a4) {
259void LodCtrl::createLodModel(
int a1,
int a2,
int a3) {
260 _10 = initLodModel(a1, a2, a3,
false);
261 _14 = initLodModel(a1, a2, a3,
true);
273void LodCtrl::syncMaterialAnimation() {
275 MR::syncMaterialAnimation(_10, mActor);
279 MR::syncMaterialAnimation(_14, mActor);
283void LodCtrl::syncJointAnimation() {
285 MR::syncJointAnimation(_10, mActor);
289 MR::syncJointAnimation(_14, mActor);
293void LodCtrl::initLightCtrl() {
295 MR::initLightCtrl(_10);
299 MR::initLightCtrl(_14);
303ModelObj* LodCtrl::initLodModel(
int a1,
int a2,
int a3,
bool isLowModel)
const {
304 const char* res = MR::getModelResName(mActor);
305 const char* type = isLowModel ?
"Low" :
"Middle";
307 snprintf(buf, 0x100,
"/ObjectData/%s%s.arc", res, type);
309 if (!MR::isFileExist(buf,
false)) {
313 const char* objName = isLowModel ? MR::createLowModelObjName(mActor) : MR::createMiddleModelObjName(mActor);
314 snprintf(buf, 0x100,
"%s%s", res, type);
317 obj->makeActorDead();
318 MR::setClippingTypeSphereContainsModelBoundingBox(obj, 100.0f);
319 MR::copyTransRotateScale(mActor, obj);
323bool LodCtrlFunction::isExistLodLowModel(
const char *pName) {
325 snprintf(buf, 0x100,
"/ObjectData/%sLow.arc", pName);
326 return MR::isFileExist(buf,
false);
The basis of a drawable actor that can contain states (see: Nerve)
TVec3f mPosition
3D vector of the actor's position.
virtual MtxPtr getBaseMtx() const
Gets the base matrix of the model used for the actor.
void initWithoutIter()
Initializes a NameObj without a JMapInfoIter instance.