#if PLUGIN_RECORD_EVENTS Buffer *EventBuffer; void Serialize(Buffer *buffer, String name, EventKind *kind) { RawAppendf(buffer, "ev.%S = %s; ", name, EventKindStrings[*kind]); } void Serialize(Buffer *buffer, String name, Int *datum) { if (*datum == 0) { return; } if (name == "key") { RawAppendf(buffer, "ev.%S = %s; ", name, SDLKeycodeToName((SDL_Keycode)*datum)); } else { RawAppendf(buffer, "ev.%S = %lld; ", name, (long long)*datum); } } void Serialize(Buffer *buffer, String name, uint32_t *datum) { Int d = *datum; Serialize(buffer, name, &d); *datum = (uint32_t)d; } void Serialize(Buffer *buffer, String name, uint8_t *datum) { Int d = *datum; Serialize(buffer, name, &d); *datum = (uint8_t)d; } void Serialize(Buffer *buffer, String name, int16_t *datum) { Int d = *datum; Serialize(buffer, name, &d); *datum = (int16_t)d; } void Serialize(Buffer *buffer, String name, float *datum) { if (*datum == 0.f) { return; } RawAppendf(buffer, "ev.%S = %f; ", name, *datum); } void Serialize(Buffer *buffer, String name, char **text) { String str = *text; if (str.len == 0) { return; } RawAppendf(buffer, "ev.%S = \"%S\"; ", name, str); } void SerializeBegin(Buffer *buffer) { RawAppendf(buffer, "{Event ev = {};"); } void SerializeEnd(Buffer *buffer) { RawAppendf(buffer, "Add(&EventPlayback, ev);}\n"); } // :Event void Serialize(Buffer *buffer, Event *e) { SerializeBegin(buffer); #define X(TYPE, KIND, NAME) Serialize(buffer, #NAME, &e->NAME); EVENT_FIELDS #undef X SerializeEnd(buffer); } void CMD_CopyEvents() { SaveStringInClipboard(GetString(EventBuffer)); } RegisterCommand(CMD_CopyEvents, "ctrl-shift-alt-j", "Copy all the events from the EventBuffer"); #endif