Public feed
#892500
#include "../src/Stylus.h"
#include "AEEVCodes.h"
#include "../src/Constants.h"
#include "../TFC/TFCStaticProvider.h"
#include "../src/UIController.h"
#include "../src/StaticProvider.h"
#define NO_ZONE_INFO -1
#define NB_INFO_PER_ZONE 5
#define PRESS 0
#define RELEASE 1
#define DRAG 2
//uniquely identify ZONE,not these are not the same as index into zoneInfo[]
//infact these zones can be added and removed anywhere within zoneInfo[]
#define ZONE_SOFTKEYLEFT 0
#define ZONE_SOFTKEYRIGHT 1
#define ZONE_MAINMENU_PLAY 2
#define ZONE_MAINMENU_ARCHIVES 3
#define ZONE_MAINMENU_OPTIONS 4
#define ZONE_MAINMENU_HELP 5
#define ZONE_MAINMENU_GMG 6
#define ZONE_PLAYMENU_CLASSIC 7
#define ZONE_PLAYMENU_ACTION 8
#define ZONE_ARCHIVESMENU_HIGHSCORES 9
#define ZONE_ARCHIVESMENU_BESTWORDS 10
#define ZONE_ARCHIVESMENU_LONGESTWORDS 11
#define ZONE_OPTIONSMENU_SOUND 12
#define ZONE_OPTIONSMENU_INPUT 13
#define ZONE_OPTIONSMENU_RESETARCHIVES 14
#define ZONE_OPTIONSMENU_RESETTUTORIAL 15
#define ZONE_HELPMENU_TUTORIAL 16
#define ZONE_HELPMENU_PLAYGUIDE 17
#define ZONE_HELPMENU_CREDITS 18
#define ZONE_HELPMENU_ABOUT 19
#define ZONE_TUTORIALMENU_CURSOR 20
#define ZONE_TUTORIALMENU_SINGLETAP 21
#define ZONE_CLASSICMENU_RESUME 22
#define ZONE_CLASSICMENU_NEWGAME 23
#define ZONE_ACTIONMENU_RESUME 24
#define ZONE_ACTIONMENU_NEWGAME 25
#define ZONE_PAUSEMENU_MAINMENU 26
#define ZONE_PAUSEMENU_SOUND 27
#define ZONE_PAUSEMENU_INPUT 28
////////////////TILES///////////////////////////////////////
#define ZONE_TILE_0 29
#define ZONE_GAME_TILE_1 30
#define ZONE_GAME_TILE_2 31
#define ZONE_GAME_TILE_3 32
#define ZONE_GAME_TILE_4 33
#define ZONE_GAME_TILE_5 34
#define ZONE_GAME_TILE_6 35
#define ZONE_GAME_TILE_7 36
#define ZONE_GAME_TILE_8 37
#define ZONE_GAME_TILE_9 38
#define ZONE_GAME_TILE_10 39
#define ZONE_GAME_TILE_11 40
#define ZONE_GAME_TILE_12 41
#define ZONE_GAME_TILE_13 42
#define ZONE_GAME_TILE_14 43
#define ZONE_GAME_TILE_15 44
#define ZONE_GAME_TILE_16 45
#define ZONE_GAME_TILE_17 46
#define ZONE_GAME_TILE_18 47
#define ZONE_GAME_TILE_19 48
#define ZONE_GAME_TILE_20 49
#define ZONE_GAME_TILE_21 50
#define ZONE_GAME_TILE_22 51
#define ZONE_GAME_TILE_23 52
#define ZONE_GAME_TILE_24 53
#define ZONE_GAME_TILE_25 54
#define ZONE_GAME_TILE_26 55
#define ZONE_GAME_TILE_27 56
#define ZONE_GAME_TILE_28 57
#define ZONE_GAME_TILE_29 58
#define ZONE_GAME_TILE_30 59
#define ZONE_GAME_TILE_31 60
#define ZONE_GAME_TILE_32 61
#define ZONE_GAME_TILE_33 62
#define ZONE_GAME_TILE_34 63
#define ZONE_GAME_TILE_35 64
#define ZONE_GAME_TILE_36 65
#define ZONE_GAME_TILE_37 66
#define ZONE_GAME_TILE_38 67
#define ZONE_GAME_TILE_39 68
#define ZONE_GAME_TILE_40 69
#define ZONE_GAME_TILE_41 70
#define ZONE_GAME_TILE_42 71
#define ZONE_GAME_TILE_43 72
#define ZONE_GAME_TILE_44 7
#define ZONE_GAME_TILE_45 74
#define ZONE_GAME_TILE_46 75
#define ZONE_GAME_TILE_47 76
#define ZONE_GAME_TILE_48 77
#define ZONE_GAME_TILE_49 78
#define ZONE_GAME_TILE_50 79
#define ZONE_GAME_TILE_51 80
#define ZONE_SOUND_MENU_OFF 81
#define ZONE_SOUND_MENU_QUIET 82
#define ZONE_SOUND_MENU_MEDIUM 83
#define ZONE_SOUND_MENU_LOUD 84
#define ZONE_INPUT_MENU_SINGLE 85
#define ZONE_INPUT_MENU_MULTI 86
#define ZONE_INPUT_MENU_CURSOR 87
#define ZONE_SCROLLBAR 88
#define ZONE_SCROLLBAR_UP 89
#define ZONE_SCROLLBAR_DOWN 90
// Add a zone
static void addZone(int x, int y, int w, int h, int id)
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
////System.out.println("ADD ZONE id " + id + " @ " + zoneNb);
sp->zoneInfo[sp->zoneNb * NB_INFO_PER_ZONE] = x;
sp->zoneInfo[sp->zoneNb * NB_INFO_PER_ZONE + 1] = y;
sp->zoneInfo[sp->zoneNb * NB_INFO_PER_ZONE + 2] = w;
sp->zoneInfo[sp->zoneNb * NB_INFO_PER_ZONE + 3] = h;
sp->zoneInfo[sp->zoneNb * NB_INFO_PER_ZONE + 4] = id;
sp->zoneNb++;
}
static void addSoftkeyZones()
{
//System.out.println("addSoftkeyZones");
addZone(0, 295, 43, 25, ZONE_SOFTKEYLEFT);
addZone(197, 295, 43, 25, ZONE_SOFTKEYRIGHT);
}
static void initBoard()
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
//System.out.println("initBoard Zones");
resetZones();
//addZone(GCanvas.BOARD_POSITION_X,GCanvas.BOARD_POSITION_Y, 26, 26, ZONE_TILE_0);
int currZone = ZONE_TILE_0;
int x = 28;//GCanvas.BOARD_POSITION_X;
int y = 48;//GCanvas.BOARD_POSITION_Y;
int numR = 7; //every secong row has 8 tiles;
for(int c = 0 ; c<7 ; c++)
{
if(c%2 ==0)
{
numR = 7;
y = 48;
}
else
{
numR = 8;
y = 48 - (sp->GCanvas_m_nTileH/2);
}
for(int r = 0; r <numR ; r++)
{
addZone(x ,y,sp->GCanvas_m_nTileW , sp->GCanvas_m_nTileH, currZone);
////System.out.println("currZone " + currZone + " x: " + x + " y: " + y + " w " + GCanvas.m_nTileW + " h " + GCanvas.m_nTileH);
y += (sp->GCanvas_m_nTileH);
currZone++;
}
x += (sp->GCanvas_m_nTileW);
}
//addZone(66,255,167,28,ZONE_TEXT_BOX);
}
static void initMainMenu()
{
resetZones();
addZone(101, 101, 101, 26, ZONE_MAINMENU_PLAY);
addZone(30, 130, 130, 43, ZONE_MAINMENU_ARCHIVES);
addZone(87, 180, 120, 30, ZONE_MAINMENU_OPTIONS);
addZone(37, 209, 124, 34, ZONE_MAINMENU_HELP);
addZone(54, 244, 155, 40, ZONE_MAINMENU_GMG);
}
static void zonePress(int zoneId)
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
//System.out.println("Zonepress " + zoneId);
switch (zoneId)
{
case ZONE_SOFTKEYLEFT:
//Input.HandleKeyPress((short)Constants.KEY_MAPPING_CODES.charAt(0));
//System.out.println("LEFT " + (short)Constants.KEY_MAPPING_CODES.charAt(0));
break;
case ZONE_SOFTKEYRIGHT:
// To be filled generate a SOFTKEY_RIGHT in Input.java
//System.out.println("RIGHT");
//Input.HandleKeyPress((short)Constants.KEY_MAPPING_CODES.charAt(1));
break;
case ZONE_MAINMENU_PLAY:
//System.out.println("Zonepress ZONE_MAINMENU_PLAY");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_MAINMENU_ARCHIVES:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
case ZONE_MAINMENU_OPTIONS:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
break;
case ZONE_MAINMENU_HELP:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 3;
break;
case ZONE_MAINMENU_GMG:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 4;
break;
///////////////////////////////////////////////
case ZONE_PLAYMENU_CLASSIC:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_PLAYMENU_ACTION:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
///////////////////////////////////////////////
case ZONE_ARCHIVESMENU_HIGHSCORES:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_ARCHIVESMENU_BESTWORDS:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
case ZONE_ARCHIVESMENU_LONGESTWORDS:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
break;
///////////////////////////////////////////////
case ZONE_OPTIONSMENU_SOUND:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
//#ifndef NO_INPUT_MENU
case ZONE_OPTIONSMENU_INPUT:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
//#endif
case ZONE_OPTIONSMENU_RESETARCHIVES:
//#ifndef NO_INPUT_MENU
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
//#else
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
//#endif
break;
case ZONE_OPTIONSMENU_RESETTUTORIAL:
//#ifndef NO_INPUT_MENU
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 3;
//#else
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
//#endif
break;
///////////////////////////////////////////////
case ZONE_HELPMENU_TUTORIAL:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_HELPMENU_PLAYGUIDE:
//System.out.println("Zonepress ZONE_HELPMENU_PLAYGUIDE");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
case ZONE_HELPMENU_CREDITS:
//System.out.println("Zonepress ZONE_HELPMENU_CREDITS");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
break;
case ZONE_HELPMENU_ABOUT:
//System.out.println("Zonepress ZONE_HELPMENU_ABOUT");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 3;
break;
///////////////////////////////////////////////
case ZONE_TUTORIALMENU_CURSOR:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_TUTORIALMENU_SINGLETAP:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
///////////////////////////////////////////////
case ZONE_CLASSICMENU_RESUME:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_CLASSICMENU_NEWGAME:
//GCanvas.stylusOP = "CLASSICMENU_NEWGAME";
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
///////////////////////////////////////////////
case ZONE_ACTIONMENU_RESUME:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_ACTIONMENU_NEWGAME:
//System.out.println("Zonepress ");
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
///////////////////////////////////////////////
case ZONE_PAUSEMENU_MAINMENU:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_PAUSEMENU_SOUND:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
//#ifndef NO_INPUT_MENU
case ZONE_PAUSEMENU_INPUT:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
break;
//#endif
//SOUND MENU
case ZONE_SOUND_MENU_OFF:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
case ZONE_SOUND_MENU_QUIET:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
case ZONE_SOUND_MENU_MEDIUM:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
break;
case ZONE_SOUND_MENU_LOUD:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 3;
break;
//INPUT MENU
case ZONE_INPUT_MENU_SINGLE:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 0;
break;
//#ifndef QWERTY
case ZONE_INPUT_MENU_MULTI:
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
break;
//#endif
case ZONE_INPUT_MENU_CURSOR:
//#ifdef QWERTY
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 1;
//#else
sp->UIModel_UI_MENU_CURRENT_SELECTION[sp->UIModel_m_nUIState] = 2;
//#endif
break;
}
}
// Just record the zone that was released at the moment and treat it only at the end of the loop
static void zoneRelease(int zoneId)
{
Game * pMe = Game::getInstance();
TFCStaticProvider * tfcsp = pMe->tfcsp;
tfcsp->zonePressed = zoneId;
}
// Fill this method with the appropriate zone handling. You recieve the zone value and according to it, do the appropriate action
// Call that along with the flush of key presses in the TFC to have an equivalent functionnalities (must be synchronous)
// TODO this is being called everyframe should really only do this when zonePressed !=-1
static void flushZoneRelease()
{
Game * pMe = Game::getInstance();
TFCStaticProvider * tfcsp = pMe->tfcsp;
StaticProvider * sp = pMe->sp;
switch(tfcsp->zonePressed)
{
case ZONE_SOFTKEYLEFT:
// To be filled generate a SOFTKEY_LEFT in Input.java
//System.out.println( "REL: LEFT");
//GCanvas.stylusOP = "REL: L " + zonePressed;
//Input::HandleKeyPress((short)Constants.KEY_MAPPING_CODES.charAt(0));
Input::HandleKeyPress( Constants::KEY_MAPPING_CODES[0]);
break;
case ZONE_SOFTKEYRIGHT:
//System.out.println( "REL: R");
//GCanvas.stylusOP = "REL: R";
//Input::HandleKeyPress((short)Constants.KEY_MAPPING_CODES.charAt(1));
Input::HandleKeyPress( Constants::KEY_MAPPING_CODES[1]);
break;
case ZONE_MAINMENU_PLAY:
//System.out.println( "REL: MAINMENU_PLAY");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_MAIN_MENU[0]);
break;
case ZONE_MAINMENU_ARCHIVES:
//System.out.println( "REL: MAINMENU_ARCHIVES");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_MAIN_MENU[1]);
break;
case ZONE_MAINMENU_OPTIONS:
//System.out.println( "REL: MAINMENU_OPTIONS");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_MAIN_MENU[2]);
break;
case ZONE_MAINMENU_HELP:
//System.out.println( "REL: MAINMENU_HELP");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_MAIN_MENU[3]);
break;
//If get more games is not defined this option quit
case ZONE_MAINMENU_GMG:
//System.out.println( "REL: MAINMENU_GMG");
//#ifdef GET_MORE_GAMES
UIController::handleMenuSelection(UI_ACTION_GET_MORE_GAMES);
//#else
UIController::handleMenuSelection(UIConstants::GOTO_STATES_MAIN_MENU[4]);
//#endif
break;
case ZONE_PLAYMENU_CLASSIC:
//System.out.println( "REL: PLAYMENU_CLASSIC");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_GAME_MENU[0]);
break;
case ZONE_PLAYMENU_ACTION:
//System.out.println( "REL: PLAYMENU_ACTION");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_GAME_MENU[1]);
break;
case ZONE_ARCHIVESMENU_HIGHSCORES:
//System.out.println( "REL: ARCHIVESMENU_HIGHSCORES");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_ACHIEVEMENTS_MENU[0]);
break;
case ZONE_ARCHIVESMENU_BESTWORDS:
//System.out.println( "REL: ARCHIVESMENU_BESTWORDS");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_ACHIEVEMENTS_MENU[1]);
break;
case ZONE_ARCHIVESMENU_LONGESTWORDS:
//System.out.println( "REL: ARCHIVESMENU_LONGESTWORDS");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_ACHIEVEMENTS_MENU[2]);
break;
///////////////////////////////////////////////
case ZONE_OPTIONSMENU_SOUND:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_OPTIONS_MENU[0]);
break;
//#ifndef NO_INPUT_MENU
case ZONE_OPTIONSMENU_INPUT:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_OPTIONS_MENU[1]);
break;
//#endif
case ZONE_OPTIONSMENU_RESETARCHIVES:
//#ifdef NO_INPUT_MENU
UIController::handleMenuSelection(UIConstants::GOTO_STATES_OPTIONS_MENU[1]);
//#else
UIController::handleMenuSelection(UIConstants::GOTO_STATES_OPTIONS_MENU[2]);
//#endif
break;
case ZONE_OPTIONSMENU_RESETTUTORIAL:
//#ifndef NO_INPUT_MENU
UIController::handleMenuSelection(UIConstants::GOTO_STATES_OPTIONS_MENU[3]);
//#else
UIController::handleMenuSelection(UIConstants::GOTO_STATES_OPTIONS_MENU[2]);
//#endif
break;
/////////////////////////////////////////////////
case ZONE_HELPMENU_TUTORIAL:
UIController::showMenu(UIConstants::GOTO_STATES_HELP_MENU[0]);
break;
case ZONE_HELPMENU_PLAYGUIDE:
UIController::showMenu(UIConstants::GOTO_STATES_HELP_MENU[1]);
break;
case ZONE_HELPMENU_CREDITS:
UIController::showMenu(UIConstants::GOTO_STATES_HELP_MENU[2]);
break;
case ZONE_HELPMENU_ABOUT:
UIController::showMenu(UIConstants::GOTO_STATES_HELP_MENU[3]);
break;
case ZONE_TUTORIALMENU_CURSOR:
//System.out.println( "REL: TUTORIALMENU_CURSOR");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_TUTORIAL_MENU[0]);
break;
case ZONE_TUTORIALMENU_SINGLETAP:
//System.out.println( "REL: TUTORIALMENU_SINGLETAP");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_TUTORIAL_MENU[1]);
break;
case ZONE_CLASSICMENU_RESUME:
//System.out.println( "REL: CLASSICMENU_RESUME");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_CLASSIC_GAME_MENU[0]);
break;
case ZONE_CLASSICMENU_NEWGAME:
//System.out.println( "REL: CLASSICMENU_NEWGAME");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_CLASSIC_GAME_MENU[1]);
break;
case ZONE_ACTIONMENU_RESUME:
//System.out.println( "REL: ACTIONMENU_RESUME");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_ACTION_GAME_MENU[0]);
break;
case ZONE_ACTIONMENU_NEWGAME:
//System.out.println( "REL: ACTIONMENU_NEWGAME");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_ACTION_GAME_MENU[1]);
break;
case ZONE_PAUSEMENU_MAINMENU:
//System.out.println( "REL:PAUSEMENU_MAINMENU");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_PAUSE_MENU[0]);
break;
case ZONE_PAUSEMENU_SOUND:
//System.out.println( "REL:PAUSEMENU_SOUND");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_PAUSE_MENU[1]);
break;
case ZONE_PAUSEMENU_INPUT:
//System.out.println( "REL:PAUSEMENU_INPUT");
UIController::handleMenuSelection(UIConstants::GOTO_STATES_PAUSE_MENU[2]);
break;
//SOUND MENU
case ZONE_SOUND_MENU_OFF:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_SOUND[0]);
break;
case ZONE_SOUND_MENU_QUIET:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_SOUND[1]);
break;
case ZONE_SOUND_MENU_MEDIUM:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_SOUND[2]);
break;
case ZONE_SOUND_MENU_LOUD:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_SOUND[3]);
break;
//INPUT MENU
case ZONE_INPUT_MENU_SINGLE:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_CONTROL_METHOD[0]);
break;
//#ifndef QWERTY
case ZONE_INPUT_MENU_MULTI:
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_CONTROL_METHOD[1]);
break;
//#endif
case ZONE_INPUT_MENU_CURSOR:
//#ifdef QWERTY
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_CONTROL_METHOD[1]);
//#else
UIController::handleMenuSelection(UIConstants::GOTO_STATES_BUTTON_MENU_CONTROL_METHOD[2]);
//#endif
break;
//SCROLL_BAR
case ZONE_SCROLLBAR_DOWN:
Text::scrollTextWindow(sp->UIController_m_nNumScrollLines);
break;
case ZONE_SCROLLBAR_UP:
Text::scrollTextWindow(-sp->UIController_m_nNumScrollLines);
break;
default:
////System.out.println("UNHANDLED RELEASE!!! " + zonePressed);
break;
}
//zonePressed = -1;
}
static int lastY = -1;// this is the last position of the scroll bar
static void onScrollBar(int currY)
{
/*
* from text.java this is how the scroller is drawn
int barHeight = (m_nTextWindowHeight - 2 * TEXT_WINDOW_SCROLLER_SIZE - 4);
int height = Math.min((m_nTextWindowVisibleLines * barHeight) / m_nTextWindowLinesCount, m_nTextWindowHeight);
drawY = y + TEXT_WINDOW_SCROLLER_SIZE + 2 + (m_nTextWindowFirstLine * (barHeight - height)) / (m_nTextWindowLinesCount - m_nTextWindowVisibleLines);
g.fillRect(drawX, drawY, TEXT_WINDOW_SCROLLER_SIZE, height);
*/
//GCanvas.stylusOP = "Down CY: " + currY + " LY: " + lastY;
int linesToMove = 0;
int dy = currY-lastY;
//scroll speed depends on cursor movement
// if(abs(dy)>0 && (abs(dy)<4))
// linesToMove = 1;
// else if((abs(dy)>4) && (abs(dy)<20))
// linesToMove = 2;
// else if(abs(dy)>20)
// linesToMove = 3;
if(dy>0)//Down
{
Text::scrollTextWindow(linesToMove);
}
else if(dy<0)//Up
{
Text::scrollTextWindow(-linesToMove);
}
lastY=currY;
}
// Call this method from showMenu of UIController.java
//this maps zones to tiles
//the zones are labelled vertically because its easier to create them that way
// the tiles are labelled horizontally
/*
* I had to do this from within game code to make it work with tutorial
* for example there are points in the game where u cant accept a tile press and this is handled in games logic
static void onTileRelease(int zone)
{
//System.out.println("press tile zone " + zone );
//selectAndMoveTo(zoneToTile[zone] - 29);
////System.out.println("Zone " + zone + " Tile " + (zone - ZONE_TILE_0));
}
*/
static void selectAndMoveTo(int tile)
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
sp->GCursor_m_nCursorTile= tile;
GCursor::selectCursorTile(tile);
}
//recieves the zoneID
//the tiles Zones are currently labelled from 29 (ZONE_TILE_0) so I subtract this to get array element 0
//returns the tile number as they are labeled in the game
static int zoneToTile(int zone)
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
int temp = sp->zoneToTile[zone - ZONE_TILE_0];
return temp;
}
//check whether the current zone is a tile
static bool isTile(int zone)
{
//when I && statements with '<=' I get the error "generics not supported"
//if((zone >= ZONE_TILE_0) && (zone <= ZONE_GAME_TILE_51))//this doesn't compile !!
if((zone > ZONE_TILE_0-1) && (zone < ZONE_GAME_TILE_51+1))
return true;
else
return false;
}
//-------------------------------------------------------------------------------------------------------------------------------
// Zone additions for all screens
//-------------------------------------------------------------------------------------------------------------------------------
// Call this method from showMenu of UIController.java
static void activateMenuZones(int menuId)
{
//System.out.println("ACTIVATING MENU " + menuId);
////System.out.println("activateMenuZones");
switch (menuId)
{
case UI_STATE_MAIN_MENU:
//System.out.println("initMainMenu");
initMainMenu();
break;
case UI_STATE_NEW_GAME_MENU:
//System.out.println("initMenuPlay");
initMenuPlay();
break;
case UI_STATE_ACHIEVEMENTS_MENU:
//System.out.println("initMenuArchives");
initMenuArchives();
break;
case UI_STATE_OPTIONS_MENU:
//System.out.println("initMenuOptions");
initMenuOptions();
break;
case UI_STATE_HELP_MENU:
//System.out.println("initMenuHelp");
initMenuHelp();
break;
case UI_STATE_CLASSIC_GAME_MENU:
//System.out.println("initMenuClassic");
initMenuClassic();
break;
case UI_STATE_ACTION_GAME_MENU:
//System.out.println("initMenuAction");
initMenuAction();
break;
case UI_STATE_TUTORIAL_MENU:
//System.out.println("initMenuTutorial");
initMenuTutorial();
break;
case UI_STATE_PAUSE_MENU:
initPauseScreen();
break;
case UI_STATE_NONE://going from pause menu back to game
//System.out.println("initBorad");
initBoard();
break;
case UI_STATE_BUTTON_MENU_SOUND://going from pause menu back to game
initMenuSound();
break;
case UI_STATE_BUTTON_MENU_CONTROL_METHOD://going from pause menu back to game
initMenuInput();
break;
case UI_STATE_INSTRUCTIONS_SCREEN:
case UI_STATE_CREDITS_SCREEN:
case UI_STATE_ABOUT_SCREEN:
initScrollBar();
break;
default:
//System.out.println("ACTIVATING MENU DEFAULT");
resetZones();
break;
}
}
static void initMenuPlay()
{
resetZones();
addZone(38, 148, 152, 31, ZONE_PLAYMENU_CLASSIC);
addZone(37, 183, 166, 33, ZONE_PLAYMENU_ACTION);
}
static void initMenuArchives()
{
resetZones();
addZone(38, 130, 152, 31, ZONE_ARCHIVESMENU_HIGHSCORES);
addZone(41, 166, 165, 30, ZONE_ARCHIVESMENU_BESTWORDS);
addZone(44, 202, 154, 30, ZONE_ARCHIVESMENU_LONGESTWORDS);
}
static void initMenuOptions()
{
//System.out.println("initMenuOptions");
resetZones();
//#ifndef NO_INPUT_MENU
addZone(38, 112, 151, 30, ZONE_OPTIONSMENU_SOUND);
addZone(41, 146, 164, 34, ZONE_OPTIONSMENU_INPUT);
addZone(35, 183, 156, 32, ZONE_OPTIONSMENU_RESETARCHIVES);
addZone(40, 220, 160, 33, ZONE_OPTIONSMENU_RESETTUTORIAL);
//#else
addZone(37,129, 151, 30, ZONE_OPTIONSMENU_SOUND);
addZone(42,166, 156, 32, ZONE_OPTIONSMENU_RESETARCHIVES);
addZone(43,200, 160, 33, ZONE_OPTIONSMENU_RESETTUTORIAL);
//#endif
}
static void initMenuHelp()
{
resetZones();
addZone(38, 112, 151, 31, ZONE_HELPMENU_TUTORIAL);
addZone(41, 148, 161, 31, ZONE_HELPMENU_PLAYGUIDE);
addZone(35, 183, 153, 31, ZONE_HELPMENU_CREDITS);
addZone(41, 220, 159, 31, ZONE_HELPMENU_ABOUT);
}
static void initMenuSound()
{
resetZones();
addZone(39,111,152,32, ZONE_SOUND_MENU_OFF);
addZone(40,148,165,32, ZONE_SOUND_MENU_QUIET);
addZone(34,184,155,32, ZONE_SOUND_MENU_MEDIUM);
addZone(40,220,162,32, ZONE_SOUND_MENU_LOUD);
}
//todo implement cursor menu
static void initMenuInput()
{
resetZones();
//#ifdef QWERTY
addZone(37,147,150,32, ZONE_INPUT_MENU_SINGLE);
addZone(37,183,154,32, ZONE_INPUT_MENU_CURSOR);
//#else
addZone(37,130,150,32, ZONE_INPUT_MENU_SINGLE);
addZone(40,165,164,32, ZONE_INPUT_MENU_MULTI);
addZone(43,202,154,32, ZONE_INPUT_MENU_CURSOR);
//#endif
}
static void initMenuTutorial()
{
resetZones();
addZone(38,148,151,33, ZONE_TUTORIALMENU_CURSOR);
addZone(38,185,162,34, ZONE_TUTORIALMENU_SINGLETAP);
}
static void initMenuClassic()
{
resetZones();
addZone(32,145,165,35, ZONE_CLASSICMENU_RESUME);
addZone(33,181,170,38, ZONE_CLASSICMENU_NEWGAME);
}
static void initMenuAction()
{
resetZones();
addZone(32,145,165,35,ZONE_ACTIONMENU_RESUME);
addZone(33,181,170,38, ZONE_ACTIONMENU_NEWGAME);
}
static void initPauseScreen()
{
resetZones();
//#ifndef NO_INPUT_MENU
addZone(37,130,153,29, ZONE_PAUSEMENU_MAINMENU);
addZone(40,165,165,33, ZONE_PAUSEMENU_SOUND);
addZone(40,200,160,40, ZONE_PAUSEMENU_INPUT);
//#else
addZone(37,146,153,32, ZONE_PAUSEMENU_MAINMENU);
addZone(36,183,165,33, ZONE_PAUSEMENU_SOUND);
//#endif
}
//the scroll bars to the side of texts windows, used on credits etc.
//this is used in multiple menus so its called from other initMenus
//therefore we do not reset zones
static void initScrollBar()
{
resetZones();
addZone(208,42,29,245,ZONE_SCROLLBAR);
addZone(228,32,10,10,ZONE_SCROLLBAR_UP);
addZone(228,286,10,10,ZONE_SCROLLBAR_DOWN);
//System.out.println("initScrollBar()");
}
//sets up tile zones for the game board
//-------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------
// This must be called at the beginning of the game to initialise the max number of zones we will support
static void init(int nbZones)
{
//System.out.println("init");
// Allocate the info necessary to store the zones coordinates + action ID
Game * pMe = Game::getInstance();
TFCStaticProvider * tfcsp = pMe->tfcsp;
StaticProvider * sp = pMe->sp;
//zoneInfo = new int[NB_INFO_PER_ZONE * nbZones]; moved to Static Provider
tfcsp->zonePressed= -1;
sp->zoneProtected = 0;
// Clear all the existing zones by putting a -1 as the X coordinate
resetZones();
addSoftkeyZones();
setZoneProtected(2);
}
//TODO maybe add a b
// Reset the zones not protected by the setProtectedZones
static void resetZones()
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
//System.out.println("resetZones()");
sp->zoneNb = sp->zoneProtected;
for(int i =2;i<255;i++) // This is probably all messed up. //TODO come back and redo this code. Seems a little over complicated.
{
sp->zoneInfo[i * NB_INFO_PER_ZONE + 4] = -1;//set ids to 0 deactivating the zone
}
}
static void setZoneProtected(int zoneId)
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
sp->zoneProtected = zoneId;
}
/*
static int abs(int x)
{
return x = x > 0 ? x : 0 - x;
}
*/
// Check if the stylus is actually in one zone and call the callback to handle the event in that case
// Please call this method when pointerPresse(x, y) is called and pointerRelease(x, y)
//type can be PRESS RELEASE DRAG
static void checkZones(int x, int y, int type)
{
Game * pMe = Game::getInstance();
StaticProvider * sp = pMe->sp;
int i;
boolean a = false;
boolean b = false;
boolean c = false;
boolean d = false;
int zone = -1;
if(type == DRAG)
{
sp->dragging = true;
}
else
{
sp->dragging = false;
}
//this is to dismiss the speech bubble, slightly hacky
//but probably the neatest way to do it
//#if DEBUG
//System.out.println("m_bDrawSpeechBubble " + GCanvasController.m_bDrawSpeechBubble);
//System.out.println("Type " + type );
//System.out.println("y " + y );
//#endif
if(sp->GCanvasController_m_bDrawSpeechBubble && (type == RELEASE) && (y <200) && (y > 133)
&& (sp->UIModel_m_nUIState == UI_STATE_NONE) )
{
//zoneRelease(ZONE_SOFTKEYLEFT);
Input::HandleKeyPress( Constants::KEY_MAPPING_CODES[0]);
//System.out.println("STATE= " + UIModel.m_nUIState + " UI_STATE_PAUSE_MENU: " + UI_STATE_PAUSE_MENU);
return;
}
for (i = 0 ; i < sp->zoneNb ; i++)
{
//bounding box collision
a = (sp->zoneInfo[i * NB_INFO_PER_ZONE] < x);
b = (sp->zoneInfo[i * NB_INFO_PER_ZONE + 1] < y);
c = (sp->zoneInfo[i * NB_INFO_PER_ZONE] + sp->zoneInfo[i * NB_INFO_PER_ZONE + 2] > x);//Position + width
d = (sp->zoneInfo[i * NB_INFO_PER_ZONE + 1] + sp->zoneInfo[i * NB_INFO_PER_ZONE + 3] > y); //position + height
if ( a && b && c && d )//a collision has occurred
{
//System.out.println("COLLISION " + zone + " Type " + type);
zone = sp->zoneInfo[i * NB_INFO_PER_ZONE + 4];
if(type == PRESS || type == DRAG)
{
//this means you can drag select on tiles
if(type == DRAG && isTile(zone))
{
zoneRelease(zone);
}
else if(zone != ZONE_SCROLLBAR)
{
zonePress(zone);
}
else if(zone == ZONE_SCROLLBAR && type == DRAG)
{
onScrollBar(y);
}
}
else
{
zoneRelease(zone);
////System.out.println("zoneRelease " + i * NB_INFO_PER_ZONE + 4 );
}
//TODO u dont always want to do this on scroll only if Y has changed
if(zone == ZONE_SCROLLBAR || zone == ZONE_SCROLLBAR_UP || zone == ZONE_SCROLLBAR_DOWN)
{
//UIModel.UI_STATE_DRAW_NEXT_FRAME[UIModel.m_nUIState] = true;//refresh
sp->UIModel_UI_STATE_DRAW_NEXT_FRAME[sp->UIModel_m_nUIState] = true;
}
//lastY = y;
return;
}
}
}