Browse Source

Merge branch 'abstract_unit' of Gilnobag/client into dev

noath 6 years ago
parent
commit
390d1d57ee
2 changed files with 233 additions and 0 deletions
  1. 137 0
      unit.cpp
  2. 96 0
      unit.h

+ 137 - 0
unit.cpp

@@ -0,0 +1,137 @@
+#pragma once
+#include <iostream>
+#include <algorithm>
+#include <cassert>
+#include <string>
+#include "unit.h"
+
+Unit::Unit(){}
+
+double Unit::getExperience() {
+	return experience_;
+}
+void Unit::setExperience(double value) {
+	experience_ = value;
+}
+
+double Unit::getLevel() {
+	return level_;
+};
+void Unit::setLevel(double value) {
+	level_ = value;
+}
+
+double Unit::getHealthPoints() {
+	return health_points_;
+};
+void Unit::setHealthPoints(double value) {
+	health_points_ = value;
+}
+
+double Unit::getManaPoints() {
+	return mana_points_;
+}
+void Unit::setManaPoints(double value) {
+	mana_points_ = value;
+}
+
+double Unit::getEnergyPoints() {
+	return energy_points_;
+}
+void Unit::setEnergyPoints(double value) {
+	energy_points_ = value;
+}
+
+double Unit::getActivePoints() {
+	return active_points_;
+}
+void Unit::setActivePoints(double value) {
+	active_points_ = value;
+}
+
+double Unit::getAttackRange() {
+	return attack_range_;
+}
+void Unit::setAttackRange(double value) {
+	attack_range_ = value;
+}
+
+std::pair<int, int> Unit::getLocation() {
+	return location_;
+}
+void Unit::setLocation(double x, double y) {
+	location_ = std::make_pair(x, y);
+}
+
+double Unit::getMovementSpeed() {
+	return movement_speed_;
+}
+void Unit::setMovementSpeed(double value) {
+	movement_speed_ = value;
+}
+
+double Unit::getInitiative_() {
+	return initiative_;
+}
+void Unit::setInitiative_(double value) {
+	initiative_ = value;
+}
+
+double Unit::getDamagePerHit() {
+	return damage_per_hit_;
+}
+void Unit::setDamagePerHit(double value) {
+	damage_per_hit_ = value;
+}
+
+double Unit::getIntelligence() {
+	return intelligence_;
+}
+void Unit::setIntelligence(double value) {
+	intelligence_ = value;
+}
+
+double Unit::getStrength() {
+	return strength_;
+}
+void Unit::setStrength(double value) {
+	strength_ = value;
+}
+
+double Unit::getAgility() {
+	return agility_;
+}
+void Unit::setAgility(double value) {
+	agility_ = value;
+}
+
+double Unit::getMagicDefence() {
+	return magic_defence_;
+}
+void Unit::setMagicDefence(double value) {
+	magic_defence_ = value;
+}
+
+double Unit::getPhysicDefence() {
+	return physic_defence_;
+}
+void Unit::setPhysicDefence(double value) {
+	physic_defence_ = value;
+}
+
+void Unit::calculateDamagePerHit() {
+	damage_per_hit_ = 0.5 * std::max(getAgility(), std::max(getStrength(), getIntelligence()));
+}
+
+double Unit::reduceIncomingDamage(std::string damageType, int damage) { //returns damage after reducing by defence
+	assert("Incorrect damage type in call reduceIncomingDamage(), expected" &&
+		damageType[0] == 'p' || damageType[0] == 'P' || damageType[0] == 'm' || damageType[0] == 'M');
+	assert("Magic defence of unit is incorrectly high (>40), but must be" && magic_defence_ <= 40);
+	assert("Physic defence of unit is incorrectly high (>40), but must be" && physic_defence_ <= 40);
+	if (damageType[0] == 'p' || damageType[0] == 'P') {
+		return (1 - 2.5 * physic_defence_ / 100) * damage;
+	}
+	else if (damageType[0] == 'm' || damageType[0] == 'M') {
+		return (1 - 2.5 * magic_defence_ / 100) * damage;
+	}
+}

+ 96 - 0
unit.h

@@ -0,0 +1,96 @@
+#pragma once
+#include <iostream>
+#include <vector>
+
+class Spell {
+	//empty for allow to compile
+};
+
+class Unit {
+
+protected:
+	std::vector <Spell> skills_;
+
+private:
+	//personal growth
+	double experience_;
+	double level_;
+
+	//connect with events
+	double active_points_;
+	double initiative_;
+
+	//movement
+	std::pair <int, int> location_; //x - first, y - second
+	double movement_speed_;
+
+	//attack action
+	double agility_;
+	double attack_range_;
+	double damage_per_hit_;
+	double energy_points_;  //for physical attacks
+	double intelligence_;
+	double mana_points_;    //for magic attacks
+	double strength_;
+
+	//durability
+	double health_points_;
+	double magic_defence_;  //less or equal 40
+	double physic_defence_; //less or equal 40
+
+public:
+	Unit();
+	virtual ~Unit() = delete;
+
+	double getExperience();
+	void setExperience(double value);
+
+	double getLevel();
+	void setLevel(double value);
+
+	double getHealthPoints();
+	void setHealthPoints(double value);
+
+	double getManaPoints();
+	void setManaPoints(double value);
+
+	double getEnergyPoints();
+	void setEnergyPoints(double value);
+
+	double getActivePoints();
+	void setActivePoints(double value);
+
+	double getAttackRange();
+	void setAttackRange(double value);
+
+	std::pair<int, int> getLocation();
+	void setLocation(double x, double y);
+
+	double getMovementSpeed();
+	void setMovementSpeed(double value);
+
+	double getInitiative_();
+	void setInitiative_(double value);
+
+	double getDamagePerHit();
+	void setDamagePerHit(double value);
+
+	double getIntelligence();
+	void setIntelligence(double value);
+
+	double getStrength();
+	void setStrength(double value);
+
+	double getAgility();
+	void setAgility(double value);
+
+	double getMagicDefence();
+	void setMagicDefence(double value);
+
+	double getPhysicDefence();
+	void setPhysicDefence(double value);
+
+	virtual void calculateDamagePerHit();
+
+	double reduceIncomingDamage(std::string damageType, int value);
+};