1using { /Verse.org }
2using { /Verse.org/Native }
3using { /Verse.org/SceneGraph }
4using { /Verse.org/Simulation }
5using { /Fortnite.com/Devices }
6
7player_perspective := enum:
8 FirstPerson
9 ThirdPerson
10
11perspective_switcher_component<public> := class<final_super>(component):
12
13 @editable PerspectiveSwitcherTrigger : input_trigger_device = input_trigger_device{}
14
15 @editable FirstPersonCamera : gameplay_camera_first_person_device = gameplay_camera_first_person_device{}
16
17
18 var PerspectiveMap : [player]player_perspective = map{}
19
20
21 OnSimulate<override>()<suspends>:void =
22 PerspectiveSwitcherTrigger.PressedEvent.Subscribe(TogglePerspective)
23 PerspectiveSwitcherTrigger.GetPlayspace().PlayerRemovedEvent().Subscribe(RemoveFromMap)
24
25 RemoveFromMap(Agent : agent):void=
26 if:
27 Player := player[Agent]
28 set PerspectiveMap[Player] = player_perspective.FirstPerson
29
30 TogglePerspective(Agent : agent):void=
31 if(Player := player[Agent]):
32 if:
33 not PerspectiveMap[Player]
34 set PerspectiveMap[Player] = player_perspective.ThirdPerson
35 if(Perspective := PerspectiveMap[Player]):
36 case(Perspective):
37 player_perspective.FirstPerson =>
38 if(set PerspectiveMap[Player] = player_perspective.ThirdPerson):
39 FirstPersonCamera.RemoveFrom(Player)
40
41 player_perspective.ThirdPerson =>
42 if(set PerspectiveMap[Player] = player_perspective.FirstPerson):
43 FirstPersonCamera.AddTo(Player)