diff options
author | aap <aap@papnet.eu> | 2021-05-23 17:55:55 +0200 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2021-06-24 20:45:21 +0200 |
commit | e014bb5359ae464f14a413dd5ee98f0b5a385f67 (patch) | |
tree | 0a687f497f318c4a849e7054f05851a73f2f0c0c /src/rw/VisibilityPlugins.cpp | |
parent | Undef PS2_AUDIO_CHANNELS for SQUEEZE_PERFORMANCE and VANILLA_DEFINES (diff) | |
download | re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.tar re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.tar.gz re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.tar.bz2 re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.tar.lz re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.tar.xz re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.tar.zst re3-e014bb5359ae464f14a413dd5ee98f0b5a385f67.zip |
Diffstat (limited to 'src/rw/VisibilityPlugins.cpp')
-rw-r--r-- | src/rw/VisibilityPlugins.cpp | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/src/rw/VisibilityPlugins.cpp b/src/rw/VisibilityPlugins.cpp index eebbb93b..ffd7b18a 100644 --- a/src/rw/VisibilityPlugins.cpp +++ b/src/rw/VisibilityPlugins.cpp @@ -827,9 +827,9 @@ CVisibilityPlugins::PluginAttach(void) return ms_atomicPluginOffset != -1 && ms_clumpPluginOffset != -1; } -#define ATOMICEXT(o) (RWPLUGINOFFSET(AtomicExt, o, ms_atomicPluginOffset)) -#define FRAMEEXT(o) (RWPLUGINOFFSET(FrameExt, o, ms_framePluginOffset)) -#define CLUMPEXT(o) (RWPLUGINOFFSET(ClumpExt, o, ms_clumpPluginOffset)) +#define ATOMICEXT(o) (RWPLUGINOFFSET(CVisibilityPlugins::AtomicExt, o, CVisibilityPlugins::ms_atomicPluginOffset)) +#define FRAMEEXT(o) (RWPLUGINOFFSET(CVisibilityPlugins::FrameExt, o, CVisibilityPlugins::ms_framePluginOffset)) +#define CLUMPEXT(o) (RWPLUGINOFFSET(CVisibilityPlugins::ClumpExt, o, CVisibilityPlugins::ms_clumpPluginOffset)) // // Atomic @@ -839,6 +839,7 @@ void* CVisibilityPlugins::AtomicConstructor(void *object, int32, int32) { ATOMICEXT(object)->modelInfo = nil; + ATOMICEXT(object)->distanceAlpha = 255; return object; } @@ -991,3 +992,56 @@ CVisibilityPlugins::GetClumpAlpha(RpClump *clump) { return CLUMPEXT(clump)->alpha; } + +// LCS walks the atomic list manually but we want to be compatible with both RW and librw, +// so this code isn't quite original and uses callbacks instead. +static RpAtomic* +SetAtomicDistanceAlphaCB(RpAtomic *atomic, void *data) +{ + ATOMICEXT(atomic)->distanceAlpha = *(int*)data; + return atomic; +} +void +CVisibilityPlugins::SetClumpDistanceAlpha(RpClump *clump, int alpha) +{ + RpClumpForAllAtomics(clump, SetAtomicDistanceAlphaCB, &alpha); +} + +static RpAtomic* +GetAtomicDistanceAlphaCB(RpAtomic *atomic, void *data) +{ + *(int*)data = ATOMICEXT(atomic)->distanceAlpha; + return atomic; +} +int +CVisibilityPlugins::GetClumpDistanceAlpha(RpClump *clump) +{ + int alpha = 255; + RpClumpForAllAtomics(clump, GetAtomicDistanceAlphaCB, &alpha); + return alpha; +} + + + + +void +CVisibilityPlugins::SetObjectDistanceAlpha(RwObject *object, int alpha) +{ + if(object == nil) + return; + if(RwObjectGetType(object) == rpATOMIC) + ATOMICEXT(object)->distanceAlpha = alpha; + else + SetClumpDistanceAlpha((RpClump*)object, alpha); +} + +int +CVisibilityPlugins::GetObjectDistanceAlpha(RwObject *object) +{ + if(object == nil) + return 255; + if(RwObjectGetType(object) == rpATOMIC) + return ATOMICEXT(object)->distanceAlpha; + else + return GetClumpDistanceAlpha((RpClump*)object); +} |