/** \~russian     Critter,    .
 *
 *       :   , ,
 *   ..      ,     .
 *
 ** \~english Limited-functionality equivalent of Critter class.
 *
 * All stats, skills, perks etc. can be read from the chosen only (player).
 *
 * \~ @ingroup Client
 */
class CritterCl
{
public:
    /** \~russian  ,     ,    . */
    bool IsChosen();

    /** \~russian  ,    .
     *
     * @return @c true     ; @c false    .
     */
    bool IsPlayer();

    /** \~russian  ,    NPC.
     *
     * @return @c true     NPC; @c false    .
     */
    bool IsNpc();

    /** \~russian ,   .
     *
     * @return @c true    ; @c false    .
     *
     * @see    IsDead
     * @see    IsKnockout
     */
    bool IsLife();

    /** \~russian ,     .
     *
     * @return @c true     ; @c false    .
     *
     * @see    IsDead
     * @see    IsLife
     */
    bool IsKnockout();

    /** \~russian ,   .
     *
     * @return @c true    ; @c false    .
     *
     * @see    IsKnockout
     * @see    IsLife
     */
    bool IsDead();

    /** \~russian ,     .
     *
     * @return @c true    ; @c false    .
     *
     * @see    IsBusy
     */
    bool IsFree();

    /** \~russian ,     .
     *
     * @return @c true    ; @c false    .
     *
     * @see    IsFree
     */
    bool IsBusy();
	
	/** \~russian ,         .
     *
     * @return @c true     ; @c false    .
     */
	bool IsTurnBasedTurn();
	
	/** \~russian     .
     *
     * @return   .
     */
	uint GetTurnBasedTime();

    /** \~russian    ,    .
     *
     * @return   .
     */
    uint ItemsCount();

    /** \~russian     ,    .
     *
     * @return     .
     */
    uint ItemsWeight();

    /** \~russian     ,    .
     *
     * @return     .
     */
    uint ItemsVolume();

    /** \~russian    ,    .
     *
     * @param protoId ID   (.  @b ITEMPID.H).
     *
     * @return     ,   .
     */
    uint CountItem(uint16 protoId);

    /** \~russian     ,     .
     *
     * @param  protoId  ID   (.  @b ITEMPID.H).
     * @param  slot     ,     (. @link Slots@endlink).
     *                    : -1,     .
     *
     * @return     ItemCl.     @c null.
     */
    ItemCl@+ GetItem(uint16 protoId, int slot);

    /** \~russian   ,    .
     *
     * @param  items     ,    .
     *                  ,      .
     * @param  slot   ,     (. @link Slots@endlink).
     *                  : -1,     .
     *
     * @return   .
     */
    uint GetItems(int slot, ItemCl@[]@+ items);

    /** \~russian      ,    .
     *
     * @param   type     (. @link ItemsTypes Items types@endlink).
     * @param   items  ,       .
     *
     * @return     .
     */
    uint GetItemsByType(int type, Item@[]@+ items);

    /** \~russian    ,     .
     *
     * @param  slot   (. @link Slots@endlink).
	 * @param  mode       ,      
	 *    -  (. @link HitLocations Hit Locations@endlink),
	 *    -   (0  primary, 1  secondary, 2  third).
     *
     * @return     ProtoItem.   ,   @c null.
     */
    ProtoItem@+ GetSlotProto(int slot, uint8& mode);

    /** \~russian ,        .
     *
     * @param  doorId    .
     *                        .
     *                      .
     *
     * @return @c true       ; @c false     .
     */
    bool CheckKey(uint doorId);
	
    /** \~russian  /            .
     *
     * @param  visible   .
     *
     * @see    GetVisible
     */
    void SetVisible(bool visible);

    /** \~russian       .
     *
     * @return  @c true    ; @c false    .
     *
     * @see     SetVisible
     */
    bool GetVisible();

    /** \~russian   ,     .
     *
     * @param  slot  . @link Slots@endlink.
     *
     * @return     ProtoItem.       @c null.
     */
    ProtoItem@+ GetSlotProto(int slot);
	
	/** \~russian      */
	uint GetMultihex();

    /**
     * \~russian @name 
     * \~english @name Animation
     */
    //@{

    /** \~russian  ,      .
     *
     * @param  anim1     (. @b ANIM1_*  @b _animation.fos).
     * @param  anim2     (. @b ANIM2_*  @b _animation.fos).
     *
     * @return @c true,  ; @c false    .
     */
    bool IsAnimAviable(uint anim1, uint anim2);

    /** \~russian  ,      - . */
    bool IsAnimPlaying();

    /** \~russian     Anim1.
     *
     * @return C. @b ANIM1_*  @b _animation.fos.
     *
     */
    uint GetAnim1();

    /** \~russian        .
     *
     * @param  anim1     (. @b ANIM1_*  @b _animation.fos).
     * @param  anim2     (. @b ANIM2_*  @b _animation.fos).
     *
     ** \~ @see #animation2d_process
     *     @see #animation3d_process
     */
    void Animate(uint anim1, uint anim2);

    /** \~russian        .
     *
     * @param  anim1     (. @b ANIM1_*  @b _animation.fos).
     * @param  anim2     (. @b ANIM2_*  @b _animation.fos).
     * @param  item     ,   .
     *
     ** \~ @see #animation2d_process
     *     @see #animation3d_process
     */
    void Animate(uint anim1, uint anim2, ItemCl@+ item);

    /** \~russian       . */
    void ClearAnim();

    //@}

    /** \~russian   . */
    const uint Id;

    /** \~russian   . */
    const uint16 Pid;

    /** \~russian    . */
    const uint8 CrType;

    /** \~russian   . */
    const uint8 CrTypeAlias;

    /** \~russian ,   X,    . */
    const uint16 HexX;

    /** \~russian ,   Y,    . */
    const uint16 HexY;

    /** \~russian ,    . */
    const uint8 Dir;

    /** \~russian  ,    .
     *
     *  . @link CritterExtraFlags Critter extra flags@endlink.
     */
    const uint16 FlagsExt;

    /** \~russian    . */
    DataVal Param;
	
	/**	\~russian     ,     ,      .
	 *
	 *  @link __ShowNpcNames@endlink.
	 *
	 */
	string NameOnHead;
    
	/** \~russian      */
    uint NameColor;

    /** \~russian    */
    uint ContourColor;

    /** \~russian   3D- .    @b _animations.fos, <b>3d models layers</b>. */
    int[]@ Anim3dLayer;
	
	/** \~russian   .   . */
	const uint Life;
	
	/** \~russian   .   . */
	const uint Knockout;
	
	/** \~russian   .   . */
	const uint Dead;
}

