Files
PlaneBuilding/scripts/modules/MouseModule.lua
T

57 lines
2.2 KiB
Lua

-- This module can be required and used by other scripts to get information about where the mouse is in the 3D world
local module = {}
local input = game:GetService("UserInputService")
module.mouseDistance = 500
module.mouseRaycastParameters = RaycastParams.new()
local dominantFinger
local usingMouse = true
local lastMouseInstance
local lastMouseRay
game:GetService("UserInputService").TouchStarted:Connect(function(touch,irrelevant)
if not irrelevant and not dominantFinger then
dominantFinger = touch
usingMouse = false
end
end)
game:GetService("UserInputService").TouchEnded:Connect(function(touch,irrelevant)
if touch == dominantFinger then dominantFinger = nil end
end)
local uit = Enum.UserInputType
local mouseInputs = {uit.MouseButton1,uit.MouseWheel,uit.MouseMovement,uit.MouseButton2}
for _,item in ipairs(mouseInputs) do mouseInputs[item] = true end
game:GetService("UserInputService").InputBegan:Connect(function(object)
if mouseInputs[object.UserInputType] then usingMouse = true end
end)
function module.getMouseHit(location)
local mousePosition = location or input:GetMouseLocation()
local mouseRay = game.Workspace.CurrentCamera:ViewportPointToRay(mousePosition.X,mousePosition.Y)
if dominantFinger then
local position = dominantFinger.Position
mouseRay = game.Workspace.CurrentCamera:ScreenPointToRay(position.X,position.Y)
end
local mouseInstance = game.Workspace:Raycast(mouseRay.Origin,mouseRay.Direction*module.mouseDistance,module.mouseRaycastParameters)
return mouseInstance,mouseRay,(dominantFinger or usingMouse)
end
function module.isMouseDown()
return input:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) or dominantFinger
end
function mouse()
local pos = input:GetMouseLocation()
local vec = game.Workspace.CurrentCamera:ViewportPointToRay(pos.x,pos.y,0)
return game.Workspace.CurrentCamera.CFrame:PointToObjectSpace(vec.Origin+vec.Direction*300).Unit
end
function module.initialise()
module.mouseRaycastParameters.FilterDescendantsInstances = {game.Workspace.Hidden,game.Workspace.Players}
module.mouseRaycastParameters.FilterType = Enum.RaycastFilterType.Exclude
module.mouseRaycastParameters.IgnoreWater = true
end
return module