Use mouse and gamepad simultaneously #484
This commit is contained in:
@@ -80,7 +80,7 @@ STATIC_ASSERT(tic_track, sizeof(tic_track) == 3*MUSIC_FRAMES+3);
|
||||
STATIC_ASSERT(tic_vram, sizeof(tic_vram) == TIC_VRAM_SIZE);
|
||||
STATIC_ASSERT(tic_ram, sizeof(tic_ram) == TIC_RAM_SIZE);
|
||||
STATIC_ASSERT(tic_sound_register, sizeof(tic_sound_register) == 16+2);
|
||||
STATIC_ASSERT(tic80_input, sizeof(tic80_input) == 2);
|
||||
STATIC_ASSERT(tic80_input, sizeof(tic80_input) == 12);
|
||||
|
||||
static void update_amp(blip_buffer_t* blip, tic_sound_register_data* data, s32 new_amp )
|
||||
{
|
||||
@@ -511,7 +511,6 @@ static void api_reset(tic_mem* memory)
|
||||
resetPalette(memory);
|
||||
|
||||
memset(&memory->ram.vram.vars, 0, sizeof memory->ram.vram.vars);
|
||||
memory->ram.vram.vars.mask.data = TIC_GAMEPAD_MASK;
|
||||
|
||||
api_clip(memory, 0, 0, TIC80_WIDTH, TIC80_HEIGHT);
|
||||
|
||||
@@ -1267,13 +1266,13 @@ static void api_tick_start(tic_mem* memory, const tic_sfx* sfxsrc, const tic_mus
|
||||
}
|
||||
|
||||
// process gamepad
|
||||
for(s32 i = 0; i < COUNT_OF(machine->state.gamepad.holds); i++)
|
||||
for(s32 i = 0; i < COUNT_OF(machine->state.gamepads.holds); i++)
|
||||
{
|
||||
u32 mask = 1 << i;
|
||||
u32 prevDown = machine->state.gamepad.previous.data & mask;
|
||||
u32 down = memory->ram.vram.input.gamepad.data & mask;
|
||||
u32 prevDown = machine->state.gamepads.previous.data & mask;
|
||||
u32 down = memory->ram.input.gamepads.data & mask;
|
||||
|
||||
u32* hold = &machine->state.gamepad.holds[i];
|
||||
u32* hold = &machine->state.gamepads.holds[i];
|
||||
if(prevDown && prevDown == down) (*hold)++;
|
||||
else *hold = 0;
|
||||
}
|
||||
@@ -1288,7 +1287,7 @@ static void api_tick_end(tic_mem* memory)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)memory;
|
||||
|
||||
machine->state.gamepad.previous.data = machine->memory.ram.vram.input.gamepad.data;
|
||||
machine->state.gamepads.previous.data = machine->memory.ram.input.gamepads.data;
|
||||
|
||||
enum {EndTime = CLOCKRATE / TIC_FRAMERATE};
|
||||
for (s32 i = 0; i < TIC_SOUND_CHANNELS; ++i )
|
||||
@@ -1547,10 +1546,16 @@ static void api_tick(tic_mem* tic, tic_tick_data* data)
|
||||
{
|
||||
config = getScriptConfig(code);
|
||||
cart2ram(tic);
|
||||
tic->input = compareMetatag(code, "input", "mouse", config->singleComment) ? tic_mouse_input : tic_gamepad_input;
|
||||
|
||||
if(tic->input == tic_mouse_input)
|
||||
tic->ram.vram.vars.mask.data = 0;
|
||||
tic->input.data = 0;
|
||||
|
||||
if(compareMetatag(code, "input", "mouse", config->singleComment))
|
||||
tic->input.mouse = 1;
|
||||
else if(compareMetatag(code, "input", "gamepad", config->singleComment))
|
||||
tic->input.gamepad = 1;
|
||||
else if(compareMetatag(code, "input", "keyboard", config->singleComment))
|
||||
tic->input.keyboard = 1;
|
||||
else tic->input.data = -1;
|
||||
|
||||
data->start = data->counter();
|
||||
|
||||
@@ -1606,20 +1611,20 @@ static u32 api_btnp(tic_mem* tic, s32 index, s32 hold, s32 period)
|
||||
|
||||
if(index < 0)
|
||||
{
|
||||
return (~machine->state.gamepad.previous.data) & machine->memory.ram.vram.input.gamepad.data;
|
||||
return (~machine->state.gamepads.previous.data) & machine->memory.ram.input.gamepads.data;
|
||||
}
|
||||
else if(hold < 0 || period < 0)
|
||||
{
|
||||
return ((~machine->state.gamepad.previous.data) & machine->memory.ram.vram.input.gamepad.data) & (1 << index);
|
||||
return ((~machine->state.gamepads.previous.data) & machine->memory.ram.input.gamepads.data) & (1 << index);
|
||||
}
|
||||
|
||||
tic80_input previous;
|
||||
tic80_gamepads previous;
|
||||
|
||||
previous.data = machine->state.gamepad.holds[index] >= hold
|
||||
? period && machine->state.gamepad.holds[index] % period ? machine->state.gamepad.previous.data : 0
|
||||
: machine->state.gamepad.previous.data;
|
||||
previous.data = machine->state.gamepads.holds[index] >= hold
|
||||
? period && machine->state.gamepads.holds[index] % period ? machine->state.gamepads.previous.data : 0
|
||||
: machine->state.gamepads.previous.data;
|
||||
|
||||
return ((~previous.data) & machine->memory.ram.vram.input.gamepad.data) & (1 << index);
|
||||
return ((~previous.data) & machine->memory.ram.input.gamepads.data) & (1 << index);
|
||||
}
|
||||
|
||||
static void api_load(tic_cartridge* cart, const u8* buffer, s32 size, bool palette)
|
||||
|
||||
Reference in New Issue
Block a user