mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-22 03:38:48 +02:00
123 lines
4.2 KiB
Lua
123 lines
4.2 KiB
Lua
-- This file is part of thesixthroc's Pirate Ship softmod, licensed under GPLv3 and stored at https://github.com/ComfyFactory/ComfyFactorio and 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
|