コード例 #1
0
 public override void Upgrade()
 {
     if (rct.Height >= 2 && rct.Width >= 2)
     {
         RCT crosswalkRct;
         if (axis == 'v')
         {
             crosswalkRct = new RCT(new CRD(rct.Start.x + 1, rct.Start.z), new CRD(rct.End.x - 1, rct.End.z));
         }
         else
         {
             crosswalkRct = new RCT(new CRD(rct.Start.x, rct.Start.z + 1), new CRD(rct.End.x, rct.End.z - 1));
         }
         List <RCT>        newRCTs     = RCT.Cuttind(rct, crosswalkRct);
         List <MapElement> newElements = new List <MapElement>();
         for (int i = 0; i < newRCTs.Count; i++)
         {
             //newRCTs[i].DebugLog(this.ToString() + " id:" + this.id);
             if (newRCTs[i].Equals(crosswalkRct))
             {
                 newElements.Add(new CrossroadCrosswalk(newRCTs[i], floorNumber, axis));
             }
             else
             {
                 newElements.Add(new CrossroadRoad(newRCTs[i], floorNumber, axis));
             }
         }
         parentElement.moveNodesFromMapElementToThis(this);
         parentElement.addNewElements(newElements);
     }
     base.Upgrade();
 }
コード例 #2
0
        public void CreateStreet(RCT rct, int floor, char axis, int sidewalk) //добавляет улицу
        {
            List <MapElement> newElements = new List <MapElement>();

            for (int i = 0; i < this.childElements.Count; i++)
            {
                if (this.childElements[i].rct.checkCollision(rct) && childElements[i].floorNumber == floor)
                {
                    if (this.childElements[i] is Area)
                    {
                        RCT        collision = RCT.getCollision(childElements[i].rct, rct);
                        List <RCT> newRcts   = RCT.Cuttind(childElements[i].rct, collision);
                        for (int n = 0; n < newRcts.Count; n++)
                        {
                            if (newRcts[n].Equals(collision))
                            {
                                newElements.Add(new Street(collision, floor, axis, sidewalk));
                            }
                            else
                            {
                                newElements.Add(new Area(newRcts[n], floor));
                            }
                        }
                    }
                    else if (this.childElements[i] is Street)
                    {
                        Street oldstreet = this.childElements[i] as Street;
                        int    hsidewalk, vsidewalk;
                        if (oldstreet.axis == 'v')
                        {
                            vsidewalk = oldstreet.sidewalk;
                            hsidewalk = sidewalk;
                        }
                        else
                        {
                            vsidewalk = sidewalk;
                            hsidewalk = oldstreet.sidewalk;
                        }
                        RCT        collision = RCT.getCollision(oldstreet.rct, rct);
                        List <RCT> newRcts   = RCT.Cuttind(oldstreet.rct, collision);
                        for (int n = 0; n < newRcts.Count; n++)
                        {
                            if (newRcts[n].Equals(collision))
                            {
                                newElements.Add(new Crossroad(collision, floor, vsidewalk, hsidewalk));
                            }
                            else
                            {
                                newElements.Add(new Street(newRcts[n], floor, oldstreet.axis, oldstreet.sidewalk));
                            }
                        }
                    }
                    moveNodesFromMapElementToThis(childElements[i]);
                    childElements.Remove(childElements[i]);
                    i--;
                }
            }
            addNewElements(newElements);
        }
コード例 #3
0
        public override void Upgrade()
        {
            List <MapElement> mapElements = new List <MapElement>();
            RCT road;

            if (axis == 'v')
            {
                road = new RCT(new CRD(this.rct.Start.x, this.rct.Start.z + this.sidewalk), this.width - sidewalk * 2, this.rct.Height);
            }
            else
            {
                road = new RCT(new CRD(this.rct.Start.x + this.sidewalk, this.rct.Start.z), this.rct.Width, this.width - sidewalk * 2);
            }
            List <RCT> rcts = RCT.Cuttind(this.rct, road);

            for (int i = 0; i < rcts.Count; i++)
            {
                if (rcts[i].Equals(road))
                {
                    mapElements.Add(new Road(rcts[i], floorNumber, this.axis));
                }
                else
                {
                    string direction;
                    if (axis == 'v')
                    {
                        if (rcts[i].Start.z < road.Start.z)
                        {
                            direction = "r";
                        }
                        else
                        {
                            direction = "l";
                        }
                    }
                    else
                    {
                        if (rcts[i].Start.x < road.Start.x)
                        {
                            direction = "b";
                        }
                        else
                        {
                            direction = "t";
                        }
                    }
                    mapElements.Add(new Sidewalk(rcts[i], floorNumber, this.axis, direction));
                }
            }
            addNewElements(mapElements);
        }
コード例 #4
0
        public override void Upgrade()
        {
            if (vsidewalk > 0 && hsidewalk > 0)
            {
                RCT               Irct           = new RCT(new CRD(this.rct.Start.x + hsidewalk, this.rct.Start.z + vsidewalk), new CRD(this.rct.End.x - hsidewalk, this.rct.End.z - vsidewalk));
                List <RCT>        rcts           = RCT.Cuttind(this.rct, Irct);
                List <MapElement> newMapElements = new List <MapElement>();
                for (int i = 0; i < rcts.Count; i++)
                {
                    switch (i)
                    {
                    case 0:
                        newMapElements.Add(new CrossroadSidewalk(rcts[i], floorNumber, rcts[i].CloneEnd()));
                        break;

                    case 1:
                        newMapElements.Add(new CrossroadRoad(rcts[i], floorNumber, 'v'));
                        break;

                    case 2:
                        newMapElements.Add(new CrossroadSidewalk(rcts[i], floorNumber, new CRD(rcts[i].End.x, rcts[i].Start.z)));
                        break;

                    case 3:
                        newMapElements.Add(new CrossroadRoad(rcts[i], floorNumber, 'h'));
                        break;

                    case 4:
                        newMapElements.Add(new Intersection(rcts[i], floorNumber));
                        break;

                    case 5:
                        newMapElements.Add(new CrossroadRoad(rcts[i], floorNumber, 'h'));
                        break;

                    case 6:
                        newMapElements.Add(new CrossroadSidewalk(rcts[i], floorNumber, new CRD(rcts[i].Start.x, rcts[i].End.z)));
                        break;

                    case 7:
                        newMapElements.Add(new CrossroadRoad(rcts[i], floorNumber, 'v'));
                        break;

                    case 8:
                        newMapElements.Add(new CrossroadSidewalk(rcts[i], floorNumber, rcts[i].CloneStart()));
                        break;

                    default:
                        break;
                    }
                }
                addNewElements(newMapElements);
                newMapElements.Clear();
            }
            else
            {
                Intersection intersection = new Intersection(this.rct, floorNumber);
                childElements.Add(intersection);
                intersection.parentElement = this;
                intersection.moveNodesFromMapElementToThis(this);
            }

            /*for (int i = 0; i < this.childElements.Count; i++)
             * {
             *  childElements[i].NodesToConsole();
             * }*/
        }