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(); }
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); }
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); }
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(); * }*/ }