feat: basic arrow shoot event
This commit is contained in:
@@ -162,8 +162,6 @@ public:
|
||||
|
||||
virtual TowerType getType() const { return TowerType::Archer; }
|
||||
virtual void tick(std::uint64_t delta, World* world);
|
||||
private:
|
||||
void shootArrow(MobPtr target);
|
||||
};
|
||||
|
||||
class IceTower : public LittleTower {
|
||||
|
||||
@@ -182,6 +182,9 @@ public:
|
||||
const Team& getTeam(TeamColor team) const;
|
||||
|
||||
const TowerList& getTowers() const { return m_Towers; };
|
||||
|
||||
// Archer Tower
|
||||
virtual void OnArrowShot(MobPtr target, Tower* shooter);
|
||||
private:
|
||||
void moveMobs(std::uint64_t delta);
|
||||
void cleanDeadMobs();
|
||||
|
||||
@@ -17,6 +17,8 @@ public:
|
||||
virtual void HandlePacket(protocol::WorldBeginDataPacket* packet);
|
||||
virtual void HandlePacket(protocol::WorldDataPacket* packet);
|
||||
virtual void HandlePacket(protocol::SpawnMobPacket* packet);
|
||||
|
||||
virtual void OnArrowShot(game::MobPtr target, game::Tower* shooter) override;
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
|
||||
@@ -18,6 +18,8 @@ public:
|
||||
|
||||
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);
|
||||
|
||||
virtual void OnArrowShot(game::MobPtr target, game::Tower* shooter) override;
|
||||
};
|
||||
|
||||
} // namespace server
|
||||
|
||||
@@ -173,7 +173,7 @@ void ArcherTower::tick(std::uint64_t delta, World* world) {
|
||||
std::uint8_t arrows = explosiveArrows ? 2 : getLevel().getLevel();
|
||||
for (MobPtr mob : world->getMobList()) {
|
||||
if (isMobInRange(mob)) {
|
||||
shootArrow(mob);
|
||||
world->OnArrowShot(mob, this);
|
||||
arrowsShot++;
|
||||
if(arrowsShot >= arrows)
|
||||
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) {
|
||||
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
return m_Game->getRedTeam();
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
#include "game/client/ClientGame.h"
|
||||
#include "render/WorldRenderer.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace td {
|
||||
namespace client {
|
||||
|
||||
@@ -27,5 +25,9 @@ void WorldClient::HandlePacket(protocol::SpawnMobPacket* packet) {
|
||||
packet->getMobX(), packet->getMobY(), packet->getMobDirection());
|
||||
}
|
||||
|
||||
void WorldClient::OnArrowShot(game::MobPtr target, game::Tower* tower){
|
||||
World::OnArrowShot(target, tower);
|
||||
}
|
||||
|
||||
} // namespace client
|
||||
} // namespace td
|
||||
|
||||
@@ -52,5 +52,9 @@ game::TowerPtr ServerWorld::placeTowerAt(game::TowerType type, std::int32_t x, s
|
||||
return tower;
|
||||
}
|
||||
|
||||
void ServerWorld::OnArrowShot(game::MobPtr target, game::Tower* shooter){
|
||||
World::OnArrowShot(target, shooter);
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
|
||||
Reference in New Issue
Block a user