Esempio n. 1
0
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~");
    }
}
Esempio n. 2
0
/*
 * 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;
}