@name hoyo's android pattern lock
@inputs EGP:wirelink E:entity Reset
@outputs Out
@outputs Player:entity V:vector2 Pattern_Now:string VS:array TI LI
@persist Pattern:string Players:array Player:entity V:vector2
@persist Pattern_Now:string Use VS:array TI LI CanReverse
@trigger 
interval(50)
if(first() | duped() | dupefinished())
{
    # 7 8 9
    # 4 5 6
    # 1 2 3
    #Pattern = "987456321" #S
    Pattern = "987412365" #G
    CanReverse = 0
}
if(EGP & changed(EGP))
{
    EGP:egpClear()
    EGP:egpText(100,"Erza",vec2(256,20))
    EGP:egpAlign(100,1,1)
    EGP:egpCircle(1,vec2(100,412),vec2(40,40))
    EGP:egpCircle(2,vec2(100+(462/3),412),vec2(40,40))
    EGP:egpCircle(3,vec2(100+(462/3)*2,412),vec2(40,40))
    EGP:egpCircle(4,vec2(100,412-(462/3)),vec2(40,40))
    EGP:egpCircle(5,vec2(100+(462/3),412-(462/3)),vec2(40,40))
    EGP:egpCircle(6,vec2(100+(462/3)*2,412-(462/3)),vec2(40,40))
    EGP:egpCircle(7,vec2(100,412-(462/3)*2),vec2(40,40))
    EGP:egpCircle(8,vec2(100+(462/3),412-(462/3)*2),vec2(40,40))
    EGP:egpCircle(9,vec2(100+(462/3)*2,412-(462/3)*2),vec2(40,40))
    for(I=1,9)
    {
        EGP:egpColor(I,vec(50,50,50))
        EGP:egpAlpha(I,175)
        EGP:egpCircle(9+I,EGP:egpPos(I),vec2(20,20))
        EGP:egpColor(9+I,vec(70,70,70))
        EGP:egpAlpha(9+I,200)
    }
}
if(EGP & !Out)
{
    if(!Use)
    {
        findByClass("player")
        Player = findClosest((E ? E : EGP:entity()):pos())
    }
    Use = Player:keyUse()
    if(Player:keyUse())
    {
        V = EGP:egpCursor(Player)
        for(I2=1,9,opcounter()<3000)
        {
            if(inrange(V,EGP:egpPos(I2)-vec2(40,40),EGP:egpPos(I2)+vec2(40,40)))
            {
                if(!Pattern_Now:find(I2:toString()))
                {
                    Pattern_Now += I2:toString()
                    EGP:egpColor(I2,vec(150,0,0))
                    EGP:egpColor(I2+9,vec(150,150,150))
                    TI = I2
                }
            }  
        }
    }
    elseif($Use & !Use)
    {
        EGP:egpClear()
        EGP:egpText(100,"Erza",vec2(256,20))
        EGP:egpAlign(100,1,1)
        EGP:egpCircle(1,vec2(100,412),vec2(40,40))
        EGP:egpCircle(2,vec2(100+(462/3),412),vec2(40,40))
        EGP:egpCircle(3,vec2(100+(462/3)*2,412),vec2(40,40))
        EGP:egpCircle(4,vec2(100,412-(462/3)),vec2(40,40))
        EGP:egpCircle(5,vec2(100+(462/3),412-(462/3)),vec2(40,40))
        EGP:egpCircle(6,vec2(100+(462/3)*2,412-(462/3)),vec2(40,40))
        EGP:egpCircle(7,vec2(100,412-(462/3)*2),vec2(40,40))
        EGP:egpCircle(8,vec2(100+(462/3),412-(462/3)*2),vec2(40,40))
        EGP:egpCircle(9,vec2(100+(462/3)*2,412-(462/3)*2),vec2(40,40))
        for(I=1,9)
        {
            EGP:egpColor(I,vec(50,50,50))
            EGP:egpAlpha(I,175)
            EGP:egpCircle(9+I,EGP:egpPos(I),vec2(20,20))
            EGP:egpColor(9+I,vec(70,70,70))
            EGP:egpAlpha(9+I,200)
        }
        Pattern_Now = ""
        LI = 0
        VS = array()
        TI = 0
    }
    if(changed(TI) & TI)
    {
        VS:pushVector2(EGP:egpPos(TI))
    }
    if(VS:count() >= 2)
    {
        LI++
        EGP:egpLine(20+LI,VS[1,vector2],VS[2,vector2])
        EGP:egpSize(20+LI,20)
        EGP:egpAlpha(20+LI,100)
        VS:removeVector2(1)
    }    
}
if(Pattern_Now == Pattern | (Pattern_Now:reverse() == Pattern & CanReverse))
{
    Out = 1
    for(I=1,9)
    {
        EGP:egpColor(I,vec(0,150,0))
    }
    timer("reset",5000)
}
if(Reset & $Reset>0 | clk("reset"))
{
    reset()
}
