Difference between revisions of "Oolite JavaScript Reference: SystemInfo"
(→Special Witchspace Location) |
|||
(11 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
<small>'''Prototype:''' <code>Object</code></small><br /> |
<small>'''Prototype:''' <code>Object</code></small><br /> |
||
− | {{Oolite-class-added|1.74}} |
||
+ | '''<code>SystemInfo</code>''' objects provide information about a specific star system. <code>SystemInfo</code>s can be retrieved for any system in any galaxy as of version 1.82. In previous versions, only systems for the current galaxy could be read. |
||
− | '''<code>SystemInfo</code>''' objects provide information about a specific system. |
||
+ | In interstellar space, <code>system.info</code> refers to a temporary <code>SystemInfo</code> object whose properties cannot be written to. Attempting to read properties of such a temporary <code>SystemInfo</code> after leaving interstellar space will raise an exception. |
||
== Properties == |
== Properties == |
||
Line 19: | Line 19: | ||
'''galaxyID''' : Number (read-only nonnegative integer) |
'''galaxyID''' : Number (read-only nonnegative integer) |
||
The ID number of the galaxy. |
The ID number of the galaxy. |
||
+ | |||
+ | === <code>internalCoordinates</code> === |
||
+ | '''internalCoordinates''' : {{oojsclass|Vector3D}} (read-only) |
||
+ | '''Discouraged in favour of <code>[[#coordinates|coordinates]]</code>.'''<br /> |
||
+ | The coordinate of the system in the internal coordinate system. |
||
=== <code>systemID</code> === |
=== <code>systemID</code> === |
||
'''systemID''' : Number (read-only nonnegative integer) |
'''systemID''' : Number (read-only nonnegative integer) |
||
The ID number of the system. |
The ID number of the system. |
||
− | |||
== More properties == |
== More properties == |
||
Line 29: | Line 33: | ||
'''Example:''' |
'''Example:''' |
||
− | <code> |
+ | <code>system.info.description = "This is a dull planet."</code> |
− | sets the description of the current planet |
+ | sets the description of the current planet to “This is a dull planet.” |
− | Properties that are changed in <code>system.info</code> are stored in the save file and are permanently changed for that commander. When both the planetInfo.plist and the data from a changed <code>system.info</code> file are present, those of the system.info are used. You can undo any changes in <code>system.info</code> by setting the value to <code>null</code>. |
||
+ | Modified properties are permanent and are stored in saved game. Changes made by scripts override those in ''[[planetinfo.plist]]''. Set a property to <code>null</code> to restore the ''[[planetinfo.plist]]'' value, or the default. |
||
== Methods == |
== Methods == |
||
Line 56: | Line 60: | ||
96.40 (distance of added jumps) |
96.40 (distance of added jumps) |
||
530.40 (travelled time) |
530.40 (travelled time) |
||
+ | |||
+ | Warning: in version 1.76 or earlier there is a bug in this method which may cause a crash if either the start or end of the route is in interstellar space (i.e. system ID -1). In later versions this simply returns null. |
||
+ | |||
+ | === <code>samplePrice</code> === |
||
+ | {{oolite-method-added|1.81}} |
||
+ | function '''samplePrice'''(commodity : String) : Array |
||
+ | Return a sample main market price in decicredits for the commodity with that key in this system. As this requires reading system information, it will only work for systems in the current galaxy. There is of course no guarantee that the price returned by this function will be anywhere near the actual price when the system is next entered. |
||
+ | |||
+ | === <code>setProperty</code> === |
||
+ | {{oolite-method-added|1.81}} |
||
+ | function '''setProperty'''(layer: Number, key : String, value: String [, manifest: String]) |
||
+ | |||
+ | This lets you set properties with more control than provided by writing directly to <code>systemInfo.property</code>. <code>layer</code> is the layer from 0 to 3 that the change should be applied at, as in [[planetinfo.plist]]. Layer 2 is the default layer for Javascript-initiated changes, but 3 may be used for changes absolutely crucial for OXP functionality. |
||
+ | |||
+ | It is also possible to make changes on behalf of a different OXP by passing the manifest ID of that OXP as the fourth parameter. Otherwise the OXP responsible for the current script execution context will be used. |
||
=== <code>systemsInRange</code> === |
=== <code>systemsInRange</code> === |
||
− | {{Oolite-method-added|1.74.2}} |
||
function '''systemsInRange'''([range : Number]) : Array |
function '''systemsInRange'''([range : Number]) : Array |
||
Returns an array of <code>SystemInfo</code>s in range (default: 7) from the given system. |
Returns an array of <code>SystemInfo</code>s in range (default: 7) from the given system. |
||
Line 64: | Line 82: | ||
'''Note:''' will not produce correct results if used in interstellar space. |
'''Note:''' will not produce correct results if used in interstellar space. |
||
− | '''See also:''' <code>SystemInfo.[[#systemsInRange_2|systemsInRange()]]</code> (which always provides results relative to the current system). |
||
+ | '''Example:''' |
||
+ | system.info.systemsInRange(5); |
||
== Static methods == |
== Static methods == |
||
Line 72: | Line 91: | ||
'''Example:''' |
'''Example:''' |
||
− | // This is the actual implementation of <code>[[# |
+ | // This is the actual implementation of <code>[[#systemsInRange|systemsInRange()]]</code>. |
− | SystemInfo.systemsInRange = function(range) |
+ | SystemInfo.prototype.systemsInRange = function systemsInRange(range) |
{ |
{ |
||
if (range === undefined) |
if (range === undefined) |
||
Line 80: | Line 99: | ||
} |
} |
||
− | var thisSystem = system.info; |
||
return SystemInfo.filteredSystems(this, function(other) |
return SystemInfo.filteredSystems(this, function(other) |
||
{ |
{ |
||
− | return (other.systemID !== |
+ | return (other.systemID !== this.systemID) && (this.distanceToSystem(other) <= range); |
}); |
}); |
||
} |
} |
||
− | === <code> |
+ | === <code>setInterstellarProperty</code> === |
− | + | {{oolite-method-added|1.81}} |
|
− | + | function '''setInterstellarProperty'''(galaxy : Number, fromsystem : Number, tosystem : Number, layer: Number, key : String, value: String, [, manifest: String]) |
|
− | |||
− | '''Note:''' As of 1.74.2, this method works correctly for all systemInfos in the current galaxy, and for the current witchspace location. Trying to use it for other galaxies - or for a non-current witchspace location - will produce an error. |
||
− | |||
− | '''Example:''' |
||
− | system.info.systemsInRange(5); |
||
− | |||
− | == Special Witchspace Location == |
||
− | |||
− | In order to access information about the current witchspace location while in witchspace itself - an in-between systems location, one that the player can only reach via a misjump - the short form for the local SystemInfo (system.info) will access a special, generic witchspace location, one that always return data for the ''current'' witchspace position, or null values if the player is not in witchspace. |
||
− | |||
− | In practice, the witchspace SystemInfo works like all others, with the exception that you cannot store the whole witchspace systemInfo inside a single convenience variable for later use, and that you cannot change specific values to apply to witchspace. As an example, trying to set a value for the local witchspace 'system': |
||
− | system.info.economy = 5; |
||
+ | This is similar to [[#setProperty|setProperty]] but for setting properties of interstellar space regions. Changes made to the current interstellar space region will only take effect if the player leaves and returns. |
||
− | will simply be ignored while in witchspace. |
||
+ | Note that the order of fromsystem (the last real system visited) and tosystem (the target of the latest jump) is significant - 0,7,55 is Lave to Leesti; 0,55,7 is Leesti to Lave. In many cases setting the same change for both directions may be necessary. |
||
[[Category:Oolite JavaScript Reference]] |
[[Category:Oolite JavaScript Reference]] |
Latest revision as of 21:26, 18 June 2021
Prototype: Object
SystemInfo
objects provide information about a specific star system. SystemInfo
s can be retrieved for any system in any galaxy as of version 1.82. In previous versions, only systems for the current galaxy could be read.
In interstellar space, system.info
refers to a temporary SystemInfo
object whose properties cannot be written to. Attempting to read properties of such a temporary SystemInfo
after leaving interstellar space will raise an exception.
Contents
Properties
coordinates
coordinates : Vector3D
(read-only)
The coordinates of the system in light years. e.g. for Lave: (8, 34.6, 0)
. The z component is always zero.
The upper left corner has the coordinate (0, 0, 0)
. Going right increases the x value while going down on the map increases the y value.
Example:
System.infoForSystem(galaxyNumber, 7).coordinates
returns the coordinates of the system with an ID number of 7 in the current galaxy. In the first galaxy that would be the coordinates for Lave: (8, 34.6, 0)
.
galaxyID
galaxyID : Number (read-only nonnegative integer)
The ID number of the galaxy.
internalCoordinates
internalCoordinates : Vector3D
(read-only)
Discouraged in favour of coordinates
.
The coordinate of the system in the internal coordinate system.
systemID
systemID : Number (read-only nonnegative integer)
The ID number of the system.
More properties
In addition to the properties above, you can access many other system properties, using the same keys as planetinfo.plist.
Example:
system.info.description = "This is a dull planet."
sets the description of the current planet to “This is a dull planet.”
Modified properties are permanent and are stored in saved game. Changes made by scripts override those in planetinfo.plist. Set a property to null
to restore the planetinfo.plist value, or the default.
Methods
distanceToSystem
function distanceToSystem(system : SystemInfo) : Number
Returns the distance in light years to another SystemInfo
.
Example:
System.infoForSystem(galaxyNumber, 7).distanceToSystem(System.infoForSystem(galaxyNumber, 8))
If galaxyNumber is 0, this returns 92.8.
routeToSystem
function routeToSystem(system : SystemInfo [, "OPTIMIZED_BY_JUMPS" | "OPTIMIZED_BY_TIME"] ) : Object
Returns a dictionary containing the route information to another SystemInfo
. The dictionary contains the array of system IDs that belong to the route
found, the distance
and the time
corresponding to said route. Takes the optional parameter "OPTIMIZED_BY_JUMPS"
(default) or "OPTIMIZED_BY_TIME"
to calculate least number of jumps or fastest transit time routes respectively.
Example:
var myRoute = System.infoForSystem(galaxyNumber, 7).routeToSystem(System.infoForSystem(galaxyNumber, 8)) myRoute.route myRoute.distance myRoute.time
returns:
7,129,227,73,89,222,29,42,131,62,150,36,28,16,185,86,138,51,8 (the route) 96.40 (distance of added jumps) 530.40 (travelled time)
Warning: in version 1.76 or earlier there is a bug in this method which may cause a crash if either the start or end of the route is in interstellar space (i.e. system ID -1). In later versions this simply returns null.
samplePrice
This method was added in Oolite test release 1.81.
function samplePrice(commodity : String) : Array
Return a sample main market price in decicredits for the commodity with that key in this system. As this requires reading system information, it will only work for systems in the current galaxy. There is of course no guarantee that the price returned by this function will be anywhere near the actual price when the system is next entered.
setProperty
This method was added in Oolite test release 1.81.
function setProperty(layer: Number, key : String, value: String [, manifest: String])
This lets you set properties with more control than provided by writing directly to systemInfo.property
. layer
is the layer from 0 to 3 that the change should be applied at, as in planetinfo.plist. Layer 2 is the default layer for Javascript-initiated changes, but 3 may be used for changes absolutely crucial for OXP functionality.
It is also possible to make changes on behalf of a different OXP by passing the manifest ID of that OXP as the fourth parameter. Otherwise the OXP responsible for the current script execution context will be used.
systemsInRange
function systemsInRange([range : Number]) : Array
Returns an array of SystemInfo
s in range (default: 7) from the given system.
Note: will not produce correct results if used in interstellar space.
Example:
system.info.systemsInRange(5);
Static methods
filteredSystems
function filteredSystems(this : Object, predicate : Function) : Array of SystemInfo
A list of the SystemInfo
s for which predicate
returns true
.
Example:
// This is the actual implementation of systemsInRange()
.
SystemInfo.prototype.systemsInRange = function systemsInRange(range)
{
if (range === undefined)
{
range = 7;
}
return SystemInfo.filteredSystems(this, function(other)
{
return (other.systemID !== this.systemID) && (this.distanceToSystem(other) <= range);
});
}
setInterstellarProperty
This method was added in Oolite test release 1.81.
function setInterstellarProperty(galaxy : Number, fromsystem : Number, tosystem : Number, layer: Number, key : String, value: String, [, manifest: String])
This is similar to setProperty but for setting properties of interstellar space regions. Changes made to the current interstellar space region will only take effect if the player leaves and returns.
Note that the order of fromsystem (the last real system visited) and tosystem (the target of the latest jump) is significant - 0,7,55 is Lave to Leesti; 0,55,7 is Leesti to Lave. In many cases setting the same change for both directions may be necessary.