Skip to content
Snippets Groups Projects
Player.hpp 2.42 KiB
//
// Created by hoelshare on 21.05.17.
//

#ifndef GPN_LASERTAG_PLAYER_HPP
#define GPN_LASERTAG_PLAYER_HPP

#include "LaserMenuItem.hpp"

class Player {
public:
    void setNickname(char *nickname) { this->nickname = nickname; }

    const char *getNickname() { return this->nickname; }

    Player(Badge *badge, char *nickname = "otter") : badge(badge), nickname(nickname) {
        rebirth();
    };

    void setMaxHealthPoints(unsigned short maxHP) { this->maxHP = maxHP; }

    void setMaxArmor(unsigned short maxArmor) { this->maxArmor = maxArmor; }

    void heal(unsigned short healthPoints);

    void hit(unsigned short hitPoints);

    void nextWeapon() { weaponIndex = (weaponIndex + 1) % 3; }

    void prevWeapon() {
        nextWeapon();
        nextWeapon();
    }

    void setPlayerID(unsigned short pID) { this->pID = pID; }

    void setTeamID(unsigned short tID) { this->tID = tID; }

    void setHealthMenuItem(LaserMenuItem *healthMenuItem) {
        if (healthMenuItem) { delete healthMenuItem; }
        this->healthMenuItem = healthMenuItem;
    }

    void setArmorMenuItem(LaserMenuItem *armorMenuItem) {
        if (armorMenuItem) { delete armorMenuItem; }
        this->armorMenuItem = armorMenuItem;
    }

    void setAmmoMenuItem(LaserMenuItem *ammoMenuItem) {
        if (ammoMenuItem) { delete ammoMenuItem; }
        this->ammoMenuItem = ammoMenuItem;
    }

    void reload();

    void shot();

    void rebirth();

    ~Player() {
        delete[] teamColor, shotMagazine, currentShot, nickname;
        delete healthMenuItem, armorMenuItem, ammoMenuItem;
    }

    static const int magazineSize[3];
    static const int shotTime[3];
    static const int magazineReloadTime[3];
    static const int damage[3];

private:
    unsigned int pID;
    unsigned int tID;
    unsigned char teamColor[3]; // 3 Colors RGB
    char *nickname;
    unsigned int maxHP;
    unsigned int currentHP;
    unsigned int shotMagazine[3];  // 3 Weapon categories [pistol, machine gun, explosive]
    unsigned int currentShot[3];
    unsigned int weaponIndex;
    unsigned int currentArmor;
    unsigned int maxArmor;
    float maxArmorPercent;  // max protection between 0 and 1

    void die();
    Badge *badge;

protected:
    void updateHealthMenuItem();

    void updateArmorMenuItem();

    void updateAmmoMenuItem();

    LaserMenuItem *healthMenuItem;
    LaserMenuItem *armorMenuItem;
    LaserMenuItem *ammoMenuItem;
};
#endif //GPN_LASERTAG_PLAYER_HPP