Skip to content

Commit

Permalink
lua: reduce code duplication in edicts.lua
Browse files Browse the repository at this point in the history
alexey-lysiuk committed Dec 10, 2023
1 parent 3e596fd commit 747db39
Showing 1 changed file with 39 additions and 55 deletions.
94 changes: 39 additions & 55 deletions Misc/qs_pak/scripts/edicts.lua
Original file line number Diff line number Diff line change
@@ -174,28 +174,6 @@ local function titlecase(str)
end)
end

local function handleedict(func, edict, current, choice)
local description, location, angles = func(edict)

if not description then
return current
end

if choice <= 0 then
print(current .. ':', description, 'at', location)
elseif choice == current then
if edicts.isitem(edict) then
-- Adjust Z coordinate so player will appear slightly above destination
location.z = location.z + 20
end

player.safemove(location, angles)
return
end

return current + 1
end

local function localizednetname(edict)
local name = edict.netname

@@ -252,12 +230,6 @@ function edicts.issecret(edict)
return description, location
end

local issecret = edicts.issecret

function console.secrets(choice)
foreach(function(...) return handleedict(issecret, ...) end, choice)
end


--
-- Monsters
@@ -302,12 +274,6 @@ function edicts.ismonster(edict)
return classname, edict.origin, edict.angles
end

local ismonster = edicts.ismonster

function console.monsters(choice)
foreach(function(...) return handleedict(ismonster, ...) end, choice)
end


--
-- Teleports
@@ -344,12 +310,6 @@ function edicts.isteleport(edict)
return description, location
end

local isteleport = edicts.isteleport

function console.teleports(choice)
foreach(function(...) return handleedict(isteleport, ...) end, choice)
end


--
-- Doors
@@ -393,12 +353,6 @@ function edicts.isdoor(edict)
return description, location
end

local isdoor = edicts.isdoor

function console.doors(choice)
foreach(function(...) return handleedict(isdoor, ...) end, choice)
end


--
-- Items
@@ -473,12 +427,6 @@ function edicts.isitem(edict, current, choice)
return name, edict.origin
end

local isitem = edicts.isitem

function console.items(choice)
foreach(function(...) return handleedict(isitem, ...) end, choice)
end


--
-- Buttons
@@ -495,12 +443,48 @@ function edicts.isbutton(edict, current, choice)
return description, location
end

local isbutton = edicts.isbutton

function console.buttons(choice)
foreach(function(...) return handleedict(isbutton, ...) end, choice)
--
-- Edicts console commands
--

local isitem <const> = edicts.isitem

local function handleedict(func, edict, current, choice)
local description, location, angles = func(edict)

if not description then
return current
end

if choice <= 0 then
print(current .. ':', description, 'at', location)
elseif choice == current then
if isitem(edict) then
-- Adjust Z coordinate so player will appear slightly above destination
location.z = location.z + 20
end

player.safemove(location, angles)
return
end

return current + 1
end

local function addedictscommand(name, func)
console[name] = function(choice)
foreach(function(...) return handleedict(func, ...) end, choice)
end
end

addedictscommand('secrets', edicts.issecret)
addedictscommand('monsters', edicts.ismonster)
addedictscommand('teleports', edicts.isteleport)
addedictscommand('doors', edicts.isdoor)
addedictscommand('items', isitem)
addedictscommand('buttons', edicts.isbutton)


---
--- Gaze, entity player is looking at

0 comments on commit 747db39

Please sign in to comment.