// Function from file: transit_tube_construction.dm public override dynamic attackby(dynamic A = null, dynamic user = null, string _params = null, bool?silent = null, bool?replace_spent = null) { Obj_Structure_TransitTube R = null; if (A is Obj_Item_Weapon_Wrench) { user.WriteMsg("<span class='notice'>You start attaching the " + this.name + "...</span>"); this.add_fingerprint(user); if (GlobalFuncs.do_after(user, 40 / A.toolspeed, null, this)) { if (!(this != null)) { return(null); } user.WriteMsg("<span class='notice'>You attach the " + this.name + ".</span>"); R = this.buildtube(); this.transfer_fingerprints_to(R); GlobalFuncs.qdel(this); return(null); } } return(null); }
// Function from file: transit_tube_construction.dm public override Obj_Structure_TransitTube buildtube( ) { Obj_Structure_TransitTube R = null; R = new Obj_Structure_TransitTube(this.loc); R.icon_state = this.icon_state; R.dir = this.dir; R.init_dirs(); return(R); }
// Function from file: transit_tube_construction.dm public virtual Obj_Structure_TransitTube buildtube( ) { Obj_Structure_TransitTube R = null; R = new Obj_Structure_TransitTube(this.loc); R.icon_state = this.icon_state; R.init_dirs(); R.generate_automatic_corners(R.tube_dirs); return(R); }
// Function from file: transit_tube.dm public void init_dirs_automatic( ) { ByTable connected = null; ByTable connected_auto = null; dynamic direction = null; Tile location = null; Obj_Structure_TransitTube tube = null; connected = new ByTable(); connected_auto = new ByTable(); foreach (dynamic _b in Lang13.Enumerate(GlobalVars.tube_dir_list)) { direction = _b; location = Map13.GetStep(this.loc, Convert.ToInt32(direction)); foreach (dynamic _a in Lang13.Enumerate(location, typeof(Obj_Structure_TransitTube))) { tube = _a; if (tube.directions() == null && tube.icon_state == "auto") { connected_auto.Add(direction); break; } else if (tube.directions().Contains(Num13.Rotate(direction, 180))) { connected.Add(direction); break; } } } connected.Add(connected_auto); this.tube_dirs = this.select_automatic_dirs(connected); if (Lang13.Length(this.tube_dirs) == 2 && GlobalVars.tube_dir_list.Find(this.tube_dirs[1]) > GlobalVars.tube_dir_list.Find(this.tube_dirs[2])) { this.tube_dirs.Swap(1, 2); } this.generate_automatic_corners(this.tube_dirs); this.select_automatic_icon_state(this.tube_dirs); return; }
// Function from file: transit_tube.dm public void destroy_diagonals( ) { Obj_Structure_TransitTube D = null; int my_dir = 0; bool is_connecting = false; Obj_Structure_TransitTube N = null; foreach (dynamic _b in Lang13.Enumerate(Map13.FetchInRangeExcludeThis(this, 1), typeof(Obj_Structure_TransitTube))) { D = _b; if (String13.SubStr(D.icon_state, 1, 3) == "D-") { my_dir = GlobalFuncs.text2dir_extended(String13.SubStr(D.icon_state, 3, 5)); is_connecting = false; foreach (dynamic _a in Lang13.Enumerate(Map13.FetchInRangeExcludeThis(D, 1), typeof(Obj_Structure_TransitTube))) { N = _a; if ((Map13.GetDistance(D, N) == Num13.Rotate(my_dir, -45) && D.has_exit(Num13.Rotate(my_dir, 90)) || Map13.GetDistance(D, N) == Num13.Rotate(my_dir, 45) && D.has_exit(Num13.Rotate(my_dir, -90))) && D != this) { is_connecting = true; break; } } if (!is_connecting) { GlobalFuncs.qdel(D); } } } return; }
// Function from file: transit_tube.dm public void create_automatic_decorative_corner(Tile location = null, dynamic direction = null) { string state = null; Obj_Structure_TransitTube tube = null; Obj_Structure_TransitTube tube2 = null; state = "D-" + GlobalFuncs.dir2text_short(direction); foreach (dynamic _a in Lang13.Enumerate(location, typeof(Obj_Structure_TransitTube))) { tube = _a; if (tube.icon_state == state) { return; } } tube2 = new Obj_Structure_TransitTube(location); tube2.icon_state = state; tube2.init_dirs(); return; }
// Function from file: tgstation.dme public override bool relaymove(Mob user = null, int?direction = null) { Obj_Structure_TransitTube_Station station = null; Obj_Structure_TransitTube tube = null; if (user is Mob && user.client != null) { if (!Lang13.Bool(Lang13.FindIn(typeof(Obj_Structure_TransitTube), this.loc))) { user.loc = this.loc; user.client.Move(Map13.GetStep(this.loc, direction ?? 0), direction ?? 0); user.reset_perspective(null); } if (!this.moving) { foreach (dynamic _a in Lang13.Enumerate(this.loc, typeof(Obj_Structure_TransitTube_Station))) { station = _a; if (station.directions().Contains(this.dir)) { if (!station.pod_moving) { if (direction == station.dir) { if (station.icon_state == "open") { user.loc = this.loc; user.client.Move(Map13.GetStep(this.loc, direction ?? 0), direction ?? 0); user.reset_perspective(null); } else { station.open_animation(); } } else if (station.directions().Contains(direction)) { this.dir = direction ?? 0; station.launch_pod(); } } return(false); } } foreach (dynamic _b in Lang13.Enumerate(this.loc, typeof(Obj_Structure_TransitTube))) { tube = _b; if (tube.directions().Contains(this.dir)) { if (tube.has_exit(direction)) { this.dir = direction ?? 0; return(false); } } } } } return(false); }
// Function from file: transit_tube_pod.dm public void follow_tube(bool?reverse_launch = null) { Obj_Structure_TransitTube current_tube = null; dynamic next_dir = null; Tile next_loc = null; int last_delay = 0; int exit_delay = 0; Obj_Structure_TransitTube tube = null; Obj_Structure_TransitTube tube2 = null; if (this.moving) { return; } this.moving = true; current_tube = null; last_delay = 0; if (reverse_launch == true) { this.dir = Num13.Rotate(this.dir, 180); } foreach (dynamic _a in Lang13.Enumerate(this.loc, typeof(Obj_Structure_TransitTube))) { tube = _a; if (tube.has_exit(this.dir)) { current_tube = tube; break; } } while (current_tube != null) { next_dir = current_tube.get_exit(this.dir); if (!Lang13.Bool(next_dir)) { break; } exit_delay = current_tube.f_exit_delay(this, this.dir) ?1:0; last_delay += exit_delay; Task13.Sleep(exit_delay); next_loc = Map13.GetStep(this.loc, Convert.ToInt32(next_dir)); current_tube = null; foreach (dynamic _b in Lang13.Enumerate(next_loc, typeof(Obj_Structure_TransitTube))) { tube2 = _b; if (tube2.has_entrance(next_dir)) { current_tube = tube2; break; } } if (current_tube == null) { this.dir = Convert.ToInt32(next_dir); this.Move(Map13.GetStep(this.loc, this.dir), this.dir); break; } last_delay = current_tube.f_enter_delay(this, next_dir); Task13.Sleep(last_delay); this.dir = Convert.ToInt32(next_dir); this.loc = next_loc; this.density = current_tube.density; if (current_tube != null && current_tube.should_stop_pod(this, next_dir)) { current_tube.pod_stopped(this, this.dir); break; } } this.density = true; this.moving = false; return; }