Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I make the door rotate according to what side player is at?(sorry for bad explanation)

Asked by
Neon_N 104
5 years ago
Edited 5 years ago

(video of my door working) https://gyazo.com/ccd0dde5f7c5d22eab143cf2da7e4763

So what I am doing now is using two invisible and not collideable parts to detect if player is inside the building or not. Because you don't want your player to be stuck between door and wall. But .Touched Events is not very trustworthy so I want to use different method. Can you give me better methods?

local Players = game:GetService("Players")
local Debounce = false
local Open = false
local inc = 1/10
local center = script.Parent.Parent.Center
script.Parent.PrimaryPart = script.Parent.Hinge

local TweenService = game:GetService("TweenService")
local Info = TweenInfo.new(.3)
local goals = {
    CFrame = script.Parent.PrimaryPart.CFrame * CFrame.Angles(0,-math.rad(90),0)
}

local VAPE = TweenService:Create(script.Parent.PrimaryPart, Info, goals)

local CloseSound = Instance.new("Sound", script.Parent)
CloseSound.SoundId = 'rbxassetid://192416584'
CloseSound.Volume = 1

local OpenSound = Instance.new("Sound", script.Parent)
OpenSound.SoundId = 'rbxassetid://320946744'
OpenSound.Volume = 1

local function tweenModel(model, CF)
    local CFrameValue = Instance.new("CFrameValue")
    CFrameValue.Value = model:GetPrimaryPartCFrame()

    CFrameValue:GetPropertyChangedSignal("Value"):connect(function()
        model:SetPrimaryPartCFrame(CFrameValue.Value)
    end)

    local tween = TweenService:Create(CFrameValue, Info, {Value = CF})
    tween:Play()

    tween.Completed:connect(function()
        CFrameValue:Destroy()
    end)
end

Players.PlayerAdded:Connect(function(player)
    print(player.Name.." found")
script.Parent.Parent.Trigger1.Touched:Connect(function(hit)
    if Debounce == false then
        Debounce = true
        if (hit.Parent:FindFirstChild("Humanoid") ~= nil) then
            print("Humanoid found")
            if Open == false then
                tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, -math.rad(90), 0))
                OpenSound:Play()
                wait(.3)
                Open = true
            end
        end

        repeat wait() until 7 <= (center.Position - player.Character.HumanoidRootPart.Position).magnitude

        if Open == true then
            tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, math.rad(90), 0))
            wait(.3)
            CloseSound:Play()
            Open = false
        end
        Debounce = false
    end
end)

script.Parent.Parent.Trigger2.Touched:Connect(function(hit)
    if Debounce == false then
        Debounce = true
        if (hit.Parent:FindFirstChild("Humanoid") ~= nil) then
            print("Humanoid found")
            if Open == false then
                tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, math.rad(90), 0))
                OpenSound:Play()
                wait(.3)
                Open = true
            end
        end

        repeat wait() until 7 <= (center.Position - player.Character.HumanoidRootPart.Position).magnitude

        if Open == true then
            tweenModel(script.Parent, script.Parent.PrimaryPart.CFrame * CFrame.Angles(0, -math.rad(90), 0))
            wait(.3)
            CloseSound:Play()
            Open = false
        end
        Debounce = false
    end 
    end)
end)

Answer this question