feat: basic arrow shoot event

This commit is contained in:
2021-09-29 14:48:25 +02:00
parent 9cf3916951
commit ef76437670
8 changed files with 25 additions and 14 deletions

View File

@@ -162,8 +162,6 @@ public:
virtual TowerType getType() const { return TowerType::Archer; } virtual TowerType getType() const { return TowerType::Archer; }
virtual void tick(std::uint64_t delta, World* world); virtual void tick(std::uint64_t delta, World* world);
private:
void shootArrow(MobPtr target);
}; };
class IceTower : public LittleTower { class IceTower : public LittleTower {

View File

@@ -182,6 +182,9 @@ public:
const Team& getTeam(TeamColor team) const; const Team& getTeam(TeamColor team) const;
const TowerList& getTowers() const { return m_Towers; }; const TowerList& getTowers() const { return m_Towers; };
// Archer Tower
virtual void OnArrowShot(MobPtr target, Tower* shooter);
private: private:
void moveMobs(std::uint64_t delta); void moveMobs(std::uint64_t delta);
void cleanDeadMobs(); void cleanDeadMobs();

View File

@@ -17,6 +17,8 @@ public:
virtual void HandlePacket(protocol::WorldBeginDataPacket* packet); virtual void HandlePacket(protocol::WorldBeginDataPacket* packet);
virtual void HandlePacket(protocol::WorldDataPacket* packet); virtual void HandlePacket(protocol::WorldDataPacket* packet);
virtual void HandlePacket(protocol::SpawnMobPacket* packet); virtual void HandlePacket(protocol::SpawnMobPacket* packet);
virtual void OnArrowShot(game::MobPtr target, game::Tower* shooter) override;
}; };
} // namespace client } // namespace client

View File

@@ -18,6 +18,8 @@ public:
void spawnMobs(game::MobType type, std::uint8_t level, game::PlayerID sender, std::uint8_t count); void spawnMobs(game::MobType type, std::uint8_t level, game::PlayerID sender, std::uint8_t count);
game::TowerPtr placeTowerAt(game::TowerType type, std::int32_t x, std::int32_t y, game::PlayerID builder); game::TowerPtr placeTowerAt(game::TowerType type, std::int32_t x, std::int32_t y, game::PlayerID builder);
virtual void OnArrowShot(game::MobPtr target, game::Tower* shooter) override;
}; };
} // namespace server } // namespace server

View File

@@ -173,7 +173,7 @@ void ArcherTower::tick(std::uint64_t delta, World* world) {
std::uint8_t arrows = explosiveArrows ? 2 : getLevel().getLevel(); std::uint8_t arrows = explosiveArrows ? 2 : getLevel().getLevel();
for (MobPtr mob : world->getMobList()) { for (MobPtr mob : world->getMobList()) {
if (isMobInRange(mob)) { if (isMobInRange(mob)) {
shootArrow(mob); world->OnArrowShot(mob, this);
arrowsShot++; arrowsShot++;
if(arrowsShot >= arrows) if(arrowsShot >= arrows)
break; break;
@@ -182,15 +182,6 @@ void ArcherTower::tick(std::uint64_t delta, World* world) {
} }
} }
void ArcherTower::shootArrow(MobPtr target){
bool explosiveArrows = getLevel().getPath() == TowerPath::Bottom;
if(explosiveArrows){
}else{
target->damage(getStats()->getDamage());
}
}
void IceTower::tick(std::uint64_t delta, World* world) { void IceTower::tick(std::uint64_t delta, World* world) {
} }

View File

@@ -457,6 +457,15 @@ void World::cleanDeadMobs(){
} }
} }
void World::OnArrowShot(MobPtr target, Tower* shooter){
bool explosiveArrows = shooter->getLevel().getPath() == TowerPath::Bottom;
if(explosiveArrows){
// aoe damage
}else{
target->damage(shooter->getStats()->getDamage());
}
}
Team& World::getRedTeam() { Team& World::getRedTeam() {
return m_Game->getRedTeam(); return m_Game->getRedTeam();
} }

View File

@@ -3,8 +3,6 @@
#include "game/client/ClientGame.h" #include "game/client/ClientGame.h"
#include "render/WorldRenderer.h" #include "render/WorldRenderer.h"
#include <iostream>
namespace td { namespace td {
namespace client { namespace client {
@@ -27,5 +25,9 @@ void WorldClient::HandlePacket(protocol::SpawnMobPacket* packet) {
packet->getMobX(), packet->getMobY(), packet->getMobDirection()); packet->getMobX(), packet->getMobY(), packet->getMobDirection());
} }
void WorldClient::OnArrowShot(game::MobPtr target, game::Tower* tower){
World::OnArrowShot(target, tower);
}
} // namespace client } // namespace client
} // namespace td } // namespace td

View File

@@ -52,5 +52,9 @@ game::TowerPtr ServerWorld::placeTowerAt(game::TowerType type, std::int32_t x, s
return tower; return tower;
} }
void ServerWorld::OnArrowShot(game::MobPtr target, game::Tower* shooter){
World::OnArrowShot(target, shooter);
}
} // namespace server } // namespace server
} // namespace td } // namespace td