Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local TreeJmpingModule = {}
- TreeJmpingModule.__index = TreeJmpingModule
- local UserInputService = game:GetService("UserInputService")
- local RunService = game:GetService("RunService")
- function TreeJmpingModule.new(Character)
- local Table = {
- Character = Character;
- Humanoid = Character:WaitForChild("Humanoid");
- HumanoidRootPart = Character:WaitForChild("HumanoidRootPart");
- Camera = workspace.CurrentCamera;
- SpaceHeldStartTime = 0;
- HoldingSpace = false;
- YCap = 0;
- Power = 10;
- TreeJumping = false
- }
- local self = setmetatable(Table,TreeJmpingModule)
- self:CreateInputs()
- self:CreateEffects()
- self:CreateBodyVelocities()
- self:LoadAnimatons()
- return self
- end
- function TreeJmpingModule:CreateBodyVelocities()
- self.BodyVelocity = Instance.new("BodyVelocity")
- self.BodyVelocity.Parent = nil
- self.BodyVelocity.MaxForce = Vector3.one * math.huge
- self.BodyVelocity.P = 9e9
- self.BodyVelocity.Velocity = Vector3.new()
- self.BodyGyro = Instance.new("BodyGyro")
- self.BodyGyro.Parent = nil
- self.BodyGyro.P = 9e9
- self.BodyGyro.MaxTorque = Vector3.one * math.huge
- end
- function TreeJmpingModule:LoadAnimatons()
- repeat wait() until self.Humanoid:IsDescendantOf(workspace)
- self.Animations = {}
- for i,v in pairs(game.ReplicatedStorage.Animations:GetChildren()) do
- self.Animations[v.Name] = self.Humanoid:LoadAnimation(v)
- end
- end
- function TreeJmpingModule:SetSpaceHeldTime()
- self.SpaceHeldStartTime = tick()
- end
- function TreeJmpingModule:SetHoldingSpace(Bool)
- self.HoldingSpace = Bool
- end
- function TreeJmpingModule:FindFloor()
- local Params = RaycastParams.new()
- Params.FilterType = Enum.RaycastFilterType.Include
- Params.FilterDescendantsInstances = {workspace.Map}
- local raycast = workspace:Raycast(self.HumanoidRootPart.Position,-Vector3.new(0,4,0),Params)
- if raycast then
- return raycast.Instance
- end
- end
- function TreeJmpingModule:Hold(Bool)
- if Bool then
- if not self:FindFloor() then
- return
- end
- if self:FindFloor().Parent ~= workspace.Map.Trees then
- return
- end
- if self.TreeJumping then
- return
- end
- self.Humanoid.JumpPower = 0
- self.Humanoid.AutoRotate = false
- self.BodyGyro.CFrame = CFrame.new(self.HumanoidRootPart.Position,self.HumanoidRootPart.Position + Vector3.new(self.Camera.CFrame.LookVector.X,0,self.Camera.CFrame.LookVector.Z))
- self.Power = 0
- self.Animations.Hold:Play()
- self:SetHoldingSpace(true)
- self:SetSpaceHeldTime()
- else
- if not self.HoldingSpace then
- return
- end
- self.Power = math.clamp((.1+(tick() - self.SpaceHeldStartTime))*50,50,150)
- self.YCap = 1
- self.TreeJumping = true
- self.CanLand = false
- self:SetHoldingSpace(false)
- self.Animations.Hold:Stop()
- repeat wait() until (not self:FindFloor()) and self.Humanoid.FloorMaterial ~= Enum.Material.Air
- self.CanLand = true
- end
- end
- function TreeJmpingModule:CreateEffects()
- self.EffectRender = RunService.RenderStepped:Connect(function(Delta)
- self.BodyVelocity.Parent = (self.TreeJumping or self.HoldingSpace) and self.HumanoidRootPart or nil
- self.BodyGyro.Parent = self.BodyVelocity.Parent
- if self.HoldingSpace then
- self.BodyGyro.CFrame = self.BodyGyro.CFrame:Lerp(CFrame.new(Vector3.zero,Vector3.new(self.Camera.CFrame.LookVector.X,0,self.Camera.CFrame.LookVector.Z)),Delta * 8 )
- self.BodyVelocity.Velocity = Vector3.new()
- else
- self.BodyGyro.CFrame = self.BodyGyro.CFrame:Lerp(CFrame.new(Vector3.zero,Vector3.new(self.Camera.CFrame.LookVector.X,math.min(self.Camera.CFrame.LookVector.Y,self.YCap),self.Camera.CFrame.LookVector.Z)),Delta * 12 )
- self.BodyVelocity.Velocity = self.BodyGyro.CFrame.LookVector * self.Power
- self.YCap = math.clamp(self.YCap-Delta/2,-1,1)
- end
- if self.CanLand and self:FindFloor() then
- self.TreeJumping = false
- self.CanLand = false
- self.Power = 0
- self.YCap = 1
- self.Humanoid.AutoRotate = true
- end
- end)
- end
- function TreeJmpingModule:CreateInputs()
- self.InputBegan = UserInputService.InputBegan:Connect(function(Key,Typing)
- if Typing then
- return
- end
- if Key.KeyCode == Enum.KeyCode.Space then
- self:Hold(true)
- end
- end)
- self.InputEnded = UserInputService.InputEnded:Connect(function(Key,Typing)
- if Typing then
- return
- end
- if Key.KeyCode == Enum.KeyCode.Space then
- self:Hold(false)
- end
- end)
- end
- return TreeJmpingModule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement