|
|
|
@@ -0,0 +1,561 @@
|
|
|
|
|
#include "m_timeIn_ovl.h"
|
|
|
|
|
|
|
|
|
|
#include "m_common_data.h"
|
|
|
|
|
#include "m_font.h"
|
|
|
|
|
#include "sys_matrix.h"
|
|
|
|
|
|
|
|
|
|
static mTI_Ovl_c ti_ovl_data;
|
|
|
|
|
|
|
|
|
|
static int mTI_col_type0[] = { 255, 0, 0 };
|
|
|
|
|
static int mTI_col_type1[] = { 60, 90, 255 };
|
|
|
|
|
|
|
|
|
|
static void mTI_change_rtctime(lbRTC_time_c* time, u16* values) {
|
|
|
|
|
time->year = GAME_YEAR_MIN + values[mTI_IDX_YEAR];
|
|
|
|
|
time->month = values[mTI_IDX_MONTH];
|
|
|
|
|
time->day = values[mTI_IDX_DAY];
|
|
|
|
|
time->weekday = lbRTC_Week(time->year, time->month, time->day);
|
|
|
|
|
time->hour = values[mTI_IDX_HOUR];
|
|
|
|
|
time->min = values[mTI_IDX_MIN];
|
|
|
|
|
time->sec = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_copy_time(u16* dst, u16* src) {
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < mTI_IDX_NUM; i++) {
|
|
|
|
|
*dst = *src;
|
|
|
|
|
dst++;
|
|
|
|
|
src++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int mTI_get_now_min(Submenu* submenu) {
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
int min;
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->values[mTI_IDX_HOUR] >= 12) {
|
|
|
|
|
min = timeIn_ovl->values[mTI_IDX_MIN] + (timeIn_ovl->values[mTI_IDX_HOUR] - 12) * lbRTC_MINUTES_PER_HOUR;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
min = timeIn_ovl->values[mTI_IDX_MIN] + timeIn_ovl->values[mTI_IDX_HOUR] * lbRTC_MINUTES_PER_HOUR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return min;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_set_time(Submenu* submenu) {
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
int min = mTI_get_now_min(submenu);
|
|
|
|
|
int now_min;
|
|
|
|
|
int old_min;
|
|
|
|
|
|
|
|
|
|
old_min = timeIn_ovl->saved_min;
|
|
|
|
|
now_min = old_min + 12;
|
|
|
|
|
|
|
|
|
|
if (now_min >= 12 * lbRTC_MINUTES_PER_HOUR) {
|
|
|
|
|
now_min -= (12 * lbRTC_MINUTES_PER_HOUR);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
(old_min < min && min <= now_min) ||
|
|
|
|
|
(old_min > now_min && (old_min < min || min <= now_min))
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->init_flag) {
|
|
|
|
|
now_min = min;
|
|
|
|
|
timeIn_ovl->input_disabled_flag = FALSE;
|
|
|
|
|
sAdo_SysLevStop(0xA);
|
|
|
|
|
sAdo_SysTrgStart(0x41B);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
now_min = old_min;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->init_flag == FALSE) {
|
|
|
|
|
timeIn_ovl->init_flag = TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timeIn_ovl->saved_min = now_min;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_window_close(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
lbRTC_time_c set_time;
|
|
|
|
|
|
|
|
|
|
(*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP);
|
|
|
|
|
mTI_change_rtctime(&set_time, timeIn_ovl->values);
|
|
|
|
|
|
|
|
|
|
if (menu_info->data0 == mTI_OVL_OPEN_INITIAL) {
|
|
|
|
|
lbRTC_SetTime(&set_time);
|
|
|
|
|
lbRTC_GetTime(Common_GetPointer(time.rtc_time));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (
|
|
|
|
|
set_time.year != timeIn_ovl->original_time.year ||
|
|
|
|
|
set_time.month != timeIn_ovl->original_time.month ||
|
|
|
|
|
set_time.day != timeIn_ovl->original_time.day ||
|
|
|
|
|
set_time.hour != timeIn_ovl->original_time.hour ||
|
|
|
|
|
set_time.min != timeIn_ovl->original_time.min
|
|
|
|
|
) {
|
|
|
|
|
Save_Set(cheated_flag, TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Common_Set(time_changed_flag, TRUE);
|
|
|
|
|
lbRTC_TimeCopy(Common_GetPointer(newly_set_time), &set_time);
|
|
|
|
|
lbRTC_GetTime(Common_GetPointer(old_time));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sAdo_SysTrgStart(2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
|
|
|
|
(*submenu->overlay->move_Move_proc)(submenu, menu_info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_move_Play(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
u32 trigger = submenu->overlay->menu_control.trigger;
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->input_disabled_flag == TRUE) {
|
|
|
|
|
mTI_set_time(submenu);
|
|
|
|
|
}
|
|
|
|
|
else if ((trigger & BUTTON_START)) {
|
|
|
|
|
mTI_window_close(submenu, menu_info);
|
|
|
|
|
}
|
|
|
|
|
else if ((trigger & (BUTTON_B | BUTTON_CLEFT))) {
|
|
|
|
|
if (timeIn_ovl->sel_idx > 0) {
|
|
|
|
|
sAdo_SysTrgStart(0x1003);
|
|
|
|
|
timeIn_ovl->sel_idx--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if ((trigger & (BUTTON_A | BUTTON_CRIGHT))) {
|
|
|
|
|
if (timeIn_ovl->sel_idx == mTI_IDX_OK) {
|
|
|
|
|
if (!(trigger & BUTTON_CRIGHT)) {
|
|
|
|
|
mTI_window_close(submenu, menu_info);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
timeIn_ovl->sel_idx++;
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->sel_idx == mTI_IDX_OK) {
|
|
|
|
|
u16 now_min = mTI_get_now_min(submenu);
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->saved_min != now_min) {
|
|
|
|
|
timeIn_ovl->input_disabled_flag = TRUE;
|
|
|
|
|
sAdo_SysLevStart(0xA);
|
|
|
|
|
timeIn_ovl->init_flag = FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sAdo_SysTrgStart(0xD);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if ((trigger & (BUTTON_CDOWN | BUTTON_CUP))) {
|
|
|
|
|
if (timeIn_ovl->sel_idx != mTI_IDX_OK) {
|
|
|
|
|
lbRTC_time_c time;
|
|
|
|
|
u16 values[mTI_IDX_NUM];
|
|
|
|
|
int sel_idx = timeIn_ovl->sel_idx;
|
|
|
|
|
|
|
|
|
|
mTI_copy_time(values, timeIn_ovl->values);
|
|
|
|
|
|
|
|
|
|
if ((trigger & BUTTON_CUP)) {
|
|
|
|
|
values[sel_idx]++;
|
|
|
|
|
|
|
|
|
|
if (sel_idx == mTI_IDX_YEAR && values[mTI_IDX_YEAR] > mTI_MAX_YEAR) {
|
|
|
|
|
values[mTI_IDX_YEAR] = mTI_MIN_YEAR;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if ((trigger & BUTTON_CDOWN)) {
|
|
|
|
|
if (values[sel_idx] != 0) {
|
|
|
|
|
values[sel_idx]--;
|
|
|
|
|
|
|
|
|
|
if (sel_idx == mTI_IDX_YEAR && values[sel_idx] < mTI_MIN_YEAR) {
|
|
|
|
|
values[mTI_IDX_YEAR] = mTI_MAX_YEAR;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (sel_idx == mTI_IDX_HOUR) {
|
|
|
|
|
values[mTI_IDX_HOUR] = 23;
|
|
|
|
|
}
|
|
|
|
|
else if (sel_idx == mTI_IDX_MIN) {
|
|
|
|
|
values[mTI_IDX_MIN] = 59;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mTI_change_rtctime(&time, values);
|
|
|
|
|
|
|
|
|
|
if (lbRTC_IsValidTime(&time) == FALSE) {
|
|
|
|
|
if (sel_idx == mTI_IDX_YEAR) {
|
|
|
|
|
values[mTI_IDX_DAY] = 28;
|
|
|
|
|
}
|
|
|
|
|
else if (
|
|
|
|
|
(sel_idx == mTI_IDX_MONTH && values[mTI_IDX_MONTH] > 0 && values[mTI_IDX_MONTH] < 13) ||
|
|
|
|
|
((trigger & BUTTON_CDOWN) && sel_idx == mTI_IDX_DAY)
|
|
|
|
|
) {
|
|
|
|
|
time.day = 31;
|
|
|
|
|
|
|
|
|
|
while (!lbRTC_IsValidTime(&time)) {
|
|
|
|
|
time.day--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
values[mTI_IDX_DAY] = time.day;
|
|
|
|
|
}
|
|
|
|
|
else if ((trigger & BUTTON_CUP)) {
|
|
|
|
|
if (sel_idx == mTI_IDX_MONTH || sel_idx == mTI_IDX_DAY) {
|
|
|
|
|
values[sel_idx] = 1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
values[sel_idx] = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (sel_idx == mTI_IDX_MONTH) {
|
|
|
|
|
values[mTI_IDX_MONTH] = lbRTC_DECEMBER;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mTI_copy_time(timeIn_ovl->values, values);
|
|
|
|
|
sAdo_SysTrgStart(0x1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
|
|
|
|
if (menu_info->data0 == mTI_OVL_OPEN_INITIAL) {
|
|
|
|
|
mNtc_auto_nwrite_time_ct();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
(*submenu->overlay->move_End_proc)(submenu, menu_info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_timeIn_ovl_move(Submenu* submenu) {
|
|
|
|
|
static mSM_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = {
|
|
|
|
|
&mTI_move_Move,
|
|
|
|
|
&mTI_move_Play,
|
|
|
|
|
(mSM_MOVE_PROC)&none_proc1,
|
|
|
|
|
(mSM_MOVE_PROC)&none_proc1,
|
|
|
|
|
&mTI_move_End
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_TIMEIN];
|
|
|
|
|
|
|
|
|
|
(*menu_info->pre_move_func)(submenu);
|
|
|
|
|
(*ovl_move_proc[menu_info->proc_status])(submenu, menu_info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern Gfx tim_win_mode[];
|
|
|
|
|
extern Gfx tim_win_model[];
|
|
|
|
|
extern Gfx tim_win_month_model[];
|
|
|
|
|
extern Gfx tim_win_youbi_model[];
|
|
|
|
|
|
|
|
|
|
extern u8 tim_win_sun_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_mon_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_tue_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_wed_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_thu_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_fri_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_sat_tex_rgb_i4[];
|
|
|
|
|
|
|
|
|
|
extern u8 tim_win_january_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_february_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_march_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_april_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_may_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_june_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_july_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_august_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_september_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_october_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_november_tex_rgb_i4[];
|
|
|
|
|
extern u8 tim_win_december_tex_rgb_i4[];
|
|
|
|
|
|
|
|
|
|
static void mTI_set_frame_dl(Submenu* submenu, GRAPH* graph, f32 x, f32 y) {
|
|
|
|
|
static u8* week_tex[lbRTC_WEEK] = {
|
|
|
|
|
tim_win_sun_tex_rgb_i4,
|
|
|
|
|
tim_win_mon_tex_rgb_i4,
|
|
|
|
|
tim_win_tue_tex_rgb_i4,
|
|
|
|
|
tim_win_wed_tex_rgb_i4,
|
|
|
|
|
tim_win_thu_tex_rgb_i4,
|
|
|
|
|
tim_win_fri_tex_rgb_i4,
|
|
|
|
|
tim_win_sat_tex_rgb_i4
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static u8* month_tex[lbRTC_MONTHS_MAX] = {
|
|
|
|
|
tim_win_january_tex_rgb_i4,
|
|
|
|
|
tim_win_february_tex_rgb_i4,
|
|
|
|
|
tim_win_march_tex_rgb_i4,
|
|
|
|
|
tim_win_april_tex_rgb_i4,
|
|
|
|
|
tim_win_may_tex_rgb_i4,
|
|
|
|
|
tim_win_june_tex_rgb_i4,
|
|
|
|
|
tim_win_july_tex_rgb_i4,
|
|
|
|
|
tim_win_august_tex_rgb_i4,
|
|
|
|
|
tim_win_september_tex_rgb_i4,
|
|
|
|
|
tim_win_october_tex_rgb_i4,
|
|
|
|
|
tim_win_november_tex_rgb_i4,
|
|
|
|
|
tim_win_december_tex_rgb_i4
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
int week;
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
Gfx* gfx;
|
|
|
|
|
f32 tex_x;
|
|
|
|
|
f32 tex_y;
|
|
|
|
|
u8 s;
|
|
|
|
|
u8 t;
|
|
|
|
|
int* col;
|
|
|
|
|
|
|
|
|
|
week = lbRTC_Week(GAME_YEAR_MIN + timeIn_ovl->values[mTI_IDX_YEAR], timeIn_ovl->values[mTI_IDX_MONTH], timeIn_ovl->values[mTI_IDX_DAY]);
|
|
|
|
|
|
|
|
|
|
Matrix_translate(x * 16.0f, y * 16.0f, 140.0f, 0);
|
|
|
|
|
Matrix_scale(16.0f, 16.0f, 1.0f, 1);
|
|
|
|
|
|
|
|
|
|
OPEN_DISP(graph);
|
|
|
|
|
gfx = NOW_POLY_OPA_DISP;
|
|
|
|
|
|
|
|
|
|
/* Initialize RDP settings */
|
|
|
|
|
gSPDisplayList(gfx++, tim_win_mode);
|
|
|
|
|
|
|
|
|
|
/* Setup matrix */
|
|
|
|
|
gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
|
|
|
|
|
|
/* Adjust scrolling background texture position */
|
|
|
|
|
tex_x = -submenu->overlay->menu_control.texture_pos[0] * 4.0f;
|
|
|
|
|
tex_y = -submenu->overlay->menu_control.texture_pos[1] * 4.0f;
|
|
|
|
|
s = (int)tex_x;
|
|
|
|
|
t = (int)tex_y;
|
|
|
|
|
gDPSetTileSize_Dolphin(gfx++, G_TX_RENDERTILE, s, t, 32, 32);
|
|
|
|
|
|
|
|
|
|
/* Draw window background */
|
|
|
|
|
gSPDisplayList(gfx++, tim_win_model);
|
|
|
|
|
|
|
|
|
|
/* Set text color */
|
|
|
|
|
if (timeIn_ovl->sel_idx == mTI_IDX_MONTH) {
|
|
|
|
|
col = mTI_col_type0;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
col = mTI_col_type1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gDPSetPrimColor(gfx++, 0, 255, col[0], col[1], col[2], 255);
|
|
|
|
|
|
|
|
|
|
/* Draw month text */
|
|
|
|
|
gSPSegment(gfx++, G_MWO_SEGMENT_8, month_tex[timeIn_ovl->values[mTI_IDX_MONTH] - 1]);
|
|
|
|
|
gSPDisplayList(gfx++, tim_win_month_model);
|
|
|
|
|
|
|
|
|
|
/* Draw weekday text */
|
|
|
|
|
gSPSegment(gfx++, G_MWO_SEGMENT_8, week_tex[week]);
|
|
|
|
|
gSPDisplayList(gfx++, tim_win_youbi_model);
|
|
|
|
|
|
|
|
|
|
SET_POLY_OPA_DISP(gfx);
|
|
|
|
|
CLOSE_DISP(graph);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern Gfx tim_hari_mode[];
|
|
|
|
|
extern Gfx tim_hari_b1T_model[];
|
|
|
|
|
extern Gfx tim_hari_b2T_model[];
|
|
|
|
|
extern Gfx tim_hari_b3T_model[];
|
|
|
|
|
|
|
|
|
|
static void mTI_set_clock(Submenu* submenu, GRAPH* graph, f32 x, f32 y) {
|
|
|
|
|
static Gfx* displayList_table[] = {
|
|
|
|
|
tim_hari_b2T_model,
|
|
|
|
|
tim_hari_b1T_model,
|
|
|
|
|
tim_hari_b3T_model
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
s16 r[3];
|
|
|
|
|
int i;
|
|
|
|
|
u16 save_min = submenu->overlay->timeIn_ovl->saved_min;
|
|
|
|
|
Gfx* gfx;
|
|
|
|
|
|
|
|
|
|
r[0] = -(((f32)(save_min % lbRTC_MINUTES_PER_HOUR) / (f32)lbRTC_MINUTES_PER_HOUR) * 65536.0f); // minute hand
|
|
|
|
|
r[1] = -(((f32)save_min / (f32)((lbRTC_MINUTES_PER_HOUR * lbRTC_HOURS_PER_DAY) / 2)) * 65536.0f); // hour hand
|
|
|
|
|
r[2] = 0; // second hand?
|
|
|
|
|
|
|
|
|
|
Matrix_translate((x + -61.0f) * 16.0f, (y + 45.0f) * 16.0f, 140.0f, 0);
|
|
|
|
|
Matrix_scale(16.0f, 16.0f, 1.0f, 1);
|
|
|
|
|
Matrix_translate(-5.0f, -4.0f, 0.0f, 1);
|
|
|
|
|
|
|
|
|
|
OPEN_DISP(graph);
|
|
|
|
|
gfx = NOW_POLY_OPA_DISP;
|
|
|
|
|
|
|
|
|
|
/* Initialize RDP settings */
|
|
|
|
|
gSPDisplayList(gfx++, tim_hari_mode);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
|
|
/* Rotate & draw the clock hand */
|
|
|
|
|
Matrix_push();
|
|
|
|
|
Matrix_RotateZ(r[i], 1);
|
|
|
|
|
gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
|
gSPDisplayList(gfx++, displayList_table[i]);
|
|
|
|
|
Matrix_pull();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SET_POLY_OPA_DISP(gfx);
|
|
|
|
|
CLOSE_DISP(graph);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_set_character(Submenu* submenu, GAME* game, f32 x, f32 y) {
|
|
|
|
|
static u8 str_line_adjust[17] = "Adjust the clock.";
|
|
|
|
|
static u8 str_line_ok[2] = "OK";
|
|
|
|
|
static f32 set_pos[mTI_IDX_NUM][2] = {
|
|
|
|
|
{ 79.0f, 115.0f }, // mTI_IDX_HOUR
|
|
|
|
|
{ 103.0f, 115.0f }, // mTI_IDX_MIN
|
|
|
|
|
{ 0.0f, 0.0f }, // mTI_IDX_MONTH
|
|
|
|
|
{ 151.0f, 141.0f }, // mTI_IDX_DAY
|
|
|
|
|
{ 196.0f, 141.0f } // mTI_IDX_YEAR
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
u8 str[2];
|
|
|
|
|
int* col;
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
f32* set_pos_p = &set_pos[0][0];
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
/* Draw 'Adjust the clock.' title text */
|
|
|
|
|
mFont_SetLineStrings(
|
|
|
|
|
game,
|
|
|
|
|
str_line_adjust, sizeof(str_line_adjust),
|
|
|
|
|
x + 131.0f, -y + 82.0f,
|
|
|
|
|
255, 255, 255, 255,
|
|
|
|
|
FALSE,
|
|
|
|
|
TRUE,
|
|
|
|
|
0.875f, 0.875f,
|
|
|
|
|
mFont_MODE_POLY
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Draw all numeric values */
|
|
|
|
|
for (i = 0; i < mTI_IDX_NUM; set_pos_p += 2, i++) {
|
|
|
|
|
if (i != mTI_IDX_MONTH) {
|
|
|
|
|
if (i == timeIn_ovl->sel_idx) {
|
|
|
|
|
col = mTI_col_type0;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
col = mTI_col_type1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mFont_UnintToString(str, 2, timeIn_ovl->values[i], 2, FALSE, TRUE, TRUE);
|
|
|
|
|
mFont_SetLineStrings(
|
|
|
|
|
game,
|
|
|
|
|
str, 2,
|
|
|
|
|
x + set_pos_p[0], -y + set_pos_p[1],
|
|
|
|
|
col[0], col[1], col[2], 255,
|
|
|
|
|
FALSE,
|
|
|
|
|
TRUE,
|
|
|
|
|
1.0f, 1.0f,
|
|
|
|
|
mFont_MODE_POLY
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->sel_idx == mTI_IDX_OK) {
|
|
|
|
|
col = mTI_col_type0;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
col = mTI_col_type1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Draw 'OK' */
|
|
|
|
|
mFont_SetLineStrings(
|
|
|
|
|
game,
|
|
|
|
|
str_line_ok, sizeof(str_line_ok),
|
|
|
|
|
x + 220.0f, -y + 141.0f,
|
|
|
|
|
col[0], col[1], col[2], 255,
|
|
|
|
|
FALSE,
|
|
|
|
|
TRUE,
|
|
|
|
|
1.0f, 1.0f,
|
|
|
|
|
mFont_MODE_POLY
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_set_dl(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info) {
|
|
|
|
|
f32 x = menu_info->position[0];
|
|
|
|
|
f32 y = menu_info->position[1];
|
|
|
|
|
GRAPH* graph = game->graph;
|
|
|
|
|
|
|
|
|
|
mTI_set_frame_dl(submenu, graph, x, y);
|
|
|
|
|
mTI_set_clock(submenu, graph, x, y);
|
|
|
|
|
(*submenu->overlay->set_char_matrix_proc)(graph);
|
|
|
|
|
mTI_set_character(submenu, game, x, y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_timeIn_ovl_draw(Submenu* submenu, GAME* game) {
|
|
|
|
|
mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_TIMEIN];
|
|
|
|
|
|
|
|
|
|
(*menu_info->pre_draw_func)(submenu, game);
|
|
|
|
|
mTI_set_dl(submenu, game, menu_info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern void mTI_timeIn_ovl_set_proc(Submenu* submenu) {
|
|
|
|
|
mSM_Control_c* control = &submenu->overlay->menu_control;
|
|
|
|
|
|
|
|
|
|
control->menu_move_func = &mTI_timeIn_ovl_move;
|
|
|
|
|
control->menu_draw_func = &mTI_timeIn_ovl_draw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void mTI_timeIn_ovl_init(Submenu* submenu) {
|
|
|
|
|
mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_TIMEIN];
|
|
|
|
|
mTI_Ovl_c* timeIn_ovl = submenu->overlay->timeIn_ovl;
|
|
|
|
|
|
|
|
|
|
if (Common_Get(time_changed_flag)) {
|
|
|
|
|
lbRTC_time_c time;
|
|
|
|
|
|
|
|
|
|
lbRTC_GetTime(&time);
|
|
|
|
|
lbRTC_Sub_ss(&time, Common_Get(old_time).sec);
|
|
|
|
|
lbRTC_Sub_mm(&time, Common_Get(old_time).min);
|
|
|
|
|
lbRTC_Sub_hh(&time, Common_Get(old_time).hour);
|
|
|
|
|
time.day = 0;
|
|
|
|
|
time.month = 0;
|
|
|
|
|
time.year = 0;
|
|
|
|
|
|
|
|
|
|
lbRTC_TimeCopy(&timeIn_ovl->original_time, Common_GetPointer(newly_set_time));
|
|
|
|
|
lbRTC_Add_Date(&timeIn_ovl->original_time, &time);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
lbRTC_GetTime(&timeIn_ovl->original_time);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (timeIn_ovl->original_time.year > (GAME_YEAR_MIN + mTI_MAX_YEAR)) {
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_YEAR] = mTI_MAX_YEAR;
|
|
|
|
|
timeIn_ovl->original_time.year = GAME_YEAR_MIN + mTI_MAX_YEAR;
|
|
|
|
|
}
|
|
|
|
|
else if (timeIn_ovl->original_time.year < (GAME_YEAR_MIN + mTI_MIN_YEAR)) {
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_YEAR] = mTI_MIN_YEAR;
|
|
|
|
|
timeIn_ovl->original_time.year = GAME_YEAR_MIN + mTI_MIN_YEAR;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_YEAR] = timeIn_ovl->original_time.year % 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_MONTH] = timeIn_ovl->original_time.month;
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_DAY] = timeIn_ovl->original_time.day;
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_HOUR] = timeIn_ovl->original_time.hour;
|
|
|
|
|
timeIn_ovl->values[mTI_IDX_MIN] = timeIn_ovl->original_time.min;
|
|
|
|
|
|
|
|
|
|
timeIn_ovl->saved_min = timeIn_ovl->values[mTI_IDX_MIN] + timeIn_ovl->values[mTI_IDX_HOUR] * lbRTC_MINUTES_PER_HOUR;
|
|
|
|
|
if (timeIn_ovl->saved_min >= (12 * lbRTC_MINUTES_PER_HOUR)) {
|
|
|
|
|
timeIn_ovl->saved_min -= (12 * lbRTC_MINUTES_PER_HOUR);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timeIn_ovl->sel_idx = mTI_IDX_HOUR;
|
|
|
|
|
timeIn_ovl->input_disabled_flag = FALSE;
|
|
|
|
|
|
|
|
|
|
submenu->overlay->menu_control.animation_flag = FALSE;
|
|
|
|
|
menu_info->proc_status = mSM_OVL_PROC_MOVE;
|
|
|
|
|
menu_info->next_proc_status = mSM_OVL_PROC_PLAY;
|
|
|
|
|
menu_info->move_drt = mSM_MOVE_IN_TOP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern void mTI_timeIn_ovl_construct(Submenu* submenu) {
|
|
|
|
|
Submenu_Overlay_c* overlay = submenu->overlay;
|
|
|
|
|
|
|
|
|
|
if (overlay->timeIn_ovl == NULL) {
|
|
|
|
|
mem_clear((u8*)&ti_ovl_data, sizeof(mTI_Ovl_c), 0);
|
|
|
|
|
overlay->timeIn_ovl = &ti_ovl_data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mTI_timeIn_ovl_init(submenu);
|
|
|
|
|
mTI_timeIn_ovl_set_proc(submenu);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern void mTI_timeIn_ovl_destruct(Submenu* submenu) {
|
|
|
|
|
submenu->overlay->timeIn_ovl = NULL;
|
|
|
|
|
}
|