mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-26 05:24:21 +01:00
Add text message stuff (not used yet), simplified some function calls
This commit is contained in:
parent
d9171701f8
commit
0680b1d8e0
@ -608,7 +608,7 @@ void C64::network_vblank()
|
|||||||
/* Has the peer sent any data? */
|
/* Has the peer sent any data? */
|
||||||
if (remote->ReceiveUpdate() == true)
|
if (remote->ReceiveUpdate() == true)
|
||||||
{
|
{
|
||||||
if (remote->DecodeUpdate(remote->GetScreen(),
|
if (remote->DecodeUpdate(this->TheDisplay,
|
||||||
js, this->TheSID) == false)
|
js, this->TheSID) == false)
|
||||||
{
|
{
|
||||||
/* Disconnect or sending crap, remove this guy! */
|
/* Disconnect or sending crap, remove this guy! */
|
||||||
|
@ -157,7 +157,7 @@ size_t Network::EncodeSoundRaw(struct NetworkUpdate *dst,
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Network::DecodeDisplayDiff(Uint8 *screen, struct NetworkUpdate *src,
|
bool Network::DecodeDisplayDiff(struct NetworkUpdate *src,
|
||||||
int x_start, int y_start)
|
int x_start, int y_start)
|
||||||
{
|
{
|
||||||
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
||||||
@ -179,14 +179,14 @@ bool Network::DecodeDisplayDiff(Uint8 *screen, struct NetworkUpdate *src,
|
|||||||
|
|
||||||
x = x_start + x_diff;
|
x = x_start + x_diff;
|
||||||
y = y + y_diff;
|
y = y + y_diff;
|
||||||
screen[y * DISPLAY_X + x] = color;
|
this->screen[y * DISPLAY_X + x] = color;
|
||||||
p += 2;
|
p += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Network::DecodeDisplayRLE(Uint8 *screen, struct NetworkUpdate *src,
|
bool Network::DecodeDisplayRLE(struct NetworkUpdate *src,
|
||||||
int x_start, int y_start)
|
int x_start, int y_start)
|
||||||
{
|
{
|
||||||
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
||||||
@ -206,7 +206,7 @@ bool Network::DecodeDisplayRLE(Uint8 *screen, struct NetworkUpdate *src,
|
|||||||
|
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
{
|
{
|
||||||
screen[y * DISPLAY_X + x] = color;
|
this->screen[y * DISPLAY_X + x] = color;
|
||||||
len--;
|
len--;
|
||||||
x++;
|
x++;
|
||||||
if ((x - x_start) % SQUARE_W == 0)
|
if ((x - x_start) % SQUARE_W == 0)
|
||||||
@ -221,7 +221,7 @@ bool Network::DecodeDisplayRLE(Uint8 *screen, struct NetworkUpdate *src,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Network::DecodeDisplayRaw(Uint8 *screen, struct NetworkUpdate *src,
|
bool Network::DecodeDisplayRaw(struct NetworkUpdate *src,
|
||||||
int x_start, int y_start)
|
int x_start, int y_start)
|
||||||
{
|
{
|
||||||
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
||||||
@ -235,8 +235,8 @@ bool Network::DecodeDisplayRaw(Uint8 *screen, struct NetworkUpdate *src,
|
|||||||
Uint8 a = v >> 4;
|
Uint8 a = v >> 4;
|
||||||
Uint8 b = v & 0xf;
|
Uint8 b = v & 0xf;
|
||||||
|
|
||||||
screen[ y * DISPLAY_X + x ] = a;
|
this->screen[ y * DISPLAY_X + x ] = a;
|
||||||
screen[ y * DISPLAY_X + x + 1 ] = b;
|
this->screen[ y * DISPLAY_X + x + 1 ] = b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,8 +382,7 @@ size_t Network::EncodeDisplaySquare(struct NetworkUpdate *dst,
|
|||||||
return dst->size;
|
return dst->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Network::DecodeDisplayUpdate(Uint8 *screen,
|
bool Network::DecodeDisplayUpdate(struct NetworkUpdate *src)
|
||||||
struct NetworkUpdate *src)
|
|
||||||
{
|
{
|
||||||
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
struct NetworkUpdateDisplay *dp = (struct NetworkUpdateDisplay *)src->data;
|
||||||
int square = dp->square;
|
int square = dp->square;
|
||||||
@ -391,11 +390,11 @@ bool Network::DecodeDisplayUpdate(Uint8 *screen,
|
|||||||
const int square_y = SQUARE_TO_Y(square);
|
const int square_y = SQUARE_TO_Y(square);
|
||||||
|
|
||||||
if (src->type == DISPLAY_UPDATE_DIFF)
|
if (src->type == DISPLAY_UPDATE_DIFF)
|
||||||
return this->DecodeDisplayDiff(screen, src, square_x, square_y);
|
return this->DecodeDisplayDiff(src, square_x, square_y);
|
||||||
else if (src->type == DISPLAY_UPDATE_RAW)
|
else if (src->type == DISPLAY_UPDATE_RAW)
|
||||||
return this->DecodeDisplayRaw(screen, src, square_x, square_y);
|
return this->DecodeDisplayRaw(src, square_x, square_y);
|
||||||
else if (src->type == DISPLAY_UPDATE_RLE)
|
else if (src->type == DISPLAY_UPDATE_RLE)
|
||||||
return this->DecodeDisplayRLE(screen, src, square_x, square_y);
|
return this->DecodeDisplayRLE(src, square_x, square_y);
|
||||||
|
|
||||||
/* Error */
|
/* Error */
|
||||||
return false;
|
return false;
|
||||||
@ -419,6 +418,21 @@ size_t Network::GetSoundBufferSize()
|
|||||||
return Network::sample_head- Network::sample_tail;
|
return Network::sample_head- Network::sample_tail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Network::EncodeTextMessage(char *str)
|
||||||
|
{
|
||||||
|
NetworkUpdate *dst = (NetworkUpdate *)this->cur_ud;
|
||||||
|
char *p = (char*)dst->data;
|
||||||
|
size_t len = strlen(str) + 1;
|
||||||
|
|
||||||
|
len += (len & 3);
|
||||||
|
dst = InitNetworkUpdate(dst, TEXT_MESSAGE,
|
||||||
|
sizeof(NetworkUpdate) + len);
|
||||||
|
memset(p, 0, len);
|
||||||
|
strncpy(p, str, len - 1);
|
||||||
|
|
||||||
|
this->AddNetworkUpdate(dst);
|
||||||
|
}
|
||||||
|
|
||||||
void Network::EncodeSound()
|
void Network::EncodeSound()
|
||||||
{
|
{
|
||||||
NetworkUpdate *dst = (NetworkUpdate *)this->cur_ud;
|
NetworkUpdate *dst = (NetworkUpdate *)this->cur_ud;
|
||||||
@ -673,6 +687,7 @@ bool Network::MarshalData(NetworkUpdate *p)
|
|||||||
case JOYSTICK_UPDATE:
|
case JOYSTICK_UPDATE:
|
||||||
case DISCONNECT:
|
case DISCONNECT:
|
||||||
case CONNECT_TO_PEER:
|
case CONNECT_TO_PEER:
|
||||||
|
case TEXT_MESSAGE:
|
||||||
case STOP:
|
case STOP:
|
||||||
break;
|
break;
|
||||||
case PING:
|
case PING:
|
||||||
@ -763,6 +778,7 @@ bool Network::DeMarshalData(NetworkUpdate *p)
|
|||||||
case JOYSTICK_UPDATE:
|
case JOYSTICK_UPDATE:
|
||||||
case DISCONNECT:
|
case DISCONNECT:
|
||||||
case CONNECT_TO_PEER:
|
case CONNECT_TO_PEER:
|
||||||
|
case TEXT_MESSAGE:
|
||||||
case STOP:
|
case STOP:
|
||||||
/* Nothing to do, just bytes */
|
/* Nothing to do, just bytes */
|
||||||
break;
|
break;
|
||||||
@ -826,7 +842,7 @@ bool Network::DeMarshalAllData(NetworkUpdate *ud, size_t max_size,
|
|||||||
return this->DeMarshalData(p);
|
return this->DeMarshalData(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Network::DecodeUpdate(uint8 *screen, uint8 *js, MOS6581 *dst)
|
bool Network::DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst)
|
||||||
{
|
{
|
||||||
NetworkUpdate *p = this->ud;
|
NetworkUpdate *p = this->ud;
|
||||||
bool out = true;
|
bool out = true;
|
||||||
@ -849,7 +865,7 @@ bool Network::DecodeUpdate(uint8 *screen, uint8 *js, MOS6581 *dst)
|
|||||||
/* No screen updates _to_ the master */
|
/* No screen updates _to_ the master */
|
||||||
if (Network::is_master)
|
if (Network::is_master)
|
||||||
break;
|
break;
|
||||||
if (this->DecodeDisplayUpdate(screen, p) == false)
|
if (this->DecodeDisplayUpdate(p) == false)
|
||||||
out = false;
|
out = false;
|
||||||
break;
|
break;
|
||||||
case JOYSTICK_UPDATE:
|
case JOYSTICK_UPDATE:
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
#include "SID.h"
|
#include "SID.h"
|
||||||
|
#include "Display.h"
|
||||||
|
|
||||||
#define FRODO_NETWORK_PROTOCOL_VERSION 2
|
#define FRODO_NETWORK_PROTOCOL_VERSION 2
|
||||||
|
|
||||||
@ -38,6 +39,7 @@ typedef enum
|
|||||||
KEYBOARD_UPDATE = 6,
|
KEYBOARD_UPDATE = 6,
|
||||||
JOYSTICK_UPDATE = 7,
|
JOYSTICK_UPDATE = 7,
|
||||||
ENTER_MENU = 8,
|
ENTER_MENU = 8,
|
||||||
|
TEXT_MESSAGE = 9,
|
||||||
} network_message_type_t;
|
} network_message_type_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
@ -152,8 +154,10 @@ public:
|
|||||||
|
|
||||||
void EncodeJoystickUpdate(Uint8 v);
|
void EncodeJoystickUpdate(Uint8 v);
|
||||||
|
|
||||||
|
void EncodeTextMessage(char *str);
|
||||||
|
|
||||||
bool DecodeUpdate(uint8 *screen, uint8 *js, MOS6581 *dst);
|
|
||||||
|
bool DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst);
|
||||||
|
|
||||||
void ResetNetworkUpdate(void);
|
void ResetNetworkUpdate(void);
|
||||||
|
|
||||||
@ -247,10 +251,9 @@ protected:
|
|||||||
/**
|
/**
|
||||||
* Decode a display update message onto @a screen
|
* Decode a display update message onto @a screen
|
||||||
*
|
*
|
||||||
* @param screen the screen to draw to
|
|
||||||
* @param src the message to decode
|
* @param src the message to decode
|
||||||
*/
|
*/
|
||||||
bool DecodeDisplayUpdate(Uint8 *screen, struct NetworkUpdate *src);
|
bool DecodeDisplayUpdate(struct NetworkUpdate *src);
|
||||||
|
|
||||||
void AddNetworkUpdate(struct NetworkUpdate *update);
|
void AddNetworkUpdate(struct NetworkUpdate *update);
|
||||||
|
|
||||||
@ -269,11 +272,11 @@ protected:
|
|||||||
*/
|
*/
|
||||||
bool CompareSquare(Uint8 *a, Uint8 *b);
|
bool CompareSquare(Uint8 *a, Uint8 *b);
|
||||||
|
|
||||||
bool DecodeDisplayDiff(Uint8 *screen, struct NetworkUpdate *src,
|
bool DecodeDisplayDiff(struct NetworkUpdate *src,
|
||||||
int x, int y);
|
int x, int y);
|
||||||
bool DecodeDisplayRLE(Uint8 *screen, struct NetworkUpdate *src,
|
bool DecodeDisplayRLE(struct NetworkUpdate *src,
|
||||||
int x, int y);
|
int x, int y);
|
||||||
bool DecodeDisplayRaw(Uint8 *screen, struct NetworkUpdate *src,
|
bool DecodeDisplayRaw(struct NetworkUpdate *src,
|
||||||
int x, int y);
|
int x, int y);
|
||||||
|
|
||||||
void SendPingAck(int seq);
|
void SendPingAck(int seq);
|
||||||
|
Loading…
Reference in New Issue
Block a user