Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (void) setUpColorParametersWithSourceInfo:(NSDictionary *)sourceInfo targetInfo:(NSMutableDictionary *)targetInfo isAtmosphere:(BOOL)isAtmosphere
- {
- // Stir the PRNG fourteen times for backwards compatibility.
- unsigned i;
- for (i = 0; i < 14; i++)
- {
- gen_rnd_number();
- }
- Vector landHSB, seaHSB, landPolarHSB, seaPolarHSB;
- OOColor *color;
- landHSB = RandomHSBColor();
- if (!isAtmosphere)
- {
- do
- {
- seaHSB = RandomHSBColor();
- }
- while (dot_product(landHSB, seaHSB) > .80f); // make sure land and sea colors differ significantly
- // saturation bias - avoids really grey oceans
- if (seaHSB.y < 0.22f) seaHSB.y = seaHSB.y * 0.3f + 0.2f;
- // brightness bias - avoids really bright landmasses
- if (landHSB.z > 0.66f) landHSB.z = 0.66f;
- // planetinfo.plist overrides
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"land_color"]];
- if (color != nil) landHSB = HSBColorWithColor(color);
- else ScanVectorFromString([sourceInfo oo_stringForKey:@"land_hsb_color"], &landHSB);
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"sea_color"]];
- if (color != nil) seaHSB = HSBColorWithColor(color);
- else ScanVectorFromString([sourceInfo oo_stringForKey:@"sea_hsb_color"], &seaHSB);
- // polar areas are brighter but have less colour (closer to white)
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"polar_land_color"]];
- if (color != nil)
- {
- landPolarHSB = HSBColorWithColor(color);
- }
- else
- {
- landPolarHSB = LighterHSBColor(landHSB);
- }
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"polar_sea_color"]];
- if (color != nil)
- {
- seaPolarHSB = HSBColorWithColor(color);
- }
- else
- {
- seaPolarHSB = LighterHSBColor(seaHSB);
- }
- [targetInfo setObject:ColorWithHSBColor(landHSB) forKey:@"land_color"];
- [targetInfo setObject:ColorWithHSBColor(seaHSB) forKey:@"sea_color"];
- [targetInfo setObject:ColorWithHSBColor(landPolarHSB) forKey:@"polar_land_color"];
- [targetInfo setObject:ColorWithHSBColor(seaPolarHSB) forKey:@"polar_sea_color"];
- }
- else
- {
- landHSB = RandomHSBColor(); // NB: randomcolor is called twice to make the cloud colour similar to the old one.
- // add a cloud_color tinge to sky blue({0.66, 0.3, 1}).
- seaHSB = vector_add(landHSB,((Vector){1.333, 0.6, 2})); // 1 part cloud, 2 parts sky blue
- scale_vector(&seaHSB, 0.333);
- float cloudAlpha = OOClamp_0_1_f([sourceInfo oo_floatForKey:@"cloud_alpha" defaultValue:1.0f]);
- [targetInfo setObject:[NSNumber numberWithFloat:cloudAlpha] forKey:@"cloud_alpha"];
- // planetinfo overrides
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"atmosphere_color"]];
- if (color != nil) seaHSB = HSBColorWithColor(color);
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"cloud_color"]];
- if (color != nil) landHSB = HSBColorWithColor(color);
- // polar areas: brighter, less saturation
- landPolarHSB = vector_add(landHSB,LighterHSBColor(landHSB));
- scale_vector(&landPolarHSB, 0.5);
- color = [OOColor colorWithDescription:[sourceInfo objectForKey:@"polar_cloud_color"]];
- if (color != nil) landPolarHSB = HSBColorWithColor(color);
- [targetInfo setObject:ColorWithHSBColor(seaHSB) forKey:@"air_color"];
- [targetInfo setObject:ColorWithHSBColor(landHSB) forKey:@"cloud_color"];
- [targetInfo setObject:ColorWithHSBColor(landPolarHSB) forKey:@"polar_cloud_color"];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement