feat: basic arrow shoot event
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user