Exemplo n.º 1
0
        // 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);
        }
Exemplo n.º 2
0
        // 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);
        }
Exemplo n.º 3
0
        // 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);
        }
Exemplo n.º 4
0
        // 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;
        }
Exemplo n.º 5
0
        // 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;
        }
Exemplo n.º 6
0
        // 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;
        }