Implement & link m_timeIn_ovl

This commit is contained in:
Cuyler36
2023-12-07 15:02:41 -05:00
parent c6d9630f7c
commit 00c971393b
7 changed files with 636 additions and 3 deletions
+5
View File
@@ -586,6 +586,11 @@ m_map_ovl.c:
.rodata: [0x8064B628, 0x8064B6B0]
.data: [0x806CD9C0, 0x806CE008]
.bss: [0x81340468, 0x81340488]
m_timeIn_ovl.c:
.text: [0x805FF3C4, 0x80600370]
.rodata: [0x8064BA00, 0x8064BA58]
.data: [0x806D1320, 0x806D13E8]
.bss: [0x81341390, 0x813413B0]
m_warning_ovl.c:
.text: [0x80600370, 0x80600B00]
.rodata: [0x8064BA58, 0x8064BA78]
+4
View File
@@ -17,6 +17,10 @@ typedef struct notice_board_post_s {
/* 0xC0 */ lbRTC_time_c post_time; /* date-time of post */
} mNtc_board_post_c;
extern void mNtc_SetInitData();
extern int mNtc_notice_write_num();
extern void mNtc_notice_write(mNtc_board_post_c* new_post);
extern void mNtc_auto_nwrite_time_ct();
extern void mNtc_set_auto_nwrite_data();
#ifdef __cplusplus
+4 -1
View File
@@ -20,6 +20,7 @@
#include "m_address_ovl_h.h"
#include "m_editEndChk_h.h"
#include "m_haniwaPortrait_ovl_h.h"
#include "m_timeIn_ovl_h.h"
#ifdef __cplusplus
extern "C" {
@@ -127,7 +128,9 @@ struct submenu_overlay_s {
/* 0x98C */ mED_Ovl_c* editor_ovl;
/* 0x990 */ mBD_Ovl_c* board_ovl;
/* 0x994 */ mAD_Ovl_c* address_ovl;
/* 0x998 */ u8 _998[0x9A4 - 0x998];
/* 0x998 */ void* _998;
/* 0x99C */ void* _99C;
/* 0x9A0 */ mTI_Ovl_c* timeIn_ovl;
/* 0x9A4 */ mEE_Ovl_c* editEndChk_ovl;
/* 0x9A8 */ mWR_Ovl_c* warning_ovl;
/* 0x9AC */ void* _9AC;
+46
View File
@@ -0,0 +1,46 @@
#ifndef M_TIMEIN_OVL_H
#define M_TIMEIN_OVL_H
#include "types.h"
#include "m_timeIn_ovl_h.h"
#include "m_submenu_ovl.h"
#ifdef __cplusplus
extern "C" {
#endif
#define mTI_MIN_YEAR 1
#define mTI_MAX_YEAR 30
enum {
mTI_IDX_HOUR,
mTI_IDX_MIN,
mTI_IDX_MONTH,
mTI_IDX_DAY,
mTI_IDX_YEAR,
mTI_IDX_OK,
mTI_IDX_NUM = mTI_IDX_OK
};
enum {
mTI_OVL_OPEN_NORMAL,
mTI_OVL_OPEN_INITIAL,
mTI_OVL_OPEN_NUM
};
struct timeIn_ovl_s {
u16 values[mTI_IDX_NUM];
int sel_idx;
u16 saved_min;
u16 input_disabled_flag;
lbRTC_time_c original_time;
int init_flag;
};
#ifdef __cplusplus
}
#endif
#endif
+16
View File
@@ -0,0 +1,16 @@
#ifndef M_TIMEIN_OVL_H_H
#define M_TIMEIN_OVL_H_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct timeIn_ovl_s mTI_Ovl_c;
#ifdef __cplusplus
}
#endif
#endif
-2
View File
@@ -50,7 +50,6 @@ extern Gfx pwd_win_model[];
static void mPC_set_frame_dl(Submenu* submenu, GRAPH* graph, f32 x, f32 y) {
mPC_Ovl_c* passwordChk_ovl = submenu->overlay->passwordChk_ovl;
Gfx* gfx;
Gfx* gfx2;
u8 s;
u8 t;
@@ -62,7 +61,6 @@ static void mPC_set_frame_dl(Submenu* submenu, GRAPH* graph, f32 x, f32 y) {
/* Setup RDP settings */
gSPDisplayList(gfx++, pwd_win_mode);
gfx2 = gfx; // setting this to gfx2 = gfx; causes the stwu to generate but breaks other stuff
/* Initialize position matrix */
gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+561
View File
@@ -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;
}