I’m trying to make a dead by daylight-like vault and I’ve gotten a system but its not as smooth as i’d hoped it would be.
I want to warn you guys that this IS JUST A PROTOTYPE, meaning its not going to look good, I’m just trying to get the feel down right now.
My problem it doesnt smoothly transition between tweens and there is kind of a snap.
How could I fix/improve it??
mainly focus on the PlayVault() part
local VaultManager = {}
VaultManager.__index = VaultManager
local SyncTween = require(game.ReplicatedStorage:WaitForChild("Modules"):WaitForChild("SyncTween"))
local TweenService = game:GetService("TweenService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local animations = require(script.Animations)
local localManagement = require(game.ServerStorage:WaitForChild("Optimization"):WaitForChild("LocalManagement"))
local characterManager = require(game.ServerStorage:WaitForChild("CharacterManager"))
local lockInfo = TweenInfo.new(0.3, Enum.EasingStyle.Linear)
local OppositeLockInfo = TweenInfo.new(0.5, Enum.EasingStyle.Sine)
function VaultManager.ConfigurePrompt(prompt)
local vaultConfig = {}
vaultConfig.prompt = prompt
vaultConfig.vaultObject = prompt.Parent.Parent
vaultConfig.playerActivated = nil
vaultConfig.animations = {}
vaultConfig.animations.playerLeft = animations.playerLeft
setmetatable(vaultConfig, VaultManager)
return vaultConfig
end
local function MoveDirectionToPart(hum, part)
local pos = hum.MoveDirection
local partPos = part.CFrame.LookVector
local Looking = pos:Dot(partPos)
return Looking
end
local function TweenInOrder(parts, tweenInfos, goals, updates)
for i, part in parts do
local tween = SyncTween.new(part, tweenInfos[i], goals[i], updates[i])
tween:Play()
tween.Completed:Wait()
end
end
function VaultManager:PlayVault(side)
local plr = self.playerActivated
local char = plr.Character or plr.CharacterAdded:Wait()
local plrHumRoot = char:WaitForChild("HumanoidRootPart")
local hum = char:WaitForChild("Humanoid")
local plrAnimator = hum:WaitForChild("Animator")
local PosMiddle = self.vaultObject.VaultPos
local PosLeft = self.vaultObject.LeftStartPos
local PosRight = self.vaultObject.RightStartPos
local vaultBarrier = self.vaultObject.Barrier
local playerAnimation = self.animations.playerLeft
local playerSide
local middleCFrame
local oppositePlayerSide
plrHumRoot.Anchored = true
if side == "Left" then
playerSide = PosLeft
oppositePlayerSide = PosRight
local leftRotation = PosLeft.CFrame - PosLeft.Position
middleCFrame = CFrame.new(PosMiddle.Position) * leftRotation
else
playerSide = PosRight
oppositePlayerSide = PosLeft
local rightRotation = PosRight.CFrame - PosRight.Position
middleCFrame = CFrame.new(PosMiddle.Position) * rightRotation
end
local TweenGoals = {
{CFrame = playerSide.CFrame},
{CFrame = middleCFrame},
{CFrame = oppositePlayerSide.CFrame:ToWorldSpace(CFrame.Angles(0,math.rad(180),0))}
}
if hum:GetAttribute("Sprint") == true then
local TweenInfos = {
lockInfo,
TweenInfo.new(0.3, Enum.EasingStyle.Linear),
TweenInfo.new(0.4, Enum.EasingStyle.Linear)
}
characterManager:SetPlayerTurn(plr, false)
localManagement:SetModelCollision(plr, self.vaultObject, false)
localManagement:PlayAnimation(plr, playerAnimation.AnimationId, plrAnimator, nil, 1)
TweenInOrder({plrHumRoot, plrHumRoot, plrHumRoot}, TweenInfos, TweenGoals, {false, false, true})
else
local TweenInfos = {
lockInfo,
TweenInfo.new(0.7, Enum.EasingStyle.Linear),
TweenInfo.new(0.7, Enum.EasingStyle.Linear)
}
characterManager:SetPlayerTurn(plr, false)
localManagement:SetModelCollision(plr, self.vaultObject, false)
localManagement:PlayAnimation(plr, playerAnimation.AnimationId, plrAnimator, nil, 0.4)
TweenInOrder({plrHumRoot, plrHumRoot, plrHumRoot}, TweenInfos, TweenGoals, {false, false, true})
end
task.wait(0.1)
plrHumRoot.Anchored = false
characterManager:SetPlayerTurn(plr, true)
localManagement:SetModelCollision(plr, self.vaultObject, true)
self.prompt.Enabled = true
end
return VaultManager



