Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5

Dependencies:   fll mbed-rtos mbed

Committer:
amutake
Date:
Sun Feb 15 08:51:56 2015 +0000
Revision:
11:21b3b0494baa
Parent:
10:79bb44beb08b
Child:
12:54aeb978fe9d
no time lag

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 11:21b3b0494baa 15 case Un:
amutake 11:21b3b0494baa 16 return 0;
amutake 10:79bb44beb08b 17 }
amutake 10:79bb44beb08b 18 return 0;
amutake 10:79bb44beb08b 19 }
amutake 10:79bb44beb08b 20
amutake 11:21b3b0494baa 21 TaikoSource::TaikoSource(note** ns, int s, float b)
amutake 10:79bb44beb08b 22 {
amutake 10:79bb44beb08b 23 note_seq = ns;
amutake 10:79bb44beb08b 24 size = s;
amutake 10:79bb44beb08b 25 bpm = b;
amutake 10:79bb44beb08b 26 index = 0;
amutake 10:79bb44beb08b 27 frame_i = 0;
amutake 11:21b3b0494baa 28 lag = 0;
amutake 10:79bb44beb08b 29 }
amutake 10:79bb44beb08b 30
amutake 10:79bb44beb08b 31 button_t TaikoSource::await()
amutake 10:79bb44beb08b 32 {
amutake 10:79bb44beb08b 33 if (index >= size) {
amutake 10:79bb44beb08b 34 return 0;
amutake 10:79bb44beb08b 35 }
amutake 11:21b3b0494baa 36
amutake 10:79bb44beb08b 37 note* n = note_seq[index];
amutake 11:21b3b0494baa 38 float len = n->length * (60 / bpm); // note length (sec)
amutake 10:79bb44beb08b 39 float passing = frame_i * FRAME; // passing time since the begining of this note (sec)
amutake 11:21b3b0494baa 40
amutake 10:79bb44beb08b 41 frame_i++;
amutake 11:21b3b0494baa 42
amutake 10:79bb44beb08b 43 button_t btn = 0;
amutake 10:79bb44beb08b 44 if (passing < len / 2) { // in the former of this note
amutake 10:79bb44beb08b 45 btn = taiko2button(n->taiko);
amutake 11:21b3b0494baa 46 } else if (passing + FRAME >= len - lag) { // final frame of this note
amutake 10:79bb44beb08b 47 frame_i = 0;
amutake 10:79bb44beb08b 48 index++;
amutake 11:21b3b0494baa 49 lag = passing + FRAME - (len - lag);
amutake 10:79bb44beb08b 50 }
amutake 10:79bb44beb08b 51 return btn;
amutake 10:79bb44beb08b 52 }