예제 #1
0
 private CryptFeature(Crypt crypt, CryptSection cryptSection, Point position)
 {
     Crypt        = crypt;
     CryptSection = cryptSection;
     Position     = position;
     Device       = null;
 }
예제 #2
0
        private void GenerateSpires(CryptSection section)
        {
            var centerPoint = section.SectionPositionToCryptPosition(CryptFeaturesMidPoint, CryptFeaturesMidPoint);

            //if (section.Position.X == 0 && section.Position.Y == 0)
            //{
            //    var cryptCoinSpire = new CryptFeature.CryptCoinSpire(this, section, centerPoint);
            //    _features[centerPoint.GetKey()] = cryptCoinSpire;
            //}

            var softFeatureQueue = new Queue <CryptFeature>(section.GetCryptFeatures()
                                                            .Where(f => !(f is CryptFeature.HardRock) && !(f is CryptFeature.Spire))
                                                            .Where(f =>
            {
                var cryptPosition = section.CryptPositionToSectionPosition(f.Position);
                var rowPos        = (Abs(cryptPosition.Y - CryptFeaturesMidPoint) * 100) / CryptFeaturesMidPoint;
                var colPos        = (Abs(cryptPosition.X - CryptFeaturesMidPoint) * 100) / CryptFeaturesMidPoint;
                return(rowPos < 50 && rowPos > 10 && colPos < 50 && colPos > 10);
            })
                                                            .OrderBy(_ => _random.Next(100))
                                                            .ToArray());

            var featureToReplace = softFeatureQueue.Dequeue();
            var soulSpire        = new CryptFeature.SoulSpire(this, section, featureToReplace.Position);

            _features[featureToReplace.Position.GetKey()] = soulSpire;
            _spawningSpires.Add(soulSpire);

            featureToReplace = softFeatureQueue.Dequeue();
            var hellFireSpire = new CryptFeature.HellFireSpire(this, section, featureToReplace.Position);

            _features[featureToReplace.Position.GetKey()] = hellFireSpire;
            _spawningSpires.Add(hellFireSpire);
        }
예제 #3
0
        private Action <int, int> GenerateCryptFeaturesForSection(CryptSection section) =>
        (row, col) =>
        {
            var featurePosition = section.SectionPositionToCryptPosition(row, col);

            var featureRoll = _random.Next(100);

            var chanceHardRock = (Min(Abs(row - CryptFeaturesMidPoint), Abs(col - CryptFeaturesMidPoint)) * 100) / CryptFeaturesMidPoint;
            chanceHardRock = chanceHardRock < 50 ? 0 : chanceHardRock;

            var chanceSoftRock = (Min(Abs(row - CryptFeaturesMidPoint), Abs(col - CryptFeaturesMidPoint)) * 100) / CryptFeaturesMidPoint;
            chanceSoftRock = chanceSoftRock < 25 ? 0 : chanceSoftRock;

            var feature = featureRoll < chanceHardRock
                    ? new CryptFeature.HardRock(this, section, featurePosition)
                    : featureRoll < chanceSoftRock
                    ? new CryptFeature.SoftRock(this, section, featurePosition)
                    : new CryptFeature.Floor(this, section, featurePosition) as CryptFeature;

            _features[feature.Position.GetKey()] = feature;
        };
예제 #4
0
 public CryptCoinSpire(Crypt crypt, CryptSection cryptSection, Point cryptPosition) : base(crypt, cryptSection, cryptPosition)
 {
 }
예제 #5
0
 public HellFireSpire(Crypt crypt, CryptSection cryptSection, Point cryptPosition) : base(crypt, cryptSection, cryptPosition)
 {
 }
예제 #6
0
 protected SpawningSpire(Crypt crypt, CryptSection cryptSection, Point position) : base(crypt, cryptSection, position)
 {
 }
예제 #7
0
 public HardRock(Crypt crypt, CryptSection cryptSection, Point cryptPosition) : base(crypt, cryptSection, cryptPosition)
 {
 }
예제 #8
0
 public Floor(Crypt crypt, CryptSection cryptSection, Point cryptPosition) : base(crypt, cryptSection, cryptPosition)
 {
 }
예제 #9
0
 public Void(Crypt crypt, CryptSection cryptSection, Point cryptPosition) : base(crypt, cryptSection, cryptPosition)
 {
 }