unit UScreenTop;
interface
uses
UMenu, SDL, SysUtils, UDisplay, UMusic, USongs, UThemes, ModiSDK;
type
THandler = record
changed: boolean;
change_time: real;
end;
TScreenTop = class(TMenu)
public
MP3VolumeHandler: THandler;
TextLevel: integer;
TextArtistTitle: integer;
DifficultyShow: integer; //TODO
TeamInfo : TTeamInfo; //for M2-MOD
StaticNumber: array[1..8] of integer;
TextNumber: array[1..8] of integer;
TextName: array[1..8] of integer;
TextScore: array[1..8] of integer;
TextDate: array[1..8] of integer;
Fadeout: boolean;
constructor Create; override;
function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
procedure onShow; override;
function Draw: boolean; override;
//procedure DrawScores(difficulty: integer); TODO
end;
const
ID='ID_029'; //for help system
implementation
uses UGraphic, UDataBase, UDraw, UMain, UIni, UPartyM2, UTime, DateUtils, UHelp, ULog;
function TScreenTop.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
begin
Result := true;
If (PressedDown) Then begin
case PressedKey of
//MP3-Volume Up
SDLK_PAGEUP:
begin
if (ScreenSong.MP3Volume<100) then
begin
ScreenSong.MP3Volume := ScreenSong.MP3Volume+5;
Music.SetMusicVolume(ScreenSong.MP3Volume);
end;
MP3VolumeHandler.changed := true;
MP3VolumeHandler.change_time := 0;
end;
//MP3-Volume Down
SDLK_PAGEDOWN:
begin
if (ScreenSong.MP3Volume>0) then
begin
ScreenSong.MP3Volume := ScreenSong.MP3Volume-5;
Music.SetMusicVolume(ScreenSong.MP3Volume);
end;
MP3VolumeHandler.changed := true;
MP3VolumeHandler.change_time := 0;
end;
SDLK_TAB:
begin
ScreenPopupHelp.ShowPopup();
end;
SDLK_Q:
begin
Result := false;
end;
SDLK_ESCAPE,
SDLK_BACKSPACE,
SDLK_RETURN:
begin
if (Ini.SavePlayback=1) then
Music.VoicesClose;
if (not Fadeout) then begin
if(ScreenSong.Mode = smNormal) or (ScreenSong.Mode = smMedley) then
FadeTo(@ScreenSong)
else
begin
ScreenSong.SongIndex := -1;
Music.FadeStop(Ini.PreviewFading);
FadeTo(@ScreenPartyNewRoundM2);
end;
Fadeout := true;
end;
end;
SDLK_SYSREQ:
begin
Display.PrintScreen;
end;
end;
end;
end;
constructor TScreenTop.Create;
var
I: integer;
begin
inherited Create;
LoadFromTheme(Theme.Top);
TextLevel := AddText(Theme.Top.TextLevel);
TextArtistTitle := AddText(Theme.Top.TextArtistTitle);
for I := 0 to 7 do
StaticNumber[I+1] := AddStatic(Theme.Top.StaticNumber[I]);
for I := 0 to 7 do
TextNumber[I+1] := AddText(Theme.Top.TextNumber[I]);
for I := 0 to 7 do
TextName[I+1] := AddText(Theme.Top.TextName[I]);
for I := 0 to 7 do
TextScore[I+1] := AddText(Theme.Top.TextScore[I]);
for I := 0 to 7 do
TextDate[I+1] := AddText(Theme.Top.TextDate[I]);
end;
procedure TScreenTop.onShow;
var
I: integer;
PMax: integer;
sung: boolean;
TimeStamp: integer;
begin
if not Help.SetHelpID(ID) then
Log.LogError('No Entry for Help-ID ' + ID + ' (ScreenTop)');
Fadeout := false;
sung:=false;
TimeStamp := DateTimeToUnix(Now());
PMax := PlayersPlay - 1;
for I := 0 to PMax do
begin
if(ScreenSong.Mode=smChallenge) then
TeamInfo.TeamInfo[I].Score:=Player[I].ScoreTotalI;
if (Player[I].ScoreTotalI>100) and ScreenSong.SungToEnd and (ScreenSong.Mode<>smMedley) and
(not ScreenSong.PartyMedley) then
begin
DataBase.AddScore(AktSong, Ini.Difficulty, Ini.Name[I], Player[I].ScoreTotalI, TimeStamp);
sung := true;
end;
end;
if ScreenSong.Mode=smChallenge then
begin
PartySessionM2.Teams:=TeamInfo;
PartySessionM2.EndRound;
end;
if sung then
DataBase.WriteScore(AktSong);
DataBase.ReadScore(AktSong, 8, Ini.SumPlayers);
Text[TextArtistTitle].Text := AktSong.Artist + ' - ' + AktSong.Title;
for I := 1 to Length(AktSong.Score[Ini.Difficulty]) do begin
Static[StaticNumber[I]].Visible := true;
Text[TextNumber[I]].Visible := true;
Text[TextName[I]].Visible := true;
Text[TextScore[I]].Visible := true;
Text[TextDate[I]].Visible := true;
Text[TextName[I]].Text := AktSong.Score[Ini.Difficulty, I-1].Name;
Text[TextScore[I]].Text := IntToStr(AktSong.Score[Ini.Difficulty, I-1].Score);
Text[TextDate[I]].Text := AktSong.Score[Ini.Difficulty, I-1].Date;
end;
for I := Length(AktSong.Score[Ini.Difficulty])+1 to 8 do begin
Static[StaticNumber[I]].Visible := false;
Text[TextNumber[I]].Visible := false;
Text[TextName[I]].Visible := false;
Text[TextScore[I]].Visible := false;
Text[TextDate[I]].Visible := false;
end;
Text[TextLevel].Text := IDifficulty[Ini.Difficulty];
MP3VolumeHandler.changed := false;
end;
function TScreenTop.Draw: boolean;
//var
{ Min: real;
Max: real;
Wsp: real;
Wsp2: real;
Pet: integer;}
{ Item: integer;
P: integer;
C: integer;}
begin
// Singstar - let it be...... with 6 statics
{ if PlayersPlay = 6 then begin
for Item := 4 to 6 do begin
if ScreenAct = 1 then P := Item-4;
if ScreenAct = 2 then P := Item-1;
FillPlayer(Item, P);
{ if ScreenAct = 1 then begin
LoadColor(
Static[StaticBoxLightest[Item]].Texture.ColR,
Static[StaticBoxLightest[Item]].Texture.ColG,
Static[StaticBoxLightest[Item]].Texture.ColB,
'P1Dark');
end;
if ScreenAct = 2 then begin
LoadColor(
Static[StaticBoxLightest[Item]].Texture.ColR,
Static[StaticBoxLightest[Item]].Texture.ColG,
Static[StaticBoxLightest[Item]].Texture.ColB,
'P4Dark');
end;}
{ end;
end;}
inherited Draw;
if MP3VolumeHandler.changed and (MP3VolumeHandler.change_time+TimeSkip<3) then
begin
MP3VolumeHandler.change_time := MP3VolumeHandler.change_time + TimeSkip;
DrawVolumeBar(10, 530, 780, 12, ScreenSong.MP3Volume);
end else
MP3VolumeHandler.changed := false;
end;
end.