📄 menus.java
字号:
if (m_menu_type[menu_id] == MENU_TYPE_BASE) emptyStack();
/*m_current_menu =*/ m_next_menu = menu_id;
/*m_current_menu_item =*/ m_next_menu_item = getFirstMenuItem(menu_id);
/*m_current_menu_top =*/ m_next_menu_top = getScrollTop(menu_id); // properly set the initial scroll range
m_menu_timer = 0;
m_menu_item_timer = 0;
Engine.s_engine.m_state_timer = 0; // redraw background
Engine.s_current_action = Engine.INPUT_NONE;
}
/* initiate the menu system from the game, starting with this menu */
public static final void startMenu(int menu_id) {
/*if (Engine.s_engine.m_state != Engine.STATE_INGAME_MENU)*/ m_prev_engine_state = Engine.s_engine.m_state;
emptyStack();
setMenu(menu_id);
//process(); // tick once to properly set all states
m_current_menu = m_next_menu;
m_current_menu_item = m_next_menu_item;
m_current_menu_top = m_next_menu_top;
m_menu_anim_state = MENU_ANIM_STATE_INTRO;
m_menu_item_timer = 0; // for dirty render redrawing
Engine.s_engine.m_state = Engine.STATE_INGAME_MENU;
updateMenus();
}
public static final void startConfirmation(int menu_item_id) {
m_confirm_event = menu_item_id;
m_menu_title[MENU_SPECIAL_CONFIRMATION] = m_menu_item_pointer[menu_item_id]; // use pointer to indicate confirmation text
m_menu_item_type[MENU_ITEM_SPECIAL_OK] = MENU_ITEM_TYPE_NORMAL;
m_menu_item_text[MENU_ITEM_SPECIAL_OK] = Locale.OK;
setMenu(MENU_SPECIAL_CONFIRMATION);
}
/* initiate a stats screen */
private static int temp_total_bonus = 0;
private static int temp_current_score = 0;
public static final void startStatsScreen(int level_type) {
mb_skip_score = true; // do we want to skip the counting up?
mb_high_score = false;
// unlock stuff!
if(Level.s_main_type == Level.TYPE_ADVENTURE && Level.s_type == Level.TYPE_ADVENTURE) {
if (Level.s_number + 1 == Level.UNLOCK_PUZZLES_1 && Level.s_puzzles_unlocked < Level.PUZZLES_AREA_1) {
Level.s_puzzles_unlocked = Level.PUZZLES_AREA_1;
m_unlocked = Locale.UNLOCK_PUZZLE_MODE;
}
else if(Level.s_number + 1 == Level.UNLOCK_PUZZLES_2 && Level.s_puzzles_unlocked < Level.PUZZLES_AREA_2) {
Level.s_puzzles_unlocked = Level.PUZZLES_AREA_2;
m_unlocked = Locale.UNLOCK_PUZZLE_LEVELS;
}
else if(Level.s_number + 1 == Level.UNLOCK_PUZZLES_3 && Level.s_puzzles_unlocked < Level.PUZZLES_AREA_3) {
Level.s_puzzles_unlocked = Level.PUZZLES_AREA_3;
m_unlocked = Locale.UNLOCK_PUZZLE_LEVELS;
}
else if(Level.s_number + 1 == Level.UNLOCK_PUZZLES_4 && Level.s_puzzles_unlocked < Level.PUZZLES_AREA_4) {
Level.s_puzzles_unlocked = Level.PUZZLES_AREA_4;
m_unlocked = Locale.UNLOCK_PUZZLE_LEVELS;
}
else if(Level.s_number + 1 == Level.UNLOCK_PUZZLES_5 && Level.s_puzzles_unlocked < Level.PUZZLES_AREA_5) {
Level.s_puzzles_unlocked = Level.PUZZLES_AREA_5;
m_unlocked = Locale.UNLOCK_PUZZLE_LEVELS;
}
else if(Level.s_number + 1 == Level.UNLOCK_TIMETRIAL_1 && Level.s_timetrial_unlocked < Level.TIMETRIAL_AREA_1) {
if(Level.s_timetrial_number + 1 == Level.s_timetrial_unlocked) Level.s_timetrial_number++;
Level.s_timetrial_unlocked = Level.TIMETRIAL_AREA_1;
m_unlocked = Locale.UNLOCK_TIMETRIAL_MODE;
}
else if(Level.s_number + 1 == Level.UNLOCK_SURVIVAL && Level.s_survival_unlocked != Engine.FULL_BYTE) {
Level.s_survival_unlocked = Engine.FULL_BYTE;
m_unlocked = Locale.UNLOCK_SURVIVAL_MODE;
}
}
// display message that stuff is locked
else if (Level.s_main_type == Engine.FULL_BYTE && Level.s_type == Level.TYPE_PUZZLE) {
if (Level.s_puzzle_number + 1 >= Level.s_puzzles_unlocked && Level.s_puzzles_unlocked < Level.PUZZLE_COUNT) {
m_unlocked = Locale.UNLOCK_MORE_LEVELS;
}
}
clearMenu(MENU_SPECIAL_STATS);
m_menu_item_text[MENU_ITEM_SPECIAL_HIGH_SCORE] = NONE;
m_menu_item_type[MENU_ITEM_SPECIAL_OK] = MENU_ITEM_TYPE_NORMAL;
m_menu_item_text[MENU_ITEM_SPECIAL_OK] = NONE;
// use the pointer as temporary storage for the values to count up
m_menu_item_pointer[MENU_ITEM_STAT_TOTAL_CHAINS] = 0;
m_menu_item_pointer[MENU_ITEM_STAT_LONGEST_CHAIN] = 0;
m_menu_item_pointer[MENU_ITEM_STAT_JEWELS_CAUGHT] = 0;
m_menu_item_pointer[MENU_ITEM_STAT_LEFTOVER_AMMO] = 0;
//m_menu_item_pointer[MENU_ITEM_STAT_LEFTOVER_MOVES] = 0;
m_menu_item_pointer[MENU_ITEM_STAT_TIME_LEFT] = 0;
m_menu_item_pointer[MENU_ITEM_STAT_SPEEDUPS] = 0;
temp_total_bonus = 0;
temp_current_score = Level.s_current_score;
switch (level_type) {
case Level.TYPE_ADVENTURE:
insertMenuItem(MENU_ITEM_STAT_TOTAL_CHAINS, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_LONGEST_CHAIN, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_JEWELS_CAUGHT, MENU_SPECIAL_STATS);
if (Level.s_player.m_powerup_ammo>0) insertMenuItem(MENU_ITEM_STAT_LEFTOVER_AMMO, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_STATS);
break;
case Level.TYPE_PUZZLE:
if (Level.s_level_bar > 0) startTextBox(Locale.PUZZLE_QUIP_0, TEXT_TYPE_WINSCREEN);
else startTextBox(Locale.PUZZLE_QUIP_1 + Engine.getRandom(5), TEXT_TYPE_WINSCREEN);
return;
case Level.TYPE_TIMETRIAL:
insertMenuItem(MENU_ITEM_STAT_TOTAL_CHAINS, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_LONGEST_CHAIN, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_TIME_LEFT, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_STATS);
break;
case Level.TYPE_SURVIVAL:
insertMenuItem(MENU_ITEM_STAT_TOTAL_CHAINS, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_LONGEST_CHAIN, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_JEWELS_CAUGHT, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_SPEEDUPS, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_STATS);
break;
}
insertMenuItem(MENU_ITEM_STAT_TOTAL_BONUS, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_STAT_TOTAL_POINTS, MENU_SPECIAL_STATS);
insertMenuItem(MENU_ITEM_SPECIAL_HIGH_SCORE, MENU_SPECIAL_STATS);
//#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated || Razr
insertMenuItem(MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_STATS);
//#endif
insertMenuItem(MENU_ITEM_SPECIAL_OK, MENU_SPECIAL_STATS);
startMenu(MENU_SPECIAL_STATS);
m_current_menu_item = m_next_menu_item = getListLength(MENU_SPECIAL_STATS) -1;
}
/* initiate an in-game text box, with this locale text */
public static final void startTextBox(int locale_index, int type) {
startTextBox(locale_index, type, Graphics.HCENTER);
}
public static final void startTextBox(int locale_index, int type, int anchor) {
m_text = locale_index;
m_text_type = type;
m_text_anchor = anchor;
m_text_page = 0;
switch (type) {
case TEXT_TYPE_WINDOW:
m_text_width = MENU_ITEM_TEXT_WIDTH;
m_text_height = MENU_ITEM_TEXT_HEIGHT;
break;
case TEXT_TYPE_FULLSCREEN:
m_text_width = MENU_ITEM_TEXT_FULL_WIDTH;
m_text_height = MENU_ITEM_TEXT_FULL_HEIGHT;
break;
case TEXT_TYPE_END:
m_text_width = MENU_ITEM_TEXT_FULL_WIDTH;
m_text_height = MENU_ITEM_TEXT_FULL_HEIGHT;
break;
case TEXT_TYPE_WINSCREEN:
m_text_width = MENU_ITEM_TEXT_END_WIDTH;
m_text_height = MENU_ITEM_TEXT_END_HEIGHT;
break;
}
m_text_num_pages = Engine.getNumPages(locale_index, m_text_width, m_text_height);
//if (Engine.getNumPages(locale_index, m_text_width, m_text_height+Engine.CUSTOM_FONT_NEWLINE_HEIGHT)<=1) m_text_num_pages = 1;
clearMenu(MENU_SPECIAL_TEXT);
insertMenuItem(MENU_ITEM_SPECIAL_TEXT, MENU_SPECIAL_TEXT);
m_menu_item_text[MENU_ITEM_SPECIAL_TEXT] = (short)locale_index;
m_menu_item_type[MENU_ITEM_SPECIAL_TEXT] = MENU_ITEM_TYPE_TEXT;
if (Engine.s_engine.m_state==Engine.STATE_INGAME_MENU && Level.s_state!=Level.STATE_SCORE) {
push();
setMenu(MENU_SPECIAL_TEXT);
} else {
startMenu(MENU_SPECIAL_TEXT);
}
}
/* handle the up scrolling for a text box */
private static final void scrollUpTextBox() {
if (m_text_num_pages <= 1) return;
//if (m_text_type==TEXT_TYPE_END) return;
if (--m_text_page < 0) m_text_page = 0;
m_menu_item_timer = 0;
}
/* handle the down scrolling for a text box */
private static final void scrollDownTextBox() {
if (m_text_num_pages <= 1) return;
//if (m_text_type==TEXT_TYPE_END) return;
if (++m_text_page > m_text_num_pages-1) m_text_page = m_text_num_pages-1;
m_menu_item_timer = 0;
}
/* handle the left scrolling for high scores lists */
private static final void scrollLeftHighscores() {
m_highscore_type -= Level.SCORE_ENTRIES;
if (m_highscore_type < Level.SCORE_ADVENTURE) m_highscore_type = Level.SCORE_SURVIVAL;
m_menu_item_timer = 0;
}
/* handle the right scrolling for high scores lists */
private static final void scrollRightHighscores() {
m_highscore_type += Level.SCORE_ENTRIES;
if (m_highscore_type > Level.SCORE_SURVIVAL) m_highscore_type = Level.SCORE_ADVENTURE;
m_menu_item_timer = 0;
}
public static final void startLevelSelect(int type) {
m_level_list_type = type;
m_level_list_start = 0;
m_level_list_size = Level.s_puzzles_unlocked;
m_level_list_start = (Level.s_puzzle_number / NUM_LEVELS) * NUM_LEVELS;
m_next_menu_item = Level.s_puzzle_number % NUM_LEVELS;
int page_end = (m_level_list_start+NUM_LEVELS > m_level_list_size) ? m_level_list_size-m_level_list_start : NUM_LEVELS;
clearMenu(MENU_SPECIAL_LEVEL_SELECT);
for (int i=0; i<NUM_LEVELS; ++i) {
insertMenuItem((i<page_end)?(MENU_ITEM_LEVEL_0+i):MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_LEVEL_SELECT);
}
//m_next_menu_item = Level.s_puzzle_number % NUM_LEVELS;
}
/* handle the left scrolling for level select lists */
private static final void scrollLeftLevelSelect() {
m_level_list_start -= NUM_LEVELS;
if (m_level_list_start < 0) m_level_list_start = ((m_level_list_size-1)/NUM_LEVELS) * NUM_LEVELS;
int page_end = (m_level_list_start+NUM_LEVELS > m_level_list_size) ? m_level_list_size-m_level_list_start : NUM_LEVELS;
clearMenu(MENU_SPECIAL_LEVEL_SELECT);
for (int i=0; i<NUM_LEVELS; ++i) {
insertMenuItem((i<page_end)?(MENU_ITEM_LEVEL_0+i):MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_LEVEL_SELECT);
}
if (m_next_menu_item>=page_end) m_next_menu_item = page_end-1;
m_menu_item_timer = 0;
}
/* handle the right scrolling for level select lists */
private static final void scrollRightLevelSelect() {
m_level_list_start += NUM_LEVELS;
if (m_level_list_start>=m_level_list_size) m_level_list_start = 0;
int page_end = (m_level_list_start+NUM_LEVELS > m_level_list_size) ? m_level_list_size-m_level_list_start : NUM_LEVELS;
clearMenu(MENU_SPECIAL_LEVEL_SELECT);
for (int i=0; i<NUM_LEVELS; ++i) {
insertMenuItem((i<page_end)?(MENU_ITEM_LEVEL_0+i):MENU_ITEM_SPECIAL_BLANK, MENU_SPECIAL_LEVEL_SELECT);
}
if (m_next_menu_item>=page_end) m_next_menu_item = page_end-1;
m_menu_item_timer = 0;
}
/* push the current menu state onto the stack */
public static final void push() {
if (m_current_stack_height >= MAX_MENU_DEPTH-1) return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -