aboutsummaryrefslogtreecommitdiff
path: root/assets
Commit message (Collapse)AuthorAge
* Make the models for Y and three-way turnoutsBlockhead2020-09-11
|
* Add models for all diamond crossing varieties to .blendBlockhead2020-08-21
| | | | | | This was actually 34 individual commits over the course of a month but is best to leave as one commit. It is also now a compressed .blend file (an option available inside blender).
* Add perpendicular and 45/90 degree crossing railsBlockhead2020-07-06
| | | | | | | | | | | | | | Add a set of new models for crossings to make some new track arrangements possible. This commit adds perpendicular crossigns that can be rotated at any angle: 30/45/60/90 and 45/90 degree crossings in two rotations. In future, further crossing types can be added to the blender file. Add the blender file in rail_crossings.blend that is the source of these files and which refers to the texture inside advtrains_train_track. Add a set of prototypes for rail crossings to advtrains/tracks.lua and register the new crossings in advtrains_train_track.
* Update interlocking manualorwell962019-01-15
|
* Signs (static signals)orwell962018-12-08
|
* Shunt signals (not exactly Ks), along with fixes in other components that ↵orwell962018-12-08
| | | | those rely on
* Complete Ks Main signalsorwell962018-10-26
|
* Actually allow what manual promises (setting IP on non-assigned signals)orwell962018-10-17
|
* Update manual againorwell962018-10-15
|
* Improve route programming:orwell962018-10-07
| | | | | | | - Formspec for TCBs instead of unhandy chatcommands - Ability to advance route over the next secction without punching end - Better visualization - Ability to route into dead-end sections
* Add interlocking guide/manual, silence debug outputsorwell962018-09-14
|
* Interlocking: Create demo signals, signal API and model for TCB configurer nodeorwell962018-06-19
|
* Create models for Ks signalsorwell962018-06-14
| | | | Degrotate doesn't work for meshes (why?), so all I've done was pretty useless...
* Add Andrew's Crossorwell962017-04-27
|
* Redo rail modelsorwell962017-03-12
| | | | Use multiple textures for slope objects, include mbb's rail textures and make curves and switches look better. Also add cable template.
* Update manual and include everything in repoorwell962017-03-09
|
* Remove blend1 files cluttering the assets directoryorwell962017-03-08
|
* Add ceiling-mounted signalorwell962017-02-28
| | | | This is the wall signal as ceiling variant. Because the trackdb can only save 4 rotation values, we need a ceiling version of this.
* add wallmounted light signalorwell962017-02-03
|
* Create new models and textures for japanese trainorwell962017-01-24
|
* Update manualorwell962017-01-18
|
* Add detailed steam engine contributed by mbb and Krokoschlangeorwell962017-01-17
|
* Add animation for steam engineorwell962017-01-17
| | | | I needed to completely rewrite the animation because irrlicht couldn't handle the animation NathanS created.
* Model, animate, texture and integrate new subway wagonorwell962017-01-17
| | | | engine follows!
* Download recent contributions and put them into the assets directoryorwell962017-01-17
|
* Add fancy passenger wagonorwell962017-01-06
|
* Restructure mod directoryorwell962017-01-04
b">void NodeMetadata::registerType(u16 id, Factory f) { core::map<u16, Factory>::Node *n; n = m_types.find(id); if(n) return; m_types.insert(id, f); } /* NodeMetadataList */ void NodeMetadataList::serialize(std::ostream &os) { u8 buf[6]; u16 version = 1; writeU16(buf, version); os.write((char*)buf, 2); u16 count = m_data.size(); writeU16(buf, count); os.write((char*)buf, 2); for(core::map<v3s16, NodeMetadata*>::Iterator i = m_data.getIterator(); i.atEnd()==false; i++) { v3s16 p = i.getNode()->getKey(); NodeMetadata *data = i.getNode()->getValue(); u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X; writeU16(buf, p16); os.write((char*)buf, 2); data->serialize(os); } } void NodeMetadataList::deSerialize(std::istream &is) { m_data.clear(); u8 buf[6]; is.read((char*)buf, 2); u16 version = readU16(buf); if(version > 1) { dstream<<__FUNCTION_NAME<<": version "<<version<<" not supported" <<std::endl; throw SerializationError("NodeMetadataList::deSerialize"); } is.read((char*)buf, 2); u16 count = readU16(buf); for(u16 i=0; i<count; i++) { is.read((char*)buf, 2); u16 p16 = readU16(buf); v3s16 p(0,0,0); p.Z += p16 / MAP_BLOCKSIZE / MAP_BLOCKSIZE; p16 -= p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE; p.Y += p16 / MAP_BLOCKSIZE; p16 -= p.Y * MAP_BLOCKSIZE; p.X += p16; NodeMetadata *data = NodeMetadata::deSerialize(is); if(data == NULL) continue; if(m_data.find(p)) { dstream<<"WARNING: NodeMetadataList::deSerialize(): " <<"already set data at position" <<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring." <<std::endl; delete data; continue; } m_data.insert(p, data); } } NodeMetadataList::~NodeMetadataList() { for(core::map<v3s16, NodeMetadata*>::Iterator i = m_data.getIterator(); i.atEnd()==false; i++) { delete i.getNode()->getValue(); } } NodeMetadata* NodeMetadataList::get(v3s16 p) { core::map<v3s16, NodeMetadata*>::Node *n; n = m_data.find(p); if(n == NULL) return NULL; return n->getValue(); } void NodeMetadataList::remove(v3s16 p) { NodeMetadata *olddata = get(p); if(olddata) { delete olddata; m_data.remove(p); } } void NodeMetadataList::set(v3s16 p, NodeMetadata *d) { remove(p); m_data.insert(p, d); } bool NodeMetadataList::step(float dtime) { bool something_changed = false; for(core::map<v3s16, NodeMetadata*>::Iterator i = m_data.getIterator(); i.atEnd()==false; i++) { v3s16 p = i.getNode()->getKey(); NodeMetadata *meta = i.getNode()->getValue(); bool changed = meta->step(dtime); if(changed) something_changed = true; } return something_changed; }