feat: add tower detection

This commit is contained in:
2021-10-10 12:23:36 +02:00
parent d2551c8864
commit aa6fb73590
3 changed files with 35 additions and 16 deletions

View File

@@ -322,7 +322,7 @@ bool World::saveMap(const std::string& fileName) const {
void World::tick(std::uint64_t delta) {
moveMobs(delta);
tickMobs(delta);
for(TowerPtr tower : m_Towers){
for (TowerPtr tower : m_Towers) {
tower->tick(delta, this);
}
cleanDeadMobs();
@@ -343,7 +343,7 @@ TowerPtr World::placeTowerAt(TowerID id, TowerType type, std::int32_t x, std::in
}
void World::tickMobs(std::uint64_t delta) {
for(MobPtr mob : m_Mobs) {
for (MobPtr mob : m_Mobs) {
mob->tick(delta);
}
}
@@ -361,7 +361,7 @@ void World::moveMobs(std::uint64_t delta) {
float walkAmount = mobWalkSpeed * ((float)delta / 1000.0f);
if(mob->hasEffect(EffectType::Slowness))
if (mob->hasEffect(EffectType::Slowness))
walkAmount *= 0.70;
switch (mob->getDirection()) {
@@ -415,8 +415,8 @@ bool World::CanPlaceLittleTower(const glm::vec2& worldPos, PlayerID playerID) co
}
if (tile->getType() == game::TileType::Tower) {
const TowerTile* towerTile = (const TowerTile*) tile.get();
if(towerTile->team_owner != player.getTeamColor())
const TowerTile* towerTile = (const TowerTile*)tile.get();
if (towerTile->team_owner != player.getTeamColor())
return false;
for (int x = -1; x < 2; x++) {
for (int y = -1; y < 2; y++) {
@@ -441,8 +441,8 @@ bool World::CanPlaceBigTower(const glm::vec2& worldPos, PlayerID playerID) const
}
if (tile->getType() == game::TileType::Tower) {
const TowerTile* towerTile = (const TowerTile*) tile.get();
if(towerTile->team_owner != player.getTeamColor())
const TowerTile* towerTile = (const TowerTile*)tile.get();
if (towerTile->team_owner != player.getTeamColor())
return false;
for (int x = -2; x < 3; x++) {
for (int y = -2; y < 3; y++) {
@@ -458,20 +458,37 @@ bool World::CanPlaceBigTower(const glm::vec2& worldPos, PlayerID playerID) const
return false;
}
void World::cleanDeadMobs(){
for(std::size_t i = 0; i < m_Mobs.size(); i++){
void World::cleanDeadMobs() {
for (std::size_t i = 0; i < m_Mobs.size(); i++) {
MobPtr mob = m_Mobs[i];
if(!mob->isAlive()){
if (!mob->isAlive()) {
m_Mobs.erase(m_Mobs.begin() + i);
}
}
}
void World::OnArrowShot(MobPtr target, Tower* shooter){
TowerPtr World::GetTower(const glm::vec2& position) {
for (TowerPtr tower : m_Towers) {
if (tower->getSize() == TowerSize::Big) {
if (tower->getX() - 2 <= position.x && tower->getX() + 3 >= position.x &&
tower->getY() - 2 <= position.y && tower->getY() + 3 >= position.y) {
return tower;
}
} else {
if (tower->getX() - 1 <= position.x && tower->getX() + 2 >= position.x &&
tower->getY() - 1 <= position.y && tower->getY() + 2 >= position.y) {
return tower;
}
}
}
return nullptr;
}
void World::OnArrowShot(MobPtr target, Tower* shooter) {
bool explosiveArrows = shooter->getLevel().getPath() == TowerPath::Bottom;
if(explosiveArrows){
if (explosiveArrows) {
// aoe damage
}else{
} else {
target->damage(shooter->getStats()->getDamage());
}
}