File: Cloud.cpp

package info (click to toggle)
between 6%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, jessie, jessie-kfreebsd, stretch
  • size: 3,532 kB
  • sloc: cpp: 28,110; php: 718; ansic: 638; objc: 245; sh: 236; makefile: 99; perl: 67
file content (93 lines) | stat: -rw-r--r-- 2,221 bytes parent folder | download | duplicates (3)
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
#include "Cloud.h"
#include "common.h"

#include "minorGems/util/random/StdRandomSource.h"

extern StdRandomSource randSource;



Cloud::Cloud()
        : mBaseFade( 1.0 ), mShiftA( NULL ), mShiftB( NULL ) {

    mXSpeed = randSource.getRandomBoundedDouble( 0.005, 0.001 );
    }



void Cloud::shiftBetween( Cloud *inA, Cloud *inB, int inNumSteps ) {
    mShiftA = inA;
    mShiftB = inB;
    mNumShiftSteps = inNumSteps;
    mNumShiftStepsDone = 0;
    }



void Cloud::draw( double inRotation, Vector3D *inPosition, 
                  double inScale,
                  double inFadeFactor,
                  Color *inColor ) {

    if( mShiftA == NULL ) {
        
        GameObject::draw ( inRotation, inPosition,
                           inScale, inFadeFactor, inColor );
        }
    else {

        double bBlend = mNumShiftStepsDone / (double)mNumShiftSteps;
        double aBlend = 1 - bBlend;
        
        

        // draw A underneath, but don't use full blend,
        // because both A and be might be transparent
        mShiftA->draw( inRotation, inPosition,
                       inScale, inFadeFactor * aBlend, inColor );
        
        // fade B in on top
        mShiftB->draw( inRotation, inPosition,
                       inScale, inFadeFactor * bBlend, inColor );

        }
    }



void Cloud::step() {
    
    if( mShiftA == NULL ) {

        mFadeFactor = mBaseFade;

        // can see the stepping, pixel, pixel, pixel
        //mX += mXSpeed;
        }
    else {
        // shifting
        
        mNumShiftStepsDone ++;

        if( mNumShiftStepsDone > mNumShiftSteps ) {
            // stop shifting
            mShiftA = NULL;
            mShiftB = NULL;
            }
        else {
            
            double bBlend = mNumShiftStepsDone / (double)mNumShiftSteps;
            
            bBlend = smoothBlend( bBlend );
            
            double aBlend = 1 - bBlend;
            
            mX = mShiftA->mX * aBlend + mShiftB->mX * bBlend;
            mY = mShiftA->mY * aBlend + mShiftB->mY * bBlend;
            
            mFadeFactor = mShiftA->mFadeFactor * aBlend + 
                mShiftB->mFadeFactor * bBlend;
            }
        }
    
    }