Добавлен Vlod,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Наработка
Возможно вам хотелось сделать окружающее пространство более живым и органичным? Данная наработка предоставляет возможность поэтапной смены тайлов, демонстрирующей "зарастание" покрова. Для примера будут использованы стандартные тайлы, хотя вы всегда можете подставить свои.
Быстрый старт
code
-- синхронизируем lua рандом
-- только для 1.26
math.randomseed(GetRandomInt(0, 2147483648-1))
local world_rect = GetWorldBounds()
local minX, maxX, minY, maxY = GetRectMinX(world_rect), GetRectMaxX(world_rect), GetRectMinY(world_rect), GetRectMaxY(world_rect)
local step = 128 -- шаг сетки
local Timer = TimerSystem()
local ts_array = SquareArray(minX, maxX, minY, maxY, step) -- квадратный массив для создания TerrainSystem
local ts_set = function (x,y,typ) SetTerrainType(x,y,typ,math.random(4)-1,1,0) end
local ts_get = GetTerrainType
ter_sys = TerrainSystem{
Timer = Timer,
array = ts_array,
get_type = ts_get,
set_type = ts_set,
}
-- функция конвертации строки-типа в число, для того чтобы показать пример
local function FourCC(str)
local n, len = 0, #str
for i = len, 1, -1 do n = n + (str:byte(i,i) << 8*(len-i)) end -- shift by 0,8,16,24
return n
end
-- создаем 3 участка
SetTerrainType(-200,200, FourCC('Ldrg'), 1, 3, 0)
SetTerrainType(200,-200, FourCC('Lrok'), 1, 3, 0)
SetTerrainType(-200,-200, FourCC('Ybtl'), 1, 3, 0)
-- запуск по всей карте
-- ter_sys:init()
-- запуск в квадратном участке
-- for x = -384, 384, 128 do
-- for y = -384, 384, 128 do
-- ter_sys:start_tox(x, y)
-- end
-- end
-- Timer.after(1, function()
-- ter_sys:stop_tox(0,128)
-- ter_sys:modification(128,0, 5)
-- end)
API
local ter_sys = TerrainSystem(...) -- см быстрый старт
ter_sys:start_tox(real x, real y) --> true or false | запустить зарастание
ter_sys:stop_tox(real x, real y) --> остановить зарастание
ter_sys:modification(rela x, real y, real ratio) --> true or false | ускорить или замедлить
-- изначально скорость 1, передача -0.5 ускорит на 50%, передача 3. замедлит на 300%
ter_sys:init() -- запускает start_tox() по всей карте
ter_sys:IsEarth(real x, real y) -- true, если это один из тайлов земли
ter_sys:IsFootballGrass(real x, real y) -- true, если это футбольная трава
ter_sys:IsGreenGrass(real x, real y) -- true, если это зеленая трава
ter_sys:IsYellowGrass(real x, real y) -- true, если это желтая трава
БД
-- types - цепочки превращений земли до FOOTBALL_GRASS
-- type - тип почвы
-- time - время перехода до следующей стадии
local EARTH = {
{types = {'Ldrt', 'Ldrg', 'Fdrg'}, time = 3},
{types = {'Lrok', 'Frok'}, time = 4},
}
local FOOTBALL_GRASS = {type = 'Lgrs', time = 5}
local GREEN_GRASS = {type = 'Lgrd', time = 6}
local YELLOW_GRASS = {type = 'Fgrd'}
По кнопке скачать находится архив с исходниками и их адаптированными вариантами для 1.26 и reforget.
Отдельно спасибо МрачныйВорон за спонсирование данной наработки
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Lord_Teo
https://xgm.guru/files/100/280785/comments/485257/test.w3x
Отредактирован MpW
Отредактирован Lord_Teo