#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
}
}