Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Predicting exobiology species on planets #15

Merged
merged 91 commits into from
May 19, 2024
Merged

Predicting exobiology species on planets #15

merged 91 commits into from
May 19, 2024

Conversation

Somfic
Copy link
Contributor

@Somfic Somfic commented May 15, 2024

Closes #13.

@Somfic
Copy link
Contributor Author

Somfic commented May 15, 2024

Is there a specific branch you want this PR to target? This branch branches from json-files.

@rster2002
Copy link
Owner

You can probably target either. json-files is a separate branch because it uses a log of shared logic that is needed for basically all json files.

@rster2002
Copy link
Owner

And tests are failing because I was a bit sloppy when creating the json-files branch. Merging that one into yours should fix the failing tests.

Somfic added 3 commits May 15, 2024 19:40
Currently with a few FIXMEs ..
This needed to be able to iterate over the `Species` enum, in order to check spawn conditions for each type of specimine.
This commit adds a new function `check_species_can_spawn` to the `exobiology` module. This function is used to check if a given species can spawn on a planet based on the planet scan event. It iterates over the spawn conditions of each species and returns `true` if all conditions are met.

The function `get_spawnable_species` has also been implemented, which returns a list of species that can spawn on the given planet.
@Somfic Somfic changed the base branch from master to json-files May 15, 2024 17:47
@Somfic
Copy link
Contributor Author

Somfic commented May 15, 2024

I’m in the progress of writing tests for these new functions using the test journals, but I’m getting some weird results… Aleoida Coronamus has as one of its spawn conditions a max gavity of 0.27G. This is in line with what ed-dsn and canonn science report.

However, that does not add up with our test journals:

  1. Commander scans celestial body Phoi Aed NY-P d6-4 B 3 c. Has a surface gravity of 2.133268G: (truncated version for clarity)
    {"timestamp":"2024-01-31T18:50:00Z","event":"Scan","ScanType":"Detailed","BodyName":"Phoi Aed NY-P d6-4 B 3 c","BodyID":38,"Parents":[{"Star":33},{"Null":32},{"Star":2},{"Null":0}],"StarSystem":"Phoi Aed NY-P d6-4","SystemAddress":148872824507,"DistanceFromArrivalLS":281903.098156,"TidalLock":true,"TerraformState":"","PlanetClass":"Rocky body","Atmosphere":"thin carbon dioxide atmosphere","AtmosphereType":"CarbonDioxide","AtmosphereComposition":[{"Name":"CarbonDioxide","Percent":99.009911},{"Name":"SulphurDioxide","Percent":0.990099}],"Volcanism":"","MassEM":0.017326,"Radius":1799208,"SurfaceGravity":2.133268,"SurfaceTemperature":181.064468,"SurfacePressure":8922.726563,"Landable":true,"Materials":[{"Name":"iron","Percent":18.619612},{"Name":"sulphur","Percent":18.070713},{"Name":"carbon","Percent":15.195597},{"Name":"nickel","Percent":14.083095},{"Name":"phosphorus","Percent":9.728482},{"Name":"chromium","Percent":8.373858},{"Name":"manganese","Percent":7.689709},{"Name":"zinc","Percent":5.060114},{"Name":"molybdenum","Percent":1.21585},{"Name":"ruthenium","Percent":1.14988},{"Name":"mercury","Percent":0.813088}],"Composition":{"Ice":0,"Rock":0.909371,"Metal":0.090629},"SemiMajorAxis":3218114137.649536,"Eccentricity":0.025116,"OrbitalInclination":0.34153,"Periapsis":216.178322,"OrbitalPeriod":876041.609049,"AscendingNode":13.651011,"MeanAnomaly":297.333811,"RotationPeriod":876045.893455,"AxialTilt":0.453398,"WasDiscovered":false,"WasMapped":false}
{
	"event": "Scan",
	"BodyName": "Phoi Aed NY-P d6-4 B 3c",
	"SurfaceGravity": 2.133268
	"SystemAddress": 148872824507,
	"BodyID": 38,
}
  1. Commander touches down on the planet:

    {"timestamp":"2024-01-31T19:07:22Z","event":"Touchdown","PlayerControlled":true,"Taxi":false,"Multicrew":false,"StarSystem":"Phoi Aed NY-P d6-4","SystemAddress":148872824507,"Body":"Phoi Aed NY-P d6-4 B 3 c","BodyID":38,"OnStation":false,"OnPlanet":true,"Latitude":38.32201,"Longitude":97.656464}

  2. Commander disembarks from the ship:

    {"timestamp":"2024-01-31T19:07:43Z","event":"Disembark","SRV":true,"Taxi":false,"Multicrew":false,"ID":16,"StarSystem":"Phoi Aed NY-P d6-4","SystemAddress":148872824507,"Body":"Phoi Aed NY-P d6-4 B 3 c","BodyID":38,"OnStation":false,"OnPlanet":true}

  3. Commander scans Aleoida Coronamus (note the matching SystemAddress and BodyID) (truncated version for clarity):

    {"timestamp":"2024-01-31T19:07:55Z","event":"ScanOrganic","ScanType":"Log","Genus":"$Codex_Ent_Aleoids_Genus_Name;","Genus_Localised":"Aleoida","Species":"$Codex_Ent_Aleoids_02_Name;","Species_Localised":"Aleoida Coronamus","Variant":"$Codex_Ent_Aleoids_02_K_Name;","Variant_Localised":"Aleoida Coronamus - Turquoise","SystemAddress":148872824507,"Body":38}

{
	"event": "ScanOrganic",
	"Species_Localised": "Aleoida Coronamus",
	"SystemAddress": 148872824507,
	"Body": 38
}

This is rather odd, either ed-dsn and canonn science are incorrect (or maybe drawing knowledge from the same faulty source), or this was a bug in the game. How do we proceed @rster2002? Removing the journal from the test database feels like the wrong decision, unless we can confirm this was an in-game bug. I can do some more digging to see if this is the only occurrence, will have to rewrite the tests for that but I’m rather intrigued now.

anyhow i’m blaming the game; frontier pls fix

@rster2002
Copy link
Owner

rster2002 commented May 16, 2024

I think it's fine to skip this test case for now by either renaming the log file to end in .skip or filtering those specific events based on the timestamp or something.

It's either a bug or it is very very very rare that it spawns under these conditions (also looking at the doc)

I'll see if I still have the exploration data/system map and if I can see anything special.

@Somfic
Copy link
Contributor Author

Somfic commented May 16, 2024

The MaxGravity condition seems to fail in a lot more test cases.

'AleoidaCoronamus' on body 'Phoi Aed NY-P d6-4 B 3 c' fails [MaxGravity(0.27)]
'TussockCaputus' on body 'Phoi Aed NY-P d6-4 B 3 c' fails [MaxGravity(0.27)]
'FungoidaGelata' on body 'Phoi Aed NY-P d6-4 B 3 c' fails [Any([ThinAtmosphere(Water), All([ThinAtmosphere(ArgonRich), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)])]), MaxGravity(0.27)]
'ReceptaUmbrux' on body 'Phoi Aed SY-Y d1-3 A 9 f' fails [MaxGravity(0.27)]
'TussockStigmasis' on body 'Phoi Aed SY-Y d1-3 A 9 f' fails [MaxGravity(0.27)]
'OsseusCornibus' on body 'Hypiae Aed AB-M d8-1 4' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Hypiae Aip CG-V d3-9 AB 1 c' fails [MaxGravity(0.27)]
'TussockVentusa' on body 'Phoi Aed CM-K d9-5 5 c' fails [MaxGravity(0.27)]
'TussockCapillum' on body 'Gludgooe NX-B d0 9' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'FungoidaBullarum' on body 'Gludgooe NX-B d0 9' fails [MaxGravity(0.27)]
'OsseusPumice' on body 'Gludgooe NX-B d0 9' fails [MaxGravity(0.27)]
'FonticuluaCampestris' on body 'Gludgooe NX-B d0 9' fails [MaxGravity(0.27)]
'TussockVentusa' on body 'Phoi Aed CM-K d9-5 5 d' fails [MaxGravity(0.27)]
'FungoidaSetisis' on body 'Hypiae Aed DL-N d7-2 C 1' fails [MaxGravity(0.27)]
'FrutexaMetallicum' on body 'Hypiae Aed DL-N d7-2 C 1' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Hypiae Aed DL-N d7-2 C 1' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'OsseusCornibus' on body 'Phoi Aed OH-C d2 3 c' fails [MaxGravity(0.27)]
'ClypeusSpeculumi' on body 'Phoi Aed OH-C d2 3 c' fails [MaxGravity(0.27), MinDistanceFromParentSun(5.0)]
'TussockTriticum' on body 'Phoi Aed OH-C d2 3 c' fails [MaxGravity(0.27)]
'CactoidaPullulanta' on body 'Phoi Aed OH-C d2 3 c' fails [MaxGravity(0.27)]
'AleoidaArcus' on body 'Phoi Aed NY-P d6-4 B 4 d' fails [MaxGravity(0.27)]
'TussockAlbata' on body 'Phoi Aed NY-P d6-4 B 4 d' fails [MaxGravity(0.27)]
'TubusConifer' on body 'Outorst OJ-Y b14-0 B 4 a' fails [MaxGravity(0.15)]
'TussockIgnis' on body 'Outorst OJ-Y b14-0 B 4 a' fails [MaxGravity(0.27)]
'ClypeusSpeculumi' on body 'Hypiae Aed TE-F d12-1 4 f' fails [MaxGravity(0.27), MinDistanceFromParentSun(5.0)]
'TussockTriticum' on body 'Hypiae Aed TE-F d12-1 4 f' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Outorst AG-W b15-0 C 6' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'FungoidaSetisis' on body 'Outorst AG-W b15-0 C 6' fails [MaxGravity(0.27)]
'AleoidaArcus' on body 'Ploea Theia YI-B d3 A 8' fails [MaxGravity(0.27)]
'FrutexaMetallicum' on body 'Ploea Theia TI-B d1 A 7' fails [MaxGravity(0.27)]
'AleoidaArcus' on body 'Ploea Theia TI-B d1 A 7' fails [MaxGravity(0.27)]
'TussockAlbata' on body 'Ploea Theia TI-B d1 A 7' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'ReceptaConditivus' on body 'Hypiae Aip XL-B d14-2 4 a' fails [MaxGravity(0.27)]
'FungoidaSetisis' on body 'Phoi Aed EX-I d10-3 1 a' fails [MaxGravity(0.27)]
'AleoidaSpica' on body 'Phoi Aed EX-I d10-3 1 a' fails [MaxGravity(0.27)]
'FrutexaFlabellum' on body 'Phoi Aed EX-I d10-3 1 a' fails [MaxGravity(0.27)]
'OsseusSpiralis' on body 'Gludgooe MC-C d0 9 b' fails [MaxGravity(0.27)]
'FungoidaGelata' on body 'Hypiae Aip SN-A d1-8 10 c' fails [Any([ThinAtmosphere(Water), All([ThinAtmosphere(ArgonRich), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)])]), MaxGravity(0.27)]
'TussockCaputus' on body 'Hypiae Aip SN-A d1-8 10 c' fails [MaxGravity(0.27)]
'ConchaRenibus' on body 'Hypiae Aip SN-A d1-8 10 c' fails [Any([All([MaxGravity(0.27), Any([ThinAtmosphere(CarbonDioxide), ThinAtmosphere(CarbonDioxideRich)]), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)]), All([MaxGravity(0.27), Any([ThinAtmosphere(Water), ThinAtmosphere(WaterRich)])])])]
'FungoidaSetisis' on body 'Hypiae Aed VP-D d13-0 5 c' fails [MaxGravity(0.27)]
'ConchaLabiata' on body 'Hypiae Aip XL-B d14-2 5 c' fails [MaxGravity(0.27)]
'TubusConifer' on body 'Hypiae Aip XL-B d14-2 5 c' fails [MaxGravity(0.15)]
'TussockIgnis' on body 'Hypiae Aip XL-B d14-2 5 c' fails [MaxGravity(0.27)]
'FrutexaFlabellum' on body 'Ploea Theia AK-Z d1 ABC 2 b' fails [MaxGravity(0.27)]
'AleoidaSpica' on body 'Ploea Theia AK-Z d1 ABC 2 b' fails [MaxGravity(0.27)]
'FungoidaSetisis' on body 'Ploea Theia AK-Z d1 ABC 2 b' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Ploea Theia AK-Z d1 ABC 2 b' fails [MaxGravity(0.27)]
'ConchaAureolas' on body 'Ploea Theia AK-Z d1 ABC 2 b' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Hypiae Aip VK-M d8-9 10 d' fails [MaxGravity(0.27)]
'AleoidaSpica' on body 'Hypiae Aip VK-M d8-9 10 d' fails [MaxGravity(0.27)]
'OsseusSpiralis' on body 'Hypiae Aip VK-M d8-9 10 d' fails [MaxGravity(0.27)]
'CactoidaPullulanta' on body 'Hypiae Aip SN-A d1-8 10 d' fails [MaxGravity(0.27)]
'FungoidaGelata' on body 'Hypiae Aip SN-A d1-8 10 d' fails [Any([ThinAtmosphere(Water), All([ThinAtmosphere(ArgonRich), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)])]), MaxGravity(0.27)]
'TussockCaputus' on body 'Hypiae Aip SN-A d1-8 10 d' fails [MaxGravity(0.27)]
'FonticuluaCampestris' on body 'Wredguia HN-Z b27-0 A 8' fails [MaxGravity(0.27)]
'FonticuluaCampestris' on body 'Wredguia IN-Z b27-2 10 c' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Gludgooe PP-N d7-8 5' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'AleoidaSpica' on body 'Gludgooe PP-N d7-8 5' fails [MaxGravity(0.27)]
'TussockSerrati' on body 'Phoi Aed PJ-O d7-3 1 c' fails [MaxGravity(0.27)]
'TubusConifer' on body 'Phoi Aed PJ-O d7-3 1 c' fails [MaxGravity(0.15)]
'FonticuluaCampestris' on body 'Phoi Aed ID-H d11-2 4 a' fails [MaxGravity(0.27)]
'ElectricaePluma' on body 'Phoi Aed ID-H d11-2 4 a' fails [ParentStarClass(A), Any([MinOrEqualParentStarLuminosity(V), ParentStarClass(N)]), MaxGravity(0.27)]
'FonticuluaUpupam' on body 'Hypiae Aip WL-B d14-14 ABC 1 d' fails [ThinAtmosphere(Argon), MaxGravity(0.27)]
'TubusConifer' on body 'Gludgae PI-I d10-1 6 a' fails [MaxGravity(0.15)]
'AleoidaArcus' on body 'Gludgae PI-I d10-1 6 a' fails [MaxGravity(0.27)]
'TubusConifer' on body 'Hypiae Aip XL-B d14-1 C 3 c' fails [MaxGravity(0.15)]
'TussockIgnis' on body 'Hypiae Aip XL-B d14-1 C 3 c' fails [MaxGravity(0.27)]
'ConchaLabiata' on body 'Hypiae Aip XL-B d14-1 C 3 c' fails [MaxGravity(0.27)]
'TussockVentusa' on body 'Phoi Aed CM-K d9-5 5 b' fails [MaxGravity(0.27)]
'TussockVentusa' on body 'Phoi Aed CM-K d9-5 5 a' fails [MaxGravity(0.27)]
'AleoidaArcus' on body 'Hypiae Aip WL-B d14-14 ABC 1 b' fails [MaxGravity(0.27)]
'TussockAlbata' on body 'Hypiae Aip WL-B d14-14 ABC 1 b' fails [MaxGravity(0.27)]
'OsseusSpiralis' on body 'Wregoe YL-L d8-7 6' fails [MaxGravity(0.27)]
'ReceptaConditivus' on body 'Hypiae Aip VK-M d8-9 9 e' fails [MaxGravity(0.27)]
'TussockIgnis' on body 'Hypiae Aip XL-B d14-1 C 3 d' fails [MaxGravity(0.27)]
'TubusConifer' on body 'Hypiae Aip XL-B d14-1 C 3 d' fails [MaxGravity(0.15)]
'ConchaLabiata' on body 'Hypiae Aip XL-B d14-1 C 3 d' fails [MaxGravity(0.27)]
'CactoidaLapis' on body 'Futes C 5' fails [MaxGravity(0.27)]
'TussockSerrati' on body 'Phoi Aed PJ-O d7-3 2 c' fails [MaxGravity(0.27)]
'TussockAlbata' on body 'Swoilz DR-A c2-2 A 6' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'TussockDivisa' on body 'Hypiae Aip TN-A d1-5 2 b' fails [MaxGravity(0.27)]
'CactoidaPullulanta' on body 'Phoi Aed PJ-O d7-3 1 b' fails [MaxGravity(0.27)]
'AleoidaCoronamus' on body 'Phoi Aed PJ-O d7-3 1 b' fails [MaxGravity(0.27)]
'FungoidaGelata' on body 'Phoi Aed PJ-O d7-3 1 b' fails [Any([ThinAtmosphere(Water), All([ThinAtmosphere(ArgonRich), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)])]), MaxGravity(0.27)]
'TussockCaputus' on body 'Phoi Aed PJ-O d7-3 1 b' fails [MaxGravity(0.27)]
'ConchaRenibus' on body 'Phoi Aed PJ-O d7-3 1 b' fails [Any([All([MaxGravity(0.27), Any([ThinAtmosphere(CarbonDioxide), ThinAtmosphere(CarbonDioxideRich)]), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)]), All([MaxGravity(0.27), Any([ThinAtmosphere(Water), ThinAtmosphere(WaterRich)])])])]
'OsseusSpiralis' on body 'Swoilz VE-E c6 A 5' fails [MaxGravity(0.27)]
'TussockCultro' on body 'Swoilz VE-E c6 A 5' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'OsseusFractus' on body 'Futes C 6' fails [MaxGravity(0.27)]
'TussockPennata' on body 'Hypiae Aed UO-P d6-0 6 c' fails [MaxGravity(0.27)]
'TussockDivisa' on body 'Schadgue KT-I c25-0 A 11 f' fails [MaxGravity(0.27)]
'CactoidaPullulanta' on body 'Gludgooe MC-C d0 10 b' fails [MaxGravity(0.27)]
'OsseusCornibus' on body 'Gludgooe MC-C d0 10 b' fails [MaxGravity(0.27)]
'AleoidaCoronamus' on body 'Gludgooe MC-C d0 10 b' fails [MaxGravity(0.27)]
'ConchaRenibus' on body 'Gludgooe MC-C d0 10 b' fails [Any([All([MaxGravity(0.27), Any([ThinAtmosphere(CarbonDioxide), ThinAtmosphere(CarbonDioxideRich)]), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)]), All([MaxGravity(0.27), Any([ThinAtmosphere(Water), ThinAtmosphere(WaterRich)])])])]
'TussockDivisa' on body 'Hypiae Aip RC-C d7 E 5' fails [PlanetClass(RockyBody), MaxGravity(0.27)]
'FungoidaSetisis' on body 'Hypiae Aip RC-C d7 E 5' fails [MaxGravity(0.27)]
'CactoidaPullulanta' on body 'Phoi Aed EX-I d10-3 2 a' fails [MaxGravity(0.27)]
'TussockCaputus' on body 'Phoi Aed EX-I d10-3 2 a' fails [MaxGravity(0.27)]
'FungoidaGelata' on body 'Phoi Aed EX-I d10-3 2 a' fails [Any([ThinAtmosphere(Water), All([ThinAtmosphere(ArgonRich), MinMeanTemperature(180.0), MaxMeanTemperature(195.0)])]), MaxGravity(0.27)]

It seems like 0.27G is not a hard limit and is not so rare. Out of the 746 ScanOrganic test cases 102 defy the MaxGravity condition.

@rster2002
Copy link
Owner

I've been looking at how Elite Observatory does things https://github.com/Xjph/ObservatoryCore/tree/master/ObservatoryBotanist but also can't find where they have their spawn conditions set.

@Somfic
Copy link
Contributor Author

Somfic commented May 16, 2024

anyhow i’m blaming the game; frontier pls fix

welp... i'm a moron..

G denotes the gravity in Earth's gravity. 1G is equivalent to the same gravity we experience on Earth. However, the game does not output SurfaceGravity in Gs, but in m/s^2. So, we have to divide SurfaceGravity by Earth's fall acceleration caused by gravity, 9.81m/s^2 to get to the unit of G.

This can be confirmed with the following Scan entry: (truncated for clearity)

{ 
	"timestamp":"2023-01-04T09:00:44Z", 
	"event":"Scan", 
	"BodyName":"Flyae Proae YU-V d3-2 1",
	"SurfaceGravity":4.227870,
}

and EDSM's entry for this body denoting this as 0.43G. 4.227870 / 9.81 = 0.43G.

This would fix our test cases, for example the previously mentioned Aleoida Coronamus on Phoi Aed NY-P d6-4 B 3 c with a gravity of 2.133268 / 9.81 = 0.217G, which is within the 0.27G maximum.

so.. game not bugged.. me code bugged :)

@Somfic
Copy link
Contributor Author

Somfic commented May 16, 2024

Is it an idea to create a Gravity type with an as_ms2 and as_g for the SurfaceGravity field? Would rather have to call an extra function than double checking documentation to make sure I'm doing maths with the correct units. What do you think?

@rster2002
Copy link
Owner

I think that's a good solution, although you would still need to make sure that Gravity isn't used in serde somewhere where it is expected in Gs stead of m/s^2, but I think planets are the only place where gravity is logged so it should be fine.

@Somfic
Copy link
Contributor Author

Somfic commented May 16, 2024

I think that's a good solution, although you would still need to make sure that Gravity isn't used in serde somewhere where it is expected in Gs stead of m/s^2, but I think planets are the only place where gravity is logged so it should be fine.

The journals indicate only the SurfaceGravity field in a Scan entry is used to indicate gravity, which is always in m/s2. I’ve implemented the Deserialize and Serialize traits to always (de)serialize to/from m/s2.

@Somfic
Copy link
Contributor Author

Somfic commented May 18, 2024

I was wondering why SystemState derives Serialize? This’d cascade to pretty much everything related to state to having to implement Serialize, was that intended?

@rster2002
Copy link
Owner

Yeah, this is intentional. The idea being that by making the state serializable it's easier for applications what would use this library to take parts (or the whole state) and pass it around. Not making it serializable would mean that applications would basically have to create a separate models and then need to copy data around which I was trying to avoid.

One thing I did consider doing and ended up not doing was putting serialize behind a feature flag, but I found that would add unnecessary complexity vs just making everything serializeable.

@Somfic Somfic requested a review from rster2002 May 19, 2024 11:12
@Somfic
Copy link
Contributor Author

Somfic commented May 19, 2024

Doing everything in ExobiologyState seems to work well. Do we want the exobioligy field in SystemState to be pub and have the user retrieve a SpawnSource using systemstate.exobioligy.get_for_body() or do we want a function in SystemState; systemstate.get_exobioligy_for_body()?

@Somfic Somfic changed the title Exobioligy logic Predicting exobiology species on planets May 19, 2024
Add more doc comments and move shared models around
@rster2002
Copy link
Owner

I think making exobiology pub and adding systemstate.exobioligy.get_for_body() is a good option.

@rster2002
Copy link
Owner

Also don't worry about the merge conflicts. Just give a signal and I'll merge those. I've moved some things around so once you're ready to merge I'll resolve those for you.

@Somfic
Copy link
Contributor Author

Somfic commented May 19, 2024

Okay, everything’s good to go from my end!

Copy link
Owner

@rster2002 rster2002 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very happy with the implementation. A couple of optimizations could still be made, but nothing that should keep this from getting merged.

src/modules/state/models/exobiology_state.rs Show resolved Hide resolved
src/modules/state/models/exobiology_state.rs Outdated Show resolved Hide resolved
@rster2002 rster2002 merged commit 07c9c26 into rster2002:master May 19, 2024
4 checks passed
@Somfic Somfic deleted the exobiology-species branch May 20, 2024 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implement logic for predicting exobiology species for planets
2 participants