1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#include "BlendedBlock.h"
#include "common.h"
BlendedBlock::BlendedBlock( Block *inA, Block *inB, int inNumTransitionSteps )
: mA( inA ), mB( inB ), mStepsTotal( inNumTransitionSteps ),
mStepsDone( 0 ), mDummy( false ) {
if( mA != NULL ) {
mDepthLayer = mA->mDepthLayer;
}
else if( mB != NULL ) {
mDepthLayer = mB->mDepthLayer;
}
else {
// dummy
mDepthLayer = 0;
mDummy = true;
}
}
double BlendedBlock::getFractionDone() {
return (double)mStepsDone / (double)mStepsTotal;
}
void BlendedBlock::draw( double inRotation, Vector3D *inPosition,
double inScale,
double inFadeFactor,
Color *inColor ) {
if( mDummy ) {
return;
}
double blendB = (double)mStepsDone / (double)mStepsTotal;
blendB = smoothBlend( blendB );
double blendA = 1.0 - blendB;
if( mA != NULL ) {
mA->draw( inRotation, inPosition,
inScale, blendA * inFadeFactor,
inColor );
}
if( mB != NULL ) {
mB->draw( inRotation, inPosition,
inScale, blendB * inFadeFactor,
inColor );
}
}
void BlendedBlock::step() {
mStepsDone ++;
if( mStepsDone > mStepsTotal ) {
mStepsDone = mStepsTotal;
}
if( mDummy ) {
return;
}
double blendB = (double)mStepsDone / (double)mStepsTotal;
blendB = smoothBlend( blendB );
double blendA = 1.0 - blendB;
mX = 0;
mY = 0;
mScale = 1.0;
if( mA != NULL && mB == NULL ) {
mX = mA->mX;
mY = mA->mY;
mScale = mA->mScale;
}
else if( mA == NULL && mB != NULL ) {
mX = mB->mX;
mY = mB->mY;
mScale = mB->mScale;
}
else if( mA != NULL && mB != NULL ) {
mX = blendA * mA->mX + blendB * mB->mX;
mY = blendA * mA->mY + blendB * mB->mY;
mScale = blendA * mA->mScale + blendB * mB->mScale;
}
}
|