72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
#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 |