#include "vtable.h" // Automatically initialize everything. Same as VTABLE_STEADY. VTABLE::VTABLE () { base_value = 10.0; for (int i = 0; i < 10; i++) { incr_levels[i] = (i + 1) * 10; incr_sizes[i] = ((i + 1) * 0.075) + 0.5; } } // Use a preset curve. VTABLE::VTABLE (int type) { int i; switch (type) { default: case VTABLE_STEADY: base_value = 10.0; for (i = 0; i < 10; i++) { incr_levels[i] = (i + 1) * 10; incr_sizes[i] = ((i + 1) * 0.075) + 0.5; } break; case VTABLE_EARLY: base_value = 10.0; for (i = 0; i < 10; i++) { incr_levels[i] = (i + 1) * 10; incr_sizes[i] = 1.5 - (i * 0.136); } break; case VTABLE_LATE: base_value = 10.0; for (i = 0; i < 10; i++) { incr_levels[i] = (i + 1) * 10; incr_sizes[i] = (i * 0.15) + 0.24; } break; } } // Manually initialize just the base value. VTABLE::VTABLE (float base) { base_value = base; for (int i = 0; i < 10; i++) { incr_levels[i] = (i + 1) * 10; incr_sizes[i] = ((i + 1) * 0.11) + 0.4; } } // Manually initialize just the increment data. VTABLE::VTABLE (int levels[10], float sizes[10]) { base_value = 1.0; for (int i = 0; i < 10; i++) { incr_levels[i] = levels[i]; incr_sizes[i] = sizes[i]; } } // Manually initialize all 3 settings. VTABLE::VTABLE (float base, int levels[10], float sizes[10]) { base_value = base; for (int i = 0; i < 10; i++) { incr_levels[i] = levels[i]; incr_sizes[i] = sizes[i]; } } // Get a value off the 'table'. float VTABLE::operator[] (int level) { float val = base_value; int i, n = 0; // For each level... for (i = 0; i < level; i++) { // Make sure we're using the right set of increments. if (n < 9 && i > incr_levels[n]) n++; // Increment the value. val += incr_sizes[n]; } // Typecast it to int yourself if needed. return val; }