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

📄 joy.cpp

📁 日本的手持pda源码.wince下使用,完全开源
💻 CPP
字号:
#include "PocketGnuboy.h"
#include "wce.h"
#include "gx.h"

extern "C" {

#include "defs.h"
#include "fb.h"
#include "hw.h"

void pad_set(byte k, int st);

/*
 * process hardware keys
 */

static int joy_code[JOY_MAX] = {
	0xC3, 0xC4, 0xC1, 0xC2, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, 0xC5
};

static GXKeyList gxkl;
static int turboa = 0;
static int turbob = 0;
static int turbosw_a = 0;
static int turbosw_b = 0;
static int vpadstate = VPAD_STATE_NONE;

void joy_init()
{
	GXOpenInput();
#if 0
	gxkl = GXGetDefaultKeys(GX_NORMALKEYS);

	if (!joy_code[0]) {
		joy_code[0] = gxkl.vkUp;
		joy_code[1] = gxkl.vkDown;
		joy_code[2] = gxkl.vkLeft;
		joy_code[3] = gxkl.vkRight;
		joy_code[4] = gxkl.vkA;
		joy_code[5] = gxkl.vkB;
		joy_code[6] = gxkl.vkStart;
		joy_code[7] = gxkl.vkC;
		joy_code[8] = 0;
	}
#endif
}

void joy_close()
{
	GXCloseInput();
}

void joy_process()
{
	BOOL push;
	// A
	if (joy_code[JOY_INDEX_A])
		push = (vpadstate & VPAD_STATE_A) || (GetAsyncKeyState(joy_code[JOY_INDEX_A]) & 0x8000);
	else
		push = (vpadstate & VPAD_STATE_A);
	if (turboa) {
		if (push) {
			pad_set(PAD_A, turbosw_a);
			turbosw_a = !turbosw_a;
		}
		else
			pad_set(PAD_A, 0);
	}
	else pad_set(PAD_A, push);

	// B
	if (joy_code[JOY_INDEX_B])
		push = (vpadstate & VPAD_STATE_B) || (GetAsyncKeyState(joy_code[JOY_INDEX_B]) & 0x8000);
	else
		push = (vpadstate & VPAD_STATE_B);
	if (turbob) {
		if (push) {
			pad_set(PAD_B, turbosw_b);
			turbosw_b = !turbosw_b;
		}
		else
			pad_set(PAD_B, 0);
	}
	else pad_set(PAD_B, push);

	// Select
	if (joy_code[JOY_INDEX_SELECT])
		pad_set(PAD_SELECT, GetAsyncKeyState(joy_code[JOY_INDEX_SELECT]) & 0x8000);

	// Start
	if (joy_code[JOY_INDEX_START])
		pad_set(PAD_START, GetAsyncKeyState(joy_code[JOY_INDEX_START]) & 0x8000);

	// Up
	if (joy_code[JOY_INDEX_UP])
		push = (vpadstate & VPAD_STATE_UP) || (GetAsyncKeyState(joy_code[JOY_INDEX_UP]) & 0x8000);
	else
		push = (vpadstate & VPAD_STATE_UP);
	pad_set(PAD_UP, push);

	// Down
	if (joy_code[JOY_INDEX_DOWN])
		push = (vpadstate & VPAD_STATE_DOWN) || (GetAsyncKeyState(joy_code[JOY_INDEX_DOWN]) & 0x8000);
	else
		push = (vpadstate & VPAD_STATE_DOWN);
	pad_set(PAD_DOWN, push);

	// Left
	if (joy_code[JOY_INDEX_LEFT])
		push = (vpadstate & VPAD_STATE_LEFT) || (GetAsyncKeyState(joy_code[JOY_INDEX_LEFT]) & 0x8000);
	else
		push = (vpadstate & VPAD_STATE_LEFT);
	pad_set(PAD_LEFT, push);

	// Right
	if (joy_code[JOY_INDEX_RIGHT])
		push = (vpadstate & VPAD_STATE_RIGHT) || (GetAsyncKeyState(joy_code[JOY_INDEX_RIGHT]) & 0x8000);
	else
		push = (vpadstate & VPAD_STATE_RIGHT);
	pad_set(PAD_RIGHT, push);
	
	// Pause
	if (joy_code[JOY_INDEX_ESCAPE]) {
		if (GetAsyncKeyState(joy_code[JOY_INDEX_ESCAPE]) & 0x8000)
			Pause();
	}
}

void joy_poll()
{
	/* do nothing here since key events have already been processed */
}

int joy_get_key(int index)
{
	return joy_code[index];
}

void joy_set_key(int index, int key)
{
	joy_code[index] = key;
}

int joy_get_turbo_a()
{
	return turboa;
}

int joy_get_turbo_b()
{
	return turbob;
}

void joy_set_turbo_a(int turbo)
{
	turboa = turbo;
}

void joy_set_turbo_b(int turbo)
{
	turbob = turbo;
}

void joy_set_vpadstate(int state)
{
	vpadstate = state;
}

} // extern "C"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -