73 lines
2.8 KiB
C
73 lines
2.8 KiB
C
#include "packet_utils.h"
|
|
#include "packets/pkt_send_keystate.h"
|
|
#include "modules/components.h"
|
|
#include "modules/systems.h"
|
|
#include "world/world.h"
|
|
|
|
#include "debug_replay.h"
|
|
|
|
pkt_desc pkt_send_keystate_desc[] = {
|
|
{ PKT_REAL(pkt_send_keystate, x) },
|
|
{ PKT_REAL(pkt_send_keystate, y) },
|
|
{ PKT_REAL(pkt_send_keystate, mx) },
|
|
{ PKT_REAL(pkt_send_keystate, my) },
|
|
{ PKT_UINT(pkt_send_keystate, use) },
|
|
{ PKT_UINT(pkt_send_keystate, sprint) },
|
|
{ PKT_UINT(pkt_send_keystate, ctrl) },
|
|
{ PKT_UINT(pkt_send_keystate, selected_item) },
|
|
{ PKT_UINT(pkt_send_keystate, drop) },
|
|
{ PKT_UINT(pkt_send_keystate, swap) },
|
|
{ PKT_UINT(pkt_send_keystate, swap_from) },
|
|
{ PKT_UINT(pkt_send_keystate, swap_to) },
|
|
{ PKT_END },
|
|
};
|
|
|
|
size_t pkt_send_keystate_send(uint16_t view_id,
|
|
float x,
|
|
float y,
|
|
float mx,
|
|
float my,
|
|
uint8_t use,
|
|
uint8_t sprint,
|
|
uint8_t ctrl,
|
|
uint8_t drop,
|
|
uint8_t selected_item,
|
|
uint8_t swap,
|
|
uint8_t swap_from,
|
|
uint8_t swap_to) {
|
|
pkt_send_keystate table = { .x = x, .y = y, .mx = mx, .my = my, .use = use, .sprint = sprint, .ctrl = ctrl, .drop = drop, .selected_item = selected_item, .swap = swap, .swap_from = swap_from, .swap_to = swap_to };
|
|
return pkt_world_write(MSG_ID_SEND_KEYSTATE, pkt_send_keystate_encode(&table), 1, view_id, NULL);
|
|
}
|
|
|
|
size_t pkt_send_keystate_encode(pkt_send_keystate *table) {
|
|
cw_pack_context pc = {0};
|
|
pkt_pack_msg(&pc, pkt_pack_desc_args(pkt_send_keystate_desc));
|
|
pkt_pack_struct(&pc, pkt_send_keystate_desc, PKT_STRUCT_PTR(table));
|
|
return pkt_pack_msg_size(&pc);
|
|
}
|
|
|
|
int32_t pkt_send_keystate_handler(pkt_header *header) {
|
|
pkt_send_keystate table;
|
|
PKT_IF(pkt_msg_decode(header, pkt_send_keystate_desc, pkt_pack_desc_args(pkt_send_keystate_desc), PKT_STRUCT_PTR(&table)));
|
|
ecs_entity_t e = PKT_GET_ENT(header);
|
|
|
|
Input *i = ecs_get_mut(world_ecs(), e, Input, NULL);
|
|
if (i && !i->is_blocked) {
|
|
i->x = table.x;
|
|
i->y = table.y;
|
|
i->mx = table.mx;
|
|
i->my = table.my;
|
|
i->use = table.use;
|
|
i->sprint = table.sprint;
|
|
i->ctrl = table.ctrl;
|
|
i->selected_item = zpl_clamp(table.selected_item, 0, ITEMS_INVENTORY_SIZE-1);
|
|
i->drop = table.drop;
|
|
i->swap = table.swap;
|
|
i->swap_from = zpl_clamp(table.swap_from, 0, ITEMS_INVENTORY_SIZE-1);
|
|
i->swap_to = zpl_clamp(table.swap_to, 0, ITEMS_INVENTORY_SIZE-1);
|
|
debug_replay_record_keystate(table);
|
|
}
|
|
|
|
return 0;
|
|
}
|