X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fengineer%2Ftrainview.cpp;h=dffa04dde651be1768bda8b6ee20ed9cf4840ab6;hb=7a36d396eded897c421424905b2c938d770df341;hp=df336d577197763080a68fca2360f97fc52c6d52;hpb=62ce775d9af8f3321dbdebd6243b551fbbb0b976;p=r2c2.git diff --git a/source/engineer/trainview.cpp b/source/engineer/trainview.cpp index df336d5..dffa04d 100644 --- a/source/engineer/trainview.cpp +++ b/source/engineer/trainview.cpp @@ -1,20 +1,13 @@ -/* $Id$ - -This file is part of the MSP Märklin suite -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #include #include #include -#include "libmarklin/vehicle.h" -#include "libmarklin/vehicletype.h" +#include "libr2c2/vehicle.h" +#include "libr2c2/vehicletype.h" #include "engineer.h" #include "trainview.h" using namespace Msp; -using namespace Marklin; +using namespace R2C2; TrainView::TrainView(Engineer &e, const Train &t): engineer(e), @@ -27,7 +20,7 @@ TrainView::TrainView(Engineer &e, const Train &t): set_size(300, 330); tex.set_min_filter(GL::LINEAR); - tex.storage(GL::RGB, 280, 280, 0); + tex.storage(GL::RGB, 280, 280); tex.image(0, GL::RGB, GL::UNSIGNED_BYTE, 0); fbo.attach(GL::COLOR_ATTACHMENT0, tex, 0); depth.storage(GL::DEPTH_COMPONENT, 280, 280); @@ -40,9 +33,9 @@ TrainView::TrainView(Engineer &e, const Train &t): pipeline.add_renderable(engineer.get_layout_3d().get_scene()); - GL::PipelinePass *pass = &pipeline.add_pass(0); - pass->depth_test = &GL::DepthTest::lequal(); - pass->lighting = &engineer.get_lighting(); + GL::Pipeline::Pass *pass = &pipeline.add_pass(0); + pass->set_depth_test(&GL::DepthTest::lequal()); + pass->set_lighting(&engineer.get_lighting()); GLtk::Image *image; add(*(image = new GLtk::Image(&tex))); @@ -92,33 +85,33 @@ void TrainView::set_forward(bool f) void TrainView::prepare() { const Vehicle &veh = train.get_vehicle(0); - const Point &pos = veh.get_position(); - float angle = veh.get_direction(); + const Vector &pos = veh.get_position(); + Angle angle = veh.get_rotation(); if(!forward) - angle += M_PI; - float c = cos(angle); - float s = sin(angle); + angle += Angle::half_turn(); + Vector fwd_vec = rotated_vector(Vector(1, 0, 0), angle); + Vector side_vec = rotated_vector(Vector(0, -1, 0), angle); float l = veh.get_type().get_length(); switch(mode) { case ROOF: - camera.set_position(GL::Vector3(pos.x-l*c, pos.y-l*s, pos.z+0.07)); - camera.set_look_direction(GL::Vector3(c, s, -0.2)); + camera.set_position(pos-l*fwd_vec+Vector(0, 0, 0.07)); + camera.set_look_direction(fwd_vec-Vector(0, 0, -0.2)); break; case SIDE: - camera.set_position(GL::Vector3(pos.x-l*0.8*c+0.05*s, pos.y-l*0.8*s-0.05*c, pos.z+0.03)); - camera.set_look_direction(GL::Vector3(c-0.2*s, s+0.2*c, 0)); + camera.set_position(pos-0.8f*fwd_vec+0.05f*side_vec+Vector(0, 0, 0.03)); + camera.set_look_direction(fwd_vec-side_vec*0.2f); break; case HEAD: - camera.set_position(GL::Vector3(pos.x+l*0.55*c, pos.y+l*0.55*s, pos.z+0.03)); - camera.set_look_direction(GL::Vector3(c, s, 0)); + camera.set_position(pos+fwd_vec*(l*0.55f)+Vector(0, 0, 0.03)); + camera.set_look_direction(fwd_vec); break; } GL::Bind _bind_fbo(fbo); fbo.clear(GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT); - pipeline.render_all(); + pipeline.render(); } void TrainView::button_release(int x, int y, unsigned btn)