⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hammal.c

📁 Haier2016芯片的SDK开发包,在2016开发板上面验证过.
💻 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 + -