Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 17, 2008, 3:20:25 AM (16 years ago)
Author:
landauf
Message:

shooting, hitting and killing works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc

    r2493 r2494  
    4040#include "objects/worldentities/Model.h"
    4141#include "objects/worldentities/ParticleSpawner.h"
     42#include "objects/worldentities/pawns/Pawn.h"
     43#include "objects/collisionshapes/SphereCollisionShape.h"
    4244#include "core/Core.h"
    4345
     
    4951
    5052        this->setConfigValues();
    51         this->explosionTemplateName_ = "Orxonox/explosion3";
    52         this->smokeTemplateName_ = "Orxonox/smoke4";
    53 
    54         //this->setStatic(false);
    55 //        this->translate(Vector3(55, 0, 0), Ogre::Node::TS_LOCAL);
     53        this->bDestroy_ = false;
     54        this->owner_ = 0;
    5655
    5756        // Get notification about collisions
    5857        this->enableCollisionCallback();
    5958
    60         /*
    61         if (this->owner_)
    62         {
    63             this->setOrientation(this->owner_->getOrientation());
    64             this->setPosition(this->owner_->getPosition());
    65             this->setVelocity(this->owner_->getInitialDir() * this->speed_);
    66         }
    67         */
     59        this->setCollisionType(Kinematic);
     60
     61        SphereCollisionShape* shape = new SphereCollisionShape(this);
     62        shape->setRadius(10);
     63        this->attachCollisionShape(shape);
    6864
    6965        if(!Core::isClient()) //only if not on client
     
    8884        if (!this->isActive())
    8985            return;
    90 /*
    91         float radius;
    92         for (ObjectList<Model>::iterator it = ObjectList<Model>::begin(); it; ++it)
    93         {
    94 //            if ((*it) != this->owner_)
    95             {
    96                 radius = it->getScale3D().x * 3.0;
    9786
    98                 if (this->getPosition().squaredDistance(it->getPosition()) <= (radius*radius))
    99                 {
    100                     // hit
    101                     ParticleSpawner* explosion = new ParticleSpawner(this);
    102                     explosion->setSource(this->explosionTemplateName_);
    103                     explosion->setLOD(LODParticle::low);
    104                     explosion->configure(2.0);
    105                     explosion->setPosition(this->getPosition());
    106                     explosion->create();
    107                     ParticleSpawner* smoke = new ParticleSpawner(this);
    108                     smoke->setSource(this->smokeTemplateName_);
    109                     smoke->setLOD(LODParticle::normal);
    110                     smoke->configure(2.0, 0.0);
    111                     smoke->setPosition(this->getPosition());
    112 //                    smoke->getParticleInterface()->setSpeedFactor(3.0);
    113                     smoke->create();
    114                     delete this;
    115                     return;
    116                 }
    117             }
    118         }
    119 */
     87        if (this->bDestroy_)
     88            delete this;
    12089    }
    12190
     
    12493        delete this;
    12594    }
     95
     96    bool Projectile::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
     97    {
     98        if (!this->bDestroy_)
     99        {
     100            this->bDestroy_ = true;
     101            Pawn* victim = dynamic_cast<Pawn*>(otherObject);
     102            if (victim)
     103                victim->damage(this->damage_, this->owner_);
     104
     105
     106            if (this->owner_)
     107            {
     108                {
     109                    ParticleSpawner* effect = new ParticleSpawner(this->owner_->getCreator());
     110                    effect->setPosition(this->getPosition());
     111                    effect->setOrientation(this->getOrientation());
     112                    effect->setDestroyAfterLife(true);
     113                    effect->setSource("Orxonox/explosion3");
     114                    effect->setLifetime(2.0f);
     115                }
     116                {
     117                    ParticleSpawner* effect = new ParticleSpawner(this->owner_->getCreator());
     118                    effect->setPosition(this->getPosition());
     119                    effect->setOrientation(this->getOrientation());
     120                    effect->setDestroyAfterLife(true);
     121                    effect->setSource("Orxonox/smoke4");
     122                    effect->setLifetime(3.0f);
     123                }
     124            }
     125        }
     126        return false;
     127    }
    126128}
Note: See TracChangeset for help on using the changeset viewer.