Skip to content

Commit a705e43

Browse files
authored
Merge pull request #141 from YimMenu-Lua/misc_refactors
refactor: another bloated refactor
2 parents 4f7f93c + fa3a77d commit a705e43

92 files changed

Lines changed: 1989 additions & 1350 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "dev/LuaLS"]
2+
path = dev/LuaLS
3+
url = https://github.com/xesdoog/YimLLSX

SSV2/includes/backend.lua

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ local ClearPreview = function() PreviewService:Clear() end
2020
---@enum eBackendEvent
2121
Enums.eBackendEvent = {
2222
RELOAD_UNLOAD = 1,
23-
SESSION_SWITCH = 2,
24-
PLAYER_SWITCH = 3,
23+
PLAYER_SWITCH = 2,
24+
SESSION_SWITCH = 3,
25+
SESSION_JOIN = 4, -- Only works when switching from SP to Online, not between sessions
26+
SESSION_LEAVE = 5, -- Only works when switching from Online to SP, not between sessions
2527
}
2628

2729
---@enum eEntityType
@@ -56,8 +58,9 @@ local Backend = {
5658
---@type table<eBackendEvent, array<function>>
5759
EventCallbacks = {
5860
[Enums.eBackendEvent.RELOAD_UNLOAD] = { ClearPreview },
59-
[Enums.eBackendEvent.SESSION_SWITCH] = { ClearPreview },
60-
[Enums.eBackendEvent.PLAYER_SWITCH] = { ClearPreview }
61+
[Enums.eBackendEvent.PLAYER_SWITCH] = { ClearPreview },
62+
[Enums.eBackendEvent.SESSION_SWITCH] = {},
63+
[Enums.eBackendEvent.SESSION_LEAVE] = {},
6164
},
6265

6366
---@type table<eEntityType, table<handle, handle>>
@@ -77,7 +80,7 @@ local Backend = {
7780
---@type table<string, fun(handle: handle): any>
7881
FeatureEntityHandlers = {},
7982

80-
---@type table<int64_t, pointer>
83+
---@type table<uint64_t, pointer>
8184
AllocatedPointers = {}
8285
}; Backend.__index = Backend
8386

@@ -411,10 +414,11 @@ end
411414

412415
---@param event eBackendEvent
413416
function Backend:TriggerEventCallbacks(event)
414-
for _, fn in ipairs(self.EventCallbacks[event] or {}) do
415-
if (type(fn) == "function") then
416-
xpcall(fn, function(err)
417-
log.fwarning("[Backend]: Callback error for event %s: %s", EnumToString(Enums.eBackendEvent, event), err)
417+
for _, cb in ipairs(self.EventCallbacks[event] or {}) do
418+
if (type(cb) == "function") then
419+
xpcall(cb, function(err)
420+
local evt_name = EnumToString(Enums.eBackendEvent, event)
421+
log.fwarning("[Backend]: Callback error for event %s: %s", evt_name, err)
418422
end)
419423
end
420424
end
@@ -501,30 +505,35 @@ function Backend:RegisterHandlers()
501505
Translator:OnTick()
502506

503507
yield()
504-
end, {
505-
exception_handler = function()
506-
Backend:Cleanup()
507-
end
508-
})
508+
end, { exception_handler = function() Backend:Cleanup() end })
509509

510510
ThreadManager:RegisterLooped("SS_POOLMGR", function()
511511
self:PoolMgr()
512512
yield()
513513
end)
514514

515-
event.register_handler(menu_event.MenuUnloaded, function() self:Cleanup() end)
516-
event.register_handler(menu_event.ScriptsReloaded, function() self:Cleanup() end)
515+
event.register_handler(menu_event.MenuUnloaded, function()
516+
self:Cleanup()
517+
end)
518+
519+
event.register_handler(menu_event.ScriptsReloaded, function()
520+
self:Cleanup()
521+
end)
522+
523+
event.register_handler(menu_event.playerMgrInit, function()
524+
self:TriggerEventCallbacks(Enums.eBackendEvent.SESSION_JOIN)
525+
end)
526+
527+
event.register_handler(menu_event.playerMgrShutdown, function()
528+
self:TriggerEventCallbacks(Enums.eBackendEvent.SESSION_LEAVE)
529+
end)
517530
end
518531

519532
-- ### Baguette
520-
------
521-
-- Note: This **will remove** all registered threads and not just stop or suspend them.
522-
--
523-
-- You can only restart (re-register) them by reloading the script.
524533
function Backend:PANIQUE()
525534
ThreadManager:Run(function()
526535
self:Cleanup()
527-
for i = Enums.eBackendEvent.SESSION_SWITCH, Enums.eBackendEvent.PLAYER_SWITCH do
536+
for i = Enums.eBackendEvent.PLAYER_SWITCH, Enums.eBackendEvent.SESSION_LEAVE do
528537
self:TriggerEventCallbacks(i)
529538
sleep(100)
530539
end

SSV2/includes/classes/Set.lua

Lines changed: 65 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,50 @@
1010
--------------------------------------
1111
-- Class: Set
1212
--------------------------------------
13-
---@class Set<T> : { [T]: true }
14-
---@field protected m_data table<T, true>
15-
---@field protected m_data_type string
16-
---@field new fun(...: T): Set<T>
13+
-- Stores unique items of the same type.
14+
--___
15+
-- The set's runtime type is determined by the first item inserted. Once a type
16+
--
17+
-- has been determined, attempting to push a value of a different type will
18+
--
19+
-- raise an error.
20+
--
21+
-- For best LuaLS type inference, consider constructing sets with at least one item:
22+
--
23+
--```Lua
24+
-- local strings = Set("abc") -- Set<string>
25+
-- strings:Push(69) -- <- Produces a LuaLS type-mismatch warning
26+
--```
27+
--
28+
-- Creating an empty set does not provide LuaLS enough information to infer the
29+
--
30+
-- generic type:
31+
--
32+
--```Lua
33+
-- local unk = Set() -- Set<T>
34+
-- unk:Push("abc") -- No LuaLS warnings
35+
-- unk:Push(123) -- <- Still no LuaLS warning but this will throw at runtime because the previous Push assigned a string type.
36+
--```
37+
--
38+
-- Subsequent calls to Push do not update the inferred generic parameter, though
39+
-- runtime type checking still works as expected.
40+
---@class Set<T>
41+
---@field protected m_data { [T]: true }
42+
---@field private m_data_type string
43+
---@field private m_count integer
1744
---@overload fun(...: T): Set<T>
18-
local Set = Callable("Set", {
19-
ctor = function(t, ...)
20-
return t:new(...)
21-
end
22-
})
45+
local Set = Callable("Set", { ctor = function(t, ...) return t:new(...) end })
2346

47+
---@param ... T
48+
---@return Set<T>
2449
function Set:new(...)
25-
local instance = setmetatable({ m_data = {} }, self)
26-
local args = { ... }
27-
28-
if (#args > 0) then
29-
instance.m_data_type = type(args[1])
30-
for _, arg in ipairs(args) do
31-
instance:Push(arg)
32-
end
50+
local instance = setmetatable({
51+
m_data = {},
52+
m_count = 0
53+
}, self)
54+
55+
for _, v in ipairs({ ... }) do
56+
instance:Push(v)
3357
end
3458

3559
return instance
@@ -49,23 +73,34 @@ function Set:Push(element)
4973
if (not self.m_data_type) then
5074
self.m_data_type = __type
5175
elseif (__type ~= self.m_data_type) then
52-
error(_F(
53-
"[Set]: Data type mismatch! A set can only contain unique same-type objects. %s expected, got %s instead.",
76+
error(_F("[Set]: Type mismatch! A set can only contain unique same-type objects. Expected '%s', got '%s' instead.",
5477
self.m_data_type,
5578
__type
5679
))
5780
end
5881

5982
self.m_data[element] = true
83+
self.m_count = self.m_count + 1
6084
end
6185

6286
---@param element T
6387
function Set:Pop(element)
88+
if (self.m_data[element] == nil) then
89+
return
90+
end
91+
6492
self.m_data[element] = nil
93+
self.m_count = self.m_count - 1
94+
95+
if (self.m_count == 0) then
96+
self.m_data_type = nil
97+
end
6598
end
6699

67100
function Set:Clear()
68-
self.m_data = {}
101+
self.m_data = {}
102+
self.m_count = 0
103+
self.m_data_type = nil
69104
end
70105

71106
---@param element any
@@ -76,16 +111,16 @@ end
76111

77112
---@return boolean
78113
function Set:IsEmpty()
79-
return (next(self.m_data) == nil)
114+
return self.m_count == 0
80115
end
81116

82-
---@return number
117+
---@return integer
83118
function Set:Size()
84-
return table.getlen(self.m_data)
119+
return self.m_count
85120
end
86121

87-
---@return fun(t: table<T, true>, index?: T): T, true
88-
---@return table<T, true>
122+
---@return fun(t: table<T, true>, index?: T): T, true Iterator
123+
---@return table<T, true> data
89124
function Set:Iter()
90125
return pairs(self.m_data)
91126
end
@@ -96,4 +131,9 @@ function Set:__pairs()
96131
return pairs(self.m_data)
97132
end
98133

134+
---@return integer
135+
function Set:__len()
136+
return self.m_count
137+
end
138+
99139
return Set

SSV2/includes/classes/gta/CWheel.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
local CStructView = require("includes.classes.gta.CStructView")
11-
local fVector3 = require("fVector3")
11+
local fVector3 = require("includes.classes.gta.fVector3")
1212

1313

1414
--------------------------------------

SSV2/includes/data/enums/__init__.lua

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,34 @@
1111
--
1212
-- All enums are stored here to avoid polluting the global namespace.
1313
local Enums <const> = {
14-
eActionType = require("action_type"),
15-
eAnimFlags = require("anim_flags"),
16-
eDrivingFlags = require("driving_flags"),
17-
eGameState = require("game_state"),
18-
eGameLanguage = require("game_language"),
19-
eHandlingEditorTypes = require("handling_editor_types"),
20-
eHandlingType = require("handling_type"),
21-
eLandingGearState = require("landing_gear_state"),
22-
eManagedValueDataType = require("managed_value_data_type"),
23-
eManagedValueType = require("managed_value_type"),
24-
eModelType = require("model_type"),
25-
ePedCombatAttributes = require("ped_combat_attributes"),
26-
ePedComponents = require("ped_components"),
27-
ePedConfigFlags = require("ped_config_flags"),
28-
ePedGender = require("ped_gender"),
29-
ePedResetFlags = require("ped_reset_flags"),
30-
ePedTaskIndex = require("ped_task_index"),
31-
ePedType = require("ped_type"),
32-
eRagdollBlockingFlags = require("ragdoll_blocking_flags"),
33-
eVehicleAdvancedFlags = require("vehicle_advanced_flags"),
34-
eVehicleClass = require("vehicle_classes"),
35-
eVehicleHandlingFlags = require("vehicle_handling_flags"),
36-
eVehicleModelFlags = require("vehicle_model_flags"),
37-
eVehicleModelInfoFlags = require("vehicle_model_info_flags"),
38-
eVehicleTask = require("vehicle_task"),
39-
eVehicleType = require("vehicle_type"),
40-
eWheelConfigFlags = require("cwheel_config_flags"),
41-
eWheelDynamicFlags = require("cwheel_dynamic_flags"),
14+
eActionType = require("includes.data.enums.action_type"),
15+
eAnimFlags = require("includes.data.enums.anim_flags"),
16+
eDrivingFlags = require("includes.data.enums.driving_flags"),
17+
eGameState = require("includes.data.enums.game_state"),
18+
eGameLanguage = require("includes.data.enums.game_language"),
19+
eHandlingEditorTypes = require("includes.data.enums.handling_editor_types"),
20+
eHandlingType = require("includes.data.enums.handling_type"),
21+
eLandingGearState = require("includes.data.enums.landing_gear_state"),
22+
eManagedValueDataType = require("includes.data.enums.managed_value_data_type"),
23+
eManagedValueType = require("includes.data.enums.managed_value_type"),
24+
eModelType = require("includes.data.enums.model_type"),
25+
ePedCombatAttributes = require("includes.data.enums.ped_combat_attributes"),
26+
ePedComponents = require("includes.data.enums.ped_components"),
27+
ePedConfigFlags = require("includes.data.enums.ped_config_flags"),
28+
ePedGender = require("includes.data.enums.ped_gender"),
29+
ePedResetFlags = require("includes.data.enums.ped_reset_flags"),
30+
ePedTaskIndex = require("includes.data.enums.ped_task_index"),
31+
ePedType = require("includes.data.enums.ped_type"),
32+
eRagdollBlockingFlags = require("includes.data.enums.ragdoll_blocking_flags"),
33+
eVehicleAdvancedFlags = require("includes.data.enums.vehicle_advanced_flags"),
34+
eVehicleClass = require("includes.data.enums.vehicle_classes"),
35+
eVehicleHandlingFlags = require("includes.data.enums.vehicle_handling_flags"),
36+
eVehicleModelFlags = require("includes.data.enums.vehicle_model_flags"),
37+
eVehicleModelInfoFlags = require("includes.data.enums.vehicle_model_info_flags"),
38+
eVehicleTask = require("includes.data.enums.vehicle_task"),
39+
eVehicleType = require("includes.data.enums.vehicle_type"),
40+
eWheelConfigFlags = require("includes.data.enums.cwheel_config_flags"),
41+
eWheelDynamicFlags = require("includes.data.enums.cwheel_dynamic_flags"),
4242
}
4343

4444
return Enums

0 commit comments

Comments
 (0)