added factory, unit maiden easier

This commit is contained in:
ProgramSnail 2021-05-18 17:43:03 +03:00
parent 52024e4b06
commit 1c87c30dda
13 changed files with 230 additions and 69 deletions

View file

@ -7,30 +7,89 @@
#pragma once
namespace unit {
class UnitFactory;
class Unit {
private:
const size_t MEMORY_SIZE = 100;
friend class UnitFactory;
// parts of unit, that do something
std::vector<Module> modules;
// memory, help modules communicate and handle events
std::vector<int> memory;
int basicStrength;
int strength;
int shield;
int speed;
int player;
int cellType;
map::UnitObj unitObj;
map::GameMap* map;
map::GameMap* gameMap = nullptr;
events::EventCenter* eventCenter;
events::EventCenter* eventCenter = nullptr;
void setCellType(int newCellType) {
cellType = newCellType;
unitObj.setCellType(cellType);
}
public:
Unit(map::GameMap* map, events::EventCenter* eventCenter);
Unit() = default;
Unit(map::GameMap* gameMap, events::EventCenter* eventCenter);
void step();
size_t addModule(Module module);
void damage(int damage, int power);
void removeModule(size_t id);
bool isDestroyed() {
return strength <= 0;
}
void damage();
void setPlayer(int newPlayer) {
player = newPlayer;
unitObj.setPlayer(player);
}
};
class UnitFactory {
private:
Unit unit;
public:
UnitFactory() = default;
UnitFactory& setBasicStrength(int basicStrength) {
unit.basicStrength = basicStrength;
unit.strength = basicStrength;
return *this;
}
UnitFactory& setShield(int shield) {
unit.shield = shield;
return *this;
}
UnitFactory& setSpeed(int speed) {
unit.speed = speed;
return *this;
}
UnitFactory& setCellType(int cellType) {
unit.setCellType(cellType);
return *this;
}
UnitFactory& setEventCenter(events::EventCenter* eventCenter) {
unit.eventCenter = eventCenter;
return *this;
}
UnitFactory& setGameMap(map::GameMap* gameMap) {
unit.gameMap = gameMap;
return *this;
}
Unit build(int player) {
Unit cp = unit;
cp.setPlayer(player);
return cp;
}
};
}