require( "scripts/game/deftasks.lua" );
require( "scripts/game/deftime.lua" );
GameObject = {
-- основные параметры
    Params = {
        ID="lemonad_sister";  --   не изменять(парамер, определяющий анимационый конфиг, соответствующий персонажу)

        Seconds = 20;         -- Через сколько секунд появляется лимонадная девочка
        StartShow = 15;        -- Через сколько секунд обьект появляется первый раз
        drinking = 1;         -- Сколько стаканов лимонада сестра может дать при появлении              
        width=1;              -- Ширина обьекта
        height=1;             -- Высота обьекта
-- Дальше описаны параметры и скрипты логики игры, менять их настоятельно не рекомендуется
        curdrinking = 0;
        RandomTasks = 0;
        invisibleTime = 0;
    };
    
-- точки подхода к обьекту персонажа    
    ActivePoints = { 
        drinking = { 
                        { {}, 1,1,0,  0,  2,1,0 };
                   }; 
                   };
--задачи, которые может выполнять обьекта                   
    Tasks = {
        -- задача "напоить персонажа". коофиценты действия лимонада на персонаж определяются в скриптах персонажей
        drinking = { FuncName="DrinkingTaskExecute",     sleeping={0}, not_need_action=1  };
    };                 
--триггеры обьекта                   
    Triggers = {
        -- триер появления сестры
        Drinking = {FuncName="DrinkTriger", NotRunWhen={"drinking"}}
    };
    
    InitExpectedTasks = {}; 
};

-- получить обьект
function GameObject:Get()
    return self;
end


-- вся инициализация должа проходить только в этой функции
function OnInit()
local aObj_lim_sis = GameObject:Get();
aObj_lim_sis.Params.invisibleTime = aObj_lim_sis.Params.Seconds - aObj_lim_sis.Params.StartShow; 
end


-- триггер появления сестры
function DrinkTriger()
    aObject = GameObject:Get();

    if( aObject.Params.invisibleTime ~= -1 )then
        aObject.Params.invisibleTime = aObject.Params.invisibleTime + 1;
        if(aObject.Params.invisibleTime >= aObject.Params.Seconds )then
            CPP_SetAnimState("apear");      
            aObject.Params.curdrinking = aObject.Params.drinking;
            CPP_AddExpectedTasks("drinking");           
            CPP_AddExpectedTasks("drinking");
            aObject.Params.invisibleTime=-1;            
        end;
    end;    
end 

-- задача "напоить персонажа". коофиценты действия лимонада на персонаж определяются в скриптах персонажей
function DrinkingTaskExecute()
    aObject = GameObject:Get(); 
    aObject.Params.curdrinking =  aObject.Params.curdrinking - 1;
    
    if( aObject.Params.curdrinking == 1)then
        CPP_SetAnimState("one_glass");  
    else
        if(aObject.Params.curdrinking < 1)then
            CPP_SetAnimState("no_glass");       
            aObject.Params.invisibleTime=0;                     
        end;
    end;
   
    return 0;
end
