aboutsummaryrefslogtreecommitdiff
path: root/advtrains/copytool.lua
Commit message (Collapse)AuthorAge
* Delete train if it ends up off track, show a warningBlockhead2020-03-03
|
* Save clipboard on item metadataBlockhead2020-03-03
| | | | Also a minor user feedback text cleanup
* Remove debugging print statementsBlockhead2020-03-03
|
* Draft copy toolBlockhead2020-03-03
The copy tool copies a train to a global clipboard. It copies the Line number, Routing code, inside text and outside text. It copies the kinds of wagons in the train and whether they are flipped around. Pasting with the copy tool will conditionally flip the train such that 'your front' of the train, rather than the absolute front of the train, is what is output. The new train is oriented to travel forward with the placing player's view. Conditons are: - Multi-unit/push-pull train (= has locomotives on both ends): Never flipped - Locomotive-hauled train (= has one end with a locomotive): Flipped so that the locomotive is always at the front. If the locomotive points long hood forward, it will still point long hood forward. - Rake of wagons (= has no locomotives on ends): Flipped according to which end of the train the player copies from. If the player is towards the back (wagon out of train divded by total wagons > 0.5), then the back becomes the new front. If the player is towards the front, no change.
n class="hl opt">{ bool operator() (const PointedThing &pt1, const PointedThing &pt2) const; }; //! Describes the state of a raycast. class RaycastState { public: /*! * Creates a raycast. * @param objects_pointable if false, only nodes will be found * @param liquids pointable if false, liquid nodes won't be found */ RaycastState(const core::line3d<f32> &shootline, bool objects_pointable, bool liquids_pointable); //! Shootline of the raycast. core::line3d<f32> m_shootline; //! Iterator to store the progress of the raycast. voxalgo::VoxelLineIterator m_iterator; //! Previous tested node during the raycast. v3s16 m_previous_node; /*! * This priority queue stores the found pointed things * waiting to be returned. */ std::priority_queue<PointedThing, std::vector<PointedThing>, RaycastSort> m_found; bool m_objects_pointable; bool m_liquids_pointable; //! The code needs to search these nodes around the center node. core::aabbox3d<s16> m_search_range { 0, 0, 0, 0, 0, 0 }; //! If true, the Environment will initialize this state. bool m_initialization_needed = true; }; /*! * Checks if a line and a box intersects. * @param[in] box box to test collision * @param[in] start starting point of the line * @param[in] dir direction and length of the line * @param[out] collision_point first point of the collision * @param[out] collision_normal normal vector at the collision, points * outwards of the surface. If start is in the box, zero vector. * @returns true if a collision point was found */ bool boxLineCollision(const aabb3f &box, const v3f &start, const v3f &dir, v3f *collision_point, v3s16 *collision_normal);