1#include "Project/Clipping/ClippingFarAreaObserver.h"
2
3#include "Library/Area/AreaObj.h"
4#include "Library/Area/AreaObjDirector.h"
5#include "Library/Area/AreaObjUtil.h"
6#include "Library/Player/PlayerUtil.h"
7
8namespace al {
9
10ClippingFarAreaObserver::ClippingFarAreaObserver(const AreaObjDirector* areaObjDirector,
11 const PlayerHolder* playerHolder)
12 : mAreaObjDirector(areaObjDirector), mPlayerHolder(playerHolder) {}
13
14void ClippingFarAreaObserver::endInit() {
15 mAreaObjGroup = mAreaObjDirector->getAreaObjGroup(name: "ClippingFarArea");
16}
17
18void ClippingFarAreaObserver::setDefaultFarClipDistance(f32 distance) {
19 mFarClipDistance = distance;
20 mDefaultFarClipDistance = distance;
21}
22
23void ClippingFarAreaObserver::setDefaultFarClipDistanceSub(f32 distance) {
24 mFarClipDistanceSub = distance;
25 mDefaultFarClipDistanceSub = distance;
26}
27
28void ClippingFarAreaObserver::update() {
29 if (!mAreaObjGroup)
30 return;
31 mAreaObj = nullptr;
32 s32 playerNumMax = getPlayerNumMax(mPlayerHolder);
33 for (s32 i = 0; i < playerNumMax; i++) {
34 if (isPlayerDead(mPlayerHolder, i))
35 continue;
36 AreaObj* areaObj = mAreaObjGroup->getInVolumeAreaObj(position: getPlayerPos(mPlayerHolder, i));
37 if (areaObj && (!mAreaObj || areaObj->getPriority() > mAreaObj->getPriority()))
38 mAreaObj = areaObj;
39 }
40 mFarClipDistance = mDefaultFarClipDistance;
41 mFarClipDistanceSub = mDefaultFarClipDistanceSub;
42 if (mAreaObj) {
43 tryGetAreaObjArg(outArg: &mFarClipDistance, areaObj: mAreaObj, key: "FarClipDistance");
44 tryGetAreaObjArg(outArg: &mFarClipDistanceSub, areaObj: mAreaObj, key: "FarClipDistanceSub");
45 }
46}
47} // namespace al
48