@name EGP Fun
@inputs [S EGP]:wirelink 
@outputs User:entity Page 
@persist A [CornerPos1 CornerPos2]:vector Current 
@trigger 
interval(100)

Cursor = EGP:egpCursor(User)
Cursor2 = S:egpCursor(User)
SDChange = array(
    "vo/npc/male01/hi01.wav",
    "vo/npc/male01/hi02.wav",
    "vo/npc/male01/heydoc01.wav",
    "vo/npc/male01/heydoc02.wav"
)

if (first()) {
    Current = 1
    
    Scale = vec(2,6,2) * 12
    
    Door = holoCreate(1)
    
    holoScaleUnits(1,Scale)
    holoPos(1,entity():isWeldedTo():toWorld(vec(-10,15,40)))
    holoAng(1,entity():isWeldedTo():angles())
    holoColor(1,vec(255,255,255),255)
    holoParent(1,entity())
    
    CornerPos1 = Scale / 2
    CornerPos2 = -CornerPos1
    
    CornerPos1 = Door:toWorld(CornerPos1)
    CornerPos2 = Door:toWorld(CornerPos2)
    
    CornerScale = vec() + 1
    
    holoCreate(2)
    holoPos(2,CornerPos1)
    holoScaleUnits(2,CornerScale)
    holoParent(2, Door)
    
    holoCreate(3)
    holoPos(3,CornerPos2)
    holoScaleUnits(3,CornerScale)
    holoParent(3, Door)
    
    for (I = 1,3) {holoColor(I,vec(),0)}
    
    holoCreate(4)
    holoModel(4,"models/Humans/Group01/male_07.mdl")
    holoPos(4,entity():isWeldedTo():toWorld(vec(-65,0,0)))
    holoAng(4,entity():isWeldedTo():angles())
    holoAnim(4,2)
    holoParent(4,entity():isWeldedTo())
    holoAlpha(4,0)
    
    S:egpClear()
    EGP:egpClear()
    
    S:egpBox(2,vec2(256,256),vec2(512,512))
    S:egpColor(2,vec(85,85,85))
    
    S:egpCircle(3,vec2(256,256),vec2(180,180))
    S:egpColor(3,vec(160,0,0))
    
    S:egpCircle(4,vec2(256,256),vec2(160,160))
    S:egpColor(4,vec(85,85,85))
    
    S:egpCircle(5,vec2(256,256),vec2(100,100))
    S:egpColor(5,vec(160,0,0))
    
    S:egpCircle(6,vec2(256,256),vec2(80,80))
    S:egpColor(6,vec(85,85,85))
    
    S:egpBox(7,vec2(256,176),vec2(100,100))
    S:egpAngle(7,45)
    S:egpColor(7,vec(85,85,85))
    
    S:egpRoundedBox(8,vec2(256,186),vec2(25,90))
    S:egpColor(8,vec(160,0,0))
    
    EGP:egpBox(101,vec2(298,368),vec2(48,40))
    EGP:egpColor(101,vec(0,0,0))
    
    EGP:egpCircle(104,vec2(253,391),vec2(5,5))
    EGP:egpAlpha(104,0)
    EGP:egpCircle(105,vec2(320,391),vec2(5,5))
    EGP:egpAlpha(105,0)
}

timer("Changer",4000)
if(clk("Changer")){Current+=1}
if(Current>=4){Current=1}

findInBox(CornerPos1,CornerPos2)
findIncludeClass("player")
User = findClosest(holoEntity(1):pos())

if(changed(inrange(Cursor2, S:egpPos(3)-S:egpSize(3)/2, S:egpPos(3)+S:egpSize(3)/2) & User:keyUse()) & inrange(Cursor2, S:egpPos(3)-S:egpSize(3)/2, S:egpPos(3)+S:egpSize(3)/2) & User:keyUse()){
    Page = 2
}
if(inrange(Cursor, EGP:egpPos(104)-EGP:egpSize(104)/2, EGP:egpPos(104)+EGP:egpSize(104)/2) & User:keyUse()){
    Page = 3
}
if(inrange(Cursor, EGP:egpPos(105)-EGP:egpSize(105)/2, EGP:egpPos(105)+EGP:egpSize(105)/2) & User:keyUse()){
    Page = 4
}
if(inrange(Cursor, EGP:egpPos(103)-EGP:egpSize(103)/2, EGP:egpPos(103)+EGP:egpSize(103)/2) & User:keyUse()){
    Page = 100
}

if (Page == 1) {
    S:egpClear()
    
    S:egpBox(2,vec2(256,256),vec2(512,512))
    S:egpColor(2,vec(85,85,85))
    
    S:egpCircle(3,vec2(256,256),vec2(180,180))
    S:egpColor(3,vec(160,0,0))
    
    S:egpCircle(4,vec2(256,256),vec2(160,160))
    S:egpColor(4,vec(85,85,85))
    
    S:egpCircle(5,vec2(256,256),vec2(100,100))
    S:egpColor(5,vec(160,0,0))
    
    S:egpCircle(6,vec2(256,256),vec2(80,80))
    S:egpColor(6,vec(85,85,85))
    
    S:egpBox(7,vec2(256,176),vec2(100,100))
    S:egpAngle(7,45)
    S:egpColor(7,vec(85,85,85))
    
    S:egpRoundedBox(8,vec2(256,186),vec2(25,90))
    S:egpColor(8,vec(160,0,0))
}

if (Page == 2) {
    S:egpClear()
    
    S:egpBox(2,vec2(256,256),vec2(512,512))
    S:egpColor(2,vec(85,85,85))
}
if (Page == 3) {
    EGP:egpRemove(100)
    
    EGP:egpBox(102,vec2(231,368),vec2(48,40))
    EGP:egpMaterial(102,"skybox/militia_hdrup")
}
if (Page == 4) {
    EGP:egpRemove(101)
    
    EGP:egpBox(103,vec2(298,368),vec2(48,40))
    EGP:egpMaterial(103,"skybox/militia_hdrup")
    
    EGP:egpText(106,"Teleport",vec2(286,368))
    EGP:egpSize(106,6)
    EGP:egpColor(106,vec(0,0,0))
}

if (changed(Page == 100) & Page == 100) {
    holoAlpha(4,255)
    soundPlay(1,0,SDChange[Current,string])
} elseif (Page != 100) {soundStop(1)}

if(EGP:entity():pos():distance(User:pos()) > 100) {EGP}

EGP:egpCircle(0, vec2(0,0), vec2(2,2))
EGP:egpColor(0,vec4(255,255,255,0))
EGP:egpParentToCursor(0)

if(S:entity():pos():distance(User:pos()) > 100) {S}

S:egpCircle(0, vec2(0,0), vec2(8,8))
S:egpColor(0,vec4(255,255,255,0))
S:egpParentToCursor(0)

if(User:isPlayer()) {A = 1}
else {A = 0}

if(changed(A) & !first()) {
    if(A == 1) {
        printColor(vec(147,65,0),User:name(),vec(0,45,45)," has enabled the egp.")
    } elseif (A == 0) {
        Page = 1
        EGP:egpRemove(102)
        
        EGP:egpRemove(103)
        
        EGP:egpRemove(106)
    
        EGP:egpBox(101,vec2(298,368),vec2(48,40))
        EGP:egpColor(101,vec(0,0,0))
        
        holoAlpha(4,0)
    }
}
