/* $Id$
-This file is part of the MSP Märklin suite
+This file is part of R²C²
Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa
Distributed under the GPL
*/
#include <msp/strings/formatter.h>
#include <msp/time/units.h>
#include <msp/time/utils.h>
-#include "libmarklin/driver.h"
-#include "libmarklin/tracktype.h"
+#include "libr2c2/driver.h"
+#include "libr2c2/tracktype.h"
#include "3d/path.h"
#include "3d/track.h"
#include "3d/vehicle.h"
#include "trainview.h"
using namespace std;
-using namespace Marklin;
+using namespace R2C2;
using namespace Msp;
Application::RegApp<Engineer> Engineer::reg;
window.set_title("Railroad Engineer");
window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Engineer::exit), 0));
- DataFile::load(ui_res, "marklin.res");
+ DataFile::load(ui_res, "r2c2.res");
root = new GLtk::Root(ui_res, window);
root->signal_button_press.connect(sigc::mem_fun(this, &Engineer::button_press));
root->signal_pointer_motion.connect(sigc::mem_fun(this, &Engineer::pointer_motion));
root->set_visible(true);
- main_panel = new MainPanel(*this, ui_res);
+ main_panel = new MainPanel(*this);
root->add(*main_panel);
main_panel->set_position(0, window.get_height()-main_panel->get_geometry().h);
main_panel->set_visible(true);
layout.signal_block_reserved.connect(sigc::mem_fun(this, &Engineer::block_reserved));
layout.signal_emergency.connect(sigc::mem_fun(this, &Engineer::set_status));
layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Engineer::sensor_event));
- if(FS::exists("engineer.state"))
- DataFile::load(layout, "engineer.state");
+ if(FS::exists(options.state_fn))
+ DataFile::load(layout, options.state_fn);
if(options.network)
{
layout.get_driver().flush();
if(!options.simulate)
- layout.save_trains("engineer.state");
+ layout.save_trains(options.state_fn);
delete overlay;
delete root;
delete picking_path;
picking_path = new Path3D(*track);
if(picking_entry>=0)
- picking_path->set_mask(picking_track->get_type().get_endpoints()[picking_entry].paths);
+ picking_path->set_mask(picking_track->get_type().get_endpoint(picking_entry).paths);
else
picking_path->set_mask(picking_track->get_type().get_paths());
picking_path->set_color(GL::Color(0));
else if(btn==3 && picking_entry>=0)
{
picking_entry = (picking_entry+1)%picking_track->get_type().get_endpoints().size();
- picking_path->set_mask(picking_track->get_type().get_endpoints()[picking_entry].paths);
+ picking_path->set_mask(picking_track->get_type().get_endpoint(picking_entry).paths);
}
}
else
Track &track = t3d->get_track();
if(track.get_turnout_id())
{
- Block &block = layout.get_block_by_track(track);
+ Block &block = track.get_block();
if(block.get_train() && !block.get_train()->free_block(block))
set_status("Turnout is busy");
else
void Engineer::view_all()
{
- const list<Track3D *> &tracks = layout_3d.get_tracks();
+ const Layout3D::TrackMap &tracks = layout_3d.get_tracks();
float view_aspect = float(window.get_width()-200)/window.get_height();
float view_height = tan(camera.get_field_of_view()/2)*2;
float max_x = 0;
float min_y = 0;
float max_y = 0;
- for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+ for(Layout3D::TrackMap::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
{
Point minp, maxp;
- (*i)->get_bounds(angle, minp, maxp);
+ i->second->get_bounds(angle, minp, maxp);
min_x = min(min_x, minp.x);
max_x = max(max_x, maxp.x);
min_y = min(min_y, minp.y);
void Engineer::train_added(Train &train)
{
- TrainPanel *tpanel = new TrainPanel(*this, ui_res, train);
+ TrainPanel *tpanel = new TrainPanel(*this, train);
root->add(*tpanel);
train_panels.push_back(tpanel);
rearrange_panels();