]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/catalogue.cpp
Convert Catalogue to a Collection
[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 }
24
25
26 Catalogue::Loader::Loader(Catalogue &c):
27         Collection::Loader(c),
28         cat(c)
29 {
30         add("layout", &Loader::layout);
31         add("scale", &Loader::scale);
32         add("signal", &Loader::signal);
33         add("terrain", &Loader::terrain);
34         add("track", &Loader::track);
35         add("track_appearance", &Loader::track_appearance);
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, &cat.appearance);
68         load_sub(*trk);
69         cat.add(n, trk.get());
70         trk.release();
71 }
72
73 void Catalogue::Loader::track_appearance()
74 {
75         load_sub(cat.appearance);
76 }
77
78 void Catalogue::Loader::vehicle(const string &n)
79 {
80         RefPtr<VehicleType> veh = new VehicleType(n);
81         load_sub(*veh);
82         cat.add(n, veh.get());
83         veh.release();
84 }
85
86 } // namespace R2C2