Exemple #1
0
        public static bool[,] createPeriodicalMap(RCT rct, char axis, int offset, int step)
        {
            bool[,] map = createLayerMap(rct);
            int row, element, nextElement = step;

            for (int x = 0; x < map.GetLength(0); x++)
            {
                for (int z = 0; z < map.GetLength(1); z++)
                {
                    if (axis == 'v')
                    {
                        row     = z;
                        element = x;
                    }
                    else
                    {
                        row     = x;
                        element = z;
                    }
                    if (row == offset && element == nextElement)
                    {
                        nextElement += step;
                        map[x, z]    = true;
                    }
                    else
                    {
                        map[x, z] = false;
                    }
                }
            }
            return(map);
        }
Exemple #2
0
        public List <MapElement> CreateOpenablePortal(RCT rct, string innername, string outername, string outsidename)
        {
            Portal     exit       = new Portal(rct, floorNumber, innername, outername, true);
            RCT        doorRCT    = CreatePortal(exit);
            MapElement mapElement = Stage.GetNode(doorRCT.Start, GetFloorNumber()).mapElement;
            Portal     entrence;

            if (mapElement.GetType() == typeof(Building))
            {
                entrence = new Portal(doorRCT, floorNumber, innername, outsidename, false);
                Building building = mapElement as Building;
                building.CreatePortal(entrence);
            }
            else
            {
                entrence = new Portal(doorRCT, floorNumber, outername, outsidename, false);
                Room room = mapElement as Room;
                room.CreatePortal(entrence);
            }
            Portal.Bind(exit, entrence);
            return(new List <MapElement>()
            {
                exit, entrence
            });
        }
Exemple #3
0
        public Room CreateRoom(RCT rct)
        {
            Room room = new Room(rct, floorNumber);

            addNewElement(room);
            return(room);
        }
Exemple #4
0
 protected bool defaultIsWalkable;//доступен ли для передвижения по умолчанию
 public Floor(int number, Stage stage)
 {
     this.number = number;
     this.stage  = stage;
     this.rct    = stage.rct.Clone();
     map         = new Node[stage.height, stage.width];
 }
Exemple #5
0
        private RCT createRCT(CRD start, string furnitureDirection, int width, int height)
        {
            this.furnitureDirection = furnitureDirection;
            RCT rct;

            switch (furnitureDirection)
            {
            case "l":
                rct         = new RCT(start, width, height);
                this.origin = rct.Start.Clone();
                break;

            case "r":
                rct         = new RCT(start, width, height);
                this.origin = rct.End.Clone();
                break;

            case "t":
                rct    = new RCT(start, height, width);
                origin = new CRD(rct.Start.x, rct.End.z);
                break;

            case "b":
                rct         = new RCT(start, height, width);
                this.origin = new CRD(rct.End.x, rct.Start.z);
                break;

            default:
                rct         = new RCT(start, width, height);
                this.origin = rct.Start.Clone();
                break;
            }
            return(rct);
        }
Exemple #6
0
        public override List <NodeLayer> HookAddLayersToNode(List <NodeLayer> layers, Node node)
        {
            NodeLayer door = new NodeLayer(getPrefabNuber(), "Premetives/Portal", name);

            if (isExit)
            {
                door.direction = parentElement.rct.GetDirection(node.crd);
            }
            else
            {
                RCT dirRCT = Brother.parentElement.rct.Clone();
                dirRCT.Grow();
                door.direction = dirRCT.GetDirection(node.crd);
                door.InvertDirection();
            }
            door.hasMesh = false;
            NodeLayer wall = node.Layers.Find(x => x.direction == door.direction && (x.name == "InnerWall" || x.name == "OuterWall"));

            node.Layers.Remove(wall);
            if (IsOpened() && isExit)
            {
                node.UnlinkNode(Brother.childNodes[0]);
                Brother.childNodes[0].UnlinkNode(node);
                node.LinkNode(Brother.childNodes[0], 1 + monoPortal.ExtraWeight);
                Brother.childNodes[0].LinkNode(node, 1 + monoPortal.ExtraWeight);
            }
            return(new List <NodeLayer>()
            {
                door
            });
        }
Exemple #7
0
        public static RCT Addition(RCT rct1, RCT rct2)
        {
            int sx1 = rct1.Start.x, sx2 = rct2.start.x, ex1 = rct1.end.x, ex2 = rct2.end.x, sz1 = rct1.start.z, sz2 = rct2.start.z, ez1 = rct1.end.z, ez2 = rct2.end.z;
            int MINsx = Mathf.Min(sx1, sx2), MINsz = Mathf.Min(sz1, sz2), MAXex = Mathf.Max(ex1, ex2), MAXez = Mathf.Max(ez1, ez2);

            return(new RCT(new CRD(MINsx, MINsz), new CRD(MAXex, MAXez)));
        }
Exemple #8
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();
 }
Exemple #9
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);
        }
Exemple #10
0
        public static CRD GetRandomCRD(RCT rct)
        {
            int dHeigth = Mathf.RoundToInt(Random.Range(0, (rct.Height - 1) * 100) / 100);
            int dWidth  = Mathf.RoundToInt(Random.Range(0, (rct.Width - 1) * 100) / 100);
            CRD crd     = new CRD(rct.Start.x + dHeigth, rct.Start.z + dWidth);

            return(crd);
        }
Exemple #11
0
        public Building CreateBuilding(RCT rct)
        {
            Building building = new Building(rct, floorNumber);

            addNewElement(building);
            building.Init();
            return(building);
        }
Exemple #12
0
 public MapElement(RCT rct, int floor)
 {
     childElements = new List <MapElement>();
     childNodes    = new List <Node>();
     floorNumber   = floor;
     this.rct      = rct;
     id            = iterator;
     iterator++;
 }
Exemple #13
0
        public Room CreateSubRoom(RCT rct)
        {
            Room room = new Room(rct, floorNumber);

            room.parentElement = parentElement;
            room.HookAddToChildElements();
            room.moveNodesFromMapElementToThis(this);
            parentElement.childElements.Add(room);
            return(room);
        }
Exemple #14
0
 public void GrowFor(RCT rct)
 {
     if (parentElement.rct.isContainRCT(rct))
     {
         Area parentArea = parentElement as Area;
         parentArea.RemoveElement(this);
         this.rct = RCT.Addition(this.rct, rct);
         parentArea.addNewElement(this);
     }
 }
Exemple #15
0
 public bool Equals(RCT rct) // проверяет равны ли прямоугольники
 {
     if (this.Start == rct.Start && this.End == rct.End)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemple #16
0
 public bool checkCollision(RCT rct)// проверяет пересекается ли данный прямоугольник с указанным прямоугольником
 {
     if (rct.End.z < this.Start.z || rct.Start.z > this.End.z || rct.Start.x > this.End.x || rct.End.x < this.Start.x)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Exemple #17
0
 public bool isContainRCT(RCT rct)//// проверяет находится ли прямоугольник внутри прямоугольника
 {
     if (this.isContainCRD(rct.start) && this.isContainCRD(rct.end))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemple #18
0
        public MapElement AppendRoom(RCT rct)
        {
            RCT growRCT = new RCT(rct.Start.Clone().ReturnStepLT(), rct.End.Clone().ReturnStepRB());

            if (parentElement.rct.isContainRCT(growRCT))
            {
                GrowFor(growRCT);
                Room room = CreateRoom(rct);
                return(room);
            }
            return(this);
        }
Exemple #19
0
        public override void Upgrade()
        {
            RCT roadRCT = this.rct.Clone();

            List <MapElement> newElements = new List <MapElement>();

            if (axis == 'v')
            {
                int lines            = roadRCT.Width / 2;
                int firststripeWidth = lines / 2;

                RCT        rct         = new RCT(roadRCT.Start, firststripeWidth * 2, this.rct.Height);
                RoadStripe firsrStripe = new RoadStripe(rct, floorNumber, axis);
                newElements.Add(firsrStripe);
                lines        -= firststripeWidth;
                roadRCT.Start = new CRD(roadRCT.Start.x, roadRCT.Start.z += firststripeWidth * 2);

                rct = new RCT(new CRD(roadRCT.Start.x, roadRCT.End.z - (lines * 2 - 1)), this.rct.End);
                RoadStripe secontStripe = new RoadStripe(rct, floorNumber, axis);
                newElements.Add(secontStripe);
                roadRCT.End = new CRD(roadRCT.End.x, roadRCT.End.z -= lines * 2);

                if (roadRCT.sq > 0)
                {
                    RoadSafetyZone safetyZone = new RoadSafetyZone(roadRCT, floorNumber, axis);
                    newElements.Add(safetyZone);
                }
            }
            else
            {
                int lines            = roadRCT.Height / 2;
                int firststripeWidth = lines / 2;

                RCT        rct         = new RCT(roadRCT.Start, this.rct.Width, firststripeWidth * 2);
                RoadStripe firsrStripe = new RoadStripe(rct, floorNumber, axis);
                newElements.Add(firsrStripe);
                lines        -= firststripeWidth;
                roadRCT.Start = new CRD(roadRCT.Start.x += firststripeWidth * 2, roadRCT.Start.z);

                rct = new RCT(new CRD(roadRCT.End.x - (lines * 2 - 1), roadRCT.Start.z), this.rct.End);
                RoadStripe secontStripe = new RoadStripe(rct, floorNumber, axis);
                newElements.Add(secontStripe);
                roadRCT.End = new CRD(roadRCT.End.x -= lines * 2, roadRCT.End.z);

                if (roadRCT.sq > 0)
                {
                    RoadSafetyZone safetyZone = new RoadSafetyZone(roadRCT, floorNumber, axis);
                    newElements.Add(safetyZone);
                }
            }
            this.addNewElements(newElements);
            newElements.Clear();
        }
Exemple #20
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);
        }
Exemple #21
0
        public UndergrounRoom AddUndergroundRoom(RCT rct)
        {
            UndergrounRoom room = new UndergrounRoom(rct);
            MapElement     dirt = childElements.Find(x => x.floorNumber == 0 && x.GetType() == typeof(UndergroundDirt));

            if (dirt != null)
            {
                dirt.addNewElement(room);
                return(room);
            }
            else
            {
                return(null);
            }
        }
Exemple #22
0
        public List <Node> GetSiblingsNoDiagonals()// Получение соседних узлов
        {
            List <Node> siblings = new List <Node>();
            RCT         rct      = Stage.GetStage().rct;

            for (int x = -1; x <= 1; x++)
            {
                for (int z = -1; z <= 1; z++)
                {
                    if ((z == 0 && x == 0) || !rct.isContainCRD(new CRD(crd.x + x, crd.z + z)) || (z != 0 && x != 0))
                    {
                        continue;
                    }
                    siblings.Add(Stage.GetNode(crd.x + x, crd.z + z, floor.number));
                }
            }
            return(siblings);
        }
Exemple #23
0
 public Street(RCT rct, int floor, char axis, int sidewalk) : base(rct, floor)
 {
     //Debug.Log("RCT " + rct.Start.x + "," + rct.Start.z + ":" + rct.End.x + "," + rct.End.z + " h: " + rct.Height + " w: " + rct.Width);
     this.sidewalk = sidewalk;
     this.axis     = axis;
     if (axis == 'v')
     {
         this.width = rct.Width;
         this.start = rct.Start.z;
     }
     else
     {
         this.width = rct.Height;
         this.start = rct.Start.x;
     }
     //Debug.Log("NEW STREET RCT: h: " + rct.Height + " w: " + rct.Width);
     //Debug.Log("Street RCT " + this.rct.Start.x + "," + this.rct.Start.z + ":" + this.rct.End.x + "," + this.rct.End.z+" h: "+this.rct.Height+" w: "+this.rct.Width);
 }
Exemple #24
0
 public static bool[,] createRandomMap(RCT rct, int treshold)
 {
     bool[,] map = createLayerMap(rct);
     for (int x = 0; x < map.GetLength(0); x++)
     {
         for (int z = 0; z < map.GetLength(1); z++)
         {
             if (Random.Range(0, 100) < treshold)
             {
                 map[x, z] = true;
             }
             else
             {
                 map[x, z] = false;
             }
         }
     }
     return(map);
 }
Exemple #25
0
        public static List <RCT> Cuttind(RCT rct1, RCT rct2) // получает два прямоугольника и получает несколько новых являющихся частями порезанных старых
        {
            rct1.End.StepRB();
            rct2.End.StepRB();
            List <int> xlines  = new List <int>();
            List <int> zlines  = new List <int>();
            List <RCT> newRCTs = new List <RCT>();

            xlines.Add(rct1.Start.x);
            xlines.Add(rct1.End.x);
            xlines.Add(rct2.Start.x);
            xlines.Add(rct2.End.x);

            zlines.Add(rct1.Start.z);
            zlines.Add(rct1.End.z);
            zlines.Add(rct2.Start.z);
            zlines.Add(rct2.End.z);

            xlines.Sort();
            zlines.Sort();

            rct1.End.StepLT();
            rct2.End.StepLT();
            CRD star, end;

            for (int x = 0; x < xlines.Count - 1; x++)
            {
                for (int z = 0; z < zlines.Count - 1; z++)
                {
                    star = new CRD(xlines[x], zlines[z]);
                    end  = new CRD(xlines[x + 1], zlines[z + 1]);
                    end.StepLT();
                    RCT rct = new RCT(star, end);
                    if (rct1.checkCollision(rct) || rct2.checkCollision(rct))
                    {
                        newRCTs.Add(rct);
                    }
                }
            }
            return(newRCTs);
        }
Exemple #26
0
        public void AddStreet(int start, int floor, char axis, int width, int sidewalk) //добавляет улицу
        {
            RCT rct;

            if (width < 2)
            {
                width = 2;
            }
            if (width == 3)
            {
                width++;
            }
            if (axis == 'v')
            {
                rct = new RCT(new CRD(0, start), width + sidewalk * 2, stage.height);
            }
            else
            {
                rct = new RCT(new CRD(start, 0), stage.width, width + sidewalk * 2);
            }
            stage.CreateStreet(rct, floor, axis, sidewalk);
        }
Exemple #27
0
        public override void Upgrade()
        {
            List <MapElement> mapElements = new List <MapElement>();

            if (axis == 'v')
            {
                int linecount = this.rct.Width / 2;
                for (int i = this.rct.Start.z; i <= this.rct.Start.z + linecount * 2; i += 2)
                {
                    RCT rct = new RCT(new CRD(this.rct.Start.x, i), 2, this.rct.Height);
                    mapElements.Add(new RoadLine(rct, floorNumber, axis));
                }
            }
            else
            {
                int linecount = this.rct.Height / 2;
                for (int i = this.rct.Start.x; i <= this.rct.Start.x + linecount * 2; i += 2)
                {
                    RCT rct = new RCT(new CRD(i, this.rct.Start.z), this.rct.Width, 2);
                    mapElements.Add(new RoadLine(rct, floorNumber, axis));
                }
            }
            this.addNewElements(mapElements);
        }
Exemple #28
0
 public SidewalkParking(RCT rct, int floor, char axis, int placeSize) : base(rct, floor)
 {
     this.placeSize = placeSize;
     this.axis      = axis;
 }
Exemple #29
0
 public Area(RCT rct, int floor) : base(rct, floor)
 {
 }
Exemple #30
0
 public CrossroadSidewalk(RCT rct, int floor, CRD corner) : base(rct, floor)
 {
     this.corner = corner;
 }