Untitled

 avatar
unknown
plain_text
a year ago
3.9 kB
6
Indexable
# --AUTHOR--
# Jonathon D. Phillips
# Epic: Liyability
# X/Twitter: LiyabilityJP
# Discord: syntaxErr0rz#7445

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { /Verse.org/Colors }
using { /Verse.org/Random }

vote_option := enum{ ONE, TWO }
vote_action := enum{ ADD, REMOVE }

vote_event := struct:
    Option:vote_option
    Action:vote_action

vote_system_device := class(creative_device):

    @editable
    VoteTimer:timer_device=timer_device{}

    @editable
    CustomPlayspace:custom_playspace=custom_playspace{}

    @editable
    CloseButtonText:string="EXIT"
    
    @editable
    FirstOptionText:string=""

    @editable
    FirstOptionTrigger:trigger_device=trigger_device{}

    @editable
    SecondOptionText:string=""

    @editable
    SecondOptionTrigger:trigger_device=trigger_device{}

    @editable
    FontColor:color=color{}

    FirstVoteOptionTexture:texture=Textures.VoteOption1
    
    SecondVoteOptionTexture:texture=Textures.VoteOption2

    var PlayerVoteUIMap:[player]player_vote_ui=map{}

    var FirstOptionVotes:int=0

    var SecondOptionVotes:int=0

    VoteHandledEvent<public>:event()=event(){}

    VoteReceivedEvent<public>:event(vote_event)=event(vote_event){}

    OnBegin<override>()<suspends>:void=
        Sleep(0.0)
        Self.CustomPlayspace.Init(Self)
        Sleep(0.0)
        for (Player : Self.CustomPlayspace.GetPlayers()). Player.InitVoteUI()
        Self.VoteTimer.Start()
        race:
            Self.VoteTimer.SuccessEvent.Await()
            sync:
                loop:
                    Self.CustomPlayspace.JoinInProgressEvent.Await().HandleJoinInProgress()
                loop:
                    Self.CustomPlayspace.LeaveInProgressEvent.Await().HandleLeaveInProgress()
                loop:
                    Self.VoteReceivedEvent.Await().HandleVoteEvent()
        Self.HandleVotes()

    (InAgent:agent).HandleJoinInProgress<private>():void=
        if (InPlayer := player[InAgent]). InPlayer.InitVoteUI()

    (InAgent:agent).HandleLeaveInProgress<private>():void=
        if (InPlayer := player[InAgent]). InPlayer.DestroyVoteUI()

    (InPlayer:player).InitVoteUI<private>():void=
        if (not PlayerVoteUIMap[InPlayer]):
            PlayerVoteUI := player_vote_ui:
                Player := InPlayer
                ParentDevice := Self
            if (set PlayerVoteUIMap[InPlayer] = PlayerVoteUI):
                PlayerVoteUI.Init()

    (InPlayer:player).DestroyVoteUI<private>():void=
        if (PlayerVoteUI := PlayerVoteUIMap[InPlayer]):
            set PlayerVoteUI.MaybeVoteOption = false
            PlayerVoteUI.Destroy()

    (InVoteEvent:vote_event).HandleVoteEvent<private>():void=
        if (InVoteEvent.Action = vote_action.REMOVE):
            if (InVoteEvent.Option = vote_option.ONE). set Self.FirstOptionVotes -= 1
            else if (InVoteEvent.Option = vote_option.TWO). set Self.SecondOptionVotes -= 1
        else if (InVoteEvent.Action = vote_action.ADD):
            if (InVoteEvent.Option = vote_option.ONE). set Self.FirstOptionVotes += 1
            else if (InVoteEvent.Option = vote_option.TWO). set Self.SecondOptionVotes += 1
        Self.VoteHandledEvent.Signal()

    HandleVotes<private>():void=
        if (Self.FirstOptionVotes > Self.SecondOptionVotes):
            Self.FirstOptionTrigger.Trigger()
        else if (Self.FirstOptionVotes < Self.SecondOptionVotes):
            Self.SecondOptionTrigger.Trigger()
        else if (GetRandomInt(0,1) = 0). FirstOptionTrigger.Trigger()
        else. SecondOptionTrigger.Trigger()
        for (PlayerVoteUI : Self.PlayerVoteUIMap):
            PlayerVoteUI.Destroy()
Editor is loading...
Leave a Comment