Добавлен nazarpunk,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Наработка
Наработка, позволяющая проверять проходимость точки используя скрытый предмет. По сути является TerrainPathability переписанной на lua.
Список функций
---@param x real
---@param y real
---@return boolean
function IsTerrainWalkable(x, y) end
---@param x real
---@param y real
---@return boolean
function IsTerrainDeepWater(x, y) end
---@param x real
---@param y real
---@return boolean
function IsTerrainShallowWater(x, y) end
---@param x real
---@param y real
---@return boolean
function IsTerrainLand(x, y) end
Настройка
local RANGE = 10 -- Расстояние, на котором проходит проверка
local DUMMY = FourCC('wolg') -- Ид предмета для проверки проходимости
Код
do
local RANGE = 10 -- Расстояние, на котором проходит проверка
local DUMMY = FourCC('wolg') -- Ид предмета для проверки проходимости
local rect---@type rect
local item ---@type item
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
rect = Rect(0, 0, 128, 128)
item = CreateItem(DUMMY, 0, 0)
SetItemVisible(item, false)
end
local items = {}
local function hide()
local target = GetEnumItem()
if not IsItemVisible(target) then return end
table.insert(items, target)
SetItemVisible(target, false)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainWalkable(x, y)
MoveRectTo(rect, x, y)
EnumItemsInRect(rect, nil, hide)
SetItemPosition(item, x, y)
local dx = GetItemX(item) - x
local dy = GetItemY(item) - y
SetItemVisible(item, false)
for i = 1, #items do
SetItemVisible(items[i], true)
end
items = {}
return dx * dx + dy * dy <= RANGE * RANGE and not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY)
end
end
---@param x real
---@param y real
---@return boolean
function IsTerrainDeepWater (x, y)
return not IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY) and IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainShallowWater (x, y)
return not IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY) and not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) and IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainLand(x, y)
return IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainPlatform (x, y)
return not IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY) and not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) and not IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY)
end
Скачать
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
scopterectus
5 лет назад
0
Что лучше ( dx * dx ) или ( dx ^ 2 ) ?
1
DracoL1ch
5 лет назад
1
ScopteRectuS:
примерно равны, слева два поиска переменных и операнд, справа одна переменная, константа и использование функции Pow
8
nazarpunk
5 лет назад
8
DracoL1ch:
Написал маленький тест, оказалось степень тяжёлая.
0
PT153
5 лет назад
0
NazarPunk, ура, хоть где-то я могу нормально тестить производительность.
0
nazarpunk
5 лет назад
0
PT153:
Мелкие тесты я запускаю здесь.
Правда в игре немного другие значения
Загруженные файлы
- 1564310777947.png
- 1564310648772.png
Чтобы оставить комментарий, пожалуйста, войдите на сайт.