1er commit

This commit is contained in:
2021-08-21 10:14:47 +02:00
commit a99ecf7c2d
99 changed files with 66605 additions and 0 deletions

220
src/game/Mobs.cpp Normal file
View File

@@ -0,0 +1,220 @@
#include "game/Mobs.h"
#include <map>
namespace td {
namespace game {
typedef std::pair<MobType, std::uint8_t> MobKey;
const std::map<MobKey, MobStats> MobConstants = {
// damage speed money_cost exp_cost exp_reward max_health
{{MobType::Zombie, 1},{MobStats{1, 1.6, 15, 0, 7, 40}}},
{{MobType::Zombie, 2},{MobStats{1, 1.6, 18, 88, 9, 56}}},
{{MobType::Zombie, 3},{MobStats{1, 1.6, 22, 153, 10, 78}}},
{{MobType::Zombie, 4},{MobStats{1.5, 1.6, 26, 268, 13, 110}}},
{{MobType::Zombie, 5},{MobStats{2, 1.6, 31, 469, 15, 154}}},
{{MobType::Spider, 1},{MobStats{1, 1.6, 25, 100, 15, 80}}},
{{MobType::Spider, 2},{MobStats{1, 2, 30, 175, 16, 112}}},
{{MobType::Spider, 3},{MobStats{1.5, 2, 36, 306, 18, 157}}},
{{MobType::Spider, 4},{MobStats{2.5, 2, 43, 536, 19, 222}}},
{{MobType::Spider, 5},{MobStats{1.5, 2.5, 52, 938, 22, 307}}},
{{MobType::Skeleton, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Skeleton, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Skeleton, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Skeleton, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Skeleton, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Pigman, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Pigman, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Pigman, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Pigman, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Pigman, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Creeper, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Creeper, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Creeper, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Creeper, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Creeper, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Silverfish, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Silverfish, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Silverfish, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Silverfish, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Silverfish, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Blaze, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Blaze, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Blaze, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Blaze, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Blaze, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Witch, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Witch, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Witch, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Witch, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Witch, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Slime, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Slime, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Slime, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Slime, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Slime, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Giant, 1},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Giant, 2},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Giant, 3},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Giant, 4},{MobStats{0, 0, 0, 0, 0, 0}}},
{{MobType::Giant, 5},{MobStats{0, 0, 0, 0, 0, 0}}},
};
const MobStats* getMobStats(MobType type, std::uint8_t level){
return &MobConstants.at(MobKey{type, level});
}
const std::map<MobKey, TowerImmunities> MobsTowerImmunities = {
{{MobType::Zombie, 1},{}},
{{MobType::Zombie, 2},{}},
{{MobType::Zombie, 3},{}},
{{MobType::Zombie, 4},{}},
{{MobType::Zombie, 5},{}},
{{MobType::Spider, 1},{}},
{{MobType::Spider, 2},{}},
{{MobType::Spider, 3},{}},
{{MobType::Spider, 4},{TowerType::Archer, TowerType::Artillery, TowerType::Leach, TowerType::Necromancer, TowerType::Poison, TowerType::Quake, TowerType::Sorcerer, TowerType::Turret, TowerType::Zeus}},
{{MobType::Spider, 5},{TowerType::Archer, TowerType::Artillery, TowerType::Leach, TowerType::Necromancer, TowerType::Poison, TowerType::Quake, TowerType::Sorcerer, TowerType::Turret, TowerType::Zeus}},
{{MobType::Skeleton, 1},{}},
{{MobType::Skeleton, 2},{}},
{{MobType::Skeleton, 3},{}},
{{MobType::Skeleton, 4},{}},
{{MobType::Skeleton, 5},{}},
{{MobType::Pigman, 1},{TowerType::Zeus}},
{{MobType::Pigman, 2},{TowerType::Zeus}},
{{MobType::Pigman, 3},{TowerType::Zeus}},
{{MobType::Pigman, 4},{TowerType::Zeus}},
{{MobType::Pigman, 5},{TowerType::Zeus}},
{{MobType::Creeper, 1},{}},
{{MobType::Creeper, 2},{}},
{{MobType::Creeper, 3},{}},
{{MobType::Creeper, 4},{}},
{{MobType::Creeper, 5},{}},
{{MobType::Silverfish, 1},{}},
{{MobType::Silverfish, 2},{}},
{{MobType::Silverfish, 3},{}},
{{MobType::Silverfish, 4},{}},
{{MobType::Silverfish, 5},{}},
{{MobType::Blaze, 1},{}},
{{MobType::Blaze, 2},{}},
{{MobType::Blaze, 3},{}},
{{MobType::Blaze, 4},{}},
{{MobType::Blaze, 5},{}},
{{MobType::Witch, 1},{TowerType::Zeus, TowerType::Mage, TowerType::Poison}},
{{MobType::Witch, 2},{TowerType::Zeus, TowerType::Mage, TowerType::Poison}},
{{MobType::Witch, 3},{TowerType::Zeus, TowerType::Mage, TowerType::Poison}},
{{MobType::Witch, 4},{TowerType::Zeus, TowerType::Mage, TowerType::Poison}},
{{MobType::Witch, 5},{TowerType::Zeus, TowerType::Mage, TowerType::Poison}},
{{MobType::Slime, 1},{}},
{{MobType::Slime, 2},{}},
{{MobType::Slime, 3},{}},
{{MobType::Slime, 4},{}},
{{MobType::Slime, 5},{}},
{{MobType::Giant, 1},{}},
{{MobType::Giant, 2},{}},
{{MobType::Giant, 3},{}},
{{MobType::Giant, 4},{}},
{{MobType::Giant, 5},{}},
};
const TowerImmunities& getMobTowerImmunities(MobType type, std::uint8_t level){
return MobsTowerImmunities.at({type, level});
}
const std::map<MobKey, EffectImmunities> MobsEffectImmunities = {
{{MobType::Zombie, 1},{}},
{{MobType::Zombie, 2},{}},
{{MobType::Zombie, 3},{}},
{{MobType::Zombie, 4},{}},
{{MobType::Zombie, 5},{}},
{{MobType::Spider, 1},{}},
{{MobType::Spider, 2},{}},
{{MobType::Spider, 3},{}},
{{MobType::Spider, 4},{}},
{{MobType::Spider, 5},{}},
{{MobType::Skeleton, 1},{}},
{{MobType::Skeleton, 2},{}},
{{MobType::Skeleton, 3},{EffectType::Fire}},
{{MobType::Skeleton, 4},{EffectType::Fire}},
{{MobType::Skeleton, 5},{EffectType::Fire}},
{{MobType::Pigman, 1},{EffectType::Fire}},
{{MobType::Pigman, 2},{EffectType::Fire}},
{{MobType::Pigman, 3},{EffectType::Fire}},
{{MobType::Pigman, 4},{EffectType::Fire}},
{{MobType::Pigman, 5},{EffectType::Fire}},
{{MobType::Creeper, 1},{}},
{{MobType::Creeper, 2},{}},
{{MobType::Creeper, 3},{}},
{{MobType::Creeper, 4},{}},
{{MobType::Creeper, 5},{}},
{{MobType::Silverfish, 1},{}},
{{MobType::Silverfish, 2},{}},
{{MobType::Silverfish, 3},{}},
{{MobType::Silverfish, 4},{EffectType::Fire}},
{{MobType::Silverfish, 5},{EffectType::Fire}},
{{MobType::Blaze, 1},{EffectType::Fire}},
{{MobType::Blaze, 2},{EffectType::Fire}},
{{MobType::Blaze, 3},{EffectType::Fire}},
{{MobType::Blaze, 4},{EffectType::Fire}},
{{MobType::Blaze, 5},{EffectType::Fire}},
{{MobType::Witch, 1},{}},
{{MobType::Witch, 2},{}},
{{MobType::Witch, 3},{}},
{{MobType::Witch, 4},{}},
{{MobType::Witch, 5},{}},
{{MobType::Slime, 1},{}},
{{MobType::Slime, 2},{}},
{{MobType::Slime, 3},{}},
{{MobType::Slime, 4},{EffectType::Fire}},
{{MobType::Slime, 5},{EffectType::Fire}},
{{MobType::Giant, 1},{EffectType::Stun}},
{{MobType::Giant, 2},{EffectType::Stun}},
{{MobType::Giant, 3},{EffectType::Stun}},
{{MobType::Giant, 4},{EffectType::Stun}},
{{MobType::Giant, 5},{EffectType::Stun}},
};
const EffectImmunities& getMobEffectImmunities(MobType type, std::uint8_t level){
return MobsEffectImmunities.at({type, level});
}
MobPtr MobFactory::createMob(MobID id, MobType type, std::uint8_t level, PlayerID sender){
using MobCreator = std::function<std::shared_ptr<Mob>(MobID, std::uint8_t, PlayerID)>;
static std::map<MobType, MobCreator> mobFactory = {
{MobType::Zombie, [](MobID id, std::uint8_t level, PlayerID sender) -> MobPtr {return std::make_shared<Zombie>(id, level, sender);} },
{MobType::Spider, [](MobID id, std::uint8_t level, PlayerID sender) -> MobPtr {return std::make_shared<Spider>(id, level, sender);} },
};
return mobFactory[type](id, level, sender);
}
} // namespace game
} // namespace td