aboutsummaryrefslogtreecommitdiff
path: root/advtrains/advtrains_train_subway/init.lua
diff options
context:
space:
mode:
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>2017-01-29 12:52:51 +0100
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>2017-01-29 12:52:51 +0100
commitbfd24ee43a10ab79674636e9dad725cdba093f63 (patch)
treefeab4ddb1db3ff45236d5fe27b1cfa88844d2f8f /advtrains/advtrains_train_subway/init.lua
parent5f01cd2d5a1df2071579f4dcae0b83c65bc3111e (diff)
downloadadvtrains-bfd24ee43a10ab79674636e9dad725cdba093f63.tar.gz
advtrains-bfd24ee43a10ab79674636e9dad725cdba093f63.tar.bz2
advtrains-bfd24ee43a10ab79674636e9dad725cdba093f63.zip
Found out why collision box does not fit train
Diffstat (limited to 'advtrains/advtrains_train_subway/init.lua')
-rw-r--r--advtrains/advtrains_train_subway/init.lua3
1 files changed, 2 insertions, 1 deletions
diff --git a/advtrains/advtrains_train_subway/init.lua b/advtrains/advtrains_train_subway/init.lua
index 1282ec7..faf8ceb 100644
--- a/advtrains/advtrains_train_subway/init.lua
+++ b/advtrains/advtrains_train_subway/init.lua
@@ -68,7 +68,8 @@ advtrains.register_wagon("subway_wagon", {
},
visual_size = {x=1, y=1},
wagon_span=2,
- collisionbox = {-1.0,-0.5,-1.8, 1.0,2.5,1.8},
+ --collisionbox = {-1.0,-0.5,-1.8, 1.0,2.5,1.8},
+ collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0},
is_locomotive=true,
drops={"default:steelblock 4"},
--custom_on_activate = function(self, dtime_s)
pan class="hl opt">::operator() (const PointedThing &pt1, const PointedThing &pt2) const { // "nothing" can not be sorted assert(pt1.type != POINTEDTHING_NOTHING); assert(pt2.type != POINTEDTHING_NOTHING); f32 pt1_distSq = pt1.distanceSq; // Add some bonus when one of them is an object if (pt1.type != pt2.type) { if (pt1.type == POINTEDTHING_OBJECT) pt1_distSq -= BS * BS; else if (pt2.type == POINTEDTHING_OBJECT) pt1_distSq += BS * BS; } // returns false if pt1 is nearer than pt2 if (pt1_distSq < pt2.distanceSq) { return false; } if (pt1_distSq == pt2.distanceSq) { // Sort them to allow only one order if (pt1.type == POINTEDTHING_OBJECT) return (pt2.type == POINTEDTHING_OBJECT && pt1.object_id < pt2.object_id); return (pt2.type == POINTEDTHING_OBJECT || pt1.node_undersurface < pt2.node_undersurface); } return true; } RaycastState::RaycastState(const core::line3d<f32> &shootline, bool objects_pointable, bool liquids_pointable) : m_shootline(shootline), m_iterator(shootline.start / BS, shootline.getVector() / BS), m_previous_node(m_iterator.m_current_node_pos), m_objects_pointable(objects_pointable), m_liquids_pointable(liquids_pointable) { } bool boxLineCollision(const aabb3f &box, const v3f &start, const v3f &dir, v3f *collision_point, v3s16 *collision_normal) { if (box.isPointInside(start)) { *collision_point = start; collision_normal->set(0, 0, 0); return true; } float m = 0; // Test X collision if (dir.X != 0) { if (dir.X > 0) m = (box.MinEdge.X - start.X) / dir.X; else m = (box.MaxEdge.X - start.X) / dir.X; if (m >= 0 && m <= 1) { *collision_point = start + dir * m; if ((collision_point->Y >= box.MinEdge.Y) && (collision_point->Y <= box.MaxEdge.Y) && (collision_point->Z >= box.MinEdge.Z) && (collision_point->Z <= box.MaxEdge.Z)) { collision_normal->set((dir.X > 0) ? -1 : 1, 0, 0); return true; } } } // Test Y collision if (dir.Y != 0) { if (dir.Y > 0) m = (box.MinEdge.Y - start.Y) / dir.Y; else m = (box.MaxEdge.Y - start.Y) / dir.Y; if (m >= 0 && m <= 1) { *collision_point = start + dir * m; if ((collision_point->X >= box.MinEdge.X) && (collision_point->X <= box.MaxEdge.X) && (collision_point->Z >= box.MinEdge.Z) && (collision_point->Z <= box.MaxEdge.Z)) { collision_normal->set(0, (dir.Y > 0) ? -1 : 1, 0); return true; } } } // Test Z collision if (dir.Z != 0) { if (dir.Z > 0) m = (box.MinEdge.Z - start.Z) / dir.Z; else m = (box.MaxEdge.Z - start.Z) / dir.Z; if (m >= 0 && m <= 1) { *collision_point = start + dir * m; if ((collision_point->X >= box.MinEdge.X) && (collision_point->X <= box.MaxEdge.X) && (collision_point->Y >= box.MinEdge.Y) && (collision_point->Y <= box.MaxEdge.Y)) { collision_normal->set(0, 0, (dir.Z > 0) ? -1 : 1); return true; } } } return false; }