Musical Coin
Posted: 07 May 2016, 13:00
It's like a normal coin but it changes pitch of the sound when you collect them by going up or down the tiles. Correct the code if it does not compile with current git:
- {l Code}: {l Select All Code}
static Timer sound_timer;
static int pitch_one = 128;
static float last_pitch = 1;
float pitch = 1;
int tile = static_cast<int>(get_pos().y / 32);
if (!sound_timer.started()) {
pitch_one = tile;
pitch = 1;
last_pitch = 1;
}
else if (sound_timer.get_timegone() < 0.02) {
pitch = last_pitch;
}
else
{
switch ((pitch_one - tile) % 7) {
case -6:
pitch = 1.0/2;
break;
case -5:
pitch = 5.0/8;
break;
case -4:
pitch = 4.0/6;
break;
case -3:
pitch = 3.0/4;
break;
case -2:
pitch = 5.0/6;
break;
case -1:
pitch = 9.0/10;
break;
case 0:
pitch = 1.0;
break;
case 1:
pitch = 9.0/8;
break;
case 2:
pitch = 5.0/4;
break;
case 3:
pitch = 4.0/3;
break;
case 4:
pitch = 3.0/2;
break;
case 5:
pitch = 5.0/3;
break;
case 6:
pitch = 9.0/5;
break;
}
last_pitch = pitch;
}
sound_timer.start(1);
std::unique_ptr<SoundSource> soundSource = SoundManager::current()->create_sound_source("sounds/coin.wav");
soundSource->set_position(get_pos());
soundSource->set_pitch(pitch);
soundSource->play();
SoundManager::current()->manage_source(std::move(soundSource));
Sector::current()->player->get_status()->add_coins(1, false);