Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5

Dependencies:   fll mbed-rtos mbed

Committer:
amutake
Date:
Sun Feb 15 06:53:27 2015 +0000
Revision:
10:79bb44beb08b
Child:
11:21b3b0494baa
Create TaikoSource

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amutake 10:79bb44beb08b 1 // Toolkit for Taiko no Tatsujin
amutake 10:79bb44beb08b 2
amutake 10:79bb44beb08b 3 #include "fll.h"
amutake 10:79bb44beb08b 4 #include "taiko.h"
amutake 10:79bb44beb08b 5
amutake 10:79bb44beb08b 6 Serial pc(USBTX, USBRX);
amutake 10:79bb44beb08b 7
amutake 10:79bb44beb08b 8 button_t taiko2button(Taiko t)
amutake 10:79bb44beb08b 9 {
amutake 10:79bb44beb08b 10 switch (t) {
amutake 10:79bb44beb08b 11 case Don:
amutake 10:79bb44beb08b 12 return CIRCLE;
amutake 10:79bb44beb08b 13 case Ka:
amutake 10:79bb44beb08b 14 return R1;
amutake 10:79bb44beb08b 15 }
amutake 10:79bb44beb08b 16 return 0;
amutake 10:79bb44beb08b 17 }
amutake 10:79bb44beb08b 18
amutake 10:79bb44beb08b 19 TaikoSource::TaikoSource(note** ns, int s, int b)
amutake 10:79bb44beb08b 20 {
amutake 10:79bb44beb08b 21 note_seq = ns;
amutake 10:79bb44beb08b 22 size = s;
amutake 10:79bb44beb08b 23 bpm = b;
amutake 10:79bb44beb08b 24 index = 0;
amutake 10:79bb44beb08b 25 frame_i = 0;
amutake 10:79bb44beb08b 26 }
amutake 10:79bb44beb08b 27
amutake 10:79bb44beb08b 28 button_t TaikoSource::await()
amutake 10:79bb44beb08b 29 {
amutake 10:79bb44beb08b 30 if (index >= size) {
amutake 10:79bb44beb08b 31 index = 0; // XXX: remove this line (for debugging)
amutake 10:79bb44beb08b 32 return 0;
amutake 10:79bb44beb08b 33 }
amutake 10:79bb44beb08b 34
amutake 10:79bb44beb08b 35 note* n = note_seq[index];
amutake 10:79bb44beb08b 36 float len = n->length * (60 / (float)bpm); // note length (sec)
amutake 10:79bb44beb08b 37 float passing = frame_i * FRAME; // passing time since the begining of this note (sec)
amutake 10:79bb44beb08b 38
amutake 10:79bb44beb08b 39 frame_i++;
amutake 10:79bb44beb08b 40
amutake 10:79bb44beb08b 41 button_t btn = 0;
amutake 10:79bb44beb08b 42 if (passing < len / 2) { // in the former of this note
amutake 10:79bb44beb08b 43 btn = taiko2button(n->taiko);
amutake 10:79bb44beb08b 44 } else if (passing + FRAME >= len) { // final frame of this note
amutake 10:79bb44beb08b 45 frame_i = 0;
amutake 10:79bb44beb08b 46 index++;
amutake 10:79bb44beb08b 47 }
amutake 10:79bb44beb08b 48 return btn;
amutake 10:79bb44beb08b 49 }