diff options
Diffstat (limited to 'lib/snapshot.c')
| -rw-r--r-- | lib/snapshot.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/snapshot.c b/lib/snapshot.c new file mode 100644 index 0000000..88c17a1 --- /dev/null +++ b/lib/snapshot.c @@ -0,0 +1,99 @@ +#include <string.h> + +#include "common.h" + +#include "snapshot.h" + +int dp_snapshot_put_player(struct snapshot *s, uint32_t id, const struct player *p) +{ + if (!s || !p) + return -1; + if (id >= LENGTH(s->players)) + return -1; + + s->players[id] = *p; + s->players[id].state = STATE_ACTIVE; + return 0; +} + +struct player *dp_snapshot_get_player(struct snapshot *s, uint32_t id) +{ + struct player *p; + + if (!s) + return NULL; + if (id >= LENGTH(s->players)) + return NULL; + + p = &s->players[id]; + if (p->state == STATE_INACTIVE) + return NULL; + return p; +} + +int dp_snapshot_remove_player(struct snapshot *s, uint32_t id) +{ + struct player *p; + + if (!s) + return -1; + if (id >= LENGTH(s->players)) + return -1; + + p = dp_snapshot_get_player(s, id); + memset(p, 0, sizeof(*p)); + p->state = STATE_REMOVED; + return 0; +} + +int dp_snapshot_set_player_input(struct snapshot *s, uint32_t id, uint8_t input) +{ + struct player *p; + + if (!(p = dp_snapshot_get_player(s, id))) + return -1; + p->input = input; + return 0; +} + +int dp_snapshot_put_ball(struct snapshot *s, uint32_t id, const struct ball *b) +{ + if (!s || !b) + return -1; + if (id >= LENGTH(s->balls)) + return -1; + + s->balls[id] = *b; + s->balls[id].state = STATE_ACTIVE; + return 0; +} + +struct ball *dp_snapshot_get_ball(struct snapshot *s, uint32_t id) +{ + struct ball *b; + + if (!s) + return NULL; + if (id >= LENGTH(s->balls)) + return NULL; + + b = &s->balls[id]; + if (b->state == STATE_INACTIVE) + return NULL; + return b; +} + +int dp_snapshot_remove_ball(struct snapshot *s, uint32_t id) +{ + struct ball *b; + + if (!s) + return -1; + if (id >= LENGTH(s->balls)) + return -1; + + b = dp_snapshot_get_ball(s, id); + memset(b, 0, sizeof(*b)); + b->state = STATE_REMOVED; + return 0; +} |
