using { /Fortnite.
com/Devices }
using { /[Link]/Simulation }
using { /[Link]/Temporary/Diagnostics }
using { /[Link]/Temporary/UI}
using { /[Link]/Temporary/SpatialMath}
using { /[Link]/UI }
using { /[Link]/Colors }
using { /[Link]/Colors/NamedColors }
pinpad_device := class(creative_device):
var StuffPerAgent : [agent]?tuple(canvas,text_block,string) = map{}
@editable AssignPinPadButton : button_device = button_device{}
@editable FailTrigger : trigger_device = trigger_device{}
@editable SuccessTrigger : trigger_device = trigger_device{}
@editable PIN : int = 0
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
[Link](AddPinPad)
S2M<localizes>(S:string):message="{S}"
AddPinPad(A:agent):void=
if(Stuff:=StuffPerAgent[A]?):
#Do not assign
else:
Val:=MakeCanvas()
if:
PlayerUI:=GetPlayerUI[player[A]]
then:
[Link](Val(0),player_ui_slot{InputMode:=ui_input_mode.All})
if(set StuffPerAgent[A] = option{(Val(0),Val(1),"")}){}
RemovePinPad(A:agent):void=
if(Stuff:=StuffPerAgent[A]?):
if:
PlayerUI:=GetPlayerUI[player[A]]
then:
[Link](Stuff(0))
if(set StuffPerAgent[A] = false){}
MakeCanvas():tuple(canvas,text_block)=
Button0 := button_loud{DefaultText:=S2M("0")}
[Link]().Subscribe(Add0)
Button1 := button_loud{DefaultText:=S2M("1")}
[Link]().Subscribe(Add1)
Button2 := button_loud{DefaultText:=S2M("2")}
[Link]().Subscribe(Add2)
Button3 := button_loud{DefaultText:=S2M("3")}
[Link]().Subscribe(Add3)
Button4 := button_loud{DefaultText:=S2M("4")}
[Link]().Subscribe(Add4)
Button5 := button_loud{DefaultText:=S2M("5")}
[Link]().Subscribe(Add5)
Button6 := button_loud{DefaultText:=S2M("6")}
[Link]().Subscribe(Add6)
Button7 := button_loud{DefaultText:=S2M("7")}
[Link]().Subscribe(Add7)
Button8 := button_loud{DefaultText:=S2M("8")}
[Link]().Subscribe(Add8)
Button9 := button_loud{DefaultText:=S2M("9")}
[Link]().Subscribe(Add9)
Delete := button_regular{DefaultText:=S2M("Delete")}
[Link]().Subscribe(DeleteLastChar)
Enter := button_regular{DefaultText:=S2M("Enter")}
[Link]().Subscribe(EnterFunc)
NumTB := text_block{DefaultText:=S2M(""),DefaultTextColor:=White}
MyCanvas:= canvas:
Slots:=array:
canvas_slot:
Anchors:=anchors{Minimum:=vector2{X:=0.5,Y:=0.5},Maximum:=vector2{X:=0.5,Y:=0.5}}
Alignment:=vector2{X:=0.5,Y:=0.5}
SizeToContent:=true
Widget:=overlay:
Slots:=array:
overlay_slot:
#Outside ColorBlock
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
Widget:=color_block{DefaultColor:=MakeColorFromSRGB(0.05,0.05,0.05),DefaultDesiredS
ize:=vector2{X:=655.0,Y:=660.0}}
overlay_slot:
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Bottom
Padding:=margin{Bottom:=20.0}
Widget:=overlay:
Slots:=array:
#PinPad ColorBlock
overlay_slot:
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
Widget:=color_block{DefaultColor:=MakeColorFromSRGB(0.0,0.01,0.50)}
#PinPad
overlay_slot:
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Padding:=margin{Top:=20.0,Left:=20.0,Bottom:=20.0,Right:=20.0}
Widget:=stack_box:
Orientation:=[Link]
Slots:=array:
#1-3 Stack
stack_box_slot:
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
Padding:=margin{Top:=25.0,Bottom:=25.0}
Widget:=stack_box:
Orientation:=[Link]
Slots:=array:
stack_box_slot:
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Widget:=Button1
stack_box_slot:
Widget:=Button2
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Padding:=margin{Left:=20.0,Right:=20.0}
stack_box_slot:
Widget:=Button3
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
#4-6
stack_box_slot:
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
Padding:=margin{Top:=25.0,Bottom:=25.0}
Widget:=stack_box:
Orientation:=[Link]
Slots:=array:
stack_box_slot:
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Widget:=Button4
stack_box_slot:
Distribution:=option{1.0}
Widget:=Button5
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Padding:=margin{Left:=20.0,Right:=20.0}
stack_box_slot:
Distribution:=option{1.0}
Widget:=Button6
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
#7-9
stack_box_slot:
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
Padding:=margin{Top:=25.0,Bottom:=25.0}
Widget:=stack_box:
Orientation:=[Link]
Slots:=array:
stack_box_slot:
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Widget:=Button7
stack_box_slot:
Widget:=Button8
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Padding:=margin{Left:=20.0,Right:=20.0}
stack_box_slot:
Widget:=Button9
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
#Delete, 0 and Enter
stack_box_slot:
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
Padding:=margin{Top:=25.0,Bottom:=25.0}
Widget:=stack_box:
Orientation:=[Link]
Slots:=array:
stack_box_slot:
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Widget:=Delete
stack_box_slot:
Widget:=Button0
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
Padding:=margin{Left:=20.0,Right:=20.0}
stack_box_slot:
Widget:=Enter
Distribution:=option{1.0}
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
#Text Block Stuff
overlay_slot:
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Top
Padding:=margin{Top:=20.0}
Widget:=overlay:
Slots:=array:
overlay_slot:
Widget:=color_block{DefaultColor:=Black,DefaultDesiredSize:=vector2{X:=400.0,Y:=32.
0}}
HorizontalAlignment:=horizontal_alignment.Fill
VerticalAlignment:=vertical_alignment.Fill
overlay_slot:
Widget:=NumTB
HorizontalAlignment:=horizontal_alignment.Center
VerticalAlignment:=vertical_alignment.Center
return (MyCanvas,NumTB)
Add0(WM:widget_message):void=AddNum(0,WM)
Add1(WM:widget_message):void=AddNum(1,WM)
Add2(WM:widget_message):void=AddNum(2,WM)
Add3(WM:widget_message):void=AddNum(3,WM)
Add4(WM:widget_message):void=AddNum(4,WM)
Add5(WM:widget_message):void=AddNum(5,WM)
Add6(WM:widget_message):void=AddNum(6,WM)
Add7(WM:widget_message):void=AddNum(7,WM)
Add8(WM:widget_message):void=AddNum(8,WM)
Add9(WM:widget_message):void=AddNum(9,WM)
EnterFunc(WM:widget_message):void=
Print("Enter")
PinAsString:string="{PIN}"
if(Stuff:=StuffPerAgent[[Link]]?):
if(PinAsString=Stuff(2)):
Print("SUCCESS: {PIN} = {Stuff(2)}")
[Link]([Link])
else:
Print("FAIL: {PIN} != {Stuff(2)}")
[Link]([Link])
RemovePinPad([Link])
AddNum(Num:int,WM:widget_message):void=
if(Stuff:=StuffPerAgent[[Link]]?):
var String:string=Stuff(2)
set String += "{Num}" #Add a new number
if(set StuffPerAgent[[Link]] = option{(Stuff(0),Stuff(1),String)}){}
UpdateUI(WM)
UpdateUI(WM:widget_message):void=
if(Stuff:=StuffPerAgent[[Link]]?):
var String:string=Stuff(2)
TB:=Stuff(1)
[Link](S2M("{String}"))
DeleteLastChar(WM:widget_message):void=
if(Stuff:=StuffPerAgent[[Link]]?):
var String: string = Stuff(2)
var UpdatedString : string = ""
for(Index->S:String):
if(Index = [Link]-1):
#This the last character, remove it
else:
set UpdatedString += "{S}"
if(set StuffPerAgent[[Link]] =
option{(Stuff(0),Stuff(1),UpdatedString)}){}
UpdateUI(WM)