Copy salient and essential scripts and models from Plane Building Roblox
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
require(game.ReplicatedFirst.ReadyModule)
|
||||
local module = {}
|
||||
local input = game:GetService("UserInputService")
|
||||
local mouse = require(_G.Modules.MouseModule)
|
||||
|
||||
local gamepad = Enum.UserInputType.Gamepad1
|
||||
local function KeyBinding(keycode,value)
|
||||
return function()
|
||||
if input:IsKeyDown(keycode) then return value else return nil end
|
||||
end
|
||||
end
|
||||
local function ButtonBinding(keycode,value)
|
||||
return function()
|
||||
if input:IsGamepadButtonDown(gamepad,keycode) then return value else return nil end
|
||||
end
|
||||
end
|
||||
local function MouseBinding(inputtype,value)
|
||||
return function()
|
||||
if input:IsMouseButtonPressed(inputtype) then return value else return nil end
|
||||
end
|
||||
end
|
||||
|
||||
local function SequenceBinding(iterations,predicate)
|
||||
local value = 0
|
||||
input.InputEnded:Connect(function(input,irrelevant)
|
||||
if not irrelevant then
|
||||
if predicate(input) then
|
||||
value = value + 1/iterations
|
||||
if value > 1 then value = 0 end
|
||||
return value
|
||||
end
|
||||
end
|
||||
end)
|
||||
return function() return value end
|
||||
end
|
||||
|
||||
local function SequenceKeyBinding(keycode,iterations)
|
||||
return SequenceBinding(iterations,function(input)
|
||||
return input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == keycode
|
||||
end)
|
||||
end
|
||||
local function SequenceButtonBinding(keycode,iterations)
|
||||
return SequenceBinding(iterations,function(input)
|
||||
return input.UserInputType == gamepad and input.KeyCode == keycode
|
||||
end)
|
||||
end
|
||||
local function SequenceMouseBinding(inputtype,iterations)
|
||||
return SequenceBinding(iterations,function(input)
|
||||
return input.UserInputType == inputtype
|
||||
end)
|
||||
end
|
||||
|
||||
local function HoldBinding()
|
||||
return function(old,new)
|
||||
if not new then return old end
|
||||
end
|
||||
end
|
||||
|
||||
local function DeltaBinding(velocity,predicate)
|
||||
return function(value,new,delta)
|
||||
if predicate() then return (value or 0) + velocity * delta end
|
||||
end
|
||||
end
|
||||
|
||||
local function DeltaKeyBinding(keycode,velocity)
|
||||
return DeltaBinding(velocity,function()
|
||||
return input:IsKeyDown(keycode)
|
||||
end)
|
||||
end
|
||||
local function DeltaButtonBinding(keycode,velocity)
|
||||
return DeltaBinding(velocity,function()
|
||||
return input:IsGamepadButtonDown(gamepad,keycode)
|
||||
end)
|
||||
end
|
||||
local function DeltaMouseBinding(inputtype,velocity)
|
||||
return DeltaBinding(velocity,function()
|
||||
return input:IsMouseButtonPressed(inputtype)
|
||||
end)
|
||||
end
|
||||
|
||||
local function MouseMovement(keycode)
|
||||
return function()
|
||||
input:IsKeyDown(keycode)
|
||||
end
|
||||
end
|
||||
|
||||
local controlBindings = {
|
||||
throttle = {
|
||||
DeltaKeyBinding(Enum.KeyCode.LeftShift,1),
|
||||
DeltaKeyBinding(Enum.KeyCode.LeftControl,-1),
|
||||
HoldBinding()
|
||||
},
|
||||
pitch = {
|
||||
KeyBinding(Enum.KeyCode.W,-1),
|
||||
KeyBinding(Enum.KeyCode.S,1)
|
||||
},
|
||||
yaw = {
|
||||
KeyBinding(Enum.KeyCode.Q,1),
|
||||
KeyBinding(Enum.KeyCode.E,-1)
|
||||
},
|
||||
roll = {
|
||||
KeyBinding(Enum.KeyCode.A,1),
|
||||
KeyBinding(Enum.KeyCode.D,-1)
|
||||
},
|
||||
fire = {
|
||||
MouseBinding(Enum.UserInputType.MouseButton1,1),
|
||||
KeyBinding(Enum.KeyCode.F,-1)
|
||||
},
|
||||
bomb = {
|
||||
KeyBinding(Enum.KeyCode.B,1)
|
||||
},
|
||||
action1 = {
|
||||
ButtonBinding(Enum.KeyCode.L,1)
|
||||
},
|
||||
action2 = {
|
||||
MouseBinding(Enum.UserInputType.MouseButton3,1)
|
||||
},
|
||||
flaps = {
|
||||
SequenceKeyBinding(Enum.KeyCode.F,4)
|
||||
},
|
||||
gear = {
|
||||
SequenceKeyBinding(Enum.KeyCode.G,1)
|
||||
},
|
||||
}
|
||||
|
||||
module.values = {}
|
||||
module.cursor = nil
|
||||
|
||||
function module.aimTowards(root,position,values)
|
||||
local aim = root:PointToObjectSpace(position).Unit
|
||||
local _,_,z = root:ToEulerAnglesYXZ()
|
||||
values.pitch += aim.Y*2 + values.pitch
|
||||
values.yaw += aim.X*-2 + values.yaw
|
||||
values.roll += values.roll + (-z/3) + values.yaw/5
|
||||
end
|
||||
|
||||
-- Bindings
|
||||
local shouldAim = true
|
||||
module.seat = nil
|
||||
if _G.IsClient then
|
||||
spawn(function()
|
||||
local dragger = require(_G.Modules.DraggingModule).dragger
|
||||
_G:WaitFor("ControlMouseButton")
|
||||
local function aimOptionCallback()
|
||||
shouldAim = not shouldAim
|
||||
if shouldAim then
|
||||
_G.ControlMouseButton.Text = "Mouse"
|
||||
else
|
||||
_G.ControlMouseButton.Text = "WASD"
|
||||
end
|
||||
end
|
||||
_G.ControlMouseButton.Activated:Connect(aimOptionCallback)
|
||||
input.InputEnded:Connect(function(input,irrelevant)
|
||||
if not irrelevant then
|
||||
if
|
||||
input.UserInputType == Enum.UserInputType.Keyboard and
|
||||
input.KeyCode == Enum.KeyCode.LeftAlt
|
||||
then
|
||||
aimOptionCallback()
|
||||
end
|
||||
end
|
||||
end)
|
||||
local function processThrottle(throttle)
|
||||
throttle = math.clamp(throttle,-1,1)
|
||||
_G.ThrottleFrame.ThrottleBar.Value.Size = UDim2.new(1, 0, 0.5 * math.abs(throttle),0)
|
||||
_G.ThrottleFrame.ThrottleBar.Value.Position = UDim2.new(0, 0, 0.5 - (0.5 * math.clamp(throttle,0,1)),0)
|
||||
_G.ThrottleFrame.TextValue.Text = tostring(math.ceil(throttle * 100)).."%"
|
||||
if throttle > 0 then
|
||||
_G.ThrottleFrame.ThrottleBar.Value.BackgroundColor3 = Color3.new(0, 1, 0)
|
||||
end
|
||||
if throttle < 0 then
|
||||
_G.ThrottleFrame.ThrottleBar.Value.BackgroundColor3 = Color3.new(1, 0, 0)
|
||||
end
|
||||
module.values.throttle = throttle
|
||||
end
|
||||
dragger(_G.ThrottleFrame.ThrottleBar,function(begin)
|
||||
return {
|
||||
drag = function(changed)
|
||||
local down = (changed.Y - (_G.ThrottleFrame.ThrottleBar.AbsolutePosition.Y))/_G.ThrottleFrame.ThrottleBar.AbsoluteSize.Y
|
||||
processThrottle(-(math.clamp(down,0,1) * 2 - 1))
|
||||
end,
|
||||
}
|
||||
end)
|
||||
repeat
|
||||
local delta = task.wait()
|
||||
_G.ThrottleFrame.Visible = not not module.seat
|
||||
if not module.seat then continue end
|
||||
for name,bindings in pairs(controlBindings) do
|
||||
local value = nil
|
||||
for _,binding in pairs(bindings) do
|
||||
local new = binding(module.values[name],value,delta)
|
||||
if new then
|
||||
--print(name,module.values[name],value,delta)
|
||||
if math.abs(new) > (value or 0) then value = new end
|
||||
end
|
||||
end
|
||||
module.values[name] = value or 0
|
||||
end
|
||||
local instance,ray = mouse.getMouseHit()
|
||||
module.cursor = ray.Origin + ray.Direction * 300
|
||||
if module.seat and shouldAim then
|
||||
local position = ray.Origin + ray.Direction * 300 + Vector3.new(0,25,0)
|
||||
module.aimTowards(module.seat:GetPivot(),position,module.values)
|
||||
end
|
||||
processThrottle(module.values.throttle)
|
||||
for index,value in pairs(module.values) do
|
||||
module.values[index] = math.clamp(value or 0,-1,1)
|
||||
end
|
||||
until false
|
||||
end)
|
||||
end
|
||||
|
||||
return module
|
||||
Reference in New Issue
Block a user