Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5

Dependencies:   fll mbed-rtos mbed

taiko.cpp

Committer:
amutake
Date:
2015-02-15
Revision:
12:54aeb978fe9d
Parent:
11:21b3b0494baa
Child:
14:83af8f502d83

File content as of revision 12:54aeb978fe9d:

// Toolkit for Taiko no Tatsujin

#include "fll.h"
#include "taiko.h"

Serial pc(USBTX, USBRX);

button_t taiko2button(Taiko t)
{

    switch (t) {
        case Un:
            return 0;
        case Don:
            return CIRCLE;
        case Ka:
            return R1;
        case Renda:
            return CIRCLE;
    }
    return 0;
}

TaikoSource::TaikoSource(note** ns, int s, float b)
{
    note_seq = ns;
    size = s;
    bpm = b;
    index = 0;
    frame_i = 0;
    lag = 0;
}

button_t TaikoSource::await()
{
    if (index >= size) {
        return 0;
    }

    note* n = note_seq[index];
    float len = n->length * (60 / bpm); // note length (sec)
    float passing = frame_i * FRAME; // passing time since the begining of this note (sec)

    frame_i++;

    button_t btn = 0;

    if (n->taiko == Renda) {
        if (passing + FRAME >= len - lag) {
            frame_i = 0;
            index++;
            lag = passing + FRAME - (len - lag);
        } else {
            if (frame_i % 2 == 0) {
                btn = taiko2button(Renda);
            } else {
                btn = 0;
            }
        }
    } else {
        if (passing < len / 2) { // in the former of this note
            btn = taiko2button(n->taiko);
        } else if (passing + FRAME >= len - lag) { // final frame of this note
            frame_i = 0;
            index++;
            lag = passing + FRAME - (len - lag);
        }
    }
    return btn;
}