1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-08 00:39:30 +02:00
ComfyFactorio/maps/pirates/effects.lua
2022-06-01 19:50:36 +01:00

124 lines
4.0 KiB
Lua

-- This file is part of thesixthroc's Pirate Ship softmod, licensed under GPLv3 and stored at https://github.com/danielmartin0/ComfyFactorio-Pirates.
local Math = require 'maps.pirates.math'
-- local Memory = require 'maps.pirates.memory'
local _inspect = require 'utils.inspect'.inspect
local Token = require 'utils.token'
local Task = require 'utils.task'
local Public = {}
function Public.worm_movement_effect(surface, position, solid_ground, big_bool)
if not (surface and surface.valid) then return end
if solid_ground then big_bool = false end
local number, rmax, particles, sound
if big_bool then
number = 80
rmax = 4
particles = {'huge-rock-stone-particle-big', 'huge-rock-stone-particle-medium', 'red-desert-1-stone-particle-medium'}
-- sound = 'utility/build_blueprint_large'
sound = 'utility/build_blueprint_large'
else
number = 40
rmax = 2.5
particles = {'huge-rock-stone-particle-medium', 'red-desert-1-stone-particle-medium', 'red-desert-1-stone-particle-small'}
sound = 'utility/build_blueprint_medium'
end
if solid_ground then
particles = {'refined-concrete-stone-particle-medium', 'refined-concrete-stone-particle-small'}
sound = 'utility/build_blueprint_small'
end
local function p(r, theta) return {x = position.x + r*Math.sin(theta), y = position.y + r*Math.cos(theta)} end
for i=1,number do
local r = rmax * Math.sqrt(Math.random())
local theta = Math.random()*6.283
local name = particles[Math.random(#particles)]
local _p = p(r,theta)
surface.create_particle{name = name, position = _p, movement = {0/10, 0/10}, height = 0, vertical_speed = 0.02 + Math.sqrt(rmax - r)*rmax/50, frame_speed = 1}
if i<=5 then
surface.play_sound{path = sound, position = _p, override_sound_type = 'walking', volume_modifier=0.75}
end
end
end
function Public.worm_emerge_effect(surface, position)
if not (surface and surface.valid) then return end
if position then
local function p(r, theta) return {x = position.x + r*Math.sin(theta), y = position.y + r*Math.cos(theta)} end
for theta=0,6,0.5 do
local r = 3
surface.create_entity{name = 'blood-explosion-huge', position = p(r,theta), color={1,1,1}}
end
end
end
function Public.biters_emerge(surface, position)
if not (surface and surface.valid) then return end
surface.create_entity{name = 'spitter-spawner-die', position = position}
end
function Public.kraken_effect_1(surface, position, angle)
if not (surface and surface.valid) then return end
local r = 9
local p = {position.x + r*Math.sin(angle), position.y + r*Math.cos(angle)}
surface.create_entity{name = 'blood-explosion-huge', position = p, color={1,1,1}}
end
function Public.kraken_effect_2(surface, position)
if not (surface and surface.valid) then return end
surface.create_entity{name = 'blood-explosion-big', position = position, color={1,1,1}}
end
local kraken_effect_3_token =
Token.register(
function(data)
Public.kraken_effect_3(data.surface, data.position, data.r)
end
)
function Public.kraken_effect_3(surface, position, r)
r = r or 3
if not (surface and surface.valid) then return end
for theta=0,6.283,6.283/32 do
local p = {position.x + r*Math.sin(theta), position.y + r*Math.cos(theta)}
surface.create_entity{name = 'water-splash', position = p, color={1,1,1}}
end
local rmax = 100
if r < rmax then
Task.set_timeout_in_ticks(4, kraken_effect_3_token, {surface = surface, position = position, r = r + 2})
end
end
function Public.kraken_effect_4(surface, position)
if not (surface and surface.valid) then return end
local r = 6
for theta=0,6.283,6.283/32 do
local p = {position.x + r*Math.sin(theta), position.y + r*Math.cos(theta)}
surface.create_entity{name = 'blood-explosion-big', position = p, color={1,1,1}}
end
end
function Public.kraken_effect_5(surface, position)
if not (surface and surface.valid) then return end
local r = 6
for theta=0,6.283,6.283/32 do
local p = {position.x + r*Math.sin(theta), position.y + r*Math.cos(theta)}
surface.create_entity{name = 'blood-explosion-huge', position = p, color={1,1,1}}
end
end
return Public