Hi, the device seems to be working fine but after going through a few array elements (right here: for(SelectedItem : ShopItem): ) in the ReturnCanvasSlots it breaks and stops working. Would anyone be able to help me out with it i can’t seem to find a fix for this. The code is below
using { /Fortnite.com/Devices }
using { /Fortnite.com/UI }
using { /Fortnite.com/FortPlayerUtilities }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/UI }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Colors }
using { /Verse.org/Assets }
shop_device := class(creative_device):
# Refrence the game manager
@editable MainDevice : game_manager_3 = game_manager_3{}
# The trigger that will open up this ui menu
@editable ShowUIOnTrigger : trigger_device = trigger_device{}
# An array of button ui, configurable via the editor
@editable var ShopItem : []shop_item = array{}
#shop indexes to open the correct page/subpage
@editable ShopIndex : int = 0
# A map of type ?canvas used to find the canvas tied to a player
var MaybeMyUIPerPlayer : [player]?canvas = map{}
#player specific element of ui
var ItemDisplayTextureBlockPerPlayer : [agent]?texture_block = map{}
var NameTextBlockPerPlayer : [agent]?text_block = map{}
var RarityTextBlockPerPlayer : [agent]?text_block = map{}
var PriceTextBlockPerPlayer : [agent]?text_block = map{}
var BalanceTextBlockPerPlayer : [agent]?text_block = map{}
#shop pages maps
var MinShopPagePerPlayer : [agent]?int = map{}
var MaxShopPagePerPlayer : [agent]?int = map{}
var CurrentShopPagePerPlayer : [agent]?int = map{}
#player ui positions
var ButtonPositionXPerPlayer : [agent]?float = map{}
var ButtonPositionYPerPlayer : [agent]?float = map{}
var TexturePositionXPerPlayer : [agent]?float = map{}
var TexturePositionYPerPlayer : [agent]?float = map{}
@editable ButtonType1Text : string = ""
@editable ButtonType2Text : string = ""
@editable ButtonType3Text : string = ""
@editable ButtonType4Text : string = ""
@editable ButtonType5Text : string = ""
@editable ButtonType6Text : string = ""
@editable ButtonType7Text : string = ""
EmptyButtonText<localizes> : message = ""
ReadyButtonText<localizes> : message = "Ready"
MenuButtonText<localizes> : message = "Menu"
PurchaseButtonText<localizes> : message = "Purchase"
var ButtonStartingXPosition : float = 120.0
var ButtonMaxXPosition : float = 1224.0
var ButtonXPositionIncrease : float = 138.0
var ButtonStartingYPosition : float = 320.0
var ButtonYPositionIncrease : float = 138.0
var TextureStartingXPosition : float = 130.0
var TextureMaxXPosition : float = 1234.0
var TextureXPositionIncrease : float = 138.0
var TextureStartingYPosition : float = 330.0
var TextureYPositionIncrease : float = 138.0
Convert<localizes>(String : string): message = "{String}"
OnBegin<override>()<suspends>: void =
ShowUIOnTrigger.TriggeredEvent.Subscribe(CheckForIndexes)
AssignEachItemAnIndex()
#assigns each page an index
AssignEachItemAnIndex(): void =
var SetupItemIndex : int = 0
for(SelectedButton : ShopItem):
set SetupItemIndex = SetupItemIndex + 1
set SelectedButton.ItemIndex = SetupItemIndex
Print("assigned index: {SelectedButton.ItemIndex}")
#check for index/subindex
CheckForIndexes(MaybeAgent : ?agent): void =
if:
Agent := MaybeAgent?
CurrentShopIndex := MainDevice.PlayerShopIndex[Agent]?
CurrentShopIndex = ShopIndex
then:
OpenUI(Agent)
# Opens the UI
OpenUI(Agent : agent): void =
if(Player := player[Agent], PlayerUI := GetPlayerUI[Player]):
if(MyUI := MaybeMyUIPerPlayer[Player]?):
PlayerUI.RemoveWidget(MyUI)
if(set MaybeMyUIPerPlayer[Player] = false) {}
else:
NewUI := CreateMyUI(Agent)
PlayerUI.AddWidget(NewUI, player_ui_slot{InputMode := ui_input_mode.All})
if(set MaybeMyUIPerPlayer[Player] = option{NewUI}) {}
# Deletes the canvas
DeleteCanvas(Agent : agent): void =
if(Player := player[Agent], PlayerUI := GetPlayerUI[Player]):
if(MyUI := MaybeMyUIPerPlayer[Player]?):
PlayerUI.RemoveWidget(MyUI)
if(set MaybeMyUIPerPlayer[Player] = false) {}
# Deletes the canvas using a widget_message
DeleteUI(Message : widget_message): void =
if(PlayerUI := GetPlayerUI[Message.Player], MyUI := MaybeMyUIPerPlayer[Message.Player]?):
PlayerUI.RemoveWidget(MyUI)
if(set MaybeMyUIPerPlayer[Message.Player] = false) {}
# Creates the UI
CreateMyUI(Agent : agent): canvas =
for(CurrentButton : ShopItem):
SelectedButton := button_quiet{DefaultText := EmptyButtonText}
SelectedButton.OnClick().Subscribe(HandleSelectedButton)
if(set CurrentButton.ButtonWidgetPerPlayer[Agent] = SelectedButton){}
for(CurrentTexture : ShopItem):
ItemTexture := CurrentTexture.ItemTexture
SelectedTexture := texture_block{DefaultImage := ItemTexture, DefaultDesiredSize := vector2{X := 89.0, Y := 89.0}}
if(set CurrentTexture.TextureWidgetPerPlayer[Agent] = SelectedTexture){}
CanvasArray := ReturnCanvasSlots(Agent)
MyInteractableButtons : canvas = canvas:
Slots := CanvasArray
return MyInteractableButtons
GetButtonXPosition(Agent : agent): float =
Print("button pos x")
if(XPosition := ButtonPositionXPerPlayer[Agent]?, YPosition := ButtonPositionYPerPlayer[Agent]?):
if(XPosition = 0.0):
if(set ButtonPositionXPerPlayer[Agent] = option{ButtonStartingXPosition}){}
return ButtonStartingXPosition
else:
if(XPosition = ButtonMaxXPosition):
if(set ButtonPositionXPerPlayer[Agent] = option{ButtonStartingXPosition}){}
if(set ButtonPositionYPerPlayer[Agent] = option{YPosition + ButtonYPositionIncrease}){}
return ButtonStartingXPosition
else:
if(set ButtonPositionXPerPlayer[Agent] = option{XPosition + ButtonXPositionIncrease}){}
return XPosition + ButtonXPositionIncrease
else:
return 0.0
GetButtonYPosition(Agent : agent): float =
Print("button pos y")
if(YPosition := ButtonPositionYPerPlayer[Agent]?):
if(YPosition = 0.0):
if(set ButtonPositionYPerPlayer[Agent] = option{ButtonStartingYPosition}){}
return ButtonStartingYPosition
else:
return YPosition
else:
return 0.0
GetTextureXPosition(Agent : agent): float =
Print("texture pos x")
if(XPosition := TexturePositionXPerPlayer[Agent]?, YPosition := TexturePositionYPerPlayer[Agent]?):
if(XPosition = 0.0):
if(set TexturePositionXPerPlayer[Agent] = option{TextureStartingXPosition}){}
return TextureStartingXPosition
else:
if(XPosition = TextureMaxXPosition):
if(set TexturePositionXPerPlayer[Agent] = option{TextureStartingXPosition}){}
if(set TexturePositionYPerPlayer[Agent] = option{YPosition + TextureYPositionIncrease}){}
return TextureStartingXPosition
else:
if(set TexturePositionXPerPlayer[Agent] = option{XPosition + TextureXPositionIncrease}){}
return XPosition + TextureXPositionIncrease
else:
return 0.0
GetTextureYPosition(Agent : agent): float =
Print("texture pos y")
if(YPosition := TexturePositionYPerPlayer[Agent]?):
if(YPosition = 0.0):
if(set TexturePositionYPerPlayer[Agent] = option{TextureStartingYPosition}){}
return TextureStartingYPosition
else:
return YPosition
else:
return 0.0
CheckIfItemEnabled(Agent : agent, ItemType : int) : int =
Print("Button enabled/disabled")
if(ItemType = 1):
return 1
else if(ItemType = 2):
if(Type2Enabled := MainDevice.ItemType2EnabledPerPlayer[Agent]?):
if(Type2Enabled = 1):
return 1
else:
return 0
else:
return 0
else:
if(Type3Enabled := MainDevice.ItemType3EnabledPerPlayer[Agent]?):
if(Type3Enabled = 1):
return 1
else:
return 0
else:
return 0
CheckForPageCount(Agent : agent): void =
var ItemsAvailable : float = 0.0
if:
Type2Enabled := MainDevice.ItemType2EnabledPerPlayer[Agent]?
Type3Enabled := MainDevice.ItemType3EnabledPerPlayer[Agent]?
then:
if(set MinShopPagePerPlayer[Agent] = option{1}){}
if(set MaxShopPagePerPlayer[Agent] = option{1}){}
for(SelectedItem : ShopItem):
ItemType := SelectedItem.ItemType
if(ItemType = 1):
set ItemsAvailable = ItemsAvailable + 1.0
if(ItemType = 2, Type2Enabled = 1):
set ItemsAvailable = ItemsAvailable + 1.0
if(ItemType = 3, Type3Enabled = 1):
set ItemsAvailable = ItemsAvailable + 1.0
set ItemsAvailable = ItemsAvailable / 36.0
if(RoundedItemsAvailable := Ceil[ItemsAvailable]):
if(set MaxShopPagePerPlayer[Agent] = option{RoundedItemsAvailable}){}
Print("Pages: {RoundedItemsAvailable}")
# Returns an array of canvas_slot
ReturnCanvasSlots(Agent : agent): []canvas_slot =
var ButtonReady : button_quiet = button_quiet{DefaultText := ReadyButtonText}
var ButtonMenu : button_quiet = button_quiet{DefaultText := MenuButtonText}
var ButtonPurchase : button_quiet = button_quiet{DefaultText := PurchaseButtonText}
var ButtonPreviousRarity : button_quiet = button_quiet{DefaultText := EmptyButtonText}
var ButtonNextRarity : button_quiet = button_quiet{DefaultText := EmptyButtonText}
var ButtonPreviousPage : button_quiet = button_quiet{DefaultText := EmptyButtonText}
var ButtonNextPage : button_quiet = button_quiet{DefaultText := EmptyButtonText}
var ButtonType1 : button_quiet = button_quiet{DefaultText := Convert(ButtonType1Text)}
var ButtonType2 : button_quiet = button_quiet{DefaultText := Convert(ButtonType2Text)}
var ButtonType3 : button_quiet = button_quiet{DefaultText := Convert(ButtonType3Text)}
var ButtonType4 : button_quiet = button_quiet{DefaultText := Convert(ButtonType4Text)}
var ButtonType5 : button_quiet = button_quiet{DefaultText := Convert(ButtonType5Text)}
var ButtonType6 : button_quiet = button_quiet{DefaultText := Convert(ButtonType6Text)}
var ButtonType7 : button_quiet = button_quiet{DefaultText := Convert(ButtonType7Text)}
var WeaponStoreWidget : texture_block = texture_block{DefaultImage := Textures.Weapon_Store_Text, DefaultDesiredSize := vector2{X := 848.0, Y := 233.0}}
var WeaponDisplayWidget : texture_block = texture_block{DefaultImage := Textures.Weapon_Display_Icon, DefaultDesiredSize := vector2{X := 364.0, Y := 434.0}}
var ArrowPreviousRarityWidget : texture_block = texture_block{DefaultImage := Textures.Arrow_Previous, DefaultDesiredSize := vector2{X := 50.0, Y := 50.0}}
var ArrowNextRarityWidget : texture_block = texture_block{DefaultImage := Textures.Arrow_Next, DefaultDesiredSize := vector2{X := 50.0, Y := 50.0}}
var ArrowPreviousPageWidget : texture_block = texture_block{DefaultImage := Textures.Arrow_Previous, DefaultDesiredSize := vector2{X := 50.0, Y := 50.0}}
var ArrowNextPageWidget : texture_block = texture_block{DefaultImage := Textures.Arrow_Next, DefaultDesiredSize := vector2{X := 50.0, Y := 50.0}}
var ItemDisplayWidget : texture_block = texture_block{DefaultImage := Assaults_Textures.Assault_Rifle, DefaultDesiredSize := vector2{X := 290.0, Y := 290.0}}
var ColorBlock1 : color_block = color_block{DefaultColor := color{R := 0.015625, G := 0.015625, B := 0.015625}, DefaultOpacity := 0.75, DefaultDesiredSize := vector2{X := 1760.0, Y := 952.0}}
var ColorBlock2 : color_block = color_block{DefaultColor := color{R := 0.015625, G := 0.015625, B := 0.015625}, DefaultOpacity := 0.25, DefaultDesiredSize := vector2{X := 1920.0, Y := 1080.0}}
var ColorBlock3 : color_block = color_block{DefaultColor := color{R := 0.416667, G := 0.416667, B := 0.416667}, DefaultDesiredSize := vector2{X := 7.0, Y := 656.0}}
var NameTextBlock : text_block = text_block{DefaultTextColor := color{R := 255.0, G := 255.0, B := 255.0}}
var PriceTextBlock : text_block = text_block{DefaultTextColor := color{R := 255.0, G := 255.0, B := 255.0}}
var RarityTextBlock : text_block = text_block{DefaultTextColor := color{R := 255.0, G := 255.0, B := 255.0}, DefaultJustification := text_justification.Center}
var BalanceTextBlock : text_block = text_block{DefaultTextColor := color{R := 255.0, G := 255.0, B := 255.0}}
ButtonReady.OnClick().Subscribe(HandleButtonReady)
ButtonMenu.OnClick().Subscribe(HandleButtonMenu)
ButtonPurchase.OnClick().Subscribe(HandleButtonPurchase)
ButtonPreviousRarity.OnClick().Subscribe(HandleButtonPreviousRarity)
ButtonNextRarity.OnClick().Subscribe(HandleButtonNextRarity)
ButtonPreviousPage.OnClick().Subscribe(HandleButtonPreviousPage)
ButtonNextPage.OnClick().Subscribe(HandleButtonNextPage)
ButtonType1.OnClick().Subscribe(HandleButtonType1)
ButtonType2.OnClick().Subscribe(HandleButtonType2)
ButtonType3.OnClick().Subscribe(HandleButtonType3)
ButtonType4.OnClick().Subscribe(HandleButtonType4)
ButtonType5.OnClick().Subscribe(HandleButtonType5)
ButtonType6.OnClick().Subscribe(HandleButtonType6)
ButtonType7.OnClick().Subscribe(HandleButtonType7)
var CanvasSlotArray : []canvas_slot = array{}
if(set ButtonPositionXPerPlayer[Agent] = option{0.0}){}
if(set ButtonPositionYPerPlayer[Agent] = option{0.0}){}
if(set TexturePositionXPerPlayer[Agent] = option{0.0}){}
if(set TexturePositionYPerPlayer[Agent] = option{0.0}){}
if(set ItemDisplayTextureBlockPerPlayer[Agent] = option{ItemDisplayWidget}){}
if(set NameTextBlockPerPlayer[Agent] = option{NameTextBlock}){}
if(set PriceTextBlockPerPlayer[Agent] = option{PriceTextBlock}){}
if(set RarityTextBlockPerPlayer[Agent] = option{RarityTextBlock}){}
if(set BalanceTextBlockPerPlayer[Agent] = option{BalanceTextBlock}){}
CheckForPageCount(Agent)
for(SelectedItem : ShopItem):
ItemType := SelectedItem.ItemType
ItemEnabled := CheckIfItemEnabled(Agent, ItemType)
if(ItemEnabled = 1):
ButtonPositionX := GetButtonXPosition(Agent)
Print("button x returned")
ButtonPositionY := GetButtonYPosition(Agent)
Print("button y returned")
TexturePositionX := GetTextureXPosition(Agent)
Print("texture x returned")
TexturePositionY := GetTextureYPosition(Agent)
Print("texture y returned")
ItemIndex := SelectedItem.ItemIndex
Print("Button with index: {ItemIndex} added")
if(ItemIndex = 1):
if(set MainDevice.PlayerItemIndex[Agent] = option{1}){}
if(set MainDevice.PlayerChosenRarity[Agent] = option{SelectedItem.MinItemIndex}){}
if(set MainDevice.PlayerMinItemIndex[Agent] = option{SelectedItem.MinItemIndex}){}
if(set MainDevice.PlayerMaxItemIndex[Agent] = option{SelectedItem.MaxItemIndex}){}
UpdatePlayerBudget(Agent)
UpdateItem(Agent)
if(SelectedWidget := SelectedItem.ButtonWidgetPerPlayer[Agent]):
SelectedSlot := canvas_slot:
Offsets := margin{Top := ButtonPositionY, Left := ButtonPositionX, Bottom := SelectedItem.ButtonSize.Y, Right := SelectedItem.ButtonSize.X}
ZOrder := 3
SizeToContent := false
Widget := SelectedWidget
set CanvasSlotArray += array{SelectedSlot}
Print("Added button to canvas")
if(SelectedWidget := SelectedItem.TextureWidgetPerPlayer[Agent]):
SelectedSlot := canvas_slot:
Offsets := margin{Top := TexturePositionY, Left := TexturePositionX, Bottom := SelectedItem.TextureSize.Y, Right := SelectedItem.TextureSize.X}
ZOrder := 2
SizeToContent := false
Widget := SelectedWidget
set CanvasSlotArray += CanvasSlotArray + array{SelectedSlot}
Print("Added texture to canvas")
SelectedType1Slot := canvas_slot:
Widget := ButtonType1
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 120.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType1Slot}
SelectedType2Slot := canvas_slot:
Widget := ButtonType2
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 364.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType2Slot}
SelectedType3Slot := canvas_slot:
Widget := ButtonType3
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 604.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType3Slot}
SelectedType4Slot := canvas_slot:
Widget := ButtonType4
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 852.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType4Slot}
SelectedType5Slot := canvas_slot:
Widget := ButtonType5
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1096.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType5Slot}
SelectedType6Slot := canvas_slot:
Widget := ButtonType6
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1336.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType6Slot}
SelectedType7Slot := canvas_slot:
Widget := ButtonType7
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1584.0, Top := 228.0, Right := 205.0, Bottom := 42.0}
set CanvasSlotArray += array{SelectedType7Slot}
SelectedReadySlot := canvas_slot:
Widget := ButtonReady
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 210.0, Top := 888.0, Right := 1042.0, Bottom := 60.0}
set CanvasSlotArray += array{SelectedReadySlot}
SelectedMenuSlot := canvas_slot:
Widget := ButtonMenu
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1649.0, Top := 100.0, Right := 140.0, Bottom := 75.0}
set CanvasSlotArray += array{SelectedMenuSlot}
SelectedPurchaseSlot := canvas_slot:
Widget := ButtonPurchase
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1432.0, Top := 888.0, Right := 356.0, Bottom := 60.0}
set CanvasSlotArray += array{SelectedPurchaseSlot}
SelectedPreviousRaritySlot := canvas_slot:
Widget := ButtonPreviousRarity
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1453.0, Top := 641.0, Right := 60.0, Bottom := 60.0}
set CanvasSlotArray += array{SelectedPreviousRaritySlot}
SelectedNextRaritySlot := canvas_slot:
Widget := ButtonNextRarity
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1707.0, Top := 641.0, Right := 60.0, Bottom := 60.0}
set CanvasSlotArray += array{SelectedNextRaritySlot}
SelectedPreviousPageSlot := canvas_slot:
Widget := ButtonPreviousPage
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 124.0, Top := 888.0, Right := 60.0, Bottom := 60.0}
set CanvasSlotArray += array{SelectedPreviousPageSlot}
SelectedNextPageSlot := canvas_slot:
Widget := ButtonNextPage
ZOrder := 3
SizeToContent := false
Offsets := margin{Left := 1280.0, Top := 888.0, Right := 60.0, Bottom := 60.0}
set CanvasSlotArray += array{SelectedNextPageSlot}
SelectedWeaponStoreSlot := canvas_slot:
Widget := WeaponStoreWidget
ZOrder := 3
Offsets := margin{Left := 64.0, Top := 24.0, Right := 848.0, Bottom := 233.0}
set CanvasSlotArray += array{SelectedWeaponStoreSlot}
SelectedWeaponDisplaySlot := canvas_slot:
Widget := WeaponDisplayWidget
ZOrder := 2
Offsets := margin{Left := 1428.0, Top := 296.0, Right := 364.0, Bottom := 434.0}
set CanvasSlotArray += array{SelectedWeaponDisplaySlot}
SelectedArrowPreviousRaritySlot := canvas_slot:
Widget := ArrowPreviousRarityWidget
ZOrder := 2
Offsets := margin{Left := 1455.0, Top := 645.0, Right := 50.0, Bottom := 50.0}
set CanvasSlotArray += array{SelectedArrowPreviousRaritySlot}
SelectedArrowNextRaritySlot := canvas_slot:
Widget := ArrowNextRarityWidget
ZOrder := 2
Offsets := margin{Left := 1715.0, Top := 647.0, Right := 50.0, Bottom := 50.0}
set CanvasSlotArray += array{SelectedArrowNextRaritySlot}
SelectedArrowPreviousPageSlot := canvas_slot:
Widget := ArrowPreviousPageWidget
ZOrder := 2
Offsets := margin{Left := 128.0, Top := 892.0, Right := 50.0, Bottom := 50.0}
set CanvasSlotArray += array{SelectedArrowPreviousPageSlot}
SelectedArrowNextPageSlot := canvas_slot:
Widget := ArrowNextPageWidget
ZOrder := 2
Offsets := margin{Left := 1288.0, Top := 892.0, Right := 50.0, Bottom := 50.0}
set CanvasSlotArray += array{SelectedArrowNextPageSlot}
SelectedItemDisplaySlot := canvas_slot:
Widget := ItemDisplayWidget
ZOrder := 4
Offsets := margin{Left := 1456.0, Top := 345.0, Right := 290.0, Bottom := 290.0}
set CanvasSlotArray += array{SelectedItemDisplaySlot}
SelectedColorBlock1Slot := canvas_slot:
Widget := ColorBlock1
ZOrder := 1
Offsets := margin{Left := 80.0, Top := 65.0, Right := 1760.0, Bottom := 952.0}
set CanvasSlotArray += array{SelectedColorBlock1Slot}
SelectedColorBlock2Slot := canvas_slot:
Widget := ColorBlock2
ZOrder := 1
Offsets := margin{Left := 0.0, Top := 0.0, Right := 1920.0, Bottom := 1080.0}
set CanvasSlotArray += array{SelectedColorBlock2Slot}
SelectedColorBlock3Slot := canvas_slot:
Widget := ColorBlock3
ZOrder := 2
Offsets := margin{Left := 1372.0, Top := 324.0, Right := 7.0, Bottom := 656.0}
set CanvasSlotArray += array{SelectedColorBlock3Slot}
SelectedNameSlot := canvas_slot:
Widget := NameTextBlock
ZOrder := 4
SizeToContent := false
Offsets := margin{Left := 1436.0, Top := 736.0, Right := 165.0, Bottom := 41.0}
set CanvasSlotArray += array{SelectedNameSlot}
SelectedRaritySlot := canvas_slot:
Widget := PriceTextBlock
ZOrder := 4
SizeToContent := false
Offsets := margin{Left := 1436.0, Top := 776.0, Right := 165.0, Bottom := 41.0}
set CanvasSlotArray += array{SelectedRaritySlot}
SelectedPriceSlot := canvas_slot:
Widget := RarityTextBlock
ZOrder := 4
SizeToContent := false
Offsets := margin{Left := 1527.5, Top := 650.0, Right := 165.0, Bottom := 41.0}
set CanvasSlotArray += array{SelectedPriceSlot}
SelectedBalanceSlot := canvas_slot:
Widget := BalanceTextBlock
ZOrder := 4
SizeToContent := false
Offsets := margin{Left := 1436.0, Top := 816.0, Right := 165.0, Bottom := 41.0}
set CanvasSlotArray += array{SelectedBalanceSlot}
Print("Canvas array returned")
return CanvasSlotArray
HandleButtonType1(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{1}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonType2(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{2}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonType3(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{3}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonType4(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{4}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonType5(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{5}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonType6(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{6}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonType7(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
if(set MainDevice.PlayerShopIndex[Agent] = option{7}){}
MainDevice.TriggerShop.Trigger(Agent)
HandleButtonPurchase(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
BuyItem(Agent)
HandleButtonReady(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
MainDevice.AssignInfoBox(Agent)
MainDevice.TeleportToRandomIsland(Agent)
HandleButtonMenu(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
then:
DeleteCanvas(Agent)
spawn {MainDevice.ShowInfo(Agent, "Dance To Get The Shop Back")}
HandleButtonPreviousRarity(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
Rarity := MainDevice.PlayerChosenRarity[Agent]?
MinIndex := MainDevice.PlayerMinItemIndex[Agent]?
MaxIndex := MainDevice.PlayerMaxItemIndex[Agent]?
then:
if((Rarity - 1) < MinIndex):
if(set MainDevice.PlayerChosenRarity[Agent] = option{MaxIndex}){}
else:
if(set MainDevice.PlayerChosenRarity[Agent] = option{Rarity - 1}){}
UpdateItem(Agent)
HandleButtonNextRarity(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
Rarity := MainDevice.PlayerChosenRarity[Agent]?
MinIndex := MainDevice.PlayerMinItemIndex[Agent]?
MaxIndex := MainDevice.PlayerMaxItemIndex[Agent]?
then:
if((Rarity + 1) > MaxIndex):
if(set MainDevice.PlayerChosenRarity[Agent] = option{MinIndex}){}
else:
if(set MainDevice.PlayerChosenRarity[Agent] = option{Rarity + 1}){}
UpdateItem(Agent)
HandleButtonPreviousPage(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
Page := CurrentShopPagePerPlayer[Agent]?
MinPage := MinShopPagePerPlayer[Agent]?
MaxPage := MaxShopPagePerPlayer[Agent]?
then:
if((Page - 1) < MinPage):
if(set CurrentShopPagePerPlayer[Agent] = option{MaxPage}){}
else:
if(set CurrentShopPagePerPlayer[Agent] = option{Page - 1}){}
UpdateItem(Agent)
HandleButtonNextPage(Wdata : widget_message) : void =
if:
Agent := agent[Wdata.Player]
Page := CurrentShopPagePerPlayer[Agent]?
MinPage := MinShopPagePerPlayer[Agent]?
MaxPage := MaxShopPagePerPlayer[Agent]?
then:
if((Page + 1) < MaxPage):
if(set CurrentShopPagePerPlayer[Agent] = option{MinPage}){}
else:
if(set CurrentShopPagePerPlayer[Agent] = option{Page + 1}){}
UpdateItem(Agent)
#Handles the button click
HandleSelectedButton(Message : widget_message): void =
Player := Message.Player
if(PlayerUI := GetPlayerUI[Message.Player], MyUI := MaybeMyUIPerPlayer[Message.Player]?):
SelectedWidget := Message.Source
StaleButtonUI := FindButtonUI(Player, SelectedWidget)
if(SelectedButton := StaleButtonUI?):
ItemIndex := SelectedButton.ItemIndex
MinItemIndex := SelectedButton.MinItemIndex
MaxItemIndex := SelectedButton.MaxItemIndex
Print("Item Index: {ItemIndex}")
if(Agent := agent[Player]):
if(set MainDevice.PlayerItemIndex[Agent] = option{ItemIndex}){}
if(set MainDevice.PlayerMinItemIndex[Agent] = option{MinItemIndex}){}
if(set MainDevice.PlayerMaxItemIndex[Agent] = option{MaxItemIndex}){}
UpdateIndex(Agent)
UpdateItem(Agent)
#Finds the button with the agent information
FindButtonUI(Agent : agent, SelectedWidget : widget): ?shop_item =
for(SelectedButton : ShopItem):
if(SelectedButtonWidget := SelectedButton.ButtonWidgetPerPlayer[Agent]):
if(SelectedWidget = SelectedButtonWidget):
return option{SelectedButton}
return false
UpdatePlayerBudget(Agent : agent): void =
if:
BalanceTextBlock := BalanceTextBlockPerPlayer[Agent]?
PlayerBudget := MainDevice.BudgetPerPlayer[Agent]?
then:
BalanceTextBlock.SetText(Convert("Balance: ${PlayerBudget}"))
BuyItem(Agent : agent): void =
if:
Index := MainDevice.PlayerItemIndex[Agent]?
Rarity := MainDevice.PlayerChosenRarity[Agent]?
PlayerBudget := MainDevice.BudgetPerPlayer[Agent]?
BudgetSpent := MainDevice.BudgetSpentPerPlayer[Agent]?
then:
for(SelectedItem : ShopItem):
if(Index = SelectedItem.ItemIndex):
for(SelectedRarity : SelectedItem.ShopItem):
if(Rarity = SelectedRarity.ItemRarityIndex):
ItemCost := SelectedRarity.ItemCost
ItemGranterIndex := SelectedRarity.ItemGranterIndex
UsedOutcome := SelectedRarity.UsedOutcome
if(PlayerBudget >= ItemCost):
if(set MainDevice.BudgetPerPlayer[Agent] = option{PlayerBudget - ItemCost}){}
if(set MainDevice.BudgetSpentPerPlayer[Agent] = option{BudgetSpent + ItemCost}){}
if(UsedOutcome = 1):
MainDevice.ShopOutcome.SetNextItem(ItemGranterIndex)
MainDevice.ShopOutcome.GrantItem(Agent)
if(UsedOutcome = 2):
MainDevice.ShopOutcome2.SetNextItem(ItemGranterIndex)
MainDevice.ShopOutcome2.GrantItem(Agent)
UpdatePlayerBudget(Agent)
else:
spawn {MainDevice.ShowInfo(Agent, "Not Enough Budget To Buy")}
UpdateItem(Agent : agent): void =
if:
Index := MainDevice.PlayerItemIndex[Agent]?
Rarity := MainDevice.PlayerChosenRarity[Agent]?
TextureBlock := ItemDisplayTextureBlockPerPlayer[Agent]?
NameTextBlock := NameTextBlockPerPlayer[Agent]?
PriceTextBlock := PriceTextBlockPerPlayer[Agent]?
RarityTextBlock := RarityTextBlockPerPlayer[Agent]?
then:
for(SelectedItem : ShopItem):
if(Index = SelectedItem.ItemIndex):
Print("Item index in update: {SelectedItem.ItemIndex}")
for(SelectedRarity : SelectedItem.ShopItem):
if(Rarity = SelectedRarity.ItemRarityIndex):
Print("Item rarity in update: {SelectedRarity.ItemRarityIndex}")
ItemCost := SelectedRarity.ItemCost
ItemRarity := SelectedRarity.ItemRarity
ItemName := SelectedRarity.ItemName
ItemTexture := SelectedRarity.ItemTexture
TextureBlock.SetImage(ItemTexture)
Print("Item updated")
NameTextBlock.SetText(Convert("{ItemName}"))
PriceTextBlock.SetText(Convert("Price: ${ItemCost}"))
RarityTextBlock.SetText(Convert("{ItemRarity}"))
UpdateIndex(Agent : agent): void =
if:
Rarity := MainDevice.PlayerChosenRarity[Agent]?
MinIndex := MainDevice.PlayerMinItemIndex[Agent]?
MaxIndex := MainDevice.PlayerMaxItemIndex[Agent]?
then:
if(Rarity > MaxIndex):
if(set MainDevice.PlayerChosenRarity[Agent] = option{MaxIndex}){}
if(Rarity < MinIndex):
if(set MainDevice.PlayerChosenRarity[Agent] = option{MinIndex}){}
shop_item := class<concrete>():
var ButtonSize : vector2 = vector2{X := 108.0, Y:= 108.0}
var TextureSize : vector2 = vector2{X := 89.0, Y:= 89.0}
@editable var ItemTexture : texture = Assaults_Textures.Assault_Rifle
#item index set when assigning buttons
var ItemIndex : int = 0
#min and max index for each item
@editable MinItemIndex : int = 0
@editable MaxItemIndex : int = 0
#shop items
@editable ShopItem : []item_setup = array{}
#shop ui maps
var ButtonWidgetPerPlayer : [agent]widget = map{}
var TextureWidgetPerPlayer : [agent]widget = map{}
#used to mark if the weapon is br/og/ballistic
@editable_number(int):
MinValue := option{1}
MaxValue := option{3}
ItemType : int = 1
item_setup := class<concrete>():
@editable ItemCost : int = 0
@editable ItemRarityIndex : int = 0
@editable ItemGranterIndex : int = 0
@editable ItemName : string = ""
@editable ItemRarity : string = ""
@editable ItemTexture : texture = Assaults_Textures.Assault_Rifle
@editable_number(int):
MinValue := option{1}
MaxValue := option{2}
UsedOutcome : int = 1