summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2012-08-28 19:58:25 +0200
committerTreeki <treeki@gmail.com>2012-08-28 19:58:25 +0200
commitb5b55914ff6978e2b6fa6a96cb169c867abc37d2 (patch)
treeeb850574d5c64820d6e78c8d764e8eb6c60e6726 /src
parentef835d9dd72a5d70e5361f87654e6aa1f0ae35a5 (diff)
downloadkamek-b5b55914ff6978e2b6fa6a96cb169c867abc37d2.tar.gz
kamek-b5b55914ff6978e2b6fa6a96cb169c867abc37d2.zip
fixed opacity animations and reversible loop
Diffstat (limited to 'src')
-rw-r--r--src/koopatlas/map.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/koopatlas/map.cpp b/src/koopatlas/map.cpp
index e37ee4b..65d71b8 100644
--- a/src/koopatlas/map.cpp
+++ b/src/koopatlas/map.cpp
@@ -303,6 +303,7 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer) {
float effectiveX = doodad->x, effectiveY = doodad->y;
float effectiveWidth = doodad->width, effectiveHeight = doodad->height;
float effectiveAngle = doodad->angle;
+ int effectiveAlpha = layer->alpha;
if (doodad->animationCount > 0) {
for (int j = 0; j < doodad->animationCount; j++) {
@@ -315,9 +316,9 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer) {
}
u32 elapsed = GlobalTickCount - baseTick;
- u32 elapsedAdjusted = elapsed;
if (anim->isReversed)
elapsed = anim->frameCount - 1 - elapsed;
+ u32 elapsedAdjusted = elapsed;
if (elapsed >= anim->frameCount) {
if (elapsed >= (anim->frameCount + anim->delay)) {
@@ -342,8 +343,10 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer) {
anim->baseTick = GlobalTickCount;
break;
}
+ elapsedAdjusted = elapsed;
+ } else {
+ elapsedAdjusted = anim->frameCount;
}
- elapsedAdjusted = anim->frameCount;
}
// now calculate the thing
@@ -393,7 +396,7 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer) {
effectiveY += scaleYMod;
break;
case dKPDoodad_s::animation_s::OPACITY:
- // TODO
+ effectiveAlpha = (effectiveAlpha * (frame * 2.55f)) / 255;
break;
}
}
@@ -415,6 +418,8 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer) {
MTXConcat(doodadMtx, rotMtx, doodadMtx);
}
+ GXSetTevColor(GX_TEVREG0, (GXColor){255,255,255,effectiveAlpha});
+
loadCamera(doodadMtx);
loadTexture(doodad->texObj);