internal SliderMania(HitObjectManager hom, Vector2 startPosition, int startTime, HitObjectSoundType soundType, int repeatCount, double sliderLength, List <Vector2> sliderPoints, List <HitObjectSoundType> soundTypes, ManiaConvertType cvtType, bool[] lastRow) : base( hom, startPosition, startTime, false, soundType, CurveTypes.Bezier, repeatCount, sliderLength, sliderPoints, soundTypes, 0) { hitFactoryMania = hitObjectManager.hitFactory as HitFactoryMania; HitObjects = new List <HitCircleMania>(); EndTime = VirtualEndTime; //that's enough. convertType = cvtType; deltaTime = Length / repeatCount; int col = hitObjectManager.ManiaStage.ColumnAt(startPosition); this.lastRow = lastRow; // useBomb = false; for (int i = 0; i < lastRow.Length; i++) { if (lastRow[i]) { lastCount++; } } }
private int getColumnNext(int start) { HitFactoryMania hitFactoryMania = hitObjectManager.hitFactory as HitFactoryMania; int next = hitFactoryMania.random.Next(start, hitObjectManager.ManiaStage.Columns.Count); if ((convertType & ManiaConvertType.ForceNotStack) > 0) { while (lastRow[next]) { next = hitFactoryMania.random.Next(start, hitObjectManager.ManiaStage.Columns.Count); } } return(next); }
internal void GenerateHitObjects() { hitFactoryMania = hitObjectManager.hitFactory as HitFactoryMania; //sample specific,arranged by priority //don't generate mirror style for 7+1K if ((convertType & ManiaConvertType.KeepSingle) == 0) { if (SoundType.IsType(HitObjectSoundType.Finish) && hitObjectManager.ManiaStage.Columns.Count != 8) { convertType |= ManiaConvertType.Mirror; } else if (SoundType.IsType(HitObjectSoundType.Clap)) { convertType |= ManiaConvertType.Gathered; } } //some special convertypes ignore other conversion indication. if ((convertType & ManiaConvertType.NotChange) > 0 || hitObjectManager.ManiaStage.Columns.Count == 1) { Add(hitObjectManager.ManiaStage.ColumnAt(Position)); PostProcessing(); return; } if ((convertType & ManiaConvertType.Reverse) > 0 && lastCount > 0) { for (int i = hitObjectManager.ManiaStage.RandomStart; i < lastRow.Length; i++) { if (lastRow[i]) { Add(hitObjectManager.ManiaStage.Columns.Count - i - 1 + hitObjectManager.ManiaStage.RandomStart); } } PostProcessing(); return; } if ((convertType & ManiaConvertType.Cycle) > 0 && lastCount == 1) { //make sure last note not in centre column. if (!(hitObjectManager.ManiaStage.Columns.Count == 8 && lastColumn == 0) && (hitObjectManager.ManiaStage.Columns.Count % 2 == 0 || lastColumn != hitObjectManager.ManiaStage.Columns.Count / 2)) { lastColumn = hitObjectManager.ManiaStage.Columns.Count - lastColumn - 1 + hitObjectManager.ManiaStage.RandomStart; Add(lastColumn); PostProcessing(); return; } } if ((convertType & ManiaConvertType.ForceStack) > 0 && lastCount > 0) { //keep the same column with last row for (int i = hitObjectManager.ManiaStage.RandomStart; i < lastRow.Length; i++) { if (lastRow[i]) { Add(i); } } PostProcessing(); return; } if ((convertType & (ManiaConvertType.Stair | ManiaConvertType.ReverseStair)) > 0 && lastCount == 1) { if ((convertType & ManiaConvertType.Stair) > 0) { lastColumn++; if (lastColumn == hitObjectManager.ManiaStage.Columns.Count) { lastColumn = hitObjectManager.ManiaStage.RandomStart; } } else { lastColumn--; if (lastColumn == hitObjectManager.ManiaStage.RandomStart - 1) { lastColumn = hitObjectManager.ManiaStage.Columns.Count - 1; } } Add(lastColumn); PostProcessing(); return; } if ((convertType & ManiaConvertType.KeepSingle) > 0) { AddRandomNote(1); PostProcessing(); return; } if ((convertType & ManiaConvertType.Mirror) > 0) { if (hitObjectManager.Beatmap.DifficultyBemaniStars > 6.5) { NoteCalculationMirror(0.88f, 0.88f, 0.62f); } else if (hitObjectManager.Beatmap.DifficultyBemaniStars > 4.0) { NoteCalculationMirror(0.88f, 1f, 0.83f); } else { NoteCalculationMirror(0.88f, 1f, 1f); } } else { if (hitObjectManager.Beatmap.DifficultyBemaniStars > 6.5) { if ((convertType & ManiaConvertType.LowProbability) > ManiaConvertType.None) { NoteCalculationNormal(1f, 1f, 0.58f, 0.22f); } else { NoteCalculationNormal(1f, 1f, 0.38f, 0); } } else if (hitObjectManager.Beatmap.DifficultyBemaniStars > 4.0) { if ((convertType & ManiaConvertType.LowProbability) > ManiaConvertType.None) { NoteCalculationNormal(1f, 1f, 0.92f, 0.65f); } else { NoteCalculationNormal(1f, 1f, 0.85f, 0.48f); } } else if (hitObjectManager.Beatmap.DifficultyBemaniStars > 2.0) { if ((convertType & ManiaConvertType.LowProbability) > ManiaConvertType.None) { NoteCalculationNormal(1f, 1f, 1f, 0.82f); } else { NoteCalculationNormal(1f, 1f, 1f, 0.55f); } } else { NoteCalculationNormal(1f, 1f, 1f, 1f); } } if (hitObjectManager.ManiaStage.RandomStart > 0 && SoundType.IsType(HitObjectSoundType.Finish | HitObjectSoundType.Clap)) { Add(0); } PostProcessing(); }