#region license // This file is part of Vocaluxe. // // Vocaluxe is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Vocaluxe is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Vocaluxe. If not, see . #endregion using System; namespace VocaluxeLib.Songs { /// /// Base class for all note types /// public abstract class CBaseNote { private int _Duration = 1; private int _Tone; #region Contructors protected CBaseNote(CBaseNote note) { StartBeat = note.StartBeat; _Duration = note._Duration; _Tone = note._Tone; } protected CBaseNote(int startBeat, int duration, int tone) { StartBeat = startBeat; Duration = duration; Tone = tone; if (Duration < 1) { throw new Exception("Note to short. All notes should be at least 1 beat long!"); } } #endregion Constructors #region Properties public int StartBeat { get; set; } /// /// Last beat of this note. First valid beat for a note after that is at EndBeat+1 /// public int EndBeat { get { return StartBeat + _Duration - 1; } } public int Duration { get { return _Duration; } set { if (value > 0) { _Duration = value; } } } public int Tone { get { // Always return 0 for Rap notes if (IsRapNote) { return 0; } return _Tone; } set { if (value >= CBase.Settings.GetToneMin() && value <= CBase.Settings.GetToneMax()) { _Tone = value; } } } public int Points { get { return PointsForBeat * Duration; } } public abstract int PointsForBeat { get; } public bool IsRapNote { get { return IsNoteType(ENoteType.Rap, ENoteType.RapGolden); } } public bool IsGoldenNote { get { return IsNoteType(ENoteType.Golden, ENoteType.RapGolden); } } #endregion Properties #region Methods public abstract bool IsNoteType(params ENoteType[] noteTypes); #endregion Methods } }