You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.8 KiB
148 lines
4.8 KiB
Location = {}
|
|
|
|
function Location.from_reference(location_reference)
|
|
if not location_reference then return nil end
|
|
if location_reference.type == "zone" then
|
|
return {
|
|
type = location_reference.type,
|
|
zone = Zone.from_zone_index(location_reference.index),
|
|
position = location_reference.position,
|
|
name = location_reference.name
|
|
}
|
|
end
|
|
if location_reference.type == "spaceship" then
|
|
local position = location_reference.position
|
|
local spaceship = Spaceship.from_index(location_reference.index)
|
|
if not spaceship then return nil end
|
|
local position = location_reference.position
|
|
if position and spaceship.console and spaceship.console.valid then
|
|
position = Util.vectors_add(location_reference.position, spaceship.console.position)
|
|
end
|
|
return {
|
|
type = location_reference.type,
|
|
zone = spaceship,
|
|
position = position,
|
|
name = location_reference.name
|
|
}
|
|
end
|
|
if location_reference.type == "system" then
|
|
return {
|
|
type = location_reference.type,
|
|
zone = Zone.from_zone_index(location_reference.index),
|
|
position = location_reference.position,
|
|
name = location_reference.name,
|
|
}
|
|
end
|
|
if location_reference.type == "interstellar" then
|
|
return {
|
|
type = location_reference.type,
|
|
position = location_reference.position,
|
|
name = location_reference.name,
|
|
}
|
|
end
|
|
end
|
|
|
|
function Location.to_localised_string(location_reference)
|
|
if not location_reference then return nil end
|
|
local base
|
|
if location_reference.type == "interstellar" then
|
|
base = {"space-exploration.interstellar-map"}
|
|
else
|
|
local location = Location.from_reference(location_reference)
|
|
if not location then return nil end
|
|
if location.type == "system" then
|
|
base = { "space-exploration.solar-system", location.zone.name }
|
|
else
|
|
base = location.zone.name
|
|
end
|
|
end
|
|
if location_reference.name and location_reference.name ~= "" then
|
|
return { "space-exploration.remote-view-history-item_named", base, location_reference.name }
|
|
end
|
|
return base
|
|
end
|
|
|
|
-- zone, spaceship, or starmap
|
|
function Location.new_reference_from_player(player)
|
|
if not player then return nil end
|
|
local zone = Zone.from_surface(player.surface)
|
|
if zone then
|
|
return Location.make_reference(zone, player.position)
|
|
end
|
|
-- maybe starmap
|
|
local playerdata = get_make_playerdata(player)
|
|
if playerdata.remote_view_active_map then
|
|
if playerdata.remote_view_active_map.type == "interstellar" then
|
|
return {
|
|
type = "interstellar",
|
|
position = player.position
|
|
}
|
|
elseif playerdata.remote_view_active_map.type == "system" then
|
|
zone = MapView.get_current_system(player)
|
|
return {
|
|
type = "system",
|
|
index = zone.index,
|
|
position = player.position
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
-- zone or spaceship,
|
|
function Location.make_reference(zone, position, name)
|
|
if not zone then return nil end
|
|
local location_reference = {index = zone.index, position = position, name = name}
|
|
if zone.type == "spaceship" then
|
|
location_reference.type = "spaceship"
|
|
if position and zone.console and zone.console.valid then
|
|
location_reference.position = Util.vectors_delta(zone.console.position, position)
|
|
end
|
|
else
|
|
location_reference.type = "zone"
|
|
end
|
|
return location_reference
|
|
end
|
|
|
|
function Location.update_reference_position(location_reference, zone, position)
|
|
if not location_reference then
|
|
location_reference = {}
|
|
end
|
|
if not zone then return nil end
|
|
location_reference.index = zone.index
|
|
location_reference.position = position
|
|
if zone.type == "spaceship" then
|
|
location_reference.type = "spaceship"
|
|
if position and zone.console and zone.console.valid then
|
|
location_reference.position = Util.vectors_delta(zone.console.position, position)
|
|
end
|
|
else
|
|
location_reference.type = "zone"
|
|
end
|
|
return location_reference
|
|
end
|
|
|
|
function Location.update_reference_name(location_reference, name)
|
|
if not location_reference then
|
|
location_reference = {}
|
|
end
|
|
location_reference.name = name
|
|
return location_reference
|
|
end
|
|
|
|
function Location.goto_reference(player, location_reference, freeze_history)
|
|
local location = Location.from_reference(location_reference) -- expand zone or spaceship connection
|
|
if not location then return end
|
|
if location_reference.type == "zone" or location_reference.type == "spaceship" then
|
|
RemoteView.start(player, location.zone, location.position, location.name, freeze_history)
|
|
elseif location_reference.type == "interstellar" then
|
|
MapView.start_interstellar_map(player, freeze_history)
|
|
if location_reference.position then
|
|
player.teleport(location_reference.position)
|
|
end
|
|
elseif location_reference.type == "system" then
|
|
MapView.start_system_map(player, location.zone, freeze_history)
|
|
player.teleport(location_reference.position)
|
|
end
|
|
end
|
|
|
|
return Location
|
|
|