by Savs » 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);
Last edited by
Savs on 08 May 2016, 06:20, edited 2 times in total.