57 lines
2.2 KiB
Lua
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
|