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

279 lines
9.8 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 CoreData = require 'maps.pirates.coredata'
-- local Task = require 'utils.task'
-- local Balance = require 'maps.pirates.balance'
-- local Common = require 'maps.pirates.common'
-- local Utils = require 'maps.pirates.utils_local'
local Public = {}
local enum = {
IDLE_FLY = 'idle_fly',
FLY = 'fly',
TIP_FLYING_1 = 'tip_flying_1',
TIP_FLYING_2 = 'tip_flying_2',
TIP_LANDED_1 = 'tip_landed_1',
TIP_LANDED_2 = 'tip_landed_2',
TIP_SQUAWK = 'tip_squawk',
}
Public.enum = enum
-- local parrot_tip_interval = 15*60
Public.framecounts = {
idle_fly = 5,
fly = 8,
fly_right = 8,
squawk = 6,
freak = 2,
walk = 8,
chill = 1,
}
-- local parrot_tips = {
-- "Why not buy the map designer a coffee! ko-fi.com/thesixthroc!",
-- "Why not buy the map designer a coffee! ko-fi.com/thesixthroc!",
-- "Make suggestions at getcomfy.eu/discord!",
-- "To launch a second run, you need a fifth of the server's pirates to endorse it!",
-- "Resources granted to the ship appear in the captain's cabin!",
-- "On each island after the first, the ship generates ore!",
-- "Charge the silo to launch a rocket!",
-- "Launching rockets makes fuel and doubloon!",
-- "Charging silos makes pollution and evo!",
-- "The number of non-afk crewmembers affects pollution, evo and maximum stay time!",
-- "Once a silo has launched a rocket, biters will ignore it!",
-- "Charging a silo drains power from everything else on the network...",
-- "You can steer the boat from the crow's nest by placing 100 rail signals in one of the blue boxes!",
-- "When you visit a dock, the shop is updated with special trades!",
-- "Labs produce more research the further you've travelled!",
-- "On radioactive islands, biters don\'t care if you emit pollution! They only care how long you stay...",
-- "If X marks the spot - use inserters to dig!",
-- }
-- function Public.parrot_800_tip()
-- local memory = Memory.get_crew_memory()
-- Common.parrot_speak(memory.force, 'The resources needed to leave will get a bit harder now...')
-- end
-- function Public.parrot_overstay_tip()
-- local memory = Memory.get_crew_memory()
-- Common.parrot_speak(memory.force, 'We\'ve been here quite a while! Check the evo.')
-- end
-- function Public.parrot_say_tip()
-- local memory = Memory.get_crew_memory()
-- local crew_force = memory.force
-- local tip = parrot_tips[Math.random(#parrot_tips)]
-- Common.parrot_speak(crew_force, tip)
-- end
-- if we're using custom sprites, we have access to this dynamic parrot that flies around:
-- function Public.parrot_tick()
-- local memory = Memory.get_crew_memory()
-- if not (memory.boat and memory.boat.surface_name) then return end
-- local surface = game.surfaces[memory.boat.surface_name]
-- if not surface and surface.valid then return end
-- local destination = Common.current_destination()
-- if destination.dynamic_data and destination.dynamic_data.timer and destination.dynamic_data.timer == Math.ceil(Balance.expected_time_on_island()) and (not destination.dynamic_data.parrot_gave_overstay_tip) then
-- destination.dynamic_data.parrot_gave_overstay_tip = true
-- local spawners = surface.find_entities_filtered({type = 'unit-spawner', force = memory.enemy_force_name})
-- local spawnerscount = #spawners or 0
-- if spawnerscount > 0 then --check biter bases actually exist
-- Public.parrot_overstay_tip()
-- end
-- end
-- local boat = memory.boat
-- local parrot = boat.parrot
-- local frame = parrot.frame
-- local render = parrot.render
-- local render_name = parrot.render_name
-- local state = parrot.state
-- local state_counter = parrot.state_counter or parrot_tip_interval*60/5
-- local resting_position_relative_to_boat = parrot.resting_position_relative_to_boat
-- local position_relative_to_boat = parrot.position_relative_to_boat
-- local sprite_extra_offset = boat.parrot.sprite_extra_offset
-- local text_extra_offset = boat.parrot.text_extra_offset
-- local real_position = Utils.psum{position_relative_to_boat, boat.position}
-- if state == enum.IDLE_FLY then
-- local ate_fish
-- if boat.state and boat.state == 'landed' and state_counter >= parrot_tip_interval*60/5 then
-- local nearby_characters = surface.find_entities_filtered{position = real_position, radius = 4, name = 'character'}
-- local nearby_characters_count = #nearby_characters
-- if nearby_characters_count > 0 then
-- local j = 1
-- while j <= nearby_characters_count do
-- if nearby_characters[j] and nearby_characters[j].valid and nearby_characters[j].player and Common.validate_player(nearby_characters[j].player) then
-- local player = nearby_characters[j].player
-- local inv = player.get_inventory(defines.inventory.character_main)
-- if inv and inv.get_item_count('raw-fish') >= 2 then
-- Common.give(player, {{name = 'raw-fish', count = -2, color = CoreData.colors.fish}})
-- ate_fish = true
-- break
-- end
-- end
-- j = j + 1
-- end
-- end
-- end
-- state_counter = state_counter + 1
-- if ate_fish then
-- Common.parrot_speak(memory.force, 'Tasty...')
-- local p1 = {x = boat.position.x - 15 - Math.random(35), y = boat.position.y - 8 + Math.random(15)}
-- local p2 = surface.find_non_colliding_position('stone-furnace', p1, 6, 0.5)
-- parrot.spot_to_fly_from = position_relative_to_boat
-- local real_fly_to = p2 or p1
-- parrot.spot_to_fly_to = {x = real_fly_to.x - boat.position.x, y = real_fly_to.y - boat.position.y}
-- parrot.fly_distance = Math.distance(parrot.spot_to_fly_from, parrot.spot_to_fly_to)
-- state = enum.TIP_FLYING_1
-- state_counter = 0
-- else
-- if game.tick % 10 == 0 then
-- frame = frame + 1
-- end
-- if boat.speed and boat.speed > 0 then
-- state = enum.FLY
-- end
-- end
-- elseif state == enum.TIP_FLYING_1 then
-- if boat.speed and boat.speed > 0 then
-- state_counter = 0
-- state = enum.IDLE_FLY
-- position_relative_to_boat = resting_position_relative_to_boat
-- else
-- if game.tick % 10 == 0 then
-- frame = frame + 1
-- end
-- if state_counter < parrot.fly_distance then
-- position_relative_to_boat = Utils.interpolate(parrot.spot_to_fly_from, parrot.spot_to_fly_to, state_counter/parrot.fly_distance)
-- state_counter = state_counter + 0.5
-- else
-- state_counter = 0
-- state = enum.TIP_LANDED_1
-- end
-- end
-- elseif state == enum.TIP_LANDED_1 then
-- if boat.speed and boat.speed > 0 then
-- state_counter = 0
-- state = enum.IDLE_FLY
-- position_relative_to_boat = resting_position_relative_to_boat
-- else
-- if state_counter < 20 then
-- state_counter = state_counter + 1
-- else
-- state_counter = 0
-- state = enum.TIP_SQUAWK
-- end
-- end
-- elseif state == enum.TIP_SQUAWK then
-- if boat.speed and boat.speed > 0 then
-- state_counter = 0
-- state = enum.IDLE_FLY
-- position_relative_to_boat = resting_position_relative_to_boat
-- else
-- if state_counter == 0 then
-- Public.parrot_say_tip()
-- end
-- if state_counter < 18 then
-- if game.tick % 15 == 0 then
-- frame = frame + 1
-- end
-- state_counter = state_counter + 1
-- else
-- state_counter = 0
-- state = enum.TIP_LANDED_2
-- end
-- end
-- elseif state == enum.TIP_LANDED_2 then
-- if boat.speed and boat.speed > 0 then
-- state_counter = 0
-- state = enum.IDLE_FLY
-- position_relative_to_boat = resting_position_relative_to_boat
-- else
-- if state_counter < 20 then
-- state_counter = state_counter + 1
-- else
-- state_counter = 0
-- state = enum.TIP_FLYING_2
-- local hold = parrot.spot_to_fly_to
-- parrot.spot_to_fly_to = parrot.spot_to_fly_from
-- parrot.spot_to_fly_from = hold
-- end
-- end
-- elseif state == enum.TIP_FLYING_2 then
-- if boat.speed and boat.speed > 0 then
-- state_counter = 0
-- state = enum.IDLE_FLY
-- position_relative_to_boat = resting_position_relative_to_boat
-- else
-- if game.tick % 10 == 0 then
-- frame = frame + 1
-- end
-- if state_counter < parrot.fly_distance then
-- position_relative_to_boat = Utils.interpolate(parrot.spot_to_fly_from, parrot.spot_to_fly_to, state_counter/parrot.fly_distance)
-- state_counter = state_counter + 0.5
-- else
-- state_counter = 0
-- state = enum.IDLE_FLY
-- end
-- end
-- elseif state == enum.FLY then
-- if game.tick % 10 == 0 then
-- frame = frame + 1
-- end
-- if (not boat.speed) or (boat.speed == 0) then state = enum.IDLE_FLY end
-- end
-- local sprite_name = state
-- if state == enum.TIP_FLYING_1 then sprite_name = 'fly' end
-- if state == enum.TIP_FLYING_2 then sprite_name = 'fly_right' end
-- if state == enum.TIP_LANDED_1 or state == enum.TIP_LANDED_2 then sprite_name = 'chill' end
-- if state == enum.TIP_SQUAWK then sprite_name = 'squawk' end
-- if frame > Public.framecounts[sprite_name] then frame = 1 end
-- parrot.state = state
-- parrot.frame = frame
-- parrot.state_counter = state_counter
-- parrot.position_relative_to_boat = position_relative_to_boat
-- rendering.set_sprite(render, "file/parrot/parrot_" .. sprite_name .. "_" .. frame .. ".png")
-- rendering.set_target(render, rendering.get_target(render).entity, Utils.psum{sprite_extra_offset, position_relative_to_boat})
-- rendering.set_visible(render, true)
-- rendering.set_target(render_name, rendering.get_target(render_name).entity, Utils.psum{text_extra_offset, position_relative_to_boat})
-- rendering.set_visible(render_name, true)
-- end
return Public