mirror of
https://github.com/Xevion/project-cybersyn.git
synced 2026-01-31 10:25:23 -06:00
1.2.8 (#28)
Version: 1.2.8
Date: 2022-1-5
Features:
- Improved placeholder cybernetic combinator art
- Added a wagon control setting to bar unfiltered slots in adjacent cargo wagons
- Added a setting and keybind for toggling on or off the central planner
Changes:
- Sped up the rate at which copy-paste by blueprint will be noticed
Bugfixes:
- Fixed a bug with combinators sometimes failing to connect with train stops
- Fixed wagon control combinators outputting wagon contents after inserters have already taken out items
- Fixed a rare crash on world migration
Scripting:
- Added missing return values to some interface functions
- Migrated to non-deprecated flib modules
This commit is contained in:
Vendored
+115
@@ -0,0 +1,115 @@
|
||||
local flib_math = require("__flib__/math")
|
||||
|
||||
--- Functions for working with directions.
|
||||
--- @class flib_direction
|
||||
local flib_direction = {}
|
||||
|
||||
--- defines.direction.north
|
||||
flib_direction.north = defines.direction.north
|
||||
--- defines.direction.east
|
||||
flib_direction.east = defines.direction.east
|
||||
--- defines.direction.west
|
||||
flib_direction.west = defines.direction.west
|
||||
--- defines.direction.south
|
||||
flib_direction.south = defines.direction.south
|
||||
--- defines.direction.northeast
|
||||
flib_direction.northeast = defines.direction.northeast
|
||||
--- defines.direction.northwest
|
||||
flib_direction.northwest = defines.direction.northwest
|
||||
--- defines.direction.southeast
|
||||
flib_direction.southeast = defines.direction.southeast
|
||||
--- defines.direction.southwest
|
||||
flib_direction.southwest = defines.direction.southwest
|
||||
|
||||
--- Calculate the opposite direction.
|
||||
--- @param direction defines.direction
|
||||
--- @return defines.direction
|
||||
function flib_direction.opposite(direction)
|
||||
return (direction + 4) % 8 --[[@as defines.direction]]
|
||||
end
|
||||
|
||||
--- Calculate the next four-way or eight-way direction.
|
||||
--- @param direction defines.direction
|
||||
--- @param eight_way? boolean
|
||||
--- @return defines.direction
|
||||
function flib_direction.next(direction, eight_way)
|
||||
return (direction + (eight_way and 1 or 2)) % 8 --[[@as defines.direction]]
|
||||
end
|
||||
|
||||
--- Calculate the previous four-way or eight-way direction.
|
||||
--- @param direction defines.direction
|
||||
--- @param eight_way? boolean
|
||||
--- @return defines.direction
|
||||
function flib_direction.previous(direction, eight_way)
|
||||
return (direction + (eight_way and -1 or -2)) % 8 --[[@as defines.direction]]
|
||||
end
|
||||
|
||||
--- Calculate an orientation from a direction.
|
||||
--- @param direction defines.direction
|
||||
--- @return RealOrientation
|
||||
function flib_direction.to_orientation(direction)
|
||||
return direction / 8 --[[@as RealOrientation]]
|
||||
end
|
||||
|
||||
--- Calculate a vector from a direction.
|
||||
--- @param direction defines.direction
|
||||
--- @param distance? number default: `1`
|
||||
--- @return MapPosition
|
||||
function flib_direction.to_vector(direction, distance)
|
||||
distance = distance or 1
|
||||
local x, y = 0, 0
|
||||
if direction == flib_direction.north then
|
||||
y = y - distance
|
||||
elseif direction == flib_direction.northeast then
|
||||
x, y = x + distance, y - distance
|
||||
elseif direction == flib_direction.east then
|
||||
x = x + distance
|
||||
elseif direction == flib_direction.southeast then
|
||||
x, y = x + distance, y + distance
|
||||
elseif direction == flib_direction.south then
|
||||
y = y + distance
|
||||
elseif direction == flib_direction.southwest then
|
||||
x, y = x - distance, y + distance
|
||||
elseif direction == flib_direction.west then
|
||||
x = x - distance
|
||||
elseif direction == flib_direction.northwest then
|
||||
x, y = x - distance, y - distance
|
||||
end
|
||||
return { x = x, y = y }
|
||||
end
|
||||
|
||||
--- Calculate a two-dimensional vector from a cardinal direction.
|
||||
--- @param direction defines.direction
|
||||
--- @param longitudinal number Distance to move in the specified direction.
|
||||
--- @param orthogonal number Distance to move perpendicular to the specified direction. A negative distance will move "left" and a positive distance will move "right" from the perspective of the direction.
|
||||
--- @return MapPosition?
|
||||
function flib_direction.to_vector_2d(direction, longitudinal, orthogonal)
|
||||
if direction == defines.direction.north then
|
||||
return { x = orthogonal, y = -longitudinal }
|
||||
elseif direction == defines.direction.south then
|
||||
return { x = -orthogonal, y = longitudinal }
|
||||
elseif direction == defines.direction.east then
|
||||
return { x = longitudinal, y = orthogonal }
|
||||
elseif direction == defines.direction.west then
|
||||
return { x = -longitudinal, y = -orthogonal }
|
||||
end
|
||||
end
|
||||
|
||||
--- Calculate the direction of travel from the source to the target.
|
||||
--- @param source MapPosition
|
||||
--- @param target MapPosition
|
||||
--- @param round? boolean If true, round to the nearest `defines.direction`.
|
||||
--- @return defines.direction
|
||||
function flib_direction.from_positions(source, target, round)
|
||||
local deg = math.deg(math.atan2(target.y - source.y, target.x - source.x))
|
||||
local direction = (deg + 90) / 45
|
||||
if direction < 0 then
|
||||
direction = direction + 8
|
||||
end
|
||||
if round then
|
||||
direction = flib_math.round(direction)
|
||||
end
|
||||
return direction --[[@as defines.direction]]
|
||||
end
|
||||
|
||||
return flib_direction
|
||||
Reference in New Issue
Block a user