private void InitializeStage(ZoneProperties properties, int stageCol, StageNode stage, StageCategory category) { switch (category) { case StageCategory.BATTLE: BattleType battleType = (BattleType)Random.Range(0, System.Enum.GetValues(typeof(BattleType)).Length - 1); stage.SetStage(battleType); InitializeCombatStage(properties, stageCol, stage, battleType); break; case StageCategory.BOSS: stage.SetStage(BattleType.BOSS); InitializeCombatStage(properties, stageCol, stage, BattleType.BOSS); break; case StageCategory.EVENT: EventType eventType = (EventType)Random.Range(0, System.Enum.GetValues(typeof(EventType)).Length); stage.SetStage(eventType); break; default: Debug.LogWarning("No category found when initializing stage."); break; } }
private ZoneProperties GenerateProperties() { ZoneProperties zoneProperties = this.zoneProperties; zoneProperties.background = backgrounds[Random.Range(0, backgrounds.Count - 1)]; return(zoneProperties); }
private ZoneProperties GenerateProperties() { ZoneProperties zoneProperties = new ZoneProperties(); zoneProperties.background = _backgrounds[Random.Range(0, _backgrounds.Count - 1)]; return(zoneProperties); }
public void SetActiveZone(ZoneProperties zone) { this.activeZone = zone; this.platformHitbox = zone.GetHitboxManagerForZone(); if (is2D) { this.hitbox.center = new Vector3(this.hitbox.center.x, this.hitbox.center.y, zone.ZCenter + zone.ZMaxOffset); } }
private void InstantiateNextZone(Zone nextZone, Vector2 previousZonePosition) { Zone zoneInstance = Instantiate(nextZone, previousZonePosition + new Vector2(0, zonesDistance), Quaternion.identity); zoneInstance.transform.parent = zonesContainer.transform; zoneList.Add(zoneInstance); ZoneProperties zoneProperties = GenerateProperties(); zoneInstance.SetBackground(zoneProperties.background); GenerateObstacles(zoneInstance.transform, zoneProperties); }
public static void Serialize(SerializingContainer2 sc, ref ZoneProperties zone) { if (sc.IsLoading) { zone = new ZoneProperties(); } sc.Serialize(ref zone.ZoneActor); sc.Serialize(ref zone.LastRenderTime); sc.Serialize(ref zone.ConnectivityMask); sc.Serialize(ref zone.VisibilityMask); }
public void ShowProperties() { var frm = new ZoneProperties(this); if (SnapIn.Console.ShowDialog(frm) == DialogResult.OK) { UpdateZoneProperties(); } }
private StageNode InstantiateStageNode(ZoneProperties properties, StageNode[][] map, int col, int row) { map[col][row] = Instantiate(_stageNodePrefab, _mapContainer).GetComponent <StageNode>(); Vector2 position = new Vector2(horizontalPadding * col, -verticalPadding * row); // Centre the node Vector2 offset = new Vector2(horizontalPadding * properties.columns.Length / 2, -verticalPadding * (properties.mapRows - 1) / 2); position -= offset; map[col][row].GetComponent <RectTransform>().anchoredPosition = position; map[col][row].GetComponent <Button>().onClick.AddListener(delegate { _mapNavigator.TryMoveTo(new Coord(col, row)); }); return(map[col][row]); }
void Start() { this.player = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>(); this.zone = this.transform.parent.GetComponentInChildren <ZoneProperties>(); //Create a new game object as child that contains all the colliders when in 2D mode. BoxCollider[] allCols = this.GetComponentsInChildren <BoxCollider>(); hitboxes2D = new GameObject("2D Hitboxes"); hitboxes2D.transform.parent = this.transform; foreach (BoxCollider col in allCols) { BoxCollider newCol = hitboxes2D.AddComponent <BoxCollider>() as BoxCollider; newCol.center = new Vector3(col.bounds.center.x, col.bounds.center.y, zone.ZCenter + zone.ZMaxOffset); newCol.size = new Vector3(col.bounds.size.x, col.bounds.size.y, 0.2f); } }
public void GenerateObstacles(Transform zoneTransform, ZoneProperties zoneProperties) { Vector2 zoneRightDownPoint = (Vector2)zoneTransform.position - zoneSize / 2; int rowInd = previousRowHasObstacle ? filledRowRest : 0; previousRowHasObstacle = false; for (; rowInd < zoneProperties.rowCount; rowInd += previousRowHasObstacle ? zoneProperties.filledRowDistance : 1) { // Change when skip previousRowHasObstacle = !previousRowHasObstacle; if (!CommonHandler.IsRandomSaysTrue(zoneProperties.obstacleRowProbability)) { continue; } else { previousRowHasObstacle = true; } // Get random exit column index int randomEmptyColumnInd = Random.Range(0, zoneProperties.columnCount); for (int columnInd = 0; columnInd < zoneProperties.columnCount; columnInd++) { if (columnInd != randomEmptyColumnInd && CommonHandler.IsRandomSaysTrue(zoneProperties.obstacleProbability)) { Obstacle obstacle = Instantiate(zoneProperties.obstacle, zoneTransform); obstacle.transform.position = new Vector2(zoneRightDownPoint.x // Start of zone + columnInd * (zoneProperties.obstacleSize.x // Go to the obstacle position in row + zoneProperties.columnDistance * (columnInd != 0 ? 1 : 0)) // Add column distance if not start of zone + zoneProperties.obstacleSize.x / 2, // Add obstacle center zoneRightDownPoint.y + rowInd * zoneProperties.obstacleSize.y + zoneProperties.obstacleSize.y / 2); } } } if (previousRowHasObstacle && rowInd >= zoneProperties.rowCount) { filledRowRest = rowInd - zoneProperties.rowCount; } else { filledRowRest = 0; } }
private void FixedUpdate() { //Follow player character (this is in FixedUpdate to match the character position being updated in FixedUpdate, eliminating jitter) if (!playerCam.orthographic) { //In perspective mode, need to restrict camera's movement on Z axis to prevent clipping of background/foreground images. ZoneProperties activeZone = playerController.GetActiveZone(); float restrictedZ = Mathf.Clamp(player.transform.position.z, activeZone.ZCenter - activeZone.ZCameraMovementLimit, activeZone.ZCenter + activeZone.ZCameraMovementLimit); Vector3 clampedPosition = new Vector3(player.transform.position.x, player.transform.position.y, restrictedZ); followerTransform.position = Vector3.SmoothDamp(followerTransform.position, clampedPosition, ref cameraVelocity, cameraMovementTime, cameraMaxSpeed); } else { followerTransform.position = Vector3.SmoothDamp(followerTransform.position, player.transform.position, ref cameraVelocity, cameraMovementTime, cameraMaxSpeed); } }
public StageNode[][] GenerateZoneMap(ZoneProperties properties) { StageNode[][] map = new StageNode[properties.columns.Length + 1][]; // Initialize columns for (int col = 0; col < properties.columns.Length + 1; col++) { // Create column of nodes map[col] = new StageNode[properties.mapRows]; for (int row = 0; row < properties.mapRows; row++) { map[col][row] = null; } } int middleRow = properties.mapRows / 2; _mapContainer.anchoredPosition = Vector3.zero; // Create starting column StageNode firstStage = InstantiateStageNode(properties, map, 0, middleRow); // Create end column (boss) StageNode finalStage = InstantiateStageNode(properties, map, properties.columns.Length, middleRow); InitializeStage(properties, properties.columns.Length, finalStage, StageCategory.BOSS); // Set first and last stage positions as scrolling bounds _mapScroller.SetBounds(firstStage.transform.position.x, finalStage.transform.position.x); // Create nodes in between for (int col = 1; col < properties.columns.Length; col++) { for (int row = 0; row < properties.mapRows; row++) { StageNode stage = InstantiateStageNode(properties, map, col, row).GetComponent <StageNode>(); InitializeStage(properties, col, stage, properties.columns[col - 1].stageType); } } return(map); }
/// <summary> /// Generate the layout of the central room: main refectory. /// </summary> static void GenerateOutpostLayoutCentralRoom() { int mainRoom4ZoneAbs = 0; int mainRoom4ZoneOrd = 0; GetMainRoomZone(4, mainEntranceDirection, out mainRoom4ZoneAbs, out mainRoom4ZoneOrd); zoneMap[mainRoom4ZoneOrd, mainRoom4ZoneAbs] = new ZoneProperties(ZoneType.BigRoomRefectory, Rot4.Random, Rot4.Invalid); }
private void InitializeCombatStage(ZoneProperties properties, int stageCol, StageNode stage, BattleType battleType) { StageInfoContainer stageInfo = new StageInfoContainer(properties.columns[stageCol - 1], battleType); stage.SetStageInfoContainer(stageInfo); }
static void GenerateOutpostLayoutSecondaryRooms() { int mainRoomZoneAbs = 0; int mainRoomZoneOrd = 0; int adjacentZoneAbs = 0; int adjacentZoneOrd = 0; int mediumRoomZoneAbs = 0; int mediumRoomZoneOrd = 0; // Generate secondary rooms north west and east from central room. GetMainRoom4Zone(mainEntranceDirection, out mainRoomZoneAbs, out mainRoomZoneOrd); // North alley. Zone.GetAdjacentZone(mainRoomZoneAbs, mainRoomZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), out adjacentZoneAbs, out adjacentZoneOrd); // West medium room. Zone.GetAdjacentZone(adjacentZoneAbs, adjacentZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt), out mediumRoomZoneAbs, out mediumRoomZoneOrd); ZoneType zoneType = OG_Common.GetRandomZoneTypeMediumRoom(outpostData); Rot4 roomRotation = Rot4.Invalid; if (Rand.Value < 0.5f) { roomRotation = new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt); } else { roomRotation = new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt); } zoneMap[mediumRoomZoneOrd, mediumRoomZoneAbs] = new ZoneProperties(zoneType, roomRotation, Rot4.Invalid); // East medium room. Zone.GetAdjacentZone(adjacentZoneAbs, adjacentZoneOrd, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), out mediumRoomZoneAbs, out mediumRoomZoneOrd); zoneType = OG_Common.GetRandomZoneTypeMediumRoom(outpostData); if (Rand.Value < 0.5f) { roomRotation = new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt); } else { roomRotation = new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt); } zoneMap[mediumRoomZoneOrd, mediumRoomZoneAbs] = new ZoneProperties(zoneType, roomRotation, Rot4.Invalid); for (int mainRoomIndex = 0; mainRoomIndex < 4; mainRoomIndex++) { GetMainRoomZone(mainRoomIndex, mainEntranceDirection, out mainRoomZoneAbs, out mainRoomZoneOrd); for (int rotationAsInt = 0; rotationAsInt < 4; rotationAsInt++) { Zone.GetAdjacentZone(mainRoomZoneAbs, mainRoomZoneOrd, new Rot4(rotationAsInt + mainEntranceDirection.AsInt), out mediumRoomZoneAbs, out mediumRoomZoneOrd); if (zoneMap[mediumRoomZoneOrd, mediumRoomZoneAbs].zoneType == ZoneType.NotYetGenerated) { zoneType = OG_Common.GetRandomZoneTypeMediumRoom(outpostData); if (Rand.Value < 0.5f) { roomRotation = new Rot4(Rot4.North.AsInt + rotationAsInt + mainEntranceDirection.AsInt); } else { roomRotation = new Rot4(Rot4.South.AsInt + rotationAsInt + mainEntranceDirection.AsInt); } zoneMap[mediumRoomZoneOrd, mediumRoomZoneAbs] = new ZoneProperties(zoneType, roomRotation, Rot4.Invalid); } } } }
static void GenerateOutpostLayoutSamSitesAndOrbitalRelay() { if (Rand.Value < 0.5f) { zoneMap[0, 0] = new ZoneProperties(ZoneType.SamSite, Rot4.North, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.SamSite, Rot4.North, Rot4.Invalid); if (Rand.Value < 0.5f) { zoneMap[0, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.OrbitalRelay, Rot4.North, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, 0] = new ZoneProperties(ZoneType.Empty, Rot4.North, Rot4.Invalid); } else { zoneMap[0, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.Empty, Rot4.North, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, 0] = new ZoneProperties(ZoneType.OrbitalRelay, Rot4.North, Rot4.Invalid); } } else { zoneMap[verticalZonesNumber - 1, 0] = new ZoneProperties(ZoneType.SamSite, Rot4.North, Rot4.Invalid); zoneMap[0, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.SamSite, Rot4.North, Rot4.Invalid); if (Rand.Value < 0.5f) { zoneMap[0, 0] = new ZoneProperties(ZoneType.OrbitalRelay, Rot4.North, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.Empty, Rot4.North, Rot4.Invalid); } else { zoneMap[0, 0] = new ZoneProperties(ZoneType.Empty, Rot4.North, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.OrbitalRelay, Rot4.North, Rot4.Invalid); } } }
static void GenerateOutpostLayoutEntranchedZones() { if ((mainEntranceDirection == Rot4.North) || (mainEntranceDirection == Rot4.South)) { zoneMap[0, 1] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.South, Rot4.Invalid); zoneMap[0, horizontalZonesNumber - 2] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.South, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, 1] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.North, Rot4.Invalid); zoneMap[verticalZonesNumber - 1, horizontalZonesNumber - 2] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.North, Rot4.Invalid); } else { zoneMap[1, 0] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.West, Rot4.Invalid); zoneMap[verticalZonesNumber - 2, 0] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.West, Rot4.Invalid); zoneMap[1, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.East, Rot4.Invalid); zoneMap[verticalZonesNumber - 2, horizontalZonesNumber - 1] = new ZoneProperties(ZoneType.EntranchedZone, Rot4.East, Rot4.Invalid); } }
/// <summary> /// Generate the layout of the central plaza: plaza and 4 straight alleys in cardinal directions. /// </summary> static void GenerateOutpostLayoutAroundPlaza() { int mainRoom4ZoneAbs = 0; int mainRoom4ZoneOrd = 0; int straightAlleyZoneAbs = 0; int straightAlleyZoneOrd = 0; int plazaZoneAbs = 0; int plazaZoneOrd = 0; int mainEntranceZoneAbs = 0; int mainEntranceZoneOrd = 0; // Generate plaza, straight alleys in cardinal direction and main entrance in south. GetMainRoom4Zone(mainEntranceDirection, out mainRoom4ZoneAbs, out mainRoom4ZoneOrd); // North alley. Zone.GetAdjacentZone(mainRoom4ZoneAbs, mainRoom4ZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), out straightAlleyZoneAbs, out straightAlleyZoneOrd); zoneMap[straightAlleyZoneOrd, straightAlleyZoneAbs] = new ZoneProperties(ZoneType.StraightAlley, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // Plaza. Zone.GetAdjacentZone(straightAlleyZoneAbs, straightAlleyZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), out plazaZoneAbs, out plazaZoneOrd); zoneMap[plazaZoneOrd, plazaZoneAbs] = new ZoneProperties(ZoneType.Plaza, Rot4.North, Rot4.Invalid); // West alley. Zone.GetAdjacentZone(plazaZoneAbs, plazaZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt), out straightAlleyZoneAbs, out straightAlleyZoneOrd); zoneMap[straightAlleyZoneOrd, straightAlleyZoneAbs] = new ZoneProperties(ZoneType.StraightAlley, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // East alley. Zone.GetAdjacentZone(plazaZoneAbs, plazaZoneOrd, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), out straightAlleyZoneAbs, out straightAlleyZoneOrd); zoneMap[straightAlleyZoneOrd, straightAlleyZoneAbs] = new ZoneProperties(ZoneType.StraightAlley, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // South alley. Zone.GetAdjacentZone(plazaZoneAbs, plazaZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), out straightAlleyZoneAbs, out straightAlleyZoneOrd); zoneMap[straightAlleyZoneOrd, straightAlleyZoneAbs] = new ZoneProperties(ZoneType.StraightAlley, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // Main entrance. Zone.GetAdjacentZone(straightAlleyZoneAbs, straightAlleyZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), out mainEntranceZoneAbs, out mainEntranceZoneOrd); zoneMap[mainEntranceZoneOrd, mainEntranceZoneAbs] = new ZoneProperties(ZoneType.MainEntrance, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // Generate exterior zones in diagonal directions. for (int xOffset = -1; xOffset <= 1; xOffset += 2) { for (int zOffset = -1; zOffset <= 1; zOffset += 2) { ZoneType exteriorZoneType = OG_Common.GetRandomZoneTypeExteriorZone(outpostData); zoneMap[plazaZoneOrd + zOffset, plazaZoneAbs + xOffset] = new ZoneProperties(exteriorZoneType, Rot4.Random, Rot4.Invalid); } } }
static void GenerateOutpostLayoutBigSasAndSecondaryEntrances() { int mainRoomZoneAbs = 0; int mainRoomZoneOrd = 0; int bigSasZoneAbs = 0; int bigSasZoneOrd = 0; int secondaryEntranceZoneAbs = 0; int secondaryEntranceZoneOrd = 0; // Sas north from main room 0. GetMainRoomZone(0, mainEntranceDirection, out mainRoomZoneAbs, out mainRoomZoneOrd); Zone.GetAdjacentZone(mainRoomZoneAbs, mainRoomZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), out bigSasZoneAbs, out bigSasZoneOrd); zoneMap[bigSasZoneOrd, bigSasZoneAbs] = new ZoneProperties(ZoneType.BigSas, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), Rot4.West); Zone.GetAdjacentZone(bigSasZoneAbs, bigSasZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt), out secondaryEntranceZoneAbs, out secondaryEntranceZoneOrd); zoneMap[secondaryEntranceZoneOrd, secondaryEntranceZoneAbs] = new ZoneProperties(ZoneType.SecondaryEntrance, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // Sas north from main room 3. GetMainRoomZone(3, mainEntranceDirection, out mainRoomZoneAbs, out mainRoomZoneOrd); Zone.GetAdjacentZone(mainRoomZoneAbs, mainRoomZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), out bigSasZoneAbs, out bigSasZoneOrd); zoneMap[bigSasZoneOrd, bigSasZoneAbs] = new ZoneProperties(ZoneType.BigSas, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt), Rot4.East); Zone.GetAdjacentZone(bigSasZoneAbs, bigSasZoneOrd, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), out secondaryEntranceZoneAbs, out secondaryEntranceZoneOrd); zoneMap[secondaryEntranceZoneOrd, secondaryEntranceZoneAbs] = new ZoneProperties(ZoneType.SecondaryEntrance, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), Rot4.Invalid); // Sas west and east from main room 4. GetMainRoomZone(4, mainEntranceDirection, out mainRoomZoneAbs, out mainRoomZoneOrd); Zone.GetAdjacentZone(mainRoomZoneAbs, mainRoomZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt), out bigSasZoneAbs, out bigSasZoneOrd); zoneMap[bigSasZoneOrd, bigSasZoneAbs] = new ZoneProperties(ZoneType.BigSas, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), Rot4.West); Zone.GetAdjacentZone(mainRoomZoneAbs, mainRoomZoneOrd, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), out bigSasZoneAbs, out bigSasZoneOrd); zoneMap[bigSasZoneOrd, bigSasZoneAbs] = new ZoneProperties(ZoneType.BigSas, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt), Rot4.East); }
static void GenerateOutpostLayoutHydroponicRoom() { int hydroponicRoomZoneAbs = 0; int hydroponicRoomZoneOrd = 0; int mainRoomIndex = 0; GetFreeMainRoomZone(out hydroponicRoomZoneAbs, out hydroponicRoomZoneOrd, out mainRoomIndex); zoneMap[hydroponicRoomZoneOrd, hydroponicRoomZoneAbs] = new ZoneProperties(ZoneType.BigRoomHydroponics, Rot4.Random, Rot4.Invalid); }
static void GenerateOutpostLayoutBarracks() { int barracksZoneAbs = 0; int barracksZoneOrd = 0; int mainRoomIndex = 0; GetFreeMainRoomZone(out barracksZoneAbs, out barracksZoneOrd, out mainRoomIndex); zoneMap[barracksZoneOrd, barracksZoneAbs] = new ZoneProperties(ZoneType.BigRoomBarracks, Rot4.Random, Rot4.Invalid); }
static void GenerateOutpostLayoutCommandRoom() { int commandRoomZoneAbs = 0; int commandRoomZoneOrd = 0; int dropZoneZoneAbs = 0; int dropZoneZoneOrd = 0; int landingPadTopZoneAbs = 0; int landingPadTopZoneOrd = 0; int landingPadBottomZoneAbs = 0; int landingPadBottomZoneOrd = 0; int mainRoomIndex = 0; GetFreeMainRoomZone(out commandRoomZoneAbs, out commandRoomZoneOrd, out mainRoomIndex); zoneMap[commandRoomZoneOrd, commandRoomZoneAbs] = new ZoneProperties(ZoneType.BigRoomCommandRoom, Rot4.Random, Rot4.Invalid); // Set drop-zone and landing pad zones around relative south-west corner. if (Rand.Value < 0.5f) { // Drop-zone first. Zone.GetAdjacentZone(commandRoomZoneAbs, commandRoomZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out dropZoneZoneAbs, out dropZoneZoneOrd); zoneMap[dropZoneZoneOrd, dropZoneZoneAbs] = new ZoneProperties(ZoneType.DropZone, Rot4.North, Rot4.Invalid); if (Rand.Value < 0.5f) { // Landing pad top first. Zone.GetAdjacentZone(dropZoneZoneAbs, dropZoneZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadTopZoneAbs, out landingPadTopZoneOrd); zoneMap[landingPadTopZoneOrd, landingPadTopZoneAbs] = new ZoneProperties(ZoneType.LandingPadTop, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.South); Zone.GetAdjacentZone(landingPadTopZoneAbs, landingPadTopZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadBottomZoneAbs, out landingPadBottomZoneOrd); zoneMap[landingPadBottomZoneOrd, landingPadBottomZoneAbs] = new ZoneProperties(ZoneType.LandingPadBottom, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.North); } else { // Landing pad bottom first. Zone.GetAdjacentZone(dropZoneZoneAbs, dropZoneZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadBottomZoneAbs, out landingPadBottomZoneOrd); zoneMap[landingPadBottomZoneOrd, landingPadBottomZoneAbs] = new ZoneProperties(ZoneType.LandingPadBottom, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.North); Zone.GetAdjacentZone(landingPadBottomZoneAbs, landingPadBottomZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadTopZoneAbs, out landingPadTopZoneOrd); zoneMap[landingPadTopZoneOrd, landingPadTopZoneAbs] = new ZoneProperties(ZoneType.LandingPadTop, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.South); } } else { // Landing pad first. if (Rand.Value < 0.5f) { // Landing pad top first. Zone.GetAdjacentZone(commandRoomZoneAbs, commandRoomZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadTopZoneAbs, out landingPadTopZoneOrd); zoneMap[landingPadTopZoneOrd, landingPadTopZoneAbs] = new ZoneProperties(ZoneType.LandingPadTop, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.South); Zone.GetAdjacentZone(landingPadTopZoneAbs, landingPadTopZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadBottomZoneAbs, out landingPadBottomZoneOrd); zoneMap[landingPadBottomZoneOrd, landingPadBottomZoneAbs] = new ZoneProperties(ZoneType.LandingPadBottom, new Rot4(Rot4.East.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.North); Zone.GetAdjacentZone(landingPadBottomZoneAbs, landingPadBottomZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out dropZoneZoneAbs, out dropZoneZoneOrd); zoneMap[dropZoneZoneOrd, dropZoneZoneAbs] = new ZoneProperties(ZoneType.DropZone, Rot4.North, Rot4.Invalid); } else { // Landing pad bottom first. Zone.GetAdjacentZone(commandRoomZoneAbs, commandRoomZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadBottomZoneAbs, out landingPadBottomZoneOrd); zoneMap[landingPadBottomZoneOrd, landingPadBottomZoneAbs] = new ZoneProperties(ZoneType.LandingPadBottom, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.North); Zone.GetAdjacentZone(landingPadBottomZoneAbs, landingPadBottomZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out landingPadTopZoneAbs, out landingPadTopZoneOrd); zoneMap[landingPadTopZoneOrd, landingPadTopZoneAbs] = new ZoneProperties(ZoneType.LandingPadTop, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), Rot4.South); Zone.GetAdjacentZone(landingPadTopZoneAbs, landingPadTopZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out dropZoneZoneAbs, out dropZoneZoneOrd); zoneMap[dropZoneZoneOrd, dropZoneZoneAbs] = new ZoneProperties(ZoneType.DropZone, Rot4.North, Rot4.Invalid); } } }
static void GenerateOutpostLayoutPowerSupply() { int batteryRoomZoneAbs = 0; int batteryRoomZoneOrd = 0; int solarPanelZoneAbs = 0; int solarPanelZoneOrd = 0; int mainRoomIndex = 0; GetFreeMainRoomZone(out batteryRoomZoneAbs, out batteryRoomZoneOrd, out mainRoomIndex); // Set battery room zone. Rot4 batteryRoomRotation = new Rot4(Rot4.West.AsInt + mainRoomIndex); // Battery room is facing west for main room 0, north for main room 1, ... zoneMap[batteryRoomZoneOrd, batteryRoomZoneAbs] = new ZoneProperties(ZoneType.BigRoomBatteryRoom, batteryRoomRotation, Rot4.Invalid); // Set solar panel zones around relative south-west corner. Zone.GetAdjacentZone(batteryRoomZoneAbs, batteryRoomZoneOrd, new Rot4(Rot4.South.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out solarPanelZoneAbs, out solarPanelZoneOrd); zoneMap[solarPanelZoneOrd, solarPanelZoneAbs] = new ZoneProperties(ZoneType.SolarPanelZone, Rot4.North, Rot4.Invalid); Zone.GetAdjacentZone(solarPanelZoneAbs, solarPanelZoneOrd, new Rot4(Rot4.West.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out solarPanelZoneAbs, out solarPanelZoneOrd); zoneMap[solarPanelZoneOrd, solarPanelZoneAbs] = new ZoneProperties(ZoneType.SolarPanelZone, Rot4.North, Rot4.Invalid); Zone.GetAdjacentZone(solarPanelZoneAbs, solarPanelZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt + mainRoomIndex), out solarPanelZoneAbs, out solarPanelZoneOrd); zoneMap[solarPanelZoneOrd, solarPanelZoneAbs] = new ZoneProperties(ZoneType.SolarPanelZone, Rot4.North, Rot4.Invalid); }
static void GenerateOutpostLayoutNorthMainEntrance() { int mainRoom4ZoneAbs = 0; int mainRoom4ZoneOrd = 0; int straightAlleyZoneAbs = 0; int straightAlleyZoneOrd = 0; int northMainEntranceZoneAbs = 0; int northMainEntranceZoneOrd = 0; GetMainRoomZone(4, mainEntranceDirection, out mainRoom4ZoneAbs, out mainRoom4ZoneOrd); Zone.GetAdjacentZone(mainRoom4ZoneAbs, mainRoom4ZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), out straightAlleyZoneAbs, out straightAlleyZoneOrd); zoneMap[straightAlleyZoneOrd, straightAlleyZoneAbs] = new ZoneProperties(ZoneType.StraightAlley, mainEntranceDirection, Rot4.Invalid); Zone.GetAdjacentZone(straightAlleyZoneAbs, straightAlleyZoneOrd, new Rot4(Rot4.North.AsInt + mainEntranceDirection.AsInt), out northMainEntranceZoneAbs, out northMainEntranceZoneOrd); zoneMap[northMainEntranceZoneOrd, northMainEntranceZoneAbs] = new ZoneProperties(ZoneType.MainEntrance, mainEntranceDirection, Rot4.Invalid); }
// ######## Layout generation functions ######## // static void GenerateOutpostLayout() { // Reset zoneMap. for (int zoneOrd = 0; zoneOrd < verticalZonesNumber; zoneOrd++) { for (int zoneAbs = 0; zoneAbs < horizontalZonesNumber; zoneAbs++) { zoneMap[zoneOrd, zoneAbs] = new ZoneProperties(ZoneType.NotYetGenerated, Rot4.North, Rot4.North); } } GenerateOutpostLayoutCentralRoom(); GenerateOutpostLayoutNorthMainEntrance(); GenerateOutpostLayoutPowerSupply(); GenerateOutpostLayoutCommandRoom(); GenerateOutpostLayoutBarracks(); GenerateOutpostLayoutHydroponicRoom(); GenerateOutpostLayoutBigSasAndSecondaryEntrances(); GenerateOutpostLayoutAroundPlaza(); GenerateOutpostLayoutEntranchedZones(); GenerateOutpostLayoutSamSitesAndOrbitalRelay(); GenerateOutpostLayoutSecondaryRooms(); EnsureAtLeastOneMedibayInOutpost(); }
public void SetZoneProperties(ZoneProperties zoneProperties) { _zoneProperties = zoneProperties; }