- Index: src/freerct.cpp
- ===================================================================
- --- src/freerct.cpp (revision 1307)
- src/freerct.cpp (working copy)
- @@ -111,12 111,8 @@
- const char *font_path = cfg_file.GetValue("font", "medium-path");
- int font_size = cfg_file.GetNum("font", "medium-size");
- if (font_path == nullptr || *font_path == '\0' || font_size == -1) {
- - fprintf(stderr, "Failed to find font settings. Did you make a 'freerct.cfg' file next to the 'freerct' program?\n");
- - fprintf(stderr, "Example content (you may need to change the path and.or the size):\n"
- - "[font]\n"
- - "medium-size = 12\n"
- - "medium-path = /usr/share/fonts/gnu-free/FreeSans.ttf\n");
- - return 1;
- font_path = "RCT1.ttf";
- font_size = 16;
- }
- /* Initialize video. */
- Index: src/gamecontrol.cpp
- ===================================================================
- --- src/gamecontrol.cpp (revision 1307)
- src/gamecontrol.cpp (working copy)
- @@ -90,6 90,7 @@
- {
- _manager.Tick();
- _guests.DoTick();
- _weather.OnTick();
- DateOnTick();
- _guests.OnAnimate(frame_delay);
- _rides_manager.OnAnimate(frame_delay);
- Index: src/viewport.cpp
- ===================================================================
- --- src/viewport.cpp (revision 1307)
- src/viewport.cpp (working copy)
- @@ -1418,6 1418,8 @@
- _video.BlitImage(dd.base, dd.sprite, rec, gs);
- }
- _weather.DrawRain();
- _video.SetClippedRectangle(cr);
- }
- Index: src/weather.cpp
- ===================================================================
- --- src/weather.cpp (revision 1307)
- src/weather.cpp (working copy)
- @@ -12,7 12,9 @@
- #include "stdafx.h"
- #include "weather.h"
- #include "dates.h"
- #include "palette.h"
- #include "random.h"
- #include "video.h"
- Weather _weather; ///< Weather in the park.
- @@ -151,7 153,79 @@
- if (this->change == 0) this->change = (this->next - this->current > 0) ? 1 : -1;
- }
- /** Helper method to determine if water is falling from the sky. */
- bool Weather::IsRaining()
- {
- return this->GetWeatherType() == WTP_RAINING || this->GetWeatherType() == WTP_THUNDERSTORM;
- }
- /**
- * Draw rain to the screen.
- * @note Magic numbers taken from RCT.
- */
- void Weather::DrawRain()
- {
- if (this->rain.opacity == 0) return;
- const uint32 col = MakeRGBA(127, 127, 127, this->rain.opacity); /// \todo Work out the colour more accurately
- for (int x = -this->rain.X_GAP; x < _video.GetXSize(); x = this->rain.X_GAP) {
- for (int y = -this->rain.Y_GAP; y < _video.GetYSize(); y = (this->rain.opacity < 50 ? 2 : 1) * this->rain.Y_GAP) {
- _video.FillSurface(col, {x this->rain.x_off, y this->rain.y_off1, 1, 1});
- _video.FillSurface(col, {x this->rain.x_off 16, y this->rain.y_off2, 1, 1});
- /* Thunderstorms get 2 extra streams of water */
- if (this->GetWeatherType() == WTP_THUNDERSTORM) {
- _video.FillSurface(col, {x this->rain.x_off 8, y this->rain.y_off3, 1, 1});
- _video.FillSurface(col, {x this->rain.x_off 24, y this->rain.y_off4, 1, 1});
- }
- }
- }
- }
- /**
- * Set the rain drawing positions.
- * @note Magic numbers taken from RCT.
- */
- void Weather::OnTick()
- {
- // static int count = 0;
- // if (count > 10) {
- // count = 0;
- if (!this->IsRaining()) {
- this->rain.opacity = std::max(this->rain.opacity - 1, 0);
- } else {
- this->rain.opacity = std::min(this->rain.opacity 1, 192);
- }
- // }
- // count ;
- /* If it's not raining (at all), reset the raindrop positions. */
- if (this->rain.opacity == 0) {
- this->rain.x_off = 0;
- this->rain.y_off1 = 0;
- this->rain.y_off2 = 5;
- this->rain.y_off3 = 7;
- this->rain.y_off4 = 14;
- return;
- }
- this->rain.x_off ;
- if (this->rain.x_off >= this->rain.X_GAP) this->rain.x_off -= this->rain.X_GAP;
- this->rain.y_off1 = 5;
- if (this->rain.y_off1 >= this->rain.Y_GAP) this->rain.y_off1 -= this->rain.Y_GAP;
- this->rain.y_off2 = 6;
- if (this->rain.y_off2 >= this->rain.Y_GAP) this->rain.y_off2 -= this->rain.Y_GAP;
- this->rain.y_off3 = 3;
- if (this->rain.y_off3 >= this->rain.Y_GAP) this->rain.y_off3 -= this->rain.Y_GAP;
- this->rain.y_off4 = 4;
- if (this->rain.y_off4 >= this->rain.Y_GAP) this->rain.y_off4 -= this->rain.Y_GAP;
- _video.MarkDisplayDirty();
- }
- /**
- * Get the current type of weather.
- * @return The type of weather of today.
- */
- Index: src/weather.h
- ===================================================================
- --- src/weather.h (revision 1307)
- src/weather.h (working copy)
- @@ -33,10 33,28 @@
- int current; ///< Current weather.
- int next; ///< Next weather type.
- - int change; ///< speed of change in the weather.
- int change; ///< Speed of change in the weather.
- /** Helpful storage object for rain related variables. */
- struct rain_t {
- static const int X_GAP = 32; ///< X-distance between each rain drop.
- static const int Y_GAP = 48; ///< Y-distance between each rain drop.
- int opacity; ///< Opacity of the rain drops (when fading in or out).
- int x_off; ///< x-position of a rain drop.
- int y_off1; ///< 1st y-position of a rain drop.
- int y_off2; ///< 2nd y-position of a rain drop.
- int y_off3; ///< 3rd y-position of a rain drop. (Thunderstorm only).
- int y_off4; ///< 4th y-position of a rain drop. (Thunderstorm only).
- };
- rain_t rain; ///< Rain object.
- bool IsRaining();
- void DrawRain();
- void Initialize();
- void OnNewDay();
- void OnTick();
- WeatherType GetWeatherType() const;