Copy salient and essential scripts and models from Plane Building Roblox
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
motors = {}
|
||||
modes = {}
|
||||
cframes = {}
|
||||
targets = {}
|
||||
c0s = {}
|
||||
c1s = {}
|
||||
torso = nil
|
||||
head = nil
|
||||
model = nil
|
||||
humanoid = nil
|
||||
running = false
|
||||
cameraOffset = Vector3.new(0,0,0)
|
||||
run = game:GetService("RunService")
|
||||
input = game:GetService("UserInputService")
|
||||
motorsEnabled = true
|
||||
function getMotor(name)
|
||||
motors[name] = torso:WaitForChild(name)
|
||||
cframes[name] = CFrame.new(0,0,0) -- need to change this to a {} for each motor, not globals
|
||||
targets[name] = CFrame.new(0,0,0)
|
||||
c0s[name] = motors[name].C0
|
||||
c1s[name] = motors[name].C1
|
||||
return motors[name]
|
||||
end
|
||||
function check(...)
|
||||
for _,item in pairs({...}) do
|
||||
if not item or not item.Parent then return false end
|
||||
end
|
||||
return true
|
||||
end
|
||||
local alpha = 0.1 * (1/60)
|
||||
function setArm(name,delta)
|
||||
if not delta then delta = 1/60 end
|
||||
if not check(model,head,torso,motors[name]) or motorsEnabled or humanoid.SeatPart then return end
|
||||
local origin = (game.Workspace.CurrentCamera.CFrame.Rotation + head.Position)
|
||||
if modes[name] ~= 1 then cframes[name] = origin:ToObjectSpace(motors[name].Part1.CFrame) * CFrame.Angles(-1.57,0,0) end
|
||||
modes[name] = 1
|
||||
cframes[name] = cframes[name]:Lerp(targets[name],alpha/delta)
|
||||
motors[name].Part1.CFrame = origin:ToWorldSpace(cframes[name] * CFrame.Angles(1.57,0,0))
|
||||
end
|
||||
function restArm(name,delta)
|
||||
if not delta then delta = 1/60 end
|
||||
if not check(model,head,torso,motors[name]) or motorsEnabled or humanoid.SeatPart then return end
|
||||
local origin = (torso.CFrame)
|
||||
if modes[name] ~= 2 then cframes[name] = origin:ToObjectSpace(motors[name].Part1.CFrame) * CFrame.Angles(-1.57,0,0) end
|
||||
modes[name] = 2
|
||||
cframes[name] = cframes[name]:Lerp(targets[name],alpha/delta)
|
||||
motors[name].Part1.CFrame = origin:ToWorldSpace(cframes[name] * CFrame.Angles(1.57,0,0))
|
||||
end
|
||||
function resetMotors()
|
||||
for name,motor in pairs(motors) do
|
||||
if motor and motor.Parent then
|
||||
motor.C0 = c0s[name]
|
||||
motor.C1 = c1s[name]
|
||||
end
|
||||
end
|
||||
end
|
||||
function rotateCharacter()
|
||||
if not model or not model.Parent or not model.PrimaryPart or not humanoid then return end
|
||||
local state = humanoid:GetState()
|
||||
local statetype = Enum.HumanoidStateType
|
||||
if state == statetype.Ragdoll or state == statetype.FallingDown or state == statetype.GettingUp then return end
|
||||
model.HumanoidRootPart.CFrame =
|
||||
CFrame.new(model.HumanoidRootPart.Position,
|
||||
model.HumanoidRootPart.Position
|
||||
+ Vector3.new(
|
||||
game.Workspace.CurrentCamera.CFrame.LookVector.X,0,
|
||||
game.Workspace.CurrentCamera.CFrame.LookVector.Z))
|
||||
end
|
||||
function lookArm(name,position)
|
||||
|
||||
end
|
||||
function rotateHead()
|
||||
if not motors["Neck"] or not torso then return end
|
||||
local target = torso.CFrame:ToObjectSpace(game.Workspace.Camera.CFrame).LookVector
|
||||
motors["Neck"].C0 = CFrame.new(0, 1, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0) * CFrame.Angles(math.acos(target.Y)+math.rad(-105),0,math.acos(target.X)+math.rad(-90))
|
||||
end
|
||||
function disableMotors()
|
||||
if not motorsEnabled then return end
|
||||
motorsEnabled = false
|
||||
getMotor("Left Shoulder").Enabled = false
|
||||
local leftArm = motors["Left Shoulder"].Part1
|
||||
leftArm.CanCollide = false
|
||||
leftArm.Anchored = true
|
||||
getMotor("Right Shoulder").Enabled = false
|
||||
local rightArm = motors["Right Shoulder"].Part1
|
||||
rightArm.CanCollide = false
|
||||
rightArm.Anchored = true
|
||||
end
|
||||
function enableMotors()
|
||||
if motorsEnabled then return end
|
||||
motorsEnabled = true
|
||||
motors["Left Shoulder"].Enabled = true
|
||||
local leftArm = motors["Left Shoulder"].Part1
|
||||
leftArm.CanCollide = true
|
||||
leftArm.Anchored = false
|
||||
motors["Right Shoulder"].Enabled = true
|
||||
local rightArm = motors["Right Shoulder"].Part1
|
||||
rightArm.CanCollide = true
|
||||
rightArm.Anchored = false
|
||||
end
|
||||
function setRunning(value)
|
||||
if value then
|
||||
running = true
|
||||
humanoid.WalkSpeed = 30
|
||||
else
|
||||
running = false
|
||||
humanoid.WalkSpeed = 15
|
||||
end
|
||||
end
|
||||
run:BindToRenderStep("CharacterMotorReset",1,function() resetMotors() rotateHead()
|
||||
game.Players.LocalPlayer.CameraMode = Enum.CameraMode.Classic
|
||||
if humanoid then humanoid.CameraOffset = cameraOffset end cameraOffset = Vector3.new(0,0,0)
|
||||
end)
|
||||
run:BindToRenderStep("CharacterHeadRotate",Enum.RenderPriority.Last.Value+1,function()
|
||||
rotateHead()
|
||||
end)
|
||||
|
||||
function init(character)
|
||||
torso = character:WaitForChild("Torso")
|
||||
head = character:WaitForChild("Head")
|
||||
humanoid = character:WaitForChild("Humanoid")
|
||||
humanoid.BreakJointsOnDeath = false
|
||||
motors = {}
|
||||
model = character
|
||||
enableMotors()
|
||||
getMotor("Neck").Enabled = true
|
||||
getMotor("Left Shoulder").Enabled = true
|
||||
getMotor("Right Shoulder").Enabled = true
|
||||
spawn(function() while wait(.1) do
|
||||
local event = _G.Remotes.MotorMoveClient
|
||||
event:FireServer(motors["Neck"],motors["Neck"].C0,motors["Neck"].C1)
|
||||
event:FireServer(motors["Left Shoulder"],motors["Left Shoulder"].C0,motors["Left Shoulder"].C1)
|
||||
event:FireServer(motors["Right Shoulder"],motors["Right Shoulder"].C0,motors["Right Shoulder"].C1)
|
||||
end end)
|
||||
input.InputBegan:Connect(function(object,irrelevant)
|
||||
if not irrelevant then
|
||||
if object.KeyCode == Enum.KeyCode.LeftShift or object.KeyCode == Enum.KeyCode.ButtonL1 then
|
||||
humanoid.WalkSpeed = 30
|
||||
running = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
input.InputEnded:Connect(function(object,irrelevant)
|
||||
if not irrelevant then
|
||||
if object.KeyCode == Enum.KeyCode.LeftShift or object.KeyCode == Enum.KeyCode.ButtonL1 then
|
||||
humanoid.WalkSpeed = 15
|
||||
running = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
game.Workspace.CurrentCamera.CameraSubject = humanoid
|
||||
end
|
||||
return getfenv()
|
||||
Reference in New Issue
Block a user