Created
May 17, 2024 20:48
-
-
Save SigmaThetaTech/0a3f8da16d470190c22fc7d56790a6e7 to your computer and use it in GitHub Desktop.
Sample code for a controller by SigmaTech
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--!strict | |
-- Authors: ΣTΞCH (SigmaTech) | |
-- May 02, 2024 | |
--[[ | |
BasicMoveToolController.lua | |
(PURPOSE OF THIS FILE) | |
[API] | |
]] | |
--// Services //-- | |
local ReplicatedStorage = game:GetService("ReplicatedStorage") | |
local ContextActionService = game:GetService("ContextActionService") | |
--// References //-- | |
local Shared = ReplicatedStorage.Source.Shared | |
--// Requires //-- | |
local Import = require(Shared.Core.Import) | |
local Knit = Import("Knit") | |
local Janitor = Import("Janitor") ---@module Janitor | |
--// Types //-- | |
--// Constants //-- | |
local DAMAGE = 5 | |
local COOLDOWN = 3 | |
local HITSCAN_DISTANCE = 10 | |
local TOOL_TAG = "BasicMoveTool" | |
--// Volatiles //-- | |
local isActive = false | |
local activationTimestamp = 0 | |
-------------------------------------------------------------------------------- | |
--// KNIT CONTROLLER DECLARATION //-- | |
-------------------------------------------------------------------------------- | |
local BasicMoveToolController = Knit.CreateController { Name = "BasicMoveToolController" } | |
-------------------------------------------------------------------------------- | |
--// PRIVATE FUNCTIONS //-- | |
-------------------------------------------------------------------------------- | |
local function onActivated() | |
-- Cooldown | |
if isActive then return end | |
isActive = true | |
activationTimestamp = tick() | |
task.delay(COOLDOWN, function() | |
isActive = false | |
end) | |
local character = game.Players.LocalPlayer.Character | |
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") | |
local localUUID = character:GetAttribute("UUID") | |
-- Block cast | |
local overlapParams = OverlapParams.new() | |
overlapParams.FilterType = Enum.RaycastFilterType.Blacklist | |
overlapParams.FilterDescendantsInstances = character:GetDescendants() | |
local raycastResult = workspace:GetPartBoundsInBox(humanoidRootPart.CFrame + humanoidRootPart.CFrame.LookVector * (HITSCAN_DISTANCE/2 + 0.5), Vector3.new(5,5,HITSCAN_DISTANCE), overlapParams) | |
-- Determine hit UUID | |
local hitUUID = nil | |
if raycastResult then | |
for _, hitPart in raycastResult do | |
local UUID = hitPart.Parent:GetAttribute("UUID") | |
if UUID then | |
hitUUID = UUID | |
break | |
end | |
end | |
end | |
-- Ask CharacterStateController to change state on both local and server | |
local CharacterStateController = Knit.GetController("CharacterStateController") | |
CharacterStateController:BasicMove(localUUID, hitUUID, DAMAGE) | |
end | |
local function onDeactivated() | |
--print("Deactivated") | |
end | |
local function equipped(tool: Tool, janitor: Janitor) | |
print("Equipped") | |
end | |
local function unequipped(tool: Tool) | |
if isActive then | |
local CharacterStateController = Knit.GetController("CharacterStateController") | |
CharacterStateController:CancelAllAnimations() | |
end | |
end | |
-------------------------------------------------------------------------------- | |
--// METHODS //-- | |
-------------------------------------------------------------------------------- | |
-------------------------------------------------------------------------------- | |
--// KNIT CORE //-- | |
-------------------------------------------------------------------------------- | |
function BasicMoveToolController:KnitStart() | |
local equippedJanitor: Janitor = Janitor.new() | |
ContextActionService.LocalToolEquipped:Connect(function(tool) | |
if tool:HasTag(TOOL_TAG) then | |
equipped(tool, equippedJanitor) | |
equippedJanitor:Add(tool.Activated:Connect(onActivated), "Disconnect", "Activated") | |
equippedJanitor:Add(tool.Deactivated:Connect(onDeactivated), "Disconnect", "Deactivated") | |
end | |
end) | |
ContextActionService.LocalToolUnequipped:Connect(function(tool) | |
if tool:HasTag(TOOL_TAG) then | |
unequipped(tool) | |
equippedJanitor:Cleanup() | |
end | |
end) | |
end | |
function BasicMoveToolController:KnitInit() | |
end | |
return BasicMoveToolController |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment