/* Copyright (c) 2002-2012 Croteam Ltd. 
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation


This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */

#ifndef SE_INCL_PLAYERSETTINGS_H
#define SE_INCL_PLAYERSETTINGS_H
#ifdef PRAGMA_ONCE
  #pragma once
#endif
/*
 * Class responsible for describing player appearance/settings
 */
class CPlayerSettings {
public:
  char ps_achModelFile[16];     // filename of the player model (zero padded, not zero terminated)

#define PS_WAS_ONLYNEW  0 // select weapon if you didn't have it before
#define PS_WAS_NONE     1 // never autoselect
#define PS_WAS_ALL      2 // always autoselect
#define PS_WAS_BETTER   3 // only if the new weapon is 'better' than what you hold now
  SBYTE ps_iWeaponAutoSelect;   // type of weapon autoselection

  SBYTE ps_iCrossHairType;      // type of crosshair used

#define PSF_HIDEWEAPON      (1L<<0)   // don't render weapon in 1st person
#define PSF_PREFER3RDPERSON (1L<<1)   // auto switch to 3rd person 
#define PSF_NOQUOTES        (1L<<2)   // don't tell quotes
#define PSF_AUTOSAVE        (1L<<3)   // auto save at specific locations
#define PSF_COMPSINGLECLICK (1L<<4)   // invoke computer with single click, not double clicks
#define PSF_SHARPTURNING    (1L<<5)   // use prescanning to eliminate mouse lag
#define PSF_NOBOBBING       (1L<<6)   // view bobbing on/off (for people with motion sickness problems)
  ULONG ps_ulFlags;   // various flags

  // get filename for model
  CTFileName GetModelFilename(void) const
  {
    char achModelFile[MAX_PATH+1];
    memset(achModelFile, 0, sizeof(achModelFile));
    memcpy(achModelFile, ps_achModelFile, sizeof(ps_achModelFile));
    CTString strModelFile = "ModelsMP\\Player\\"+CTString(achModelFile)+".amc";
    if (!FileExists(strModelFile)) {
      strModelFile = "Models\\Player\\"+CTString(achModelFile)+".amc";
    }
    return strModelFile;
  }
};

// NOTE: never instantiate CPlayerSettings, as its size is not fixed to the size defined in engine
// use CUniversalPlayerSettings for instantiating an object
class CUniversalPlayerSettings {
public:
  union {
    CPlayerSettings ups_ps;
    UBYTE ups_aubDummy[NET_MAXSESSIONPROPERTIES];
  };

  // must have exact the size as allocated block in engine
  CUniversalPlayerSettings() { 
    ASSERT(sizeof(CPlayerSettings)<=MAX_PLAYERAPPEARANCE); 
    ASSERT(sizeof(CUniversalPlayerSettings)==MAX_PLAYERAPPEARANCE); 
  }
  operator CPlayerSettings&(void) { return ups_ps; }
};


#endif  /* include-once check. */