You've already forked ComfyFactorio
mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-10-08 22:42:06 +02:00
104 lines
2.2 KiB
Lua
104 lines
2.2 KiB
Lua
![]() |
local Event = require 'utils.event'
|
||
|
local Public = {}
|
||
|
local Global = require 'utils.global'
|
||
|
|
||
|
local this = {}
|
||
|
|
||
|
Global.register(
|
||
|
this,
|
||
|
function (t)
|
||
|
this = t
|
||
|
end
|
||
|
)
|
||
|
local random = math.random
|
||
|
|
||
|
local random_particles =
|
||
|
{
|
||
|
'dirt-2-stone-particle-medium',
|
||
|
'dirt-4-dust-particle',
|
||
|
'coal-particle'
|
||
|
}
|
||
|
|
||
|
local s_random_particles = #random_particles
|
||
|
|
||
|
local function create_particles(data)
|
||
|
local surface = data.surface
|
||
|
local position = data.position
|
||
|
local amount = data.amount
|
||
|
|
||
|
if not surface or not surface.valid then
|
||
|
return
|
||
|
end
|
||
|
for _ = 1, amount, 1 do
|
||
|
local m = random(6, 12)
|
||
|
local m2 = m * 0.005
|
||
|
|
||
|
surface.create_particle(
|
||
|
{
|
||
|
name = random_particles[random(1, s_random_particles)],
|
||
|
position = position,
|
||
|
frame_speed = 0.1,
|
||
|
vertical_speed = 0.1,
|
||
|
height = 0.1,
|
||
|
movement = { m2 - (random(0, m) * 0.01), m2 - (random(0, m) * 0.01) }
|
||
|
}
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function Public.particle_effects(surface, position, count)
|
||
|
if not (surface and surface.valid) then
|
||
|
return
|
||
|
end
|
||
|
if not position then
|
||
|
return
|
||
|
end
|
||
|
if not position.x then
|
||
|
return
|
||
|
end
|
||
|
if not position.y then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if not count then
|
||
|
count = 60
|
||
|
end
|
||
|
|
||
|
for t = 1, count, 1 do
|
||
|
if not this[game.tick + t] then
|
||
|
this[game.tick + t] = {}
|
||
|
end
|
||
|
|
||
|
this[game.tick + t][#this[game.tick + t] + 1] =
|
||
|
{
|
||
|
callback = 'create_particles',
|
||
|
data = { surface = surface, position = { x = position.x, y = position.y }, amount = math.ceil(t * 0.05) }
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local callbacks =
|
||
|
{
|
||
|
['create_particles'] = create_particles,
|
||
|
}
|
||
|
|
||
|
local function on_tick()
|
||
|
local t = game.tick
|
||
|
if not this[t] then
|
||
|
return
|
||
|
end
|
||
|
for _, token in pairs(this[t]) do
|
||
|
local callback = token.callback
|
||
|
local data = token.data
|
||
|
local cbl = callbacks[callback]
|
||
|
if callbacks[callback] then
|
||
|
cbl(data)
|
||
|
end
|
||
|
end
|
||
|
this[t] = nil
|
||
|
end
|
||
|
|
||
|
Event.add(defines.events.on_tick, on_tick)
|
||
|
|
||
|
return Public
|