add gs
This commit is contained in:
+114
@@ -0,0 +1,114 @@
|
||||
local CorePackages = game:GetService("CorePackages")
|
||||
|
||||
local Roact = require(CorePackages.Roact)
|
||||
local Otter = require(CorePackages.Otter)
|
||||
|
||||
local PromptState = require(script.Parent.Parent.Parent.PromptState)
|
||||
local HidePrompt = require(script.Parent.Parent.Parent.Actions.HidePrompt)
|
||||
|
||||
local PromptContents = require(script.Parent.PromptContents)
|
||||
local InProgressContents = require(script.Parent.InProgressContents)
|
||||
local connectToStore = require(script.Parent.Parent.Parent.connectToStore)
|
||||
|
||||
local withLayoutValues = require(script.Parent.Parent.Connection.withLayoutValues)
|
||||
|
||||
local PurchasePrompt = Roact.Component:extend(script.Name)
|
||||
|
||||
local SPRING_CONFIG = {
|
||||
dampingRatio = 1,
|
||||
frequency = 1.6,
|
||||
}
|
||||
|
||||
function PurchasePrompt:init()
|
||||
local setPromptHidden = self.props.setPromptHidden
|
||||
|
||||
self.motor = Otter.createSingleMotor(0)
|
||||
self.motor:start()
|
||||
|
||||
self.ref = Roact.createRef()
|
||||
|
||||
self.motor:onStep(function(value)
|
||||
local frame = self.ref.current
|
||||
|
||||
if frame then
|
||||
frame.AnchorPoint = Vector2.new(0.5, 1 - 0.5 * value)
|
||||
frame.Position = UDim2.new(0.5, 0, 0.5 * value, 0)
|
||||
end
|
||||
end)
|
||||
|
||||
self.onClose = function()
|
||||
local onCompleteDisconnector
|
||||
onCompleteDisconnector = self.motor:onComplete(function()
|
||||
setPromptHidden()
|
||||
onCompleteDisconnector()
|
||||
|
||||
self.motor:stop()
|
||||
end)
|
||||
|
||||
self.motor:setGoal(Otter.spring(0, SPRING_CONFIG))
|
||||
end
|
||||
end
|
||||
|
||||
function PurchasePrompt:didUpdate(prevProps, prevState)
|
||||
if prevProps.promptState ~= self.props.promptState then
|
||||
|
||||
local goal = self.props.promptState == PromptState.Hidden and 0 or 1
|
||||
self.motor:setGoal(Otter.spring(goal, SPRING_CONFIG))
|
||||
|
||||
if prevProps.promptState == PromptState.Hidden then
|
||||
self.motor:start()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PurchasePrompt:render()
|
||||
return withLayoutValues(function(values)
|
||||
local promptState = self.props.promptState
|
||||
|
||||
local contents
|
||||
if promptState == PromptState.Hidden then
|
||||
--[[
|
||||
When the prompt is hidden, we'd rather not keep unused Roblox
|
||||
instances for it around, so we don't render them
|
||||
]]
|
||||
contents = nil
|
||||
elseif promptState == PromptState.PurchaseInProgress or promptState == PromptState.UpsellInProgress then
|
||||
contents = Roact.createElement(InProgressContents)
|
||||
else
|
||||
contents = Roact.createElement(PromptContents, {
|
||||
onClose = self.onClose,
|
||||
})
|
||||
end
|
||||
|
||||
return Roact.createElement("Frame", {
|
||||
Size = values.Size.Dialog,
|
||||
BorderSizePixel = 0,
|
||||
BackgroundTransparency = 1,
|
||||
|
||||
[Roact.Ref] = self.ref
|
||||
}, {
|
||||
PromptContents = contents,
|
||||
})
|
||||
end)
|
||||
end
|
||||
|
||||
local function mapStateToProps(state)
|
||||
return {
|
||||
promptState = state.promptState
|
||||
}
|
||||
end
|
||||
|
||||
local function mapDispatchToProps(dispatch)
|
||||
return {
|
||||
setPromptHidden = function()
|
||||
dispatch(HidePrompt())
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
PurchasePrompt = connectToStore(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(PurchasePrompt)
|
||||
|
||||
return PurchasePrompt
|
||||
Reference in New Issue
Block a user