unit uEndTask;
/////////////////////////////
// версия 0,8
/////////////////////////////
// модуль показа результатов
// по окончанию задания
/////////////////////////////

interface

procedure EndTaskInit;
procedure EndTaskDraw;
procedure EndTaskProcess;

implementation

uses uGame,uGeneralData,uGameText,uGUI,OMEGA;

var BContinue,BMenu,BExit:tCButton;
    text:tGameText;

    w1,w2,w3,wr1,wr2,wr3:integer; //это ширина окон, в которых будет отображатся текущий прогресс игрока
    bw1,bw2,bw3,bwr1,bwr2,bwr3:boolean; //это индикатор того, что анимация окон закончена

procedure EndTaskInit;
var i1,i2:integer;
begin

//сначала окна маленькие
w1:=0;
w2:=0;
w3:=0;
wr1:=0;
wr2:=0;
wr3:=0;
//текст на панелях не отображать пока
bw1:=false;
bw2:=false;
bw3:=false;
bwr1:=false;
bwr2:=false;
bwr3:=false;

Player.Process;

i1:=(ScrW-404) div 2;
i2:=ScrH div 2+64;
BContinue.Init('следующие задание','buttoncirclnormal','bgotask',i1,i2,true,font);
BMenu.Init('вернуться в меню','buttoncirclmenu','bbackmenu',i1+138,i2,true,font);
BExit.Init('выход из игры','buttoncirclnormal','bquit',i1+276,i2,true,font);

end;

procedure EndTaskDraw;
var t1,t2:integer;
    str:PChar;
begin

Pr2D_Rect(0,0,scrw,scrh,$8F7052,255,PR_FILL );
Pr2D_Rect(10,10,scrw-20,scrh-20,$6d5030,255,PR_FILL );

BExit.Draw;
BMenu.Draw;
BContinue.Draw;

str:=PChar('Результаты выполнения '+U_IntToStr(gametasks.nowtask)+' задания:');
t1:=trunc(Text_GetWidth(font,str,1,0)); //узнаём ширину текста
t2:=(ScrW-(t1+20)) div 2;
DrawGWind(t2,50,t1+20,20,200);
Text_Draw(font,t2+10,50,str,1,0,255,$003B7D);

t1:=(ScrW-256) div 2;
t2:=ScrH div 2-140;
//рисуем полоски опыта
Pr2D_Rect(t1,t2,trunc(w1-w1*(player.MaxExp-player.Experience)/player.MaxExp),20,$003B7D,trunc(255*w1/256),PR_Fill );
DrawGWind(t1,t2,w1,20,trunc(200*w1/256));
if bw1 then begin
 Text_Draw(font,t1+20,t2,PChar('опыт - '+U_IntToStr(Player.Experience)+' уровень - '+U_IntToStr(Player.ExpLvl)),1,0,255,$000045);
end;
/////////////////////
Pr2D_Rect(t1,t2+20,trunc(w2-w2*(player.MaxAcr-player.Accuracy)/player.MaxAcr),20,$003B7D,trunc(255*w2/256),PR_Fill );
DrawGWind(t1,t2+20,w2,20,trunc(200*w2/256));
if bw2 then begin
 Text_Draw(font,t1+20,t2+20,PChar('точность - '+U_IntToStr(Player.Accuracy)+' уровень - '+U_IntToStr(Player.AcrLvl)),1,0,255,$000045);
end;
/////////////////////
Pr2D_Rect(t1,t2+40,trunc(w3-w3*(player.MaxSpd-player.Speed)/player.MaxSpd),20,$003B7D,trunc(255*w3/256),PR_Fill );
DrawGWind(t1,t2+40,w3,20,trunc(200*w3/256));
if bw3 then begin
 Text_Draw(font,t1+20,t2+40,PChar('скорость - '+U_IntToStr(Player.Speed)+' уровень - '+U_IntToStr(Player.SpdLvl)),1,0,255,$000045);
end;

//и полоски результата
DrawGWind(t1,t2+80,wr1,20,trunc(200*wr1/256));
if bwr1 then begin
 Text_Draw(font,t1+20,t2+80,PChar('опыт + '+U_IntToStr(rezult)),1,0,255,$000045);
end;
/////////////////////
DrawGWind(t1,t2+100,wr2,20,trunc(200*wr2/256));
if bwr2 then begin
 Text_Draw(font,t1+20,t2+100,PChar('точность + '+U_IntToStr(eror)),1,0,255,$000045);
end;
/////////////////////
DrawGWind(t1,t2+120,wr3,20,trunc(200*wr3/256));
if bwr3 then begin
 Text_Draw(font,t1+20,t2+120,PChar('скорость + '+U_IntToStr(Speed)),1,0,255,$000045);
end;

end;

procedure EndTaskProcess;
var DF:textfile;
begin
//если ширина окна меньше 148-8 (нужная ширина минус шаг изменения ширины)
//то увиличиваем ширину на один шаг
//иначе ширину выставляем равной 148 и заканчиваем анимацию
if w1<246 then w1:=w1+10 else begin
 w1:=256;
 bw1:=true;
end;
if bw1 then
 if w2<246 then w2:=w2+10 else begin
  w2:=256;
  bw2:=true;
 end;
if bw2 then
 if w3<246 then w3:=w3+10 else begin
  w3:=256;
  bw3:=true;
 end;
if bw3 then
 if wr1<246 then wr1:=wr1+10 else begin
  wr1:=256;
  bwr1:=true;
 end;
if bwr1 then
 if wr2<246 then wr2:=wr2+10 else begin
  wr2:=256;
  bwr2:=true;
 end;
if bwr2 then
 if wr3<246 then wr3:=wr3+10 else begin
  wr3:=256;
  bwr3:=true;
 end;

BContinue.Process;
BMenu.Process;
BExit.Process;

if (col_pointinaabb(mouse_x,mouse_y,@BExit.c1)) //выход из игры
and (mouse_press(m_lbutton)) then OE_Quit;

if (col_pointinaabb(mouse_x,mouse_y,@BMenu.c1)) //возврат в меню
and (mouse_press(m_lbutton)) then GoToMenu;

if (col_pointinaabb(mouse_x,mouse_y,@BContinue.c1)) //переход к следующему заданию
and (mouse_press(m_lbutton)) then begin
//переходим к следующему заданию
 with GameTasks do begin
  nowtask:=nowtask+1;
  if nowtask=qgametask+1 then begin
   assignfile(DF,'score.txt');
   Append(DF);
   with player do begin
    writeln(DF,name);
    writeln(DF,Experience,' ',ExpLvl);
    writeln(DF,Accuracy,' ',AcrLvl);
    writeln(DF,Speed,' ',AcrLvl);
   end;
   closefile(df);
   nowtask:=1;
   gamestart:=false;
   GoToMenu;
  end else begin
   gscene:=gametasks[nowtask].gscene;
   cmplxlvl:=gametasks[nowtask].lvl;
   GameInit;
  end;
 end;
end;

end;

end.
