events.cxx

Sun, 15 Jul 2012 18:56:26 +0300

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Sun, 15 Jul 2012 18:56:26 +0300
changeset 26
54eaea6dc27c
parent 17
b4fcc69e426a
child 36
a8838b5f1213
permissions
-rw-r--r--

Mainloop and onenter definitions are now written into separate buffers first and only written to file after state ends. Why? Zandronum seems to demand that mainloop definitions MUST be written right after any onenter one. This way, mainloop and onenter definitions can be written without this restriction in the script. Also now I have a cool uchar-buffer class :)

2
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 * botc source code
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012 Santeri `Dusk` Piippo
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 * All rights reserved.
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 *
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8 *
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright notice,
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 * this list of conditions and the following disclaimer.
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 * this list of conditions and the following disclaimer in the documentation
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 * and/or other materials provided with the distribution.
3
08cab2b67dce oh blerb.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 2
diff changeset
14 * 3. Neither the name of the developer nor the names of its contributors may
08cab2b67dce oh blerb.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 2
diff changeset
15 * be used to endorse or promote products derived from this software without
08cab2b67dce oh blerb.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 2
diff changeset
16 * specific prior written permission.
2
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 * 4. Redistributions in any form must be accompanied by information on how to
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18 * obtain complete source code for the software and any accompanying
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 * software that uses the software. The source code must either be included
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 * in the distribution or be available for no more than the cost of
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 * distribution plus a nominal fee, and must be freely redistributable
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 * under reasonable conditions. For an executable file, complete source
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 * code means the source code for all modules it contains. It does not
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 * include source code for modules or files that typically accompany the
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 * major components of the operating system on which the executable file
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26 * runs.
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27 *
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
33 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
34 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
35 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 * POSSIBILITY OF SUCH DAMAGE.
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
39 */
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
40
6
0005527cad62 Command definitions are now read into memory.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 3
diff changeset
41 #define __EVENTS_CXX__
2
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
42 #include <stdlib.h>
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43 #include <stdio.h>
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44 #include "common.h"
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
45 #include "scriptreader.h"
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
46 #include "str.h"
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
47 #include "events.h"
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
48
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
49 EventDef* g_EventDef;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
50 void ReadEvents () {
16
393359908179 Added mainloop/onenter/onexit support, fixed state writing.. this thing can compile the script for the `jumping arghbot` now!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 6
diff changeset
51 ScriptReader* r = new ScriptReader ("events.def");
2
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
52 g_EventDef = NULL;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
53 EventDef* curdef = g_EventDef;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
54 unsigned int numEventDefs = 0;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
55 while (r->Next()) {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56 EventDef* e = new EventDef;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
57 e->name = r->token;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
58 e->number = numEventDefs;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
59 e->next = NULL;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
60
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
61 // g_EventDef becomes the first eventdef
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
62 if (!g_EventDef)
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
63 g_EventDef = e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65 if (!curdef) {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
66 curdef = e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 } else {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
68 curdef->next = e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69 curdef = e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
71 numEventDefs++;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
72 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
73
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
74 delete r;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75 printf ("%d event definitions read.\n", numEventDefs);
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 void UnlinkEvents (EventDef* e) {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79 if (e->next)
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 UnlinkEvents (e->next);
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81 delete e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
83
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
84 EventDef* FindEventByIdx (unsigned int idx) {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
85 EventDef* e = g_EventDef;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86 while (idx > 0) {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 if (!e->next)
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 return NULL;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 e = e->next;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90 idx--;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
91 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
92 return e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
95 EventDef* FindEventByName (str a) {
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
96 EventDef* e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 for (e = g_EventDef; e->next != NULL; e = e->next) {
17
b4fcc69e426a Events and commands are now treated properly case-insensitively.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
98 if (!a.icompare (e->name))
2
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 return e;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100 }
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102 return NULL;
bb2c45522eb6 Added event definitions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 }

mercurial