1er commit
This commit is contained in:
220
src/game/Mobs.cpp
Normal file
220
src/game/Mobs.cpp
Normal 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
|
||||
Reference in New Issue
Block a user