company_manager_face.h File Reference

Functionality related to the company manager's face. More...

#include "core/random_func.hpp"
#include "core/bitmath_func.hpp"
#include "table/sprites.h"
#include "company_type.h"

Go to the source code of this file.

Data Structures

struct  CompanyManagerFaceBitsInfo
 Information about the valid values of CompanyManagerFace bitgroups as well as the sprites to draw. More...

Enumerations

enum  GenderEthnicity {
  GENDER_FEMALE = 0, ETHNICITY_BLACK = 1, GE_WM = 0, GE_WF = 1 << GENDER_FEMALE,
  GE_BM = 1 << ETHNICITY_BLACK, GE_BF = 1 << ETHNICITY_BLACK | 1 << GENDER_FEMALE, GE_END
}
 The gender/race combinations that we have faces for. More...
enum  CompanyManagerFaceVariable {
  CMFV_GENDER, CMFV_ETHNICITY, CMFV_GEN_ETHN, CMFV_HAS_MOUSTACHE,
  CMFV_HAS_TIE_EARRING, CMFV_HAS_GLASSES, CMFV_EYE_COLOUR, CMFV_CHEEKS,
  CMFV_CHIN, CMFV_EYEBROWS, CMFV_MOUSTACHE, CMFV_LIPS,
  CMFV_NOSE, CMFV_HAIR, CMFV_JACKET, CMFV_COLLAR,
  CMFV_TIE_EARRING, CMFV_GLASSES, CMFV_END
}
 Bitgroups of the CompanyManagerFace variable.

Functions

 DECLARE_ENUM_AS_BIT_SET (GenderEthnicity)
 See GenderRace as a bitset.
 DECLARE_POSTFIX_INCREMENT (CompanyManagerFaceVariable)
 assert_compile (lengthof(_cmf_info)==CMFV_END)
static uint GetCompanyManagerFaceBits (CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge)
 Gets the company manager's face bits for the given company manager's face variable.
static void SetCompanyManagerFaceBits (CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge, uint val)
 Sets the company manager's face bits for the given company manager's face variable.
static void IncreaseCompanyManagerFaceBits (CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge, int8 amount)
 Increase/Decrease the company manager's face variable by the given amount.
static bool AreCompanyManagerFaceBitsValid (CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge)
 Checks whether the company manager's face bits have a valid range.
static uint ScaleCompanyManagerFaceValue (CompanyManagerFaceVariable cmfv, GenderEthnicity ge, uint val)
 Scales a company manager's face bits variable to the correct scope.
static void ScaleAllCompanyManagerFaceBits (CompanyManagerFace &cmf)
 Scales all company manager's face bits to the correct scope.
static void RandomCompanyManagerFaceBits (CompanyManagerFace &cmf, GenderEthnicity ge, bool adv)
 Make a random new face.
static SpriteID GetCompanyManagerFaceSprite (CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge)
 Gets the sprite to draw for the given company manager's face variable.
void DrawCompanyManagerFace (CompanyManagerFace face, int colour, int x, int y)
 Draws the face of a company manager's face.
bool IsValidCompanyManagerFace (CompanyManagerFace cmf)
 Checks whether a company manager's face is a valid encoding.

Variables

static const
CompanyManagerFaceBitsInfo 
_cmf_info []
 Lookup table for indices into the CompanyManagerFace, valid ranges and sprites.


Detailed Description

Functionality related to the company manager's face.

Definition in file company_manager_face.h.


Enumeration Type Documentation

The gender/race combinations that we have faces for.

Enumerator:
GENDER_FEMALE  This bit set means a female, otherwise male.
ETHNICITY_BLACK  This bit set means black, otherwise white.
GE_WM  A male of Caucasian origin (white).
GE_WF  A female of Caucasian origin (white).
GE_BM  A male of African origin (black).
GE_BF  A female of African origin (black).

Definition at line 14 of file company_manager_face.h.


Function Documentation

static bool AreCompanyManagerFaceBitsValid ( CompanyManagerFace  cmf,
CompanyManagerFaceVariable  cmfv,
GenderEthnicity  ge 
) [inline, static]

Checks whether the company manager's face bits have a valid range.

Parameters:
cmf the face to extract the bits from
cmfv the face variable to get the data of
ge the gender and ethnicity of the face
Returns:
true if and only if the bits are valid

Definition at line 145 of file company_manager_face.h.

References GB(), and CompanyManagerFaceBitsInfo::valid_values.

Referenced by IsValidCompanyManagerFace().

void DrawCompanyManagerFace ( CompanyManagerFace  cmf,
int  colour,
int  x,
int  y 
)

Draws the face of a company manager's face.

Parameters:
cmf the company manager's face
colour the (background) colour of the gradient
x x-position to draw the face
y y-position to draw the face

Definition at line 637 of file company_gui.cpp.

References _cmf_info, DrawSprite(), GE_WM, GENDER_FEMALE, GetCompanyManagerFaceBits(), GetCompanyManagerFaceSprite(), and HasBit().

Referenced by CompanyWindow::OnPaint().

static uint GetCompanyManagerFaceBits ( CompanyManagerFace  cmf,
CompanyManagerFaceVariable  cmfv,
GenderEthnicity  ge 
) [inline, static]

Gets the company manager's face bits for the given company manager's face variable.

Parameters:
cmf the face to extract the bits from
cmfv the face variable to get the data of
ge the gender and ethnicity of the face
Precondition:
_cmf_info[cmfv].valid_values[ge] != 0
Returns:
the requested bits

Definition at line 90 of file company_manager_face.h.

References GB().

Referenced by DrawCompanyManagerFace(), AICompany::GetPresidentGender(), IncreaseCompanyManagerFaceBits(), IsValidCompanyManagerFace(), and ScaleAllCompanyManagerFaceBits().

static SpriteID GetCompanyManagerFaceSprite ( CompanyManagerFace  cmf,
CompanyManagerFaceVariable  cmfv,
GenderEthnicity  ge 
) [inline, static]

Gets the sprite to draw for the given company manager's face variable.

Parameters:
cmf the face to extract the data from
cmfv the face variable to get the sprite of
ge the gender and ethnicity of the face
Precondition:
_cmf_info[cmfv].valid_values[ge] != 0
Returns:
sprite to draw

Definition at line 225 of file company_manager_face.h.

References CompanyManagerFaceBitsInfo::first_sprite, and GB().

Referenced by DrawCompanyManagerFace().

static void IncreaseCompanyManagerFaceBits ( CompanyManagerFace cmf,
CompanyManagerFaceVariable  cmfv,
GenderEthnicity  ge,
int8  amount 
) [inline, static]

Increase/Decrease the company manager's face variable by the given amount.

If the new value greater than the max value for this variable it will be set to 0. Or is it negativ (< 0) it will be set to max value.

Parameters:
cmf the company manager face to write the bits to
cmfv the company manager face variable to write the data of
ge the gender and ethnicity of the company manager's face
amount the amount which change the value
Precondition:
0 <= val < _cmf_info[cmfv].valid_values[ge]

Definition at line 124 of file company_manager_face.h.

References GetCompanyManagerFaceBits(), SetCompanyManagerFaceBits(), and CompanyManagerFaceBitsInfo::valid_values.

Referenced by ScaleAllCompanyManagerFaceBits().

bool IsValidCompanyManagerFace ( CompanyManagerFace  cmf  ) 

Checks whether a company manager's face is a valid encoding.

Unused bits are not enforced to be 0.

Parameters:
cmf the fact to check
Returns:
true if and only if the face is valid

Definition at line 126 of file company_cmd.cpp.

References AreCompanyManagerFaceBitsValid(), GE_WM, GENDER_FEMALE, GetCompanyManagerFaceBits(), and HasBit().

Referenced by CmdSetCompanyManagerFace().

static void RandomCompanyManagerFaceBits ( CompanyManagerFace cmf,
GenderEthnicity  ge,
bool  adv 
) [inline, static]

Make a random new face.

If it is for the advanced company manager's face window then the new face have the same gender and ethnicity as the old one, else the gender is equal and the ethnicity is random.

Parameters:
cmf the company manager's face to write the bits to
ge the gender and ethnicity of the old company manager's face
adv if it for the advanced company manager's face window
Precondition:
scale 'ge' to a valid gender/ethnicity combination

Definition at line 199 of file company_manager_face.h.

References GENDER_FEMALE, HasBit(), ScaleAllCompanyManagerFaceBits(), and SetCompanyManagerFaceBits().

Referenced by DoStartupNewCompany(), and AICompany::SetPresidentGender().

static void ScaleAllCompanyManagerFaceBits ( CompanyManagerFace cmf  )  [inline, static]

Scales all company manager's face bits to the correct scope.

Parameters:
cmf the company manager's face to write the bits to

Definition at line 170 of file company_manager_face.h.

References GB(), GE_WM, GENDER_FEMALE, GetCompanyManagerFaceBits(), HasBit(), and IncreaseCompanyManagerFaceBits().

Referenced by RandomCompanyManagerFaceBits().

static uint ScaleCompanyManagerFaceValue ( CompanyManagerFaceVariable  cmfv,
GenderEthnicity  ge,
uint  val 
) [inline, static]

Scales a company manager's face bits variable to the correct scope.

Parameters:
cmfv the face variable to write the data of
ge the gender and ethnicity of the face
val the to value to scale
Precondition:
val < (1U << _cmf_info[cmfv].length), i.e. val has a value of 0..2^(bits used for this variable)-1
Returns:
the scaled value

Definition at line 158 of file company_manager_face.h.

References CompanyManagerFaceBitsInfo::length.

Referenced by ConvertFromOldCompanyManagerFace().

static void SetCompanyManagerFaceBits ( CompanyManagerFace cmf,
CompanyManagerFaceVariable  cmfv,
GenderEthnicity  ge,
uint  val 
) [inline, static]

Sets the company manager's face bits for the given company manager's face variable.

Parameters:
cmf the face to write the bits to
cmfv the face variable to write the data of
ge the gender and ethnicity of the face
val the new value
Precondition:
val < _cmf_info[cmfv].valid_values[ge]

Definition at line 105 of file company_manager_face.h.

References SB().

Referenced by ConvertFromOldCompanyManagerFace(), IncreaseCompanyManagerFaceBits(), and RandomCompanyManagerFaceBits().


Variable Documentation

Initial value:

 {
   {  0, 1, {  2,  2,  2,  2 }, {     0,     0,     0,     0 } }, 
   {  1, 2, {  2,  2,  2,  2 }, {     0,     0,     0,     0 } }, 
   {  0, 3, {  4,  4,  4,  4 }, {     0,     0,     0,     0 } }, 
   {  3, 1, {  2,  0,  2,  0 }, {     0,     0,     0,     0 } }, 
   {  3, 1, {  0,  2,  0,  2 }, {     0,     0,     0,     0 } }, 
   {  4, 1, {  2,  2,  2,  2 }, {     0,     0,     0,     0 } }, 
   {  5, 2, {  3,  3,  1,  1 }, {     0,     0,     0,     0 } }, 
   {  0, 0, {  1,  1,  1,  1 }, { 0x325, 0x326, 0x390, 0x3B0 } }, 
   {  7, 2, {  4,  1,  2,  2 }, { 0x327, 0x327, 0x391, 0x3B1 } },
   {  9, 4, { 12, 16, 11, 16 }, { 0x32B, 0x337, 0x39A, 0x3B8 } },
   { 13, 2, {  3,  0,  3,  0 }, { 0x367,     0, 0x397,     0 } }, 
   { 13, 4, { 12, 10,  9,  9 }, { 0x35B, 0x351, 0x3A5, 0x3C8 } }, 
   { 17, 3, {  8,  4,  4,  5 }, { 0x349, 0x34C, 0x393, 0x3B3 } }, 
   { 20, 4, {  9,  5,  5,  4 }, { 0x382, 0x38B, 0x3D4, 0x3D9 } },
   { 24, 2, {  3,  3,  3,  3 }, { 0x36B, 0x378, 0x36B, 0x378 } },
   { 26, 2, {  4,  4,  4,  4 }, { 0x36E, 0x37B, 0x36E, 0x37B } },
   { 28, 3, {  6,  3,  6,  3 }, { 0x372, 0x37F, 0x372, 0x3D1 } }, 
   { 31, 1, {  2,  2,  2,  2 }, { 0x347, 0x347, 0x3AE, 0x3AE } }  
}
Lookup table for indices into the CompanyManagerFace, valid ranges and sprites.

Definition at line 59 of file company_manager_face.h.

Referenced by DrawCompanyManagerFace().


Generated on Mon Dec 14 21:00:06 2009 for OpenTTD by  doxygen 1.5.6