annotate src/libmlk-rpg/rpg/walksprite.c @ 402:d3fa956cdaf0

core: add alloc_sdupf
author David Demelier <markand@malikania.fr>
date Wed, 30 Mar 2022 15:06:55 +0200
parents 460c78706989
children 8f59201dc76b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * walksprite.c -- sprite designed for walking entities
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
378
460c78706989 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr>
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <string.h>
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
148
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
22 #include <core/sprite.h>
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
23
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include "walksprite.h"
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 void
46
b815621df3e3 core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents: 41
diff changeset
27 walksprite_init(struct walksprite *ws, struct sprite *sprite, unsigned int delay)
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 {
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 assert(ws);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 assert(sprite);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
32 memset(ws, 0, sizeof (*ws));
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 ws->sprite = sprite;
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 ws->delay = delay;
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 }
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 void
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
38 walksprite_reset(struct walksprite *ws)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
39 {
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
40 assert(ws);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
41
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
42 ws->index = 0;
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
43 }
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
44
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
45 void
46
b815621df3e3 core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents: 41
diff changeset
46 walksprite_update(struct walksprite *ws, unsigned int ticks)
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 {
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 assert(ws);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 ws->elapsed += ticks;
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 if (ws->elapsed >= ws->delay) {
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 ws->index += 1;
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 if (ws->index >= ws->sprite->ncols)
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 ws->index = 0;
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 ws->elapsed = 0;
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 }
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 }
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 void
197
852d0b7817ce rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
63 walksprite_draw(const struct walksprite *ws, unsigned int orientation, int x, int y)
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 {
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 assert(ws);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 assert(orientation < 8);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 sprite_draw(ws->sprite, orientation, ws->index, x, y);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 }