diff options
author | Rogier Polak <rogier.l.a.polak@gmail.com> | 2007-03-03 03:32:46 +0000 |
---|---|---|
committer | Rogier Polak <rogier.l.a.polak@gmail.com> | 2007-03-03 03:32:46 +0000 |
commit | cdf81ef8e5b25fd8751a92c6ff394c01daedbb88 (patch) | |
tree | fb0d4da6fbd31efe6370de1f0c58d8f9db7ac277 /src/game-server/being.cpp | |
parent | af1ce69940a9c0b46907402e7d69e6ac9ea96912 (diff) | |
download | manaserv-cdf81ef8e5b25fd8751a92c6ff394c01daedbb88.tar.gz manaserv-cdf81ef8e5b25fd8751a92c6ff394c01daedbb88.tar.bz2 manaserv-cdf81ef8e5b25fd8751a92c6ff394c01daedbb88.tar.xz manaserv-cdf81ef8e5b25fd8751a92c6ff394c01daedbb88.zip |
Implemented an alternate collision-detection function, added namespace utils::math.
Diffstat (limited to 'src/game-server/being.cpp')
-rw-r--r-- | src/game-server/being.cpp | 60 |
1 files changed, 27 insertions, 33 deletions
diff --git a/src/game-server/being.cpp b/src/game-server/being.cpp index 6924f3b9..046423d6 100644 --- a/src/game-server/being.cpp +++ b/src/game-server/being.cpp @@ -21,11 +21,11 @@ */ #include "game-server/being.hpp" + #include "game-server/collisiondetection.hpp" #include "game-server/mapcomposite.hpp" #include "utils/logger.h" -#include <cmath> void Being::damage(Damage damage) { @@ -71,54 +71,48 @@ void Being::move() void Being::performAttack(MapComposite *map) { int SHORT_RANGE = 32; - float SMALL_ANGLE = M_PI_2; + int SMALL_ANGLE = 15; Point ppos = getPosition(); int dir = getDirection(); - /* TODO: calculate real attack power and damage properties based on + int attackAngle = 0; + + switch (dir) + { + case DIRECTION_UP: + attackAngle = 90; + break; + case DIRECTION_DOWN: + attackAngle = 270; + break; + case DIRECTION_LEFT: + attackAngle = 180; + break; + case DIRECTION_RIGHT: + attackAngle = 0; + break; + default: + break; + } + +/* TODO: calculate real attack power and damage properties based on character equipment and stats. */ Damage damage = 1; for (MovingObjectIterator i(map->getAroundObjectIterator(this, SHORT_RANGE)); i; ++i) { MovingObject *o = *i; - if (o == this) - { - continue; - } + if (o == this) continue; int type = o->getType(); - if (type != OBJECT_PLAYER && type != OBJECT_MONSTER) - { - continue; - } + if (type != OBJECT_PLAYER && type != OBJECT_MONSTER) continue; Point opos = o->getPosition(); - float attackAngle = 0.0f; - // basic triangle-shaped damage zone - switch (dir) - { - case DIRECTION_UP: - attackAngle = M_PI_2; - break; - case DIRECTION_DOWN: - attackAngle = - M_PI_2; - break; - case DIRECTION_LEFT: - attackAngle = M_PI; - break; - case DIRECTION_RIGHT: - attackAngle = 0.0f; - break; - default: - break; - } - - if (Collision::circleWithCirclesector( + if (Collision::diskWithCircleSector( opos, o->getSize(), - ppos, SHORT_RANGE, attackAngle, SMALL_ANGLE) + ppos, SHORT_RANGE, SMALL_ANGLE, attackAngle) ) { static_cast< Being * >(o)->damage(damage); |