diff options
Diffstat (limited to 'Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp')
| -rw-r--r-- | Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp | 501 |
1 files changed, 501 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp b/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp new file mode 100644 index 00000000..63eba1a5 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp @@ -0,0 +1,501 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIComponent_Tooltips.h" + +UIComponent_Tooltips::UIComponent_Tooltips(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ + for(int i=0;i<XUSER_MAX_COUNT;i++) + { + for(int j=0;j<ACTION_MAX_MENU;j++) + { + m_overrideSFX[i][j]=false; + } + } + // Setup all the Iggy references we need for this scene + initialiseMovie(); + +#ifdef __PSVITA__ + // initialise vita touch controls with ids + for(unsigned int i = 0; i < ETouchInput_Count; ++i) + { + m_TouchController[i].init(i); + } +#endif + +#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) + if(InputManager.IsCircleCrossSwapped()) + { + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = true; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetABSwap , 1 , value ); + } +#endif +} + +wstring UIComponent_Tooltips::getMoviePath() +{ + switch( m_parentLayer->getViewport() ) + { + case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: + case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: + case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: + case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: + m_bSplitscreen = true; + return L"ToolTipsSplit"; + break; + case C4JRender::VIEWPORT_TYPE_FULLSCREEN: + default: + m_bSplitscreen = false; + return L"ToolTips"; + break; + } +} + +F64 UIComponent_Tooltips::getSafeZoneHalfWidth() +{ + float width = ui.getScreenWidth(); + + float safeWidth = 0.0f; + +#ifndef __PSVITA__ + // 85% safezone for tooltips in either SD mode + if( !RenderManager.IsHiDef() ) + { + // 85% safezone + safeWidth = m_movieWidth * (0.15f / 2); + } + else + { + // 90% safezone + safeWidth = width * (0.1f / 2); + } +#endif + return safeWidth; +} + +void UIComponent_Tooltips::updateSafeZone() +{ + // Distance from edge + F64 safeTop = 0.0; + F64 safeBottom = 0.0; + F64 safeLeft = 0.0; + F64 safeRight = 0.0; + + switch( m_parentLayer->getViewport() ) + { + case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: + safeTop = getSafeZoneHalfHeight(); + safeLeft = getSafeZoneHalfWidth(); + break; + case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: + safeBottom = getSafeZoneHalfHeight(); + safeLeft = getSafeZoneHalfWidth(); + break; + case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: + safeLeft = getSafeZoneHalfWidth(); + safeBottom = getSafeZoneHalfHeight(); + break; + case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: + safeRight = getSafeZoneHalfWidth(); + safeBottom = getSafeZoneHalfHeight(); + break; + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: + safeTop = getSafeZoneHalfHeight(); + safeLeft = getSafeZoneHalfWidth(); + break; + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: + safeTop = getSafeZoneHalfHeight(); + safeRight = getSafeZoneHalfWidth(); + break; + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: + safeBottom = getSafeZoneHalfHeight(); + safeLeft = getSafeZoneHalfWidth(); + break; + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: + safeBottom = getSafeZoneHalfHeight(); + safeRight = getSafeZoneHalfWidth(); + break; + case C4JRender::VIEWPORT_TYPE_FULLSCREEN: + default: + safeTop = getSafeZoneHalfHeight(); + safeBottom = getSafeZoneHalfHeight(); + safeLeft = getSafeZoneHalfWidth(); + safeRight = getSafeZoneHalfWidth(); + break; + } + setSafeZone(safeTop, safeBottom, safeLeft, safeRight); +} + +void UIComponent_Tooltips::tick() +{ + UIScene::tick(); + + // set the opacity of the tooltip items + unsigned char ucAlpha=app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_InterfaceOpacity); + float fVal; + + if(ucAlpha<80) + { + // if we are in a menu, set the minimum opacity for tooltips to 15% + if(ui.GetMenuDisplayed(m_iPad) && (ucAlpha<15)) + { + ucAlpha=15; + } + + // check if we have the timer running for the opacity + unsigned int uiOpacityTimer=app.GetOpacityTimer(m_iPad); + if(uiOpacityTimer!=0) + { + if(uiOpacityTimer<10) + { + float fStep=(80.0f-(float)ucAlpha)/10.0f; + fVal=0.01f*(80.0f-((10.0f-(float)uiOpacityTimer)*fStep)); + } + else + { + fVal=0.01f*80.0f; + } + } + else + { + fVal=0.01f*(float)ucAlpha; + } + } + else + { + // if we are in a menu, set the minimum opacity for tooltips to 15% + if(ui.GetMenuDisplayed(m_iPad) && (ucAlpha<15)) + { + ucAlpha=15; + } + fVal=0.01f*(float)ucAlpha; + } + setOpacity(fVal); +} + +void UIComponent_Tooltips::render(S32 width, S32 height, C4JRender::eViewportType viewport) +{ + if((ProfileManager.GetLockedProfile()!=-1) && !ui.GetMenuDisplayed(m_iPad) && (app.GetGameSettings(m_iPad,eGameSetting_Tooltips)==0 || app.GetGameSettings(m_iPad,eGameSetting_DisplayHUD)==0)) + { + return; + } + + if(m_bSplitscreen) + { + S32 xPos = 0; + S32 yPos = 0; + switch( viewport ) + { + case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: + yPos = (S32)(ui.getScreenHeight() / 2); + break; + case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: + xPos = (S32)(ui.getScreenWidth() / 2); + break; + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: + xPos = (S32)(ui.getScreenWidth() / 2); + yPos = (S32)(ui.getScreenHeight() / 2); + break; + } + ui.setupRenderPosition(xPos, yPos); + + S32 tileXStart = 0; + S32 tileYStart = 0; + S32 tileWidth = width; + S32 tileHeight = height; + + switch( viewport ) + { + case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: + case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: + tileHeight = (S32)(ui.getScreenHeight()); + break; + case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: + tileWidth = (S32)(ui.getScreenWidth()); + tileYStart = (S32)(m_movieHeight / 2); + break; + case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: + tileWidth = (S32)(ui.getScreenWidth()); + tileYStart = (S32)(m_movieHeight / 2); + break; + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: + case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: + tileYStart = (S32)(m_movieHeight / 2); + break; + } + + IggyPlayerSetDisplaySize( getMovie(), m_movieWidth, m_movieHeight ); + + IggyPlayerDrawTilesStart ( getMovie() ); + + m_renderWidth = tileWidth; + m_renderHeight = tileHeight; + IggyPlayerDrawTile ( getMovie() , + tileXStart , + tileYStart , + tileXStart + tileWidth , + tileYStart + tileHeight , + 0 ); + IggyPlayerDrawTilesEnd ( getMovie() ); + } + else + { + UIScene::render(width, height, viewport); + } +} + +void UIComponent_Tooltips::SetTooltipText( unsigned int tooltip, int iTextID ) +{ + if( _SetTooltip(tooltip, iTextID) ) _Relayout(); +} + +void UIComponent_Tooltips::SetEnableTooltips( bool bVal ) +{ +} + +void UIComponent_Tooltips::ShowTooltip( unsigned int tooltip, bool show ) +{ + if(show != m_tooltipValues[tooltip].show) + { + _SetTooltip(tooltip, L"", show); + _Relayout(); + } +} + +void UIComponent_Tooltips::SetTooltips( int iA, int iB, int iX, int iY , int iLT, int iRT, int iLB, int iRB, int iLS, bool forceUpdate) +{ + bool needsRelayout = false; + needsRelayout = _SetTooltip( eToolTipButtonA, iA ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonB, iB ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonX, iX ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonY, iY ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonLT, iLT ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonRT, iRT ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonLB, iLB ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonRB, iRB ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonLS, iLS ) || needsRelayout; + + if(needsRelayout)_Relayout(); +} + +void UIComponent_Tooltips::EnableTooltip( unsigned int tooltip, bool enable ) +{ +} + +bool UIComponent_Tooltips::_SetTooltip(unsigned int iToolTip, int iTextID) +{ + bool changed = false; + if(iTextID != m_tooltipValues[iToolTip].iString || (iTextID > -1 && !m_tooltipValues[iToolTip].show)) + { + m_tooltipValues[iToolTip].iString = iTextID; + changed = true; + if(iTextID > -1) _SetTooltip(iToolTip, app.GetString(iTextID), true); + else if(iTextID == -2) _SetTooltip(iToolTip, L"", true); + else _SetTooltip(iToolTip, L"", false); + } + return changed; +} + +void UIComponent_Tooltips::_SetTooltip(unsigned int iToolTipId, const wstring &label, bool show, bool force) +{ + if(!force && !show && !m_tooltipValues[iToolTipId].show) + { + return; + } + m_tooltipValues[iToolTipId].show = show; + + IggyDataValue result; + IggyDataValue value[3]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = iToolTipId; + + value[1].type = IGGY_DATATYPE_string_UTF16; + IggyStringUTF16 stringVal; + + stringVal.string = (IggyUTF16*)label.c_str(); + stringVal.length = label.length(); + value[1].string16 = stringVal; + + value[2].type = IGGY_DATATYPE_boolean; + value[2].boolval = show; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetTooltip , 3 , value ); + + app.DebugPrintf("Actual tooltip update!\n"); +} + +void UIComponent_Tooltips::_Relayout() +{ + IggyDataValue result; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcUpdateLayout, 0 , NULL ); + +#ifdef __PSVITA__ + // rebuild touchboxes + ui.TouchBoxRebuild(this); +#endif +} + +#ifdef __PSVITA__ +void UIComponent_Tooltips::handleTouchInput(unsigned int iPad, S32 x, S32 y, int iId, bool bPressed, bool bRepeat, bool bReleased) +{ + //app.DebugPrintf("ToolTip Touch ID = %i\n", iId); + bool handled = false; + + // perform action on release + if(bReleased) + { + switch(iId) + { + case ETouchInput_Touch_A: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_X\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_X); + break; + case ETouchInput_Touch_B: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_O\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_O); + break; + case ETouchInput_Touch_X: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_SQUARE\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_SQUARE); + break; + case ETouchInput_Touch_Y: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_TRIANGLE\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_TRIANGLE); + break; + case ETouchInput_Touch_LT: + /* not in use on vita */ + app.DebugPrintf("ToolTip no action\n", iId); + break; + case ETouchInput_Touch_RightTrigger: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_SELECT\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_SELECT); + break; + case ETouchInput_Touch_LeftBumper: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_L1\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_L1); + break; + case ETouchInput_Touch_RightBumper: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_R1\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_R1); + break; + case ETouchInput_Touch_LeftStick: + app.DebugPrintf("ToolTip no action\n", iId); + /* no action */ + break; + } + } +} +#endif + +void UIComponent_Tooltips::handleReload() +{ + app.DebugPrintf("UIComponent_Tooltips::handleReload\n"); + +#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) + if(InputManager.IsCircleCrossSwapped()) + { + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = true; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetABSwap , 1 , value ); + } +#endif + + for(unsigned int i = 0; i < eToolTipNumButtons; ++i) + { + _SetTooltip(i,app.GetString(m_tooltipValues[i].iString), m_tooltipValues[i].show, true); + } + _Relayout(); +} + +void UIComponent_Tooltips::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + if(m_overrideSFX[iPad][key]) + { + // don't play a sound for this action + switch(key) + { + case ACTION_MENU_A: + case ACTION_MENU_OK: + case ACTION_MENU_PAGEUP: + case ACTION_MENU_PAGEDOWN: + case ACTION_MENU_X: + case ACTION_MENU_Y: + case ACTION_MENU_B: + case ACTION_MENU_CANCEL: + case ACTION_MENU_LEFT_SCROLL: + case ACTION_MENU_RIGHT_SCROLL: + case ACTION_MENU_LEFT: + case ACTION_MENU_RIGHT: + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + sendInputToMovie(key, repeat, pressed, released); + break; + } + } + else + { + switch(key) + { + case ACTION_MENU_OK: + case ACTION_MENU_CANCEL: + // 4J-PB - We get both A and OK, and B and Cancel, so only play a sound on one of them. + sendInputToMovie(key, repeat, pressed, released); + break; + case ACTION_MENU_A: + case ACTION_MENU_X: + case ACTION_MENU_Y: + // 4J-PB - play a Press sound + //CD - Removed, causes a sound on all presses + /*if(pressed) + { + ui.PlayUISFX(eSFX_Press); + }*/ + sendInputToMovie(key, repeat, pressed, released); + break; + + case ACTION_MENU_B: + // 4J-PB - play a Press sound + //CD - Removed, causes a sound on all presses + /*if(pressed) + { + ui.PlayUISFX(eSFX_Back); + }*/ + sendInputToMovie(key, repeat, pressed, released); + break; + + case ACTION_MENU_LEFT_SCROLL: + case ACTION_MENU_RIGHT_SCROLL: + //CD - Removed, causes a sound on all presses + /*if(pressed) + { + ui.PlayUISFX(eSFX_Scroll); + }*/ + sendInputToMovie(key, repeat, pressed, released); + break; + case ACTION_MENU_PAGEUP: + case ACTION_MENU_PAGEDOWN: + case ACTION_MENU_LEFT: + case ACTION_MENU_RIGHT: + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + sendInputToMovie(key, repeat, pressed, released); + break; + } + } +} + +void UIComponent_Tooltips::overrideSFX(int iPad, int key, bool bVal) +{ + m_overrideSFX[iPad][key]=bVal; +} |
