Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
v3_rnd.h
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(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 O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
21 ***********************************************************************************************
22 * *
23 * Project Name : G *
24 * *
25 * $Archive:: /Commando/Code/wwmath/v3_rnd.h $*
26 * *
27 * $Author:: Greg_h $*
28 * *
29 * $Modtime:: 7/09/99 9:49a $*
30 * *
31 * $Revision:: 4 $*
32 * *
33 *---------------------------------------------------------------------------------------------*
34 * Functions: *
35 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
36#if defined(_MSC_VER)
37#pragma once
38#endif
39
40#ifndef V3_RND_H
41#define V3_RND_H
42
43#include "always.h"
44#include "vector3.h"
45#include "random.h"
46#include <limits.h>
47
48/*
49** Vector3Randomizer is an abstract class for generating random Vector3s.
50** Examples: generating vectors in a sphere, cylinder, etc.
51** This file contains several concrete derived classes; others may be defined
52** in future.
53** A possible future extension to this class would be to add a method to
54** efficiently get an array of random points.
55*/
56
58
59 public:
60
61 enum
62 {
63 CLASSID_UNKNOWN = 0xFFFFFFFF,
69 CLASSID_LAST = 0x0000FFFF
70 };
71
72 virtual ~Vector3Randomizer(void) { }
73
74 // RTTI identifiction
75 virtual unsigned int Class_ID (void) const = 0;
76
77 // Return a random vector
78 virtual void Get_Vector(Vector3 &vector) = 0;
79
80 // Get the maximum component possible for generated vectors
81 virtual float Get_Maximum_Extent(void) = 0;
82
83 // Scale all vectors produced in future
84 virtual void Scale(float scale) = 0;
85
86 // Clone the randomizer
87 virtual Vector3Randomizer * Clone(void) const = 0;
88
89 protected:
90
91 // Derived classes should have protected copy CTors so users use the Clone() function
92
93 // Utility functions
95 float Get_Random_Float_0_To_1() { return ((unsigned int)Randomizer) * OOUIntMax; }
96
97 static const float OOIntMax;
98 static const float OOUIntMax;
100
101 private:
102
103 // Derived classes should have a private dummy assignment operator to block usage
104};
105
106
107/*
108** Vector3SolidBoxRandomizer is a randomizer for generating points uniformly distributed inside a
109** box which is centered on the origin.
110*/
112
113 public:
114
115 Vector3SolidBoxRandomizer(const Vector3 & extents);
116
117 virtual unsigned int Class_ID (void) const { return CLASSID_SOLIDBOX; }
118 virtual const Vector3 & Get_Extents (void) const { return Extents; }
119 virtual void Get_Vector(Vector3 &vector);
120 virtual float Get_Maximum_Extent(void);
121 virtual void Scale(float scale);
122 virtual Vector3Randomizer * Clone(void) const { return W3DNEW Vector3SolidBoxRandomizer(*this); }
123
124 protected:
125
126 // Derived classes should have protected copy CTors so users use the Clone() function
127 Vector3SolidBoxRandomizer(const Vector3SolidBoxRandomizer &src) : Extents(src.Extents) { }
128
129 private:
130
131 // Derived classes should have a private dummy assignment operator to block usage
132 Vector3SolidBoxRandomizer & Vector3SolidBoxRandomizer::operator = (const Vector3SolidBoxRandomizer &that) { that; return *this; }
133
134 Vector3 Extents;
135};
136
137
138/*
139** Vector3SolidSphereRandomizer is a randomizer for generating points uniformly distributed inside
140** a sphere which is centered on the origin.
141*/
143
144 public:
145
146 Vector3SolidSphereRandomizer(float radius);
147
148 virtual unsigned int Class_ID (void) const { return CLASSID_SOLIDSPHERE; }
149 virtual float Get_Radius (void) const { return Radius; }
150 virtual void Get_Vector(Vector3 &vector);
151 virtual float Get_Maximum_Extent(void);
152 virtual void Scale(float scale);
153 virtual Vector3Randomizer * Clone(void) const { return W3DNEW Vector3SolidSphereRandomizer(*this); }
154
155 protected:
156
157 // Derived classes should have protected copy CTors so users use the Clone() function
159
160 private:
161
162 // Derived classes should have a private dummy assignment operator to block usage
163 Vector3SolidSphereRandomizer & Vector3SolidSphereRandomizer::operator = (const Vector3SolidSphereRandomizer &that) { that; return *this; }
164
165 float Radius;
166};
167
168
169/*
170** Vector3HollowSphereRandomizer is a randomizer for generating points uniformly distributed on the
171** surface of a sphere which is centered on the origin.
172*/
174
175 public:
176
177 Vector3HollowSphereRandomizer(float radius);
178
179 virtual unsigned int Class_ID (void) const { return CLASSID_HOLLOWSPHERE; }
180 virtual float Get_Radius (void) const { return Radius; }
181 virtual void Get_Vector(Vector3 &vector);
182 virtual float Get_Maximum_Extent(void);
183 virtual void Scale(float scale);
184 virtual Vector3Randomizer * Clone(void) const { return W3DNEW Vector3HollowSphereRandomizer(*this); }
185
186 protected:
187
188 // Derived classes should have protected copy CTors so users use the Clone() function
190
191 private:
192
193 // Derived classes should have a private dummy assignment operator to block usage
194 Vector3HollowSphereRandomizer & Vector3HollowSphereRandomizer::operator = (const Vector3HollowSphereRandomizer &that) { that; return *this; }
195
196 float Radius;
197};
198
199
200/*
201** Vector3SolidCylinderRandomizer is a randomizer for generating points uniformly distributed
202** inside a cylinder which is centered on the origin (set extent to 0 for a disk).
203*/
205
206 public:
207
208 Vector3SolidCylinderRandomizer(float extent, float radius);
209
210 virtual unsigned int Class_ID (void) const { return CLASSID_SOLIDCYLINDER; }
211 virtual float Get_Radius (void) const { return Radius; }
212 virtual float Get_Height (void) const { return Extent; }
213 virtual void Get_Vector(Vector3 &vector);
214 virtual float Get_Maximum_Extent(void);
215 virtual void Scale(float scale);
216 virtual Vector3Randomizer * Clone(void) const { return W3DNEW Vector3SolidCylinderRandomizer(*this); }
217
218 protected:
219
220 // Derived classes should have protected copy CTors so users use the Clone() function
221 Vector3SolidCylinderRandomizer(const Vector3SolidCylinderRandomizer &src) : Extent(src.Extent), Radius(src.Radius) { }
222
223 private:
224
225 // Derived classes should have a private dummy assignment operator to block usage
226 Vector3SolidCylinderRandomizer & Vector3SolidCylinderRandomizer::operator = (const Vector3SolidCylinderRandomizer &that) { that; return *this; }
227
228 float Extent;
229 float Radius;
230};
231
232
233#endif
234
235
Color scale(const Color &a, const Color &b)
Definition GameMtl.cpp:722
#define W3DNEW
Definition always.h:109
virtual void Scale(float scale)
Definition v3_rnd.cpp:133
virtual unsigned int Class_ID(void) const
Definition v3_rnd.h:179
virtual float Get_Radius(void) const
Definition v3_rnd.h:180
virtual Vector3Randomizer * Clone(void) const
Definition v3_rnd.h:184
virtual float Get_Maximum_Extent(void)
Definition v3_rnd.cpp:128
virtual void Get_Vector(Vector3 &vector)
Definition v3_rnd.cpp:108
Vector3HollowSphereRandomizer(float radius)
Definition v3_rnd.cpp:103
Vector3HollowSphereRandomizer(const Vector3HollowSphereRandomizer &src)
Definition v3_rnd.h:189
virtual void Scale(float scale)=0
static Random3Class Randomizer
Definition v3_rnd.h:99
static const float OOIntMax
Definition v3_rnd.h:97
virtual Vector3Randomizer * Clone(void) const =0
@ CLASSID_SOLIDCYLINDER
Definition v3_rnd.h:67
virtual ~Vector3Randomizer(void)
Definition v3_rnd.h:72
float Get_Random_Float_0_To_1()
Definition v3_rnd.h:95
float Get_Random_Float_Minus1_To_1()
Definition v3_rnd.h:94
virtual float Get_Maximum_Extent(void)=0
virtual unsigned int Class_ID(void) const =0
virtual void Get_Vector(Vector3 &vector)=0
static const float OOUIntMax
Definition v3_rnd.h:98
virtual unsigned int Class_ID(void) const
Definition v3_rnd.h:117
Vector3SolidBoxRandomizer(const Vector3SolidBoxRandomizer &src)
Definition v3_rnd.h:127
virtual void Get_Vector(Vector3 &vector)
Definition v3_rnd.cpp:51
virtual void Scale(float scale)
Definition v3_rnd.cpp:65
virtual Vector3Randomizer * Clone(void) const
Definition v3_rnd.h:122
Vector3SolidBoxRandomizer(const Vector3 &extents)
Definition v3_rnd.cpp:44
virtual float Get_Maximum_Extent(void)
Definition v3_rnd.cpp:58
virtual const Vector3 & Get_Extents(void) const
Definition v3_rnd.h:118
virtual unsigned int Class_ID(void) const
Definition v3_rnd.h:210
virtual float Get_Radius(void) const
Definition v3_rnd.h:211
virtual void Scale(float scale)
Definition v3_rnd.cpp:168
Vector3SolidCylinderRandomizer(float extent, float radius)
Definition v3_rnd.cpp:140
virtual float Get_Maximum_Extent(void)
Definition v3_rnd.cpp:163
Vector3SolidCylinderRandomizer(const Vector3SolidCylinderRandomizer &src)
Definition v3_rnd.h:221
virtual Vector3Randomizer * Clone(void) const
Definition v3_rnd.h:216
virtual float Get_Height(void) const
Definition v3_rnd.h:212
virtual void Get_Vector(Vector3 &vector)
Definition v3_rnd.cpp:146
Vector3SolidSphereRandomizer(float radius)
Definition v3_rnd.cpp:74
virtual float Get_Maximum_Extent(void)
Definition v3_rnd.cpp:91
virtual void Get_Vector(Vector3 &vector)
Definition v3_rnd.cpp:79
virtual void Scale(float scale)
Definition v3_rnd.cpp:96
virtual unsigned int Class_ID(void) const
Definition v3_rnd.h:148
Vector3SolidSphereRandomizer(const Vector3SolidSphereRandomizer &src)
Definition v3_rnd.h:158
virtual Vector3Randomizer * Clone(void) const
Definition v3_rnd.h:153
virtual float Get_Radius(void) const
Definition v3_rnd.h:149