summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rice <irarice@gmail.com>2009-03-02 19:10:40 -0700
committerIra Rice <irarice@gmail.com>2009-03-02 19:10:40 -0700
commit1d7b4c4640635c809feca83e76b1aa62109c0707 (patch)
tree0d715bfc941e72a6df3779d53c6c2e53729366e3
parent4adee3cfbafee155ab9223e94162c6055ef0a412 (diff)
downloadmana-1d7b4c4640635c809feca83e76b1aa62109c0707.tar.gz
mana-1d7b4c4640635c809feca83e76b1aa62109c0707.tar.bz2
mana-1d7b4c4640635c809feca83e76b1aa62109c0707.tar.xz
mana-1d7b4c4640635c809feca83e76b1aa62109c0707.zip
Added particle attacks back on to the players. However, instead of being
constant, particle attacks are now weapon specific, so that different weapons can have different attacks. Signed-off-by: Ira Rice <irarice@gmail.com>
-rw-r--r--src/localplayer.cpp26
-rw-r--r--src/player.cpp24
-rw-r--r--src/resources/itemdb.cpp4
-rw-r--r--src/resources/iteminfo.h22
-rw-r--r--src/resources/monsterinfo.cpp1
5 files changed, 67 insertions, 10 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 9bf5d990..bcf3fb15 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -103,7 +103,8 @@ LocalPlayer::~LocalPlayer()
void LocalPlayer::logic()
{
- switch (mAction) {
+ switch (mAction)
+ {
case STAND:
break;
@@ -123,13 +124,36 @@ void LocalPlayer::logic()
break;
case ATTACK:
+ int rotation = 0;
+ std::string particleEffect = "";
int frames = 4;
+
if (mEquippedWeapon &&
mEquippedWeapon->getAttackType() == ACTION_ATTACK_BOW)
frames = 5;
mFrame = (get_elapsed_time(mWalkTime) * frames) / mAttackSpeed;
+ //attack particle effect
+ if (mEquippedWeapon)
+ particleEffect = mEquippedWeapon->getParticleEffect();
+
+ if (!particleEffect.empty() && mParticleEffects)
+ {
+ switch (mDirection)
+ {
+ case DOWN: rotation = 0; break;
+ case LEFT: rotation = 90; break;
+ case UP: rotation = 180; break;
+ case RIGHT: rotation = 270; break;
+ default: break;
+ }
+ Particle *p;
+ p = particleEngine->addEffect("graphics/particles/" +
+ particleEffect, 0, 0, rotation);
+ controlParticle(p);
+ }
+
if (mFrame >= frames)
nextStep();
diff --git a/src/player.cpp b/src/player.cpp
index 4d5ef171..16f810ad 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -22,6 +22,7 @@
#include "animatedsprite.h"
#include "game.h"
+#include "particle.h"
#include "player.h"
#include "text.h"
@@ -91,7 +92,10 @@ void Player::logic()
break;
case ATTACK:
+ int rotation = 0;
+ std::string particleEffect = "";
int frames = 4;
+
if (mEquippedWeapon &&
mEquippedWeapon->getAttackType() == ACTION_ATTACK_BOW)
{
@@ -100,6 +104,26 @@ void Player::logic()
mFrame = (get_elapsed_time(mWalkTime) * frames) / mAttackSpeed;
+ //attack particle effect
+ if (mEquippedWeapon)
+ particleEffect = mEquippedWeapon->getParticleEffect();
+
+ if (!particleEffect.empty() && mParticleEffects)
+ {
+ switch (mDirection)
+ {
+ case DOWN: rotation = 0; break;
+ case LEFT: rotation = 90; break;
+ case UP: rotation = 180; break;
+ case RIGHT: rotation = 270; break;
+ default: break;
+ }
+ Particle *p;
+ p = particleEngine->addEffect("graphics/particles/" +
+ particleEffect, 0, 0, rotation);
+ controlParticle(p);
+ }
+
if (mFrame >= frames)
nextStep();
diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp
index 0031bbd0..2eff514c 100644
--- a/src/resources/itemdb.cpp
+++ b/src/resources/itemdb.cpp
@@ -110,6 +110,10 @@ void ItemDB::load()
{
if (xmlStrEqual(itemChild->name, BAD_CAST "sprite"))
{
+ std::string attackParticle = XML::getProperty(
+ itemChild, "particle-effect", "");
+ itemInfo->setParticleEffect(attackParticle);
+
loadSpriteRef(itemInfo, itemChild);
}
else if (xmlStrEqual(itemChild->name, BAD_CAST "sound"))
diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h
index d3dd4908..0ea59050 100644
--- a/src/resources/iteminfo.h
+++ b/src/resources/iteminfo.h
@@ -67,6 +67,11 @@ class ItemInfo
const std::string& getName() const
{ return mName; }
+ void setParticleEffect(const std::string &particleEffect)
+ { mParticle = particleEffect; }
+
+ std::string getParticleEffect() const { return mParticle; }
+
void setImageName(const std::string &imageName)
{ mImageName = imageName; }
@@ -113,17 +118,18 @@ class ItemInfo
const std::string& getSound(EquipmentSoundEvent event) const;
protected:
- std::string mImageName; /**< The filename of the icon image. */
+ std::string mImageName; /**< The filename of the icon image. */
std::string mName;
- std::string mDescription; /**< Short description. */
- std::string mEffect; /**< Description of effects. */
- std::string mType; /**< Item type. */
- short mWeight; /**< Weight in grams. */
- int mView; /**< Item ID of how this item looks. */
- int mId; /**< Item ID */
+ std::string mDescription; /**< Short description. */
+ std::string mEffect; /**< Description of effects. */
+ std::string mType; /**< Item type. */
+ std::string mParticle; /**< Particle effect used with this item */
+ short mWeight; /**< Weight in grams. */
+ int mView; /**< Item ID of how this item looks. */
+ int mId; /**< Item ID */
// Equipment related members
- SpriteAction mAttackType; /**< Attack type, in case of weapon. */
+ SpriteAction mAttackType; /**< Attack type, in case of weapon. */
/** Maps gender to sprite filenames. */
std::map<int, std::string> mAnimationFiles;
diff --git a/src/resources/monsterinfo.cpp b/src/resources/monsterinfo.cpp
index 5491a0bd..725e9cf5 100644
--- a/src/resources/monsterinfo.cpp
+++ b/src/resources/monsterinfo.cpp
@@ -36,7 +36,6 @@ MonsterInfo::~MonsterInfo()
mSounds.clear();
}
-
void MonsterInfo::addSound(MonsterSoundEvent event, std::string filename)
{
if (mSounds.find(event) == mSounds.end())