Commit | Line | Data |
---|---|---|
a07d8d00 MW |
1 | /* -*-sod-*- |
2 | * | |
3 | * A simple SOD module for testing. | |
4 | */ | |
5 | ||
6 | code c : includes { | |
7 | #include <stdio.h> | |
8 | #include "chimaera.h" | |
9 | } | |
10 | ||
11 | code h : includes { | |
12 | #include "sod.h" | |
13 | } | |
14 | ||
a07d8d00 MW |
15 | [nick = nml, link = SodObject] |
16 | class Animal : SodObject { | |
17 | int tickles = 0; | |
18 | ||
19 | void tickle(void) { } | |
20 | ||
21 | [role = before] | |
22 | void nml.tickle(void) { me->nml.tickles++; } | |
23 | } | |
24 | ||
25 | class Lion : Animal { | |
26 | void bite(void) { puts("Munch!"); } | |
0bc67e51 | 27 | void nml.tickle(void) { me->_vt->lion.bite(me); } |
a07d8d00 MW |
28 | } |
29 | ||
30 | class Goat : Animal { | |
31 | void butt(void) { puts("Bonk!"); } | |
0bc67e51 | 32 | void nml.tickle(void) { me->_vt->goat.butt(me); } |
a07d8d00 MW |
33 | } |
34 | ||
35 | class Serpent : Animal { | |
36 | void hiss(void) { puts("Sssss!"); } | |
37 | void bite(void) { puts("Nom!"); } | |
38 | void nml.tickle(void) { | |
0bc67e51 MW |
39 | if (SERPENT__CONV_NML(me)->nml.tickles > 2) me->_vt->serpent.bite(me); |
40 | else me->_vt->serpent.hiss(me); | |
a07d8d00 MW |
41 | } |
42 | } | |
43 | ||
44 | [nick = sir, link = Animal] | |
45 | class Chimaera : Lion, Goat, Serpent { | |
46 | } | |
47 |