📄 hammal.c
字号:
/*****************************************************************************
File Name : Hammal.c
Description : game Manage for the System.
Copyright(C)2005 Haier-IC
Author(s) : Goudio
Mender :
Reference :
*****************************************************************************/
/*
* =======================
* IMPROVEMENTS THOUGHT OF
* =======================
*
* =====================
* MODIFICATION HISTORY:
* =====================
*
* Date Modification Initials
* ---- ------------ --------
* 05.24.2005 CREATED Goudio
*
*/
/****************************************************************************************/
/************************************** Includes
****************************************/
/****************************************************************************************/
#include <stdarg.h>
#include "stddefs.h"
#include "hrosd.h"
#include "Hrusif.h"
#include "hrreport.h"
#include "palette.h"
#include "CommonControl.h"
#include "picture.h"
#include "hammal.h"
#define HELP_XPOS 120
#define HELP_YPOS 50
#define HELP_WIDTH 400
#define HELP_HEIGHT 150
extern HR_PARTITION *HeapPartition;
extern HR_CLOCK UsifClock;
HR_STATIC HROSD_RegionHandle_t HAMMAL_HANDLE;
HM_VOID Hammal_DrawStringRes(HM_WORD StrResID, HM_WORD X, HM_WORD Y, HM_WORD W, HM_WORD H, HM_BYTE textColor, Display_Mode_t tMode) HAMMAL_POSTFIT
{
HRFONT_DrawStringRes(&GlobalFont,HAMMAL_HANDLE,(HR_WORD)StrResID,(HR_WORD)X,(HR_WORD)Y,(HR_WORD)W,(HR_WORD)H,(HR_BYTE)textColor,(Justification_Mode_t)tMode);
}
HM_VOID HAMMAL_FillRectangle(HM_INT PositionX,HM_INT PositionY,HM_DWORD Width,HM_DWORD Height,HM_BYTE ColorIndex) HAMMAL_POSTFIT
{
HROSD_FillRectangle(HAMMAL_HANDLE,(HR_INT)PositionX,(HR_INT)PositionY,(HR_DWORD)Width,(HR_DWORD)Height, ColorIndex);
}
HM_VOID Hammal_ShowBitmap(HM_INT PositionX,HM_INT PositionY,HM_WORD Picture_SN) HAMMAL_POSTFIT
{
ShowBitmap(HAMMAL_HANDLE,(HR_INT)PositionX,(HR_INT)PositionY,(HR_WORD)Picture_SN);
}
HM_VOID HAMMAL_DrawBasicBoxBMP(HM_BYTE ucRow, HM_BYTE ucColumn,HM_BYTE ucBmpIndex) HAMMAL_POSTFIT
{
HM_SHORT sXPos = BOXXOFFSET + ucColumn*32;
HM_SHORT sYPos = BOXYOFFSET + ucRow*32;
switch(ucBmpIndex)
{
case 1:
Hammal_ShowBitmap(sXPos,sYPos,WALL_BITMAP_INDEX);
break;
case 2:
Hammal_ShowBitmap(sXPos,sYPos,GROUND_BITMAP_INDEX);
break;
case 3:
Hammal_ShowBitmap(sXPos,sYPos,TARGET_BITMAP_INDEX);
break;
case 4:
Hammal_ShowBitmap(sXPos,sYPos,YELLOW_BOX_INDEX);
break;
case 5:
Hammal_ShowBitmap(sXPos,sYPos,RED_BOX_INDEX);
break;
case 6:
Hammal_ShowBitmap(sXPos,sYPos,MAN_BITMAP_INDEX);
break;
default:
break;
}
}
#define BUTTON_WIDTH 24
#define BUTTON_HEIGHT 24
HR_STATIC HR_BYTE HR_CONST_FAR ButtonColor[] = {RED_COLOR, GREEN_COLOR, YELLOW_COLOR, BLUE_COLOR};
static HR_VOID ShowTwoLineHelp(HR_WORD PosX, HR_WORD PosY, HR_WORD Width, HR_WORD Height, HR_BYTE StringNum, ...) HRUSIFFUNCPOSTFIX
{
va_list argp;
StrResId_t StrResId[6];
HR_WORD PosX1, PosX2, ItemWidth, HelpWidth, Space1, Space2;
HR_WORD StringWidth;
HR_SHORT GlyphWidth;
HR_BYTE i, LineFeed;
va_start(argp, StringNum);
if (StringNum <= 6)
{
// HROSD_FillRectangle(RegionHandle, PosX, PosY, Width, 48, COLOR_WINDOW);
DrawRoundButton(PosX, PosY, Width, 48, IDS_NULL, NULL, FALSE, FALSE);
i = 0;
while (i < StringNum) // Getting the StringIDs
{
StrResId[i] = va_arg(argp, StrResId_t);
i++;
}
LineFeed = -1;
HelpWidth = 0;
i = 0;
while (i < StringNum) // Finding the first line-feed point
{
HRFONT_StringResWidth(&GlobalFont, StrResId[i], &StringWidth, &GlyphWidth);
ItemWidth = BUTTON_WIDTH + GlyphWidth;
HelpWidth += ItemWidth;
if (HelpWidth > Width)
{
LineFeed = i++;
break;
}
ItemWidth = 0;
i++;
}
// if fit in one line, adjust position
if (LineFeed == -1)
{
PosY += BUTTON_HEIGHT / 2;
}
// calculate the start position of 1st line
Space1 = (Width - HelpWidth + ItemWidth) / i / 2;
PosX1 = PosX + Space1;
HelpWidth = ItemWidth;
while (i < StringNum)
{
HRFONT_StringResWidth(&GlobalFont, StrResId[i], &StringWidth, &GlyphWidth);
ItemWidth = BUTTON_WIDTH + GlyphWidth;
HelpWidth += ItemWidth;
if (HelpWidth > Width)
{
break;
}
ItemWidth = 0;
i++;
}
// calculate the start position of 2nd line
Space2 = (Width - HelpWidth) /(StringNum - LineFeed + 1);
PosX2 = PosX + Space2;
PosX = PosX1;
i = 0;
while (i < StringNum) // draw help
{
if (StrResId[i] >= USER_RESERVE_STRINGRES_MIN_ID)
{
break;
}
if (i == LineFeed)
{
PosX = PosX2;
PosY += BUTTON_HEIGHT;
}
HROSD_FillOval(RegionHandle, PosX + BUTTON_WIDTH / 2, PosY + 2 + BUTTON_HEIGHT * 3 / 8, BUTTON_WIDTH / 2, BUTTON_HEIGHT * 3 / 8, ButtonColor[i]);
HRFONT_StringResWidth(&GlobalFont, StrResId[i], &StringWidth, &GlyphWidth);
HRFONT_DrawStringRes(&GlobalFont, RegionHandle, StrResId[i], PosX + BUTTON_WIDTH + 2, PosY,
GlyphWidth + 2, BUTTON_HEIGHT, WHITE_COLOR, JUSTIFICATION_CENTER);
ItemWidth = BUTTON_WIDTH + GlyphWidth;
if (i < LineFeed)
{
PosX += ItemWidth + Space1;
}
else
{
PosX += ItemWidth + Space2;
}
i++;
}
}
va_end(argp);
return;
Height = Height;
}
HM_VOID HammalHelp(HM_VOID) HAMMAL_POSTFIT
{
ShowTwoLineHelp(100, 50, 520, 480, 4, IDS_HELP1, IDS_HELP2, IDS_HELP3, IDS_HELP4);
}
HM_VOID HAMMAL_HideRegion(HM_VOID) HAMMAL_POSTFIT
{
HROSD_HideRegion(HAMMAL_HANDLE);
}
HM_VOID HAMMAL_ShowRegion(HM_VOID) HAMMAL_POSTFIT
{
HROSD_ShowRegion(HAMMAL_HANDLE);
}
HM_VOID* HAMMAL_Allocate(HM_DWORD tSize) HAMMAL_POSTFIT
{
HM_VOID* ptr;
ptr =(HM_VOID*)HR_OS_Allocate_Memory(HeapPartition,(HR_SIZE)tSize);
return ptr;
}
HM_VOID HAMMAL_DeAllocate(HM_VOID *point) HAMMAL_POSTFIT
{
HR_OS_Deallocate(HeapPartition,(HR_VOID*)point);
}
HR_BOOLEAN HammalHandler(Message_t* m_msg) HRUSIFFUNCPOSTFIX
{
OSDSERVER_KEY_t iKeyScanCode;
HR_BYTE Color;
if (m_msg->State != GAME_HAMMAL_STATE)
return TRUE;
if (m_msg->Type == MESSAGE_INIT)
{
HROSD_Color_t *Palette = NULL;
DBaseOperationHandle OpHandle;
SYS_INFO_USIF UsifInfo;
HAMMAL_HANDLE = RegionHandle;
HROSD_HideRegion(HAMMAL_HANDLE);
OpHandle = HRDBase_Open(HRDBASE_GET_OBJECT_HANDLE(OBJECT_SYS));
HRDBase_Get_SysInfoInfo(OpHandle, &UsifInfo);
HRDBase_Close(HRDBASE_GET_OBJECT_HANDLE(OBJECT_SYS), OpHandle);
Palette = GetPalette(PALLETE_INDEX);
TimeDelay(100);
HROSD_SetRegionPalette(RegionHandle, (HROSD_Color_t *)Palette);
HROSD_SetRegionMixWeight(RegionHandle, 31-3*UsifInfo.OSDTransparency);
Color = TRANS_COLOR;
HROSD_FillRectangle(HAMMAL_HANDLE, 0, 0, 720, 576, Color);
UsifClock = TIMEOUT_INFINITY;
HAMMAL_Set_Position(BOXXOFFSET,BOXYOFFSET);
HROSD_ShowRegion(HAMMAL_HANDLE);
HammalHelp();
Hammal_Task(INIT_COMMAND);
}
else if (m_msg->Type == MESSAGE_REMOTE_FRONT_KEYBOARD)
{
iKeyScanCode = (OSDSERVER_KEY_t)(*(OSDSERVER_KEY_t*)(m_msg->Content.pData));
if (iKeyScanCode == RKEY_EXIT || iKeyScanCode == FKEY_EXIT)
{
UsifClock = TIMEOUT_INFINITY;
if (Hammal_Task(EXIT_COMMAND))
{
HROSD_Color_t *Palette = NULL;
DBaseOperationHandle OpHandle;
SYS_INFO_USIF UsifInfo;
HROSD_HideRegion(HAMMAL_HANDLE);
TimeDelay(100);;
OpHandle = HRDBase_Open(HRDBASE_GET_OBJECT_HANDLE(OBJECT_SYS));
HRDBase_Get_SysInfoInfo(OpHandle, &UsifInfo);
HRDBase_Close(HRDBASE_GET_OBJECT_HANDLE(OBJECT_SYS), OpHandle);
Palette = GetPalette(QINDAO_PALETTE_16);
HROSD_SetRegionPalette(RegionHandle, (HROSD_Color_t *)Palette);
HROSD_SetRegionMixWeight(RegionHandle, 31-3*UsifInfo.OSDTransparency);
m_msg->Type = MESSAGE_INIT;
m_msg->State = MAIN_MENU_STATE;
return TRUE;
}
}
else if ((iKeyScanCode == RKEY_DOWN_ARROW || iKeyScanCode == FKEY_DOWN_ARROW)/*&& !bEnterHELP*/)
{
Hammal_Task(DOWN_KEY_COMMAND);
}
else if ((iKeyScanCode == RKEY_UP_ARROW || iKeyScanCode == FKEY_UP_ARROW)/*&& !bEnterHELP*/)
{
Hammal_Task(UP_KEY_COMMAND);
}
else if ((iKeyScanCode == RKEY_RIGHT_ARROW || iKeyScanCode == FKEY_RIGHT_ARROW)/*&& !bEnterHELP*/)
{
Hammal_Task(RIGHT_KEY_COMMAND);
}
else if ((iKeyScanCode == RKEY_LEFT_ARROW || iKeyScanCode == FKEY_LEFT_ARROW)/*&& !bEnterHELP*/)
{
Hammal_Task(LEFT_KEY_COMMAND);
}
else if (iKeyScanCode == RKEY_FUNC1)
{
Hammal_Task(F1_COMMAND);
}
else if (iKeyScanCode == RKEY_FUNC2)
{
Hammal_Task(F2_COMMAND);
}
else if (iKeyScanCode == RKEY_FUNC3)
{
Hammal_Task(F3_COMMAND);
}
else if (iKeyScanCode == RKEY_FUNC4)
{
Hammal_Task(F4_COMMAND);
}
else if (iKeyScanCode == RKEY_MUTE)
{
Hammal_Task(F3_COMMAND);
UsifClock = 10;
Hammal_Task(TRACK_COMMAND);
}
}
else if (m_msg->Type == MESSAGE_CLOCK)
{
if (Hammal_Task(TIMEOUT_COMMAND))
{
Hammal_Task(EXIT_COMMAND);
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -