cfad47cfa3/t3compiler/tads3/test/data/anonobj.t

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
/*
2
 *   Anonymous object test 
3
 */
4
5
#include "tads.h"
6
#include "t3.h"
7
8
/* set the 'location' property */
9
+ property location;
10
11
PreinitObject
12
    execute()
13
    {
14
        /* initialize the location for every object */
15
        forEachInstance(CObject, { obj: obj.initLocation() });
16
    }
17
;
18
19
main(args)
20
{
21
    local cnt;
22
    
23
    "This is the anonymous object test!\b";
24
25
    "List of 'Item' objects:\n";
26
    cnt = 0;
27
    forEachInstance(Item, { obj: "[<<++cnt>>]: <<obj.sdesc>>\n" });
28
    "\b";
29
30
    "Containment graph:\n";
31
    forEachInstance(Room,
32
        { obj: "Room: <<obj.sdesc>>\n<<obj.listCont(1)>>\b" });
33
    "\b";
34
}
35
36
/*
37
 *   root object 
38
 */
39
class CObject: object
40
    /* list the contents */
41
    listCont(level)
42
    {
43
        for (local i = 1, local cnt = contents.length() ; i <= cnt ; ++i)
44
        {
45
            /* indent */
46
            for (local j = 1 ; j <= level ; ++j)
47
                "\ \ ";
48
49
            /* show this object and end the line */
50
            contents[i].sdesc;
51
            "\n";
52
53
            /* show the contents of this object */
54
            contents[i].listCont(level + 1);
55
        }
56
    }
57
58
    /* initialize location - add myself to my location's contents list */
59
    initLocation()
60
    {
61
        if (self.propType(&location) == TypeObject)
62
            location.contents += self;
63
    }
64
65
    /* contents list */
66
    contents = []
67
;
68
    
69
class Item: CObject
70
    sdesc = "<Item>"
71
;
72
73
class Container: Item
74
;
75
76
class Room: CObject
77
    sdesc = "<Room>"
78
;
79
80
Item sdesc = "red ball";
81
Item sdesc = "blue ball";
82
Item sdesc = "green box";
83
84
yellowBox: Item sdesc = "yellow box";
85
86
Cave: Room
87
    sdesc = "Cave"
88
;
89
90
+ Item sdesc = "nasty knife" ;
91
+ rustyKnife: Item sdesc = "rusty knife" ;
92
+ Container sdesc = "box" ;
93
94
++ Container sdesc = "envelope" ;
95
+++ Item sdesc = "letter" ;
96
++ Item sdesc = "fuel cell" ;
97
98
+ Item sdesc = "axe" ;
99
100
NSPassage: Room
101
    sdesc = "North-South Passage"
102
;
103
104
+ Container sdesc = "tank" ;
105
++ Item sdesc = "quantity of water" ;
106