Skip to content

Commit

Permalink
Add hint for closing the menu.
Browse files Browse the repository at this point in the history
  • Loading branch information
TheNexusAvenger committed Mar 19, 2021
1 parent 02b1b72 commit b23e621
Showing 1 changed file with 170 additions and 2 deletions.
172 changes: 170 additions & 2 deletions src/UI/MainMenu.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")

local NexusVRCharacterModel = require(script.Parent.Parent)
local VRInputService = NexusVRCharacterModel:GetInstance("State.VRInputService")
Expand Down Expand Up @@ -48,6 +49,8 @@ function MainMenu:__new()
self:DisableChangeReplication("ViewTextLabel")
self:DisableChangeReplication("CurrentView")
self:DisableChangeReplication("Views")
self:DisableChangeReplication("LeftHandHintVisible")
self:DisableChangeReplication("RightHandHintVisible")

--Create the parent frame, display text, and toggle buttons.
local ViewAdornFrame = NexusWrappedInstance.new("Frame")
Expand Down Expand Up @@ -149,6 +152,130 @@ function MainMenu:SetUpOpening()
RightAdorn.Adornee = RightAdornPart
RightAdorn.Parent = RightAdornPart

local LeftMenuToggleHintAdornPart = Instance.new("Part")
LeftMenuToggleHintAdornPart.Transparency = 1
LeftMenuToggleHintAdornPart.Size = Vector3.new(1,1,0)
LeftMenuToggleHintAdornPart.Anchored = true
LeftMenuToggleHintAdornPart.CanCollide = false
LeftMenuToggleHintAdornPart.Parent = Workspace.CurrentCamera

local RightMenuToggleHintAdornPart = Instance.new("Part")
RightMenuToggleHintAdornPart.Transparency = 1
RightMenuToggleHintAdornPart.Size = Vector3.new(1,1,0)
RightMenuToggleHintAdornPart.Anchored = true
RightMenuToggleHintAdornPart.CanCollide = false
RightMenuToggleHintAdornPart.Parent = Workspace.CurrentCamera

local LeftMenuToggleHintGuiFront = Instance.new("SurfaceGui")
LeftMenuToggleHintGuiFront.Face = Enum.NormalId.Front
LeftMenuToggleHintGuiFront.CanvasSize = Vector2.new(500,500)
LeftMenuToggleHintGuiFront.LightInfluence = 0
LeftMenuToggleHintGuiFront.AlwaysOnTop = true
LeftMenuToggleHintGuiFront.Adornee = LeftMenuToggleHintAdornPart
LeftMenuToggleHintGuiFront.Parent = LeftMenuToggleHintAdornPart

local LeftMenuToggleHintFrontArrow = Instance.new("ImageLabel")
LeftMenuToggleHintFrontArrow.ImageTransparency = 1
LeftMenuToggleHintFrontArrow.BackgroundTransparency = 1
LeftMenuToggleHintFrontArrow.Rotation = 180
LeftMenuToggleHintFrontArrow.Size = UDim2.new(1,0,1,0)
LeftMenuToggleHintFrontArrow.Image = "rbxassetid://6537091378"
LeftMenuToggleHintFrontArrow.ImageRectSize = Vector2.new(512,512)
LeftMenuToggleHintFrontArrow.ImageRectOffset = Vector2.new(0,0)
LeftMenuToggleHintFrontArrow.Parent = LeftMenuToggleHintGuiFront

local LeftMenuToggleHintFrontText = Instance.new("ImageLabel")
LeftMenuToggleHintFrontText.ImageTransparency = 1
LeftMenuToggleHintFrontText.BackgroundTransparency = 1
LeftMenuToggleHintFrontText.Size = UDim2.new(1,0,1,0)
LeftMenuToggleHintFrontText.ZIndex = 2
LeftMenuToggleHintFrontText.Image = "rbxassetid://6537091378"
LeftMenuToggleHintFrontText.ImageRectSize = Vector2.new(512,512)
LeftMenuToggleHintFrontText.ImageRectOffset = Vector2.new(0,512)
LeftMenuToggleHintFrontText.Parent = LeftMenuToggleHintGuiFront

local LeftMenuToggleHintGuiBack = Instance.new("SurfaceGui")
LeftMenuToggleHintGuiBack.Face = Enum.NormalId.Back
LeftMenuToggleHintGuiBack.CanvasSize = Vector2.new(500,500)
LeftMenuToggleHintGuiBack.LightInfluence = 0
LeftMenuToggleHintGuiBack.AlwaysOnTop = true
LeftMenuToggleHintGuiBack.Adornee = LeftMenuToggleHintAdornPart
LeftMenuToggleHintGuiBack.Parent = LeftMenuToggleHintAdornPart

local LeftMenuToggleHintBackArrow = Instance.new("ImageLabel")
LeftMenuToggleHintBackArrow.ImageTransparency = 1
LeftMenuToggleHintBackArrow.BackgroundTransparency = 1
LeftMenuToggleHintBackArrow.Size = UDim2.new(1,0,1,0)
LeftMenuToggleHintBackArrow.Image = "rbxassetid://6537091378"
LeftMenuToggleHintBackArrow.ImageRectSize = Vector2.new(512,512)
LeftMenuToggleHintBackArrow.ImageRectOffset = Vector2.new(512,0)
LeftMenuToggleHintBackArrow.Parent = LeftMenuToggleHintGuiBack

local LeftMenuToggleHintBackText = Instance.new("ImageLabel")
LeftMenuToggleHintBackText.ImageTransparency = 1
LeftMenuToggleHintBackText.BackgroundTransparency = 1
LeftMenuToggleHintBackText.Size = UDim2.new(1,0,1,0)
LeftMenuToggleHintBackText.ZIndex = 2
LeftMenuToggleHintBackText.Image = "rbxassetid://6537091378"
LeftMenuToggleHintBackText.ImageRectSize = Vector2.new(512,512)
LeftMenuToggleHintBackText.ImageRectOffset = Vector2.new(0,512)
LeftMenuToggleHintBackText.Parent = LeftMenuToggleHintGuiBack

local RightMenuToggleHintGuiFront = Instance.new("SurfaceGui")
RightMenuToggleHintGuiFront.Face = Enum.NormalId.Front
RightMenuToggleHintGuiFront.CanvasSize = Vector2.new(500,500)
RightMenuToggleHintGuiFront.LightInfluence = 0
RightMenuToggleHintGuiFront.AlwaysOnTop = true
RightMenuToggleHintGuiFront.Adornee = RightMenuToggleHintAdornPart
RightMenuToggleHintGuiFront.Parent = RightMenuToggleHintAdornPart

local RightMenuToggleHintFrontArrow = Instance.new("ImageLabel")
RightMenuToggleHintFrontArrow.ImageTransparency = 1
RightMenuToggleHintFrontArrow.BackgroundTransparency = 1
RightMenuToggleHintFrontArrow.Size = UDim2.new(1,0,1,0)
RightMenuToggleHintFrontArrow.Image = "rbxassetid://6537091378"
RightMenuToggleHintFrontArrow.ImageRectSize = Vector2.new(512,512)
RightMenuToggleHintFrontArrow.ImageRectOffset = Vector2.new(512,0)
RightMenuToggleHintFrontArrow.Parent = RightMenuToggleHintGuiFront

local RightMenuToggleHintFrontText = Instance.new("ImageLabel")
RightMenuToggleHintFrontText.ImageTransparency = 1
RightMenuToggleHintFrontText.BackgroundTransparency = 1
RightMenuToggleHintFrontText.Size = UDim2.new(1,0,1,0)
RightMenuToggleHintFrontText.ZIndex = 2
RightMenuToggleHintFrontText.Image = "rbxassetid://6537091378"
RightMenuToggleHintFrontText.ImageRectSize = Vector2.new(512,512)
RightMenuToggleHintFrontText.ImageRectOffset = Vector2.new(0,512)
RightMenuToggleHintFrontText.Parent = RightMenuToggleHintGuiFront

local RightMenuToggleHintGuiBack = Instance.new("SurfaceGui")
RightMenuToggleHintGuiBack.Face = Enum.NormalId.Back
RightMenuToggleHintGuiBack.CanvasSize = Vector2.new(500,500)
RightMenuToggleHintGuiBack.LightInfluence = 0
RightMenuToggleHintGuiBack.AlwaysOnTop = true
RightMenuToggleHintGuiBack.Adornee = RightMenuToggleHintAdornPart
RightMenuToggleHintGuiBack.Parent = RightMenuToggleHintAdornPart

local RightMenuToggleHintBackArrow = Instance.new("ImageLabel")
RightMenuToggleHintBackArrow.ImageTransparency = 1
RightMenuToggleHintBackArrow.BackgroundTransparency = 1
RightMenuToggleHintBackArrow.Size = UDim2.new(1,0,1,0)
RightMenuToggleHintBackArrow.Image = "rbxassetid://6537091378"
RightMenuToggleHintBackArrow.ImageRectSize = Vector2.new(512,512)
RightMenuToggleHintBackArrow.ImageRectOffset = Vector2.new(0,0)
RightMenuToggleHintBackArrow.Parent = RightMenuToggleHintGuiBack

local RightMenuToggleHintBackText = Instance.new("ImageLabel")
RightMenuToggleHintBackText.BackgroundTransparency = 1
RightMenuToggleHintBackText.Rotation = 180
RightMenuToggleHintBackText.ImageTransparency = 1
RightMenuToggleHintBackText.Size = UDim2.new(1,0,1,0)
RightMenuToggleHintBackText.ZIndex = 2
RightMenuToggleHintBackText.Image = "rbxassetid://6537091378"
RightMenuToggleHintBackText.ImageRectSize = Vector2.new(512,512)
RightMenuToggleHintBackText.ImageRectOffset = Vector2.new(0,512)
RightMenuToggleHintBackText.Parent = RightMenuToggleHintGuiBack

--Start checking for the controllers to be upside down.
--Done in a coroutine since this function is non-yielding.
local BothControllersUpStartTime
Expand All @@ -160,7 +287,8 @@ function MainMenu:SetUpOpening()
local LeftHandCFrameRelative,RightHandCFrameRelative = VRInputs[Enum.UserCFrame.Head]:Inverse() * VRInputs[Enum.UserCFrame.LeftHand],VRInputs[Enum.UserCFrame.Head]:Inverse() * VRInputs[Enum.UserCFrame.RightHand]
local LeftHandFacingUp,RightHandFacingUp = LeftHandCFrameRelative.UpVector.Y < 0,RightHandCFrameRelative.UpVector.Y < 0
local LeftHandFacingForward,RightHandFacingForward = LeftHandCFrameRelative.LookVector.Z < 0,RightHandCFrameRelative.LookVector.Z < 0
local BothHandsUp = LeftHandFacingUp and RightHandFacingUp and LeftHandFacingForward and RightHandFacingForward
local LeftHandUp,RightHandUp = LeftHandFacingUp and LeftHandFacingForward,RightHandFacingUp and RightHandFacingForward
local BothHandsUp = LeftHandUp and RightHandUp
if BothHandsUp then
BothControllersUpStartTime = BothControllersUpStartTime or tick()
else
Expand All @@ -172,6 +300,8 @@ function MainMenu:SetUpOpening()
local CameraCenterCFrame = Workspace.CurrentCamera:GetRenderCFrame() * VRInputs[Enum.UserCFrame.Head]:Inverse()
LeftAdornPart.CFrame = CameraCenterCFrame * VRInputs[Enum.UserCFrame.LeftHand] * CFrame.new(0,-0.25,0.25)
RightAdornPart.CFrame = CameraCenterCFrame * VRInputs[Enum.UserCFrame.RightHand] * CFrame.new(0,-0.25,0.25)
LeftMenuToggleHintAdornPart.CFrame = CameraCenterCFrame * VRInputs[Enum.UserCFrame.LeftHand]
RightMenuToggleHintAdornPart.CFrame = CameraCenterCFrame * VRInputs[Enum.UserCFrame.RightHand]

--Update the progress bars.
if BothControllersUpStartTime and not MenuToggleReached then
Expand All @@ -191,8 +321,46 @@ function MainMenu:SetUpOpening()
RightAdorn.Visible = false
end

--[[
Updates the given hint parts.
--]]
local function UpdateHintParts(Visible,Part,FrontArrow,BackArrow,FrontText,BackText)
local TweenData = TweenInfo.new(0.25)
TweenService:Create(Part,TweenData,{
Size = Visible and Vector3.new(1,1,0) or Vector3.new(1.5,1.5,0)
}):Play()
TweenService:Create(FrontArrow,TweenData,{
ImageTransparency = Visible and 0 or 1
}):Play()
TweenService:Create(BackArrow,TweenData,{
ImageTransparency = Visible and 0 or 1
}):Play()
TweenService:Create(FrontText,TweenData,{
ImageTransparency = Visible and 0 or 1
}):Play()
TweenService:Create(BackText,TweenData,{
ImageTransparency = Visible and 0 or 1
}):Play()
end

--Update the hints.
local LeftHandHintVisible,RightHandHintVisible = self.Enabled and not LeftHandUp,self.Enabled and not RightHandUp
if self.LeftHandHintVisible ~= LeftHandHintVisible then
self.LeftHandHintVisible = LeftHandHintVisible
UpdateHintParts(LeftHandHintVisible,LeftMenuToggleHintAdornPart,LeftMenuToggleHintFrontArrow,LeftMenuToggleHintBackArrow,LeftMenuToggleHintFrontText,LeftMenuToggleHintBackText)
end
if self.RightHandHintVisible ~= RightHandHintVisible then
self.RightHandHintVisible = RightHandHintVisible
UpdateHintParts(RightHandHintVisible,RightMenuToggleHintAdornPart,RightMenuToggleHintFrontArrow,RightMenuToggleHintBackArrow,RightMenuToggleHintFrontText,RightMenuToggleHintBackText)
end
local Rotation = (tick() * 10) % 360
LeftMenuToggleHintFrontArrow.Rotation = Rotation
LeftMenuToggleHintBackArrow.Rotation = -Rotation
RightMenuToggleHintFrontArrow.Rotation = -Rotation
RightMenuToggleHintBackArrow.Rotation = Rotation

--Wait to poll again.
wait()
RunService.RenderStepped:Wait()
end
end)()
end
Expand Down

0 comments on commit b23e621

Please sign in to comment.