I made a combat controller with Knit framework, and I would like to know if I should change anything or improve anything.
Code is as follows:
local Knit: Knit = require(game:GetService("ReplicatedStorage").Knit)
local Signal = require(Knit.Util.Signal)
-- Constants:
-- Variables:
local Limits = {
-- Active States
Attacking = {"Stunned", "Downed", "Blocking"};
Charging = {"Stunned", "Downed", "Blocking"};
Blocking = {"Stunned", "Downed"};
-- Override States
Stunned = {};
Downed = {};
-- Passive States
Sprinting = {"Crouching", "Attacking", "Charging", "Blocking"};
Crouching = {"Sprinting", "Attacking", "Charging", "Blocking"}
}
-- Create Controller:
local Controller: Dictionary = Knit.CreateController {
Name = "CombatController";
State = {
-- Active States
Attacking = false;
Charging = false;
Blocking = false;
-- Override States
Stunned = false;
Downed = false;
-- Passive States
Sprinting = false;
Crouching = false;
};
Changed = Signal.new();
}
local State = Controller.State
-- Populate Controllers:
function Controller:ChangeState(Index: string, Status: boolean, Override: boolean)
if not Override then
for i,v in ipairs(Limits[Index]) do
if State[v] == true then
print(v)
return false
end
end
end
Controller.Changed:Fire(Index, Status)
State[Index] = Status
return true
end
function Controller:Attack(Status: boolean, Override: boolean)
return Controller:ChangeState("Attacking", Status, Override) and (State.Charging and Controller:ChangeState("Charging", false, true))
end
function Controller:Charge(Status: boolean, Override: boolean)
return Controller:ChangeState("Charging", Status, Override)
end
function Controller:Block(Status: boolean, Override: boolean)
return Controller:ChangeState("Blocking", Status, Override)
end
function Controller:Stunned(Status: boolean, Override: boolean)
return Controller:ChangeState("Stunned", Status, Override)
end
function Controller:Downed(Status: boolean, Override: boolean)
return Controller:ChangeState("Downed", Status, Override)
end
function Controller:Sprint(Status: boolean, Override: boolean)
return Controller:ChangeState("Sprinting", Status, Override)
end
function Controller:Crouch(Status: boolean, Override: boolean)
return Controller:ChangeState("Crouching", Status, Override)
end