1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-09 20:32:43 +01:00
openrw/framework2/WeatherLoader.cpp
2013-07-04 07:56:58 +02:00

77 lines
2.2 KiB
C++

#include <renderwure/loaders/WeatherLoader.hpp>
#include <iostream>
#include <sstream>
#include <fstream>
#include <algorithm>
bool WeatherLoader::load(const std::string &filename)
{
std::ifstream fstream(filename.c_str());
if ( ! fstream.is_open())
return false;
std::string line;
while (std::getline(fstream, line)) {
if (line[0] == '/') // Comment line
continue;
WeatherData weather;
// Convert tabs into spaces
std::replace(line.begin(), line.end(), '\t', ' ');
// Remove all duplicate whitespace
line.erase(std::unique(line.begin(), line.end(), [](char l, char r) { return l == r && std::isspace(l); }), line.end());
std::stringstream ss(line);
std::string tmpstr;
weather.ambientColor = readRGB(ss);
weather.directLightColor = readRGB(ss);
weather.skyTopColor = readRGB(ss);
weather.skyBottomColor = readRGB(ss);
weather.sunCoreColor = readRGB(ss);
weather.sunCoronaColor = readRGB(ss);
std::getline(ss, tmpstr, ' '); weather.sunCoreSize = atof(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.sunCoronaSize = atof(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.sunBrightness = atof(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.shadowIntensity = atoi(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.lightShading = atoi(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.poleShading = atoi(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.farClipping = atof(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.fogStart = atof(tmpstr.c_str());
std::getline(ss, tmpstr, ' '); weather.amountGroundLight = atof(tmpstr.c_str());
weather.lowCloudColor = readRGB(ss);
weather.topCloudColor = readRGB(ss);
weather.bottomCloudColor = readRGB(ss);
for (size_t i = 0; i < 4; i++) {
std::getline(ss, tmpstr, ' ');
weather.unknown[i] = atoi(tmpstr.c_str());
}
this->weather.push_back(weather);
}
return true;
}
GTATypes::RGB WeatherLoader::readRGB(std::stringstream &ss)
{
GTATypes::RGB color;
std::string r, g, b;
std::getline(ss, r, ' ');
std::getline(ss, g, ' ');
std::getline(ss, b, ' ');
color.r = atoi(r.c_str());
color.b = atoi(b.c_str());
color.g = atoi(g.c_str());
return color;
}