Smooth over transition from sending raw enums

This commit is contained in:
MysterD 2020-10-13 23:04:08 -07:00
parent 55bbe8d4d9
commit 28ad7f91ed
7 changed files with 30 additions and 22 deletions

View file

@ -44,7 +44,7 @@ static struct Object* find_nearest_coin(const BehaviorScript *behavior, f32* pos
}
void network_send_collect_coin(struct Object* o) {
enum BehaviorId behaviorId = get_id_from_behavior(o->behavior);
u16 behaviorId = get_id_from_behavior(o->behavior);
struct Packet p;
packet_init(&p, PACKET_COLLECT_COIN, true, true);
@ -57,7 +57,7 @@ void network_send_collect_coin(struct Object* o) {
}
void network_receive_collect_coin(struct Packet* p) {
enum BehaviorId behaviorId;
u16 behaviorId;
f32 pos[3] = { 0 };
s16 numCoins = 0;
s32 coinValue = 0;

View file

@ -41,7 +41,7 @@ static struct Object* find_nearest_item(const BehaviorScript *behavior, f32* pos
}
void network_send_collect_item(struct Object* o) {
enum BehaviorId behaviorId = get_id_from_behavior(o->behavior);
u16 behaviorId = get_id_from_behavior(o->behavior);
struct Packet p;
packet_init(&p, PACKET_COLLECT_ITEM, true, true);
@ -52,7 +52,7 @@ void network_send_collect_item(struct Object* o) {
}
void network_receive_collect_item(struct Packet* p) {
enum BehaviorId behaviorId;
u16 behaviorId;
f32 pos[3] = { 0 };
packet_read(p, &behaviorId, sizeof(u16));

View file

@ -44,7 +44,7 @@ static struct Object* find_nearest_star(const BehaviorScript* behavior, f32* pos
}
void network_send_collect_star(struct Object* o, s16 coinScore, s16 starIndex) {
enum BehaviorId behaviorId = get_id_from_behavior(o->behavior);
u16 behaviorId = get_id_from_behavior(o->behavior);
struct Packet p;
packet_init(&p, PACKET_COLLECT_STAR, true, false);
@ -61,7 +61,7 @@ void network_send_collect_star(struct Object* o, s16 coinScore, s16 starIndex) {
void network_receive_collect_star(struct Packet* p) {
f32 pos[3] = { 0 };
enum BehaviorId behaviorId;
u16 behaviorId;
s16 coinScore, starIndex;
s16 lastSaveFileNum = gCurrSaveFileNum;
s16 lastCourseNum = gCurrCourseNum;

View file

@ -4,9 +4,10 @@
#include "pc/debuglog.h"
void network_send_kick(enum KickReasonType kickReason) {
u8 kickReasonType = kickReason;
struct Packet p;
packet_init(&p, PACKET_KICK, false, false);
packet_write(&p, &kickReason, sizeof(u8));
packet_write(&p, &kickReasonType, sizeof(u8));
network_send_to(0, &p);
}
@ -21,8 +22,10 @@ void network_receive_kick(struct Packet* p) {
return;
}
enum KickReasonType kickReason;
packet_read(p, &kickReason, sizeof(u8));
u8 kickReasonType;
packet_read(p, &kickReasonType, sizeof(u8));
enum KickReasonType kickReason = kickReasonType;
switch (kickReason) {
case EKT_FULL_PARTY: custom_menu_error("The party is full."); break;
default: custom_menu_error("Host has closed the connection."); break;

View file

@ -145,7 +145,7 @@ void network_set_sync_id(struct Object* o) {
static void packet_write_object_header(struct Packet* p, struct Object* o) {
struct SyncObject* so = &gSyncObjects[o->oSyncID];
enum BehaviorId behaviorId = get_id_from_behavior(o->behavior);
u16 behaviorId = get_id_from_behavior(o->behavior);
packet_write(p, &gNetworkPlayerLocal->globalIndex, sizeof(u8));
packet_write(p, &o->oSyncID, sizeof(u32));
@ -215,8 +215,9 @@ static struct SyncObject* packet_read_object_header(struct Packet* p, u8* fromLo
packet_read(p, &so->randomSeed, sizeof(u16));
// make sure the behaviors match
enum BehaviorId behaviorId;
u16 behaviorId;
packet_read(p, &behaviorId, sizeof(u16));
BehaviorScript* behavior = (BehaviorScript*)get_behavior_from_id(behaviorId);
if (behavior == NULL) {
LOG_ERROR("unable to find behavior %04X for id %d", behaviorId, syncId);

View file

@ -6,21 +6,25 @@
static u16 nextSeqNum = 1;
void packet_init(struct Packet* packet, enum PacketType packetType, bool reliable, bool levelAreaMustMatch) {
memset(packet->buffer, 0, PACKET_LENGTH);
packet->buffer[0] = (char)packetType;
if (reliable) {
memcpy(&packet->buffer[1], &nextSeqNum, 2);
packet->seqId = nextSeqNum;
nextSeqNum++;
if (nextSeqNum == 0) { nextSeqNum++; }
}
packet->dataLength = 3;
packet->cursor = 3;
packet->cursor = 0;
packet->dataLength = 0;
packet->error = false;
packet->reliable = reliable;
packet->levelAreaMustMatch = levelAreaMustMatch;
packet->requestBroadcast = false;
packet->sent = false;
packet_write(packet, &packetType, sizeof(u8));
if (reliable) {
packet_write(packet, &nextSeqNum, sizeof(u16));
packet->seqId = nextSeqNum;
nextSeqNum++;
if (nextSeqNum == 0) { nextSeqNum++; }
} else {
u16 nullSeqNum = 0;
packet_write(packet, &nullSeqNum, sizeof(u16));
}
// write packet flags
u8 flags = 0;
packet_write(packet, &flags, sizeof(u8)); // fill in the byte

View file

@ -19,7 +19,7 @@ static u8 onRemoteSpawnId = 0;
struct SpawnObjectData {
u8 parentId;
u32 model;
enum BehaviorId behaviorId;
u16 behaviorId;
s16 activeFlags;
s32 rawData[80];
};
@ -54,7 +54,7 @@ void network_send_spawn_objects(struct Object* objects[], u32 models[], u8 objec
struct Object* o = objects[i];
u32 model = models[i];
u8 parentId = generate_parent_id(objects, i);
enum BehaviorId behaviorId = get_id_from_behavior(o->behavior);
u16 behaviorId = get_id_from_behavior(o->behavior);
packet_write(&p, &parentId, sizeof(u8));
packet_write(&p, &model, sizeof(u32));
packet_write(&p, &behaviorId, sizeof(u16));