LogicRandomValue.h 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. ** Command & Conquer Generals(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // //
  20. // (c) 2001-2003 Electronic Arts Inc. //
  21. // //
  22. ////////////////////////////////////////////////////////////////////////////////
  23. // LogicRandomValue.h
  24. // Random number generation system
  25. // Author: Michael S. Booth, January 1998
  26. // Split out into separate Logic/Client/Audio headers by MDC Sept 2002
  27. #pragma once
  28. #ifndef _LOGIC_RANDOM_VALUE_H_
  29. #define _LOGIC_RANDOM_VALUE_H_
  30. #include "Lib/BaseType.h"
  31. // do NOT use these functions directly, rather use the macros below
  32. extern Int GetGameLogicRandomValue( int lo, int hi, char *file, int line );
  33. extern Real GetGameLogicRandomValueReal( Real lo, Real hi, char *file, int line );
  34. // use these macros to access the random value functions
  35. #define GameLogicRandomValue( lo, hi ) GetGameLogicRandomValue( lo, hi, __FILE__, __LINE__ )
  36. #define GameLogicRandomValueReal( lo, hi ) GetGameLogicRandomValueReal( lo, hi, __FILE__, __LINE__ )
  37. //--------------------------------------------------------------------------------------------------------------
  38. class CColorAlphaDialog;
  39. class DebugWindowDialog;
  40. /**
  41. * A GameLogicRandomVariable represents a distribution of random values
  42. * from which discrete values can be retrieved.
  43. */
  44. class GameLogicRandomVariable
  45. {
  46. public:
  47. // NOTE: This class cannot have a constructor or destructor due to its use within unions
  48. /**
  49. * CONSTANT represents a single, constant, value.
  50. * UNIFORM represents a uniform distribution of random values.
  51. * GAUSSIAN represents a normally distributed set of random values.
  52. * TRIANGULAR represents a distribution of random values in the shape
  53. * of a triangle, with the peak probability midway between low and high.
  54. * LOW_BIAS represents a distribution of random values with
  55. * maximum probability at low, and zero probability at high.
  56. * HIGH_BIAS represents a distribution of random values with
  57. * zero probability at low, and maximum probability at high.
  58. */
  59. enum DistributionType
  60. {
  61. CONSTANT, UNIFORM, GAUSSIAN, TRIANGULAR, LOW_BIAS, HIGH_BIAS
  62. };
  63. static const char *DistributionTypeNames[];
  64. /// define the range of random values, and the distribution of values
  65. void setRange( Real low, Real high, DistributionType type = UNIFORM );
  66. Real getValue( void ) const; ///< return a value from the random distribution
  67. inline Real getMinimumValue( void ) const { return m_low; }
  68. inline Real getMaximumValue( void ) const { return m_high; }
  69. inline DistributionType getDistributionType( void ) const { return m_type; }
  70. protected:
  71. DistributionType m_type; ///< the kind of random distribution
  72. Real m_low, m_high; ///< the range of random values
  73. // These two friends are for particle editing.
  74. friend CColorAlphaDialog;
  75. friend DebugWindowDialog;
  76. };
  77. //--------------------------------------------------------------------------------------------------------------
  78. #endif // _LOGIC_RANDOM_VALUE_H_