annotate examples/example-action/main.c @ 260:60a214ec1ab4

adventure: change the way states are stored
author David Demelier <markand@malikania.fr>
date Sun, 06 Dec 2020 22:50:48 +0100
parents 76afe639fd72
children cd5bdb995052
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
2 * example-action.c -- example on how to use automatic actions
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <core/action.h>
156
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
22 #include <core/core.h>
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <core/event.h>
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
24 #include <core/game.h>
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <core/image.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <core/maths.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <core/painter.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <core/panic.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <core/script.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <core/sprite.h>
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
31 #include <core/state.h>
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include <core/sys.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include <core/texture.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include <core/util.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #include <core/window.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
148
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
37 #include <ui/theme.h>
156
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
38 #include <ui/ui.h>
148
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
39
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
40 #include <rpg/message.h>
156
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
41 #include <rpg/rpg.h>
148
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
42
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 #include <assets/sprites/chest.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #include <assets/sprites/people.h>
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
46 #define W (1280)
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
47 #define H (720)
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
48
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
49 #define MW (W * 0.75)
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
50 #define MX ((W / 2) - (MW / 2))
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
51 #define MY (100)
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
53 /* This is a stack of "parallel" events. */
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
54 static struct action_stack events;
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
55
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
56 /* This is a stack of modal events. */
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
57 static struct action_stack modal;
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 /*
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 * Event object for the chest to click on.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 static struct {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 struct message msg;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 struct action msg_act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 int x;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 int y;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 bool opened;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 struct texture image;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 struct sprite sprite;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 struct action event;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 } chest = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 .msg = {
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
73 .x = MX,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
74 .y = MY,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
75 .w = MW,
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 .text = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 "100000 pièces.",
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 "Te voilà riche sale file de crevette."
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 };
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 /*
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * Event object for the guide who ask dialog with you.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 * It is a script spawned upon click like this.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * [guide.event]
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 * | spawn
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * (on click)------------------->[message 1]
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 * v
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * [message 2]
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 * v
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 * [question 3]
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 * spawn v
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 * [response]<---------------------[check result]
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 * v
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * [message 4/5]
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 static struct {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 struct {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 struct message msg;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 struct action act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 } msgs[5];
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 /* This is the sprite and action to click on. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 int x;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 int y;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 struct texture image;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 struct sprite sprite;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 struct action event;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
112
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 /* This is the event for the response. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 struct action response;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
115
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 struct script script;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 struct action script_act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 } guide = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 .msgs = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 .msg = {
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
122 .x = MX,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
123 .y = MY,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
124 .w = MW,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
125 .delay = MESSAGE_DELAY_DEFAULT,
141
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents: 140
diff changeset
126 .flags = MESSAGE_FLAGS_FADEIN,
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 .text = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 "Bienvenue dans ce monde Molko."
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 },
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 },
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 .msg = {
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
134 .x = MX,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
135 .y = MY,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
136 .w = MW,
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 .text = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 "Penses tu vraiment pouvoir me battre ?"
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 },
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 .msg = {
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
144 .x = MX,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
145 .y = MY,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
146 .w = MW,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
147 .flags = MESSAGE_FLAGS_QUESTION,
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 .text = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 "Non j'ai la trouille.",
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 "Bien sûr, je suis la légende."
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 },
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 /* In case of NO. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 .msg = {
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
158 .x = MX,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
159 .y = MY,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
160 .w = MW,
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 .text = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 "Poule mouillée."
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 },
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
166
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 /* In case of YES. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 .msg = {
140
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
170 .x = MX,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
171 .y = MY,
453651d76f7c core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents: 139
diff changeset
172 .w = MW,
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 .text = {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 "Prépare toi à souffrir."
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 };
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
180
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 static bool
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 guide_response_update(struct action *act, unsigned int ticks)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 /* Immediately return to get access to end. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 (void)act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 (void)ticks;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
187
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 return true;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 guide_response_end(struct action *act)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 (void)act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
195
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 /* We add a final response depending on the result. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 const int index = guide.msgs[2].msg.index + 3;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 message_action(&guide.msgs[index].msg, &guide.msgs[index].act);
161
31d7f23c0588 ui: label no longer has w, h fields
David Demelier <markand@malikania.fr>
parents: 156
diff changeset
200 message_query(&guide.msgs[index].msg, NULL, &guide.msgs[index].msg.h);
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
201 action_stack_add(&modal, &guide.msgs[index].act);
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 guide_popup(void)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 /* Prepare the script with first 3 messages. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 for (size_t i = 0; i < 3; ++i) {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 message_action(&guide.msgs[i].msg, &guide.msgs[i].act);
161
31d7f23c0588 ui: label no longer has w, h fields
David Demelier <markand@malikania.fr>
parents: 156
diff changeset
210 message_query(&guide.msgs[i].msg, NULL, &guide.msgs[i].msg.h);
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 script_append(&guide.script, &guide.msgs[i].act);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
213
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 /* Reset the message index. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 guide.msgs[2].msg.index = 0;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 /* This is final action that analyze user input. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 guide.response.update = guide_response_update;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 guide.response.end = guide_response_end;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 script_append(&guide.script, &guide.response);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
221
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 script_action(&guide.script, &guide.script_act);
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
223 action_stack_add(&modal, &guide.script_act);
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
225
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 guide_handle(struct action *act, const union event *ev)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 (void)act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
231 if (!action_stack_completed(&modal))
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 return;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
233
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 switch (ev->type) {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 case EVENT_CLICKDOWN:
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 if (maths_is_boxed(guide.x, guide.y,
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 guide.sprite.cellw, guide.sprite.cellh,
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 ev->click.x, ev->click.y))
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 guide_popup();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 break;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 default:
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 break;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
245
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 guide_draw(struct action *act)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 (void)act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
250
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 sprite_draw(&guide.sprite, 0, 0, guide.x, guide.y);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
253
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 guide_init(void)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 if (!image_openmem(&guide.image, sprites_people, sizeof (sprites_people)))
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 panic();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
259
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 sprite_init(&guide.sprite, &guide.image, 48, 48);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
261
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 /* This is the global guide action. */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 guide.event.handle = guide_handle;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 guide.event.draw = guide_draw;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 guide.x = 200;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 guide.y = 200;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
268
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 chest_handle(struct action *act, const union event *ev)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 (void)act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
273
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
274 if (chest.opened || !action_stack_completed(&modal))
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 return;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
276
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 switch (ev->type) {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 case EVENT_CLICKDOWN:
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 if (maths_is_boxed(chest.x, chest.y, chest.sprite.cellw, chest.sprite.cellh,
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 ev->click.x, ev->click.y)) {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 chest.opened = true;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 message_action(&chest.msg, &chest.msg_act);
161
31d7f23c0588 ui: label no longer has w, h fields
David Demelier <markand@malikania.fr>
parents: 156
diff changeset
283 message_query(&chest.msg, NULL, &chest.msg.h);
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
284 action_stack_add(&modal, &chest.msg_act);
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 default:
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 break;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
290
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 chest_draw(struct action *act)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 (void)act;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
295
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 const int row = chest.opened ? 3 : 0;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
297
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 sprite_draw(&chest.sprite, row, 0, chest.x, chest.y);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
300
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 chest_init(void)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 if (!image_openmem(&chest.image, sprites_chest, sizeof (sprites_chest)))
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 panic();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
306
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 sprite_init(&chest.sprite, &chest.image, 32, 32);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
308
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 chest.x = 100;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 chest.y = 100;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 chest.event.handle = chest_handle;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 chest.event.draw = chest_draw;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
314
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 init(void)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 {
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 209
diff changeset
318 if (!core_init("fr.malikania", "actions") || !ui_init() || !rpg_init())
156
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
319 panic();
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
320 if (!window_open("Example - Action", W, H))
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 panic();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
322
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 guide_init();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 chest_init();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
326
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 static void
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
328 handle(struct state *st, const union event *ev)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
329 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
330 (void)st;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
331
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
332 switch (ev->type) {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
333 case EVENT_QUIT:
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
334 game_quit();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
335 break;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
336 default:
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
337 action_stack_handle(&events, ev);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
338 action_stack_handle(&modal, ev);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
339 break;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
340 }
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
341 }
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
342
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
343 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
344 update(struct state *st, unsigned int ticks)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
345 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
346 (void)st;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
347
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
348 action_stack_update(&events, ticks);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
349 action_stack_update(&modal, ticks);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
350 }
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
351
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
352 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
353 draw(struct state *st)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
354 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
355 (void)st;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
356
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
357 painter_set_color(0xffffffff);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
358 painter_clear();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
359 action_stack_draw(&events);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
360 action_stack_draw(&modal);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
361 painter_present();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
362 }
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
363
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
364 static void
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
365 run(void)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 {
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
367 struct state state = {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
368 .handle = handle,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
369 .update = update,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
370 .draw = draw
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
371 };
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
372
139
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
373 action_stack_add(&events, &chest.event);
8b035f7f978a core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents: 136
diff changeset
374 action_stack_add(&events, &guide.event);
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
375
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
376 game_switch(&state, true);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 161
diff changeset
377 game_loop();
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
378 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
379
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 static void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
381 quit(void)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
382 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 window_finish();
156
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
384 rpg_finish();
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
385 ui_finish();
c3a40062acc2 misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
386 core_finish();
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
387 }
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
388
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
389 int
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 main(int argc, char **argv)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
392 (void)argc;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 (void)argv;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
394
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
395 init();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
396 run();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
397 quit();
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
398
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
399 return 0;
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff changeset
400 }