]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/tracktype.cpp
Add the new 360mm C-track (24360)
[r2c2.git] / source / libr2c2 / tracktype.cpp
index 4ac096767bac5a1e5efa580f4c8da5c3c700a46b..5b41e1f5f26f58ade0d2f13eb197d9adae5b6987 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of R²C²
-Copyright © 2006-2010  Mikkosoft Productions, Mikko Rasa
+Copyright © 2006-2011  Mikkosoft Productions, Mikko Rasa
 Distributed under the GPL
 */
 
@@ -15,7 +15,7 @@ namespace R2C2 {
 
 TrackType::TrackType(const ArticleNumber &an):
        art_nr(an),
-       double_address(false),
+       state_bits(0),
        autofit_preference(1)
 { }
 
@@ -120,6 +120,15 @@ TrackPoint TrackType::get_point(unsigned epi, unsigned path, float d) const
        }
 }
 
+bool TrackType::collide_ray(const Vector &start, const Vector &dir, float width) const
+{
+       for(vector<TrackPart>::const_iterator i=parts.begin(); i!=parts.end(); ++i)
+               if(i->collide_ray(start, dir, width))
+                       return true;
+
+       return false;
+}
+
 void TrackType::collect_endpoints()
 {
        endpoints.clear();
@@ -171,11 +180,13 @@ TrackType::Endpoint::Endpoint(float x, float y, float d, unsigned p):
 
 
 TrackType::Loader::Loader(TrackType &t):
-       Msp::DataFile::BasicLoader<TrackType>(t)
+       Msp::DataFile::BasicLoader<TrackType>(t),
+       state_bits_set(false)
 {
        add("autofit_preference", &TrackType::autofit_preference);
        add("description", &TrackType::description);
-       add("double_address", &TrackType::double_address);
+       add("object",      &TrackType::object);
+       add("state_bits",  &Loader::state_bits);
        add("part",        &Loader::part);
 }
 
@@ -189,6 +200,15 @@ void TrackType::Loader::part()
        TrackPart p;
        load_sub(p);
        obj.parts.push_back(p);
+       if(!state_bits_set && p.get_path())
+               while(p.get_path()>=(1U<<obj.state_bits))
+                       ++obj.state_bits;
+}
+
+void TrackType::Loader::state_bits(unsigned b)
+{
+       obj.state_bits = b;
+       state_bits_set = true;
 }
 
 } // namespace R2C2