2021-07-05 17:44:08 +00:00
|
|
|
/*
|
|
|
|
This file is part of Flycast.
|
|
|
|
|
|
|
|
Flycast is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
Flycast is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
#include "vmu_xhair.h"
|
2021-07-08 18:09:09 +00:00
|
|
|
#include "cfg/option.h"
|
2021-07-05 17:44:08 +00:00
|
|
|
|
|
|
|
const char* VMU_SCREEN_COLOR_NAMES[VMU_NUM_COLORS] = {
|
|
|
|
"DEFAULT_ON",
|
|
|
|
"DEFAULT_OFF",
|
|
|
|
"BLACK",
|
|
|
|
"BLUE",
|
|
|
|
"LIGHT_BLUE",
|
|
|
|
"GREEN",
|
|
|
|
"GREEN_BLUE",
|
|
|
|
"GREEN_LIGHT_BLUE",
|
|
|
|
"LIGHT_GREEN",
|
|
|
|
"LIGHT_GREEN_BLUE",
|
|
|
|
"LIGHT_GREEN_LIGHT_BLUE",
|
|
|
|
"RED",
|
|
|
|
"RED_BLUE",
|
|
|
|
"RED_LIGHT_BLUE",
|
|
|
|
"RED_GREEN",
|
|
|
|
"RED_GREEN_BLUE",
|
|
|
|
"RED_GREEN_LIGHT_BLUE",
|
|
|
|
"RED_LIGHT_GREEN",
|
|
|
|
"RED_LIGHT_GREEN_BLUE",
|
|
|
|
"RED_LIGHT_GREEN_LIGHT_BLUE",
|
|
|
|
"LIGHT_RED",
|
|
|
|
"LIGHT_RED_BLUE",
|
|
|
|
"LIGHT_RED_LIGHT_BLUE",
|
|
|
|
"LIGHT_RED_GREEN",
|
|
|
|
"LIGHT_RED_GREEN_BLUE",
|
|
|
|
"LIGHT_RED_GREEN_LIGHT_BLUE",
|
|
|
|
"LIGHT_RED_LIGHT_GREEN",
|
|
|
|
"LIGHT_RED_LIGHT_GREEN_BLUE",
|
|
|
|
"WHITE"
|
|
|
|
};
|
|
|
|
const rgb_t VMU_SCREEN_COLOR_MAP[VMU_NUM_COLORS] = {
|
|
|
|
{ DEFAULT_VMU_PIXEL_ON_R, DEFAULT_VMU_PIXEL_ON_G , DEFAULT_VMU_PIXEL_ON_B },
|
|
|
|
{ DEFAULT_VMU_PIXEL_OFF_R, DEFAULT_VMU_PIXEL_OFF_G , DEFAULT_VMU_PIXEL_OFF_B },
|
|
|
|
{ 0x00, 0x00, 0x00 },
|
|
|
|
{ 0x00, 0x00, 0x7F },
|
|
|
|
{ 0x00, 0x00, 0xFF },
|
|
|
|
{ 0x00, 0x7F, 0x00 },
|
|
|
|
{ 0x00, 0x7F, 0x7F },
|
|
|
|
{ 0x00, 0x7F, 0xFF },
|
|
|
|
{ 0x00, 0xFF, 0x00 },
|
|
|
|
{ 0x00, 0xFF, 0x7F },
|
|
|
|
{ 0x00, 0xFF, 0xFF },
|
|
|
|
{ 0x7F, 0x00, 0x00 },
|
|
|
|
{ 0x7F, 0x00, 0x7F },
|
|
|
|
{ 0x7F, 0x00, 0xFF },
|
|
|
|
{ 0x7F, 0x7F, 0x00 },
|
|
|
|
{ 0x7F, 0x7F, 0x7F },
|
|
|
|
{ 0x7F, 0x7F, 0xFF },
|
|
|
|
{ 0x7F, 0xFF, 0x00 },
|
|
|
|
{ 0x7F, 0xFF, 0x7F },
|
|
|
|
{ 0x7F, 0xFF, 0xFF },
|
|
|
|
{ 0xFF, 0x00, 0x00 },
|
|
|
|
{ 0xFF, 0x00, 0x7F },
|
|
|
|
{ 0xFF, 0x00, 0xFF },
|
|
|
|
{ 0xFF, 0x7F, 0x00 },
|
|
|
|
{ 0xFF, 0x7F, 0x7F },
|
|
|
|
{ 0xFF, 0x7F, 0xFF },
|
|
|
|
{ 0xFF, 0xFF, 0x00 },
|
|
|
|
{ 0xFF, 0xFF, 0x7F },
|
|
|
|
{ 0xFF, 0xFF, 0xFF }
|
|
|
|
};
|
|
|
|
|
2021-07-08 10:47:00 +00:00
|
|
|
vmu_screen_params_t vmu_screen_params[4];
|
2021-07-05 17:44:08 +00:00
|
|
|
|
|
|
|
u8 lightgun_img_crosshair[LIGHTGUN_CROSSHAIR_SIZE*LIGHTGUN_CROSSHAIR_SIZE] =
|
|
|
|
{
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
|
1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,
|
|
|
|
1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,
|
|
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
|
|
|
|
};
|
|
|
|
|
|
|
|
u8 lightgun_palette[LIGHTGUN_COLORS_COUNT*3] =
|
|
|
|
{
|
2021-07-09 16:17:14 +00:00
|
|
|
0x00,0x00,0x00, // LIGHTGUN_COLOR_OFF
|
2021-07-05 17:44:08 +00:00
|
|
|
0xff,0xff,0xff, // LIGHTGUN_COLOR_WHITE
|
|
|
|
0xff,0x10,0x10, // LIGHTGUN_COLOR_RED
|
|
|
|
0x10,0xff,0x10, // LIGHTGUN_COLOR_GREEN
|
|
|
|
0x10,0x10,0xff, // LIGHTGUN_COLOR_BLUE
|
|
|
|
};
|
|
|
|
|
2021-07-08 10:47:00 +00:00
|
|
|
lightgun_params_t lightgun_params[4];
|
2021-07-05 17:44:08 +00:00
|
|
|
|
2021-07-08 10:47:00 +00:00
|
|
|
std::pair<float, float> getCrosshairPosition(int playerNum)
|
|
|
|
{
|
2021-07-08 18:09:09 +00:00
|
|
|
float fx = lightgun_params[playerNum].x * config::RenderResolution * config::ScreenStretching / 480.f / 100.f;
|
|
|
|
float fy = lightgun_params[playerNum].y * config::RenderResolution / 480.f;
|
2022-10-23 14:32:42 +00:00
|
|
|
if (config::Widescreen && config::ScreenStretching == 100 && !config::EmulateFramebuffer)
|
2021-07-08 18:09:09 +00:00
|
|
|
fx += (480.f * 16.f / 9.f - 640.f) / 2.f * config::RenderResolution / 480.f;
|
|
|
|
|
|
|
|
return std::make_pair(fx, fy);
|
2021-07-08 10:47:00 +00:00
|
|
|
}
|