示例#1
0
        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++;
                }
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }