]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/catalogue.cpp
Support multiple TrackAppearances in Catalogue
[r2c2.git] / source / libr2c2 / catalogue.cpp
1 #include <msp/core/maputils.h>
2 #include <msp/core/refptr.h>
3 #include <msp/datafile/parser.h>
4 #include "catalogue.h"
5 #include "signaltype.h"
6 #include "terraintype.h"
7 #include "tracktype.h"
8 #include "vehicletype.h"
9
10 using namespace std;
11 using namespace Msp;
12
13 namespace R2C2 {
14
15 Catalogue::Catalogue():
16         scale(1),
17         layout(*this)
18 {
19         add_type<TrackType>();
20         add_type<SignalType>();
21         add_type<VehicleType>();
22         add_type<TerrainType>();
23         add_type<TrackAppearance>().keyword("track_appearance");
24 }
25
26
27 Catalogue::Loader::Loader(Catalogue &c):
28         Collection::Loader(c),
29         cat(c)
30 {
31         add("layout", &Loader::layout);
32         add("scale", &Loader::scale);
33         add("signal", &Loader::signal);
34         add("terrain", &Loader::terrain);
35         add("track", &Loader::track);
36         add("vehicle", &Loader::vehicle);
37 }
38
39 void Catalogue::Loader::layout()
40 {
41         load_sub(cat.layout);
42 }
43
44 void Catalogue::Loader::scale(float n, float d)
45 {
46         cat.scale = n/d;
47 }
48
49 void Catalogue::Loader::signal(const string &n)
50 {
51         RefPtr<SignalType> sig = new SignalType(n);
52         load_sub(*sig);
53         cat.add(n, sig.get());
54         sig.release();
55 }
56
57 void Catalogue::Loader::terrain(const string &n)
58 {
59         RefPtr<TerrainType> ter = new TerrainType(n);
60         load_sub(*ter);
61         cat.add(n, ter.get());
62         ter.release();
63 }
64
65 void Catalogue::Loader::track(const string &n)
66 {
67         RefPtr<TrackType> trk = new TrackType(n);
68         load_sub(*trk, cat);
69         cat.add(n, trk.get());
70         trk.release();
71 }
72
73 void Catalogue::Loader::vehicle(const string &n)
74 {
75         RefPtr<VehicleType> veh = new VehicleType(n);
76         load_sub(*veh);
77         cat.add(n, veh.get());
78         veh.release();
79 }
80
81 } // namespace R2C2