mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2025-02-16 20:39:15 +01:00
Send joystick data over the network as well, games are mostly playable now
This commit is contained in:
parent
3c3d364190
commit
5a0941ff7e
@ -576,9 +576,14 @@ void C64::network_vblank()
|
||||
Uint8 *master = this->TheDisplay->BitmapBase();
|
||||
NetworkClient *remote = this->network_server->clients[i];
|
||||
|
||||
/* Has the client sent any data? */
|
||||
if (remote->ReceiveUpdate() == true)
|
||||
{
|
||||
if (remote->DecodeUpdate(NULL, true) == false)
|
||||
uint8 *js = &TheCIA1->Joystick2;
|
||||
|
||||
if (ThePrefs.JoystickSwap)
|
||||
js = &TheCIA1->Joystick1;
|
||||
if (remote->DecodeUpdate(NULL, js, true) == false)
|
||||
{
|
||||
/* Disconnect or sending crap, remove this guy! */
|
||||
this->network_server->RemoveClient(remote);
|
||||
@ -616,8 +621,13 @@ void C64::network_vblank()
|
||||
this->network_client->Disconnect();
|
||||
delete this->network_client;
|
||||
this->network_client = NULL;
|
||||
return;
|
||||
}
|
||||
else if (this->network_client->ReceiveUpdateBlock())
|
||||
|
||||
this->network_client->EncodeJoystickUpdate(TheCIA1->Joystick2);
|
||||
this->network_client->SendUpdate();
|
||||
|
||||
if (this->network_client->ReceiveUpdateBlock())
|
||||
{
|
||||
/* Got something? */
|
||||
if (this->network_client->DecodeUpdate(this->network_client->screen) == true)
|
||||
@ -645,14 +655,15 @@ void C64::VBlank(bool draw_frame)
|
||||
/* From Acorn port */
|
||||
static uint64_t lastFrame;
|
||||
static uint32_t now;
|
||||
uint8 j1, j2;
|
||||
|
||||
#if defined(GEKKO)
|
||||
WPAD_ScanPads();
|
||||
#endif
|
||||
|
||||
// Poll joysticks
|
||||
TheCIA1->Joystick1 = poll_joystick(0);
|
||||
TheCIA1->Joystick2 = poll_joystick(1);
|
||||
j1 = poll_joystick(0);
|
||||
j2 = poll_joystick(1);
|
||||
|
||||
// Poll keyboard
|
||||
TheDisplay->PollKeyboard(TheCIA1->KeyMatrix, TheCIA1->RevMatrix, &joykey);
|
||||
@ -664,11 +675,25 @@ void C64::VBlank(bool draw_frame)
|
||||
#ifndef GEKKO
|
||||
// Joystick keyboard emulation
|
||||
if (TheDisplay->NumLock())
|
||||
TheCIA1->Joystick1 &= joykey;
|
||||
j1 &= joykey;
|
||||
else
|
||||
TheCIA1->Joystick2 &= joykey;
|
||||
j2 &= joykey;
|
||||
#endif
|
||||
|
||||
if (this->network_server)
|
||||
{
|
||||
/* Only poll one joystick for network servers */
|
||||
if (ThePrefs.JoystickSwap)
|
||||
TheCIA1->Joystick2 = j2;
|
||||
else
|
||||
TheCIA1->Joystick1 = j2;
|
||||
}
|
||||
else
|
||||
{
|
||||
TheCIA1->Joystick1 = j1;
|
||||
TheCIA1->Joystick2 = j2;
|
||||
}
|
||||
|
||||
// Count TOD clocks
|
||||
TheCIA1->CountTOD();
|
||||
TheCIA2->CountTOD();
|
||||
|
@ -350,10 +350,15 @@ size_t Network::EncodeSoundBuffer(struct NetworkUpdate *dst, Uint8 *buf, size_t
|
||||
return dst->size;
|
||||
}
|
||||
|
||||
void Network::EncodeJoystickUpdate(struct NetworkUpdate *dst, Uint8 which, Uint8 v)
|
||||
void Network::EncodeJoystickUpdate(Uint8 v)
|
||||
{
|
||||
struct NetworkUpdate *dst = this->cur_ud;
|
||||
|
||||
dst->type = JOYSTICK_UPDATE;
|
||||
dst->u.joystick.val = v;
|
||||
dst->size = sizeof(NetworkUpdate);
|
||||
|
||||
this->AddNetworkUpdate(dst);
|
||||
}
|
||||
|
||||
|
||||
@ -568,7 +573,7 @@ bool Network::DeMarshalData(NetworkUpdate *p)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Network::DecodeUpdate(uint8 *screen, bool server)
|
||||
bool Network::DecodeUpdate(uint8 *screen, uint8 *js, bool server)
|
||||
{
|
||||
NetworkUpdate *p = this->ud;
|
||||
bool out = true;
|
||||
@ -585,6 +590,10 @@ bool Network::DecodeUpdate(uint8 *screen, bool server)
|
||||
if (this->DecodeDisplayUpdate(screen, p) == false)
|
||||
out = false;
|
||||
break;
|
||||
case JOYSTICK_UPDATE:
|
||||
if (js)
|
||||
*js = p->u.joystick.val;
|
||||
break;
|
||||
case DISCONNECT:
|
||||
out = false;
|
||||
break;
|
||||
|
@ -53,7 +53,10 @@ public:
|
||||
|
||||
size_t EncodeDisplay(Uint8 *master, Uint8 *remote);
|
||||
|
||||
bool DecodeUpdate(uint8 *screen, bool server = false);
|
||||
void EncodeJoystickUpdate(Uint8 v);
|
||||
|
||||
|
||||
bool DecodeUpdate(uint8 *screen, uint8 *js = NULL, bool server = false);
|
||||
|
||||
void ResetNetworkUpdate(void);
|
||||
|
||||
@ -107,9 +110,6 @@ protected:
|
||||
size_t EncodeSoundBuffer(struct NetworkUpdate *dst,
|
||||
Uint8 *buf, size_t len);
|
||||
|
||||
void EncodeJoystickUpdate(struct NetworkUpdate *dst,
|
||||
Uint8 which, Uint8 v);
|
||||
|
||||
/**
|
||||
* Decode a display update message onto @a screen
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user