annotate libmlk-rpg/rpg/battle-entity-state.h @ 243:71b3b7036de7

misc: lot of cleanups, - prefix libraries with libmlk, - move assets from source directories closes #2520, - prefix header guards closes #2519
author David Demelier <markand@malikania.fr>
date Sat, 28 Nov 2020 22:37:30 +0100
parents librpg/rpg/battle-entity-state.h@86b71e1f9dd5
children 6367b976112d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * battle-entity-state.h -- abstract battle entity state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef MOLKO_RPG_BATTLE_ENTITY_STATE_H
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MOLKO_RPG_BATTLE_ENTITY_STATE_H
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file battle-entity-state.h
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Abstract battle entity state.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 * To animate and update battle entities this structure help splitting the logic
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 * into differents parts.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 * In contrast to battle states, battle entity states should not switch
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * themselves into an other one because battle states may need to wait until the
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 * entity state has finished to continue their own work.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 * \note Do not call pointer functions directly but use the functions from this
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * file since they may do additional work.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include <stdbool.h>
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 struct battle_entity;
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 * \brief Abstract battle entity state.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 struct battle_entity_state {
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 * (+&?) Optional state data.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 void *data;
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 * (+?) Update the entity.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * This function should understand a value of 0 as ticks to just request
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * the state's status.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 * \pre st != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * \pre et != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * \param st this state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 * \param et the entity owner
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 * \param ticks elapsed milliseconds since last frame
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 * \return True if complete.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 bool (*update)(struct battle_entity_state *st, struct battle_entity *et, unsigned int ticks);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 * (+?) Draw the entity.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 * If this function is NULL, the default behavior is to draw the entity
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 * sprite at its current position.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * \pre st != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * \pre et != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * \param st this state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 * \param et the entity owner
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 void (*draw)(const struct battle_entity_state *st, const struct battle_entity *et);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * (+?) Clear resources.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 * \pre st != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 * \pre et != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 * \param st this state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * \param et the entity owner
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 void (*finish)(struct battle_entity_state *st, struct battle_entity *et);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 };
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * Shortcut for st->update (if not NULL).
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * \pre st != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 * \pre et != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 * \param st this state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 * \param et the entity owner
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 * \param ticks elapsed milliseconds since last frame
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 * \return True if complete.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 bool
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 battle_entity_state_update(struct battle_entity_state *st, struct battle_entity *et, unsigned int ticks);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 * Call st->draw or default implementation if NULL.
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 * \pre st != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 * \pre et != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 * \param st this state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 * \param et the entity owner
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 void
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 battle_entity_state_draw(const struct battle_entity_state *st, const struct battle_entity *et);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
112
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 /**
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 * Shortcut for st->finish (if not NULL).
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 * \pre st != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 * \pre et != NULL
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 * \param st this state
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 * \param et the entity owner
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 */
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 void
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 battle_entity_state_finish(struct battle_entity_state *st, struct battle_entity *et);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
123
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 #endif /* !MOLKO_RPG_BATTLE_ENTITY_STATE_H */