View Single Post
  #12  
Old 12-08-2011, 02:28 PM
Octocat Octocat is offline
Approved Member
 
Join Date: Dec 2011
Posts: 22
Default

My variant with RNGCryptoServiceProvider

- Code slightly reduced and refactored
- Added minutes randomization
- Fixed maxValue problem (random.Next always return value by 1 less then the specified maximum)

Code:
using System;
using maddox.game;
using System.Security.Cryptography;

public class Mission : AMission
{
  public override void OnBattleInit()
  {
    RandomiseMission();
  }

  internal ISectionFile RandomiseMission()
  {
    // initialize a new instance of the Random class
    var provider = new RNGCryptoServiceProvider();
    var buffer = new byte[4];
    provider.GetBytes(buffer);
    var random = new Random(BitConverter.ToInt32(buffer, 0));

    //time of day
    bool RandomiseTime = true;
    int minTime = 6;    // 6am
    int maxTime = 17;   // 5pm
    // WeatherIndex
    bool RandomiseWeatherIndex = true;
    int minWeatherIndex = 0;    // clear
    int maxWeatherIndex = 2;    // medium clouds
    // cloud height
    bool RandomiseClouds = true;
    int minClouds = 500;    // 500m
    int maxClouds = 1500;   // 1500m
    // BreezeActivity
    bool RandomiseBreezeActivity = true;
    int minBreezeActivity = 0;  // zero breeze
    int maxBreezeActivity = 10; // max breeze
    // ThermalActivity
    bool RandomiseThermalActivity = true;
    int minThermalActivity = 0;     // zero thermals
    int maxThermalActivity = 10;    // max thermals

    ISectionFile secfile = GamePlay.gpCreateSectionFile();
    
    // time of day
    if (RandomiseTime == true)
    {
      string value = (random.Next(minTime * 100, maxTime * 100) / 100f).ToString();
      secfile.add("MAIN", "TIME", value);
    }

    // WeatherIndex 
    if (RandomiseWeatherIndex == true)
    {
      string value = random.Next(minWeatherIndex, maxWeatherIndex + 1).ToString();
      secfile.add("MAIN", "WeatherIndex", value);
    }

    // clouds
    if (RandomiseClouds == true)
    {
      string value = random.Next(minClouds, maxClouds + 1).ToString();
      secfile.add("MAIN", "CloudsHeight", value);
    }

    // minBreezeActivity
    if (RandomiseBreezeActivity == true)
    {
      string value = random.Next(minBreezeActivity, maxBreezeActivity + 1).ToString();
      secfile.add("MAIN", "BreezeActivity", value);
    }

    // ThermalActivity 
    if (RandomiseThermalActivity == true)
    {
      string value = random.Next(minThermalActivity, maxThermalActivity + 1).ToString();
      secfile.add("MAIN", "ThermalActivity", value);
    }

    // This post loads the section file secfile into the current battle.
    // It's also possible to save the section file secfile first by secfile.save("filename") and then
    // call GamePlay.gpPostMissionLoad("filename"); if you want to save the randomised file
    // on your hard disk.
    GamePlay.gpPostMissionLoad(secfile);

    return secfile;
  }
}

Last edited by Octocat; 12-08-2011 at 03:28 PM.
Reply With Quote