Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5

Dependencies:   fll mbed-rtos mbed

Committer:
amutake
Date:
Sun Feb 15 09:10:25 2015 +0000
Revision:
12:54aeb978fe9d
Parent:
11:21b3b0494baa
Child:
14:83af8f502d83
Add ??

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 12:54aeb978fe9d 10
amutake 10:79bb44beb08b 11 switch (t) {
amutake 12:54aeb978fe9d 12 case Un:
amutake 12:54aeb978fe9d 13 return 0;
amutake 10:79bb44beb08b 14 case Don:
amutake 10:79bb44beb08b 15 return CIRCLE;
amutake 10:79bb44beb08b 16 case Ka:
amutake 10:79bb44beb08b 17 return R1;
amutake 12:54aeb978fe9d 18 case Renda:
amutake 12:54aeb978fe9d 19 return CIRCLE;
amutake 10:79bb44beb08b 20 }
amutake 10:79bb44beb08b 21 return 0;
amutake 10:79bb44beb08b 22 }
amutake 10:79bb44beb08b 23
amutake 11:21b3b0494baa 24 TaikoSource::TaikoSource(note** ns, int s, float b)
amutake 10:79bb44beb08b 25 {
amutake 10:79bb44beb08b 26 note_seq = ns;
amutake 10:79bb44beb08b 27 size = s;
amutake 10:79bb44beb08b 28 bpm = b;
amutake 10:79bb44beb08b 29 index = 0;
amutake 10:79bb44beb08b 30 frame_i = 0;
amutake 11:21b3b0494baa 31 lag = 0;
amutake 10:79bb44beb08b 32 }
amutake 10:79bb44beb08b 33
amutake 10:79bb44beb08b 34 button_t TaikoSource::await()
amutake 10:79bb44beb08b 35 {
amutake 10:79bb44beb08b 36 if (index >= size) {
amutake 10:79bb44beb08b 37 return 0;
amutake 10:79bb44beb08b 38 }
amutake 11:21b3b0494baa 39
amutake 10:79bb44beb08b 40 note* n = note_seq[index];
amutake 11:21b3b0494baa 41 float len = n->length * (60 / bpm); // note length (sec)
amutake 10:79bb44beb08b 42 float passing = frame_i * FRAME; // passing time since the begining of this note (sec)
amutake 11:21b3b0494baa 43
amutake 10:79bb44beb08b 44 frame_i++;
amutake 11:21b3b0494baa 45
amutake 10:79bb44beb08b 46 button_t btn = 0;
amutake 12:54aeb978fe9d 47
amutake 12:54aeb978fe9d 48 if (n->taiko == Renda) {
amutake 12:54aeb978fe9d 49 if (passing + FRAME >= len - lag) {
amutake 12:54aeb978fe9d 50 frame_i = 0;
amutake 12:54aeb978fe9d 51 index++;
amutake 12:54aeb978fe9d 52 lag = passing + FRAME - (len - lag);
amutake 12:54aeb978fe9d 53 } else {
amutake 12:54aeb978fe9d 54 if (frame_i % 2 == 0) {
amutake 12:54aeb978fe9d 55 btn = taiko2button(Renda);
amutake 12:54aeb978fe9d 56 } else {
amutake 12:54aeb978fe9d 57 btn = 0;
amutake 12:54aeb978fe9d 58 }
amutake 12:54aeb978fe9d 59 }
amutake 12:54aeb978fe9d 60 } else {
amutake 12:54aeb978fe9d 61 if (passing < len / 2) { // in the former of this note
amutake 12:54aeb978fe9d 62 btn = taiko2button(n->taiko);
amutake 12:54aeb978fe9d 63 } else if (passing + FRAME >= len - lag) { // final frame of this note
amutake 12:54aeb978fe9d 64 frame_i = 0;
amutake 12:54aeb978fe9d 65 index++;
amutake 12:54aeb978fe9d 66 lag = passing + FRAME - (len - lag);
amutake 12:54aeb978fe9d 67 }
amutake 10:79bb44beb08b 68 }
amutake 10:79bb44beb08b 69 return btn;
amutake 10:79bb44beb08b 70 }