void net_controller_har_hook(int action, void *cb_data) { controller *ctrl = cb_data; wtf *data = ctrl->data; serial ser; ENetPeer *peer = data->peer; ENetHost *host = data->host; ENetPacket *packet; if (action == ACT_STOP && data->last_action == ACT_STOP) { data->last_action = -1; return; } if (action == ACT_FLUSH) { enet_host_flush(host); return; } data->last_action = action; serial_create(&ser); serial_write_int8(&ser, EVENT_TYPE_ACTION); serial_write_int16(&ser, action); /*DEBUG("controller hook fired with %d", action);*/ /*sprintf(buf, "k%d", action);*/ packet = enet_packet_create(ser.data, ser.len, ENET_PACKET_FLAG_RELIABLE); if (peer) { enet_peer_send(peer, 1, packet); /*enet_host_flush (host);*/ } else { DEBUG("peer is null~"); } }
/* * Serializes the object to a buffer. Should return 1 on error, 0 on success * This will call the specialized objects, eg. har or projectile for their * serialization data. */ int object_serialize(object *obj, serial *ser) { serial_write_float(ser, obj->pos.x); serial_write_float(ser, obj->pos.y); serial_write_float(ser, obj->vel.x); serial_write_float(ser, obj->vel.y); serial_write_float(ser, obj->gravity); serial_write_int8(ser, obj->direction); serial_write_int8(ser, obj->group); serial_write_int8(ser, obj->layers); serial_write_int8(ser, obj->stride); serial_write_int8(ser, object_get_repeat(obj)); serial_write_int8(ser, obj->sprite_override); serial_write_int32(ser, obj->age); serial_write_int32(ser, random_get_seed(&obj->rand_state)); serial_write_int8(ser, obj->cur_animation->id); serial_write_int8(ser, obj->pal_offset); serial_write_int8(ser, obj->hit_frames); serial_write_int8(ser, obj->can_hit); // Write animation state if (obj->custom_str) { serial_write_int16(ser, strlen(obj->custom_str)+1); serial_write(ser, obj->custom_str, strlen(obj->custom_str)+1); } else { // using regular animation string from animation serial_write_int16(ser, 0); } serial_write_int16(ser, (int)obj->animation_state.current_tick); serial_write_int16(ser, (int)obj->animation_state.previous_tick); serial_write_int8(ser, (int)obj->animation_state.reverse); /*DEBUG("Animation state: [%d] %s, ticks = %d stride = %d direction = %d pos = %f,%f vel = %f,%f gravity = %f", strlen(player_get_str(obj))+1, player_get_str(obj), obj->animation_state.ticks, obj->stride, obj->animation_state.reverse, obj->pos.x, obj->pos.y, obj->vel.x, obj->vel.y, obj->gravity);*/ // Serialize the underlying object if(obj->serialize != NULL) { obj->serialize(obj, ser); } else { serial_write_int8(ser, SPECID_NONE); } // Return success return 0; }