Esempio n. 1
0
    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;
        }
    }
Esempio n. 2
0
    private ZoneProperties GenerateProperties()
    {
        ZoneProperties zoneProperties = this.zoneProperties;

        zoneProperties.background = backgrounds[Random.Range(0, backgrounds.Count - 1)];

        return(zoneProperties);
    }
Esempio n. 3
0
    private ZoneProperties GenerateProperties()
    {
        ZoneProperties zoneProperties = new ZoneProperties();

        zoneProperties.background = _backgrounds[Random.Range(0, _backgrounds.Count - 1)];

        return(zoneProperties);
    }
Esempio n. 4
0
 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);
     }
 }
Esempio n. 5
0
    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);
    }
Esempio n. 6
0
 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();
            }
        }
Esempio n. 8
0
    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]);
    }
Esempio n. 9
0
 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);
     }
 }
Esempio n. 10
0
    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);
     }
 }
Esempio n. 12
0
    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);
    }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 14
0
    private void InitializeCombatStage(ZoneProperties properties, int stageCol, StageNode stage, BattleType battleType)
    {
        StageInfoContainer stageInfo = new StageInfoContainer(properties.columns[stageCol - 1], battleType);

        stage.SetStageInfoContainer(stageInfo);
    }
Esempio n. 15
0
        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);
                    }
                }
            }
        }
Esempio n. 16
0
 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);
         }
     }
 }
Esempio n. 17
0
 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);
     }
 }
Esempio n. 18
0
        /// <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);
                }
            }
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
        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);
                }
            }
        }
Esempio n. 23
0
        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);
        }
Esempio n. 24
0
        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);
        }
Esempio n. 25
0
        // ######## 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();
        }
Esempio n. 26
0
 public void SetZoneProperties(ZoneProperties zoneProperties)
 {
     _zoneProperties = zoneProperties;
 }