Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5

Dependencies:   fll mbed-rtos mbed

Committer:
amutake
Date:
Mon Feb 16 07:13:09 2015 +0000
Revision:
15:ed0c2da735c2
Parent:
14:83af8f502d83
Child:
16:253d933a7633
Koibumi2000 (not tested)

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