comparison CollidoscopeApp/src/Chunk.cpp @ 0:02467299402e

First import CollidoscopeApp for Raspberry Pi JackDevice Teensy code for Collidoscope
author Fiore Martin <f.martin@qmul.ac.uk>
date Thu, 30 Jun 2016 14:50:06 +0200
parents
children 75b744078d66
comparison
equal deleted inserted replaced
-1:000000000000 0:02467299402e
1 #include "Chunk.h"
2 #include "DrawInfo.h"
3
4
5 #include "cinder/gl/gl.h"
6
7
8 Chunk::Chunk( size_t index ) :
9 mIndex( index ),
10 mAudioTop(0.0f),
11 mAudioBottom(0.0f)
12 {}
13
14
15 void update( const DrawInfo& di )
16 {
17
18 }
19
20 void Chunk::update( const DrawInfo &di )
21 {
22 using namespace ci;
23 /* if resetting animate the chunks to shrink to 0 size */
24 if ( mResetting ){
25 if ( mAnimate > 0.0f ){
26 mAnimate -= 0.1f;
27 if ( mAnimate <= 0.0f ){
28 mAnimate = 0.0f;
29 mResetting = false;
30 mAudioTop = 0.0f;
31 mAudioBottom = 0.0f;
32 }
33 }
34 }
35 /* animate makes the chunks pop nicely when they are created */
36 else if ( mAnimate < 1.0f ){
37 mAnimate += 0.3333f; // in three (namely 1/0.333) steps
38 if ( mAnimate > 1.0f ){ // clip to one
39 mAnimate = 1.0f;
40 }
41 }
42
43 mX = di.flipX( 1 + (mIndex * (2 + kWidth)) ); // FIXME this should happen only once when resized
44 }
45
46 void Chunk::draw( const DrawInfo& di, ci::gl::BatchRef &batch ){
47 using namespace ci;
48
49 gl::pushModelMatrix();
50
51 const float chunkHeight = mAnimate * mAudioTop * di.getMaxChunkHeight();
52
53 // place the chunk in the right position brigns back the y of chunkHeight/2 so
54 // so that after scaling the wave is still centered at the wave center
55 gl::translate( mX, di.getWaveCenterY() - ( chunkHeight / 2 ) - 1 );
56
57 // FIXME todo use max between top and bottom
58 // scale according to audio amplitude
59 gl::scale( 1.0f, chunkHeight );
60 batch->draw();
61
62
63 gl::popModelMatrix();
64 }
65
66
67 void Chunk::drawBar( const DrawInfo& di, ci::gl::BatchRef &batch ){
68 using namespace ci;
69
70 gl::pushModelMatrix();
71
72 const float barHeight = di.getSelectionBarHeight();
73
74 gl::translate( mX, di.getWaveCenterY() - ( barHeight / 2 ) - 1 );
75 gl::scale( 1.0f, barHeight );
76
77 batch->draw();
78
79 gl::popModelMatrix();
80 }
81
82
83 const float Chunk::kWidth = 7.0f;
84 const float Chunk::kHalfWidth = 3.5f;